Grafik



  • hi

    ich hab ein Würfel erzeugt und möchte diesen nun verändern können
    (zoomen, verschieben usw)

    D.h wenn ich den Buchstabe z auf der Tastatur drücke soll der Würfel zoomen...

    Bis jetzt hab ich ein Standartwert für z im Code (z=1)

    void main()
    {
    	int grt = DETECT, grm;
    	initgraph(&grt, &grm, "");	// Grafik initialisieren
    
    	//Startwerte festlegen
    	z=1;
    	...
    
    	//Zähler auf NULL setzen
    	count=0;
    
    	//line(100,100,200,200);
    
    	for(count=0;count<12;count++)
    	{
    		Einlesen();
    		Umrechnen();
    
    	}
    
    	getch();		// Warten auf Tastatureingabe
    	closegraph();	// Grafikmodus verlassen
    
            // wenn Buchstabe z eingegeben wurde soll der Würfel sich gezoomt werden
            // D.h der Wert z für die Formel muss sich ändern
    	char zeichen;
    	scanf("%c",&zeichen);
    	switch(zeichen)
    	{
    		case 'z':
    			z=z+10;
    			break;
    
    		default:
    			printf("Falsche Eingabe");
    	}
    
    }
    

    Weiß nich nicht ob das mit der switch Anweisung klappt.
    Das Problem ist dass ich dann den Würfel neu zeichnen lassen will/muss
    D.H ich muss wieder zum Anfang des Programm kommen
    Wie geht das ?
    Mit go to ?

    Besten dank



  • Erstens: das heißt int main().

    Zweitens: Die switch-Anweisung sieht korrekt aus, allerdings wartet das scanf(), bis der Eingabepuffer weitergegeben wird (das passiert erst bei einem ENTER) - eventuell solltest du eine direktere Eingabe verwenden.

    Drittens: Stichwort Schleifen:

    int main()
    {
      initgraph(...);
      char input='\0';
      while(input!='x')
      {
        ...//zeichnen und Tasten abfragen
      }
      closegraph();
    }
    


  • Hallo CStoll

    vielen Dank erstmal für deine Hilfe 🙂

    Mhh, ja stimmt der wartet bis ich die Eingabe gedrückt habe....

    int main()
    {
    	int grt = DETECT, grm;
    	initgraph(&grt, &grm, "");	// Grafik initialisieren
    
    	//Startwerte festlegen
    	z=1;
    
    	//Zähler auf NULL setzen
    	count=0;
    
    	//line(100,100,200,200);
    
    	for(count=0;count<12;count++)
    	{
    		Einlesen();
    		Umrechnen();
    
    	}
    
    	getch();		// Warten auf Tastatureingabe
    	closegraph();	// Grafikmodus verlassen
    
    	char zeichen;
    	char input='\0';
    
    	scanf("%c",&zeichen);
    	while(input!='x')
    	{
    		switch(zeichen)
    		{
    			case 'z':
    				z=z+0.5;
    				for(count=0;count<12;count++)
    				{
    					Einlesen();
    					Umrechnen();
    
    				}
    				break;
    
    			default:
    				printf("Falsche Eingabe");
    		}
    
    	}
    
    }
    

    So klappts jedoch wieder nicht...
    hab ich wohl eine Endlosschleife drauf gemacht

    Ich drücke jetzt den Buchstaben z und mein Grafikteil verschwindet, d-h es wird gar nicht nochmal ausgeführt

    Wo liegt der Fehler ?
    Das Programm geht nicht in die die case 'z' Anweisung.
    In zeichen steht 10 *l* drinn....

    Danke fürs anschauen
    Grüße



  • Klar geht dein Programm in die Schleife - allerdings von dort nicht mehr zurück zur Grafik-Ausgabe. (bzw. das closegraph() sieht für mich so aus, als ob es die Grafikausgabe beendet - das gehört ziemlich sicher HINTER deine Hauptschleife)

    PS: Und das scanf("%c",&zeichen) sollte erstens lieber nach input einlesen und zweitens ins Innere der while-Schleife kommen.



  • ah okay danke, aber klappt leider noch nicht...

    char zeichen;
    	char input='\0';
    
    	while(input!='x')
    	{
    		scanf("%c",&zeichen);
    		switch(zeichen)
    		{
    			case 'z':
    				z=z+0.5;
    				for(count=0;count<12;count++)
    				{
    					Einlesen();
    					Umrechnen();
    
    				}
    				break;
    
    			default:
    				printf("Falsche Eingabe");	
    				break;
    		}
    
    	}
    
    	closegraph();	// Grafikmodus verlassen
    

    Wenn ich nun z eingabe wird zwar der Würfel vergrößert, allerdings kommt nach dem ich z und Enter gedrückt habe immer noch Falsche Eingabe
    Ist klar, weil die while schleife nicht verlassen wird... und die Würfel bleiben da, anstatt nur den aktuellsten Würfel zu zeichnen

    das krieg ich aber noch hin 😉



  • mmh schade , es läuft immer noch nicht rund.
    Der Bildschir wird nicht komplett neu aufgebaut , d.h der alte ungezommte Würfel bleibt bestehn.

    Und die Laufzeit ist auch nicht gut....

    Wo liegt denn noch der Fehler ?

    int main()
    {
    	int grt = DETECT, grm;
    	initgraph(&grt, &grm, "");	// Grafik initialisieren
    
    	//Startwerte festlegen
    	z=1;
    	po=320;
    	qo=140;
    	m=0.01;
    	b=45*PI/180;
    	g=45*PI/180;
    
    	//Zähler auf NULL setzen
    	count=0;
    
    	//line(100,100,200,200);
    
    	for(count=0;count<12;count++)
    	{
    		Einlesen();
    		Umrechnen();
    
    	}
    
    	//getch();		// Warten auf Tastatureingabe
    
    	char zeichen;
    	char input='\0';
    
    	while(input!='x')
    	{
    	 	scanf("%c",&input);
    		switch(input)
    		{
    			case 'z':
    				z=z+0.5;
    				for(count=0;count<12;count++)
    				{
    					Einlesen();
    					Umrechnen();
    
    				}
    				break;
    
    			case 'p':		
    				po=po+50;
    				for(count=0;count<12;count++)
    				{
    					Einlesen();
    					Umrechnen();
    
    				}
    				break;
    
    			default:
    				printf("Falsche Eingabe");	
    
    		}
    
    	}
    
    	closegraph();	// Grafikmodus verlassen
    
    }
    

    DANKE



  • Wenn dich stört, daß das ENTER verarbeitet wird und zu einer Fehlermeldung führt, kannst du einen leeren "case '\n':" Zweig einbauen, der sich darum kümmert.

    Ansonsten solltest du einzelne Zeichen nicht per scanf() einlesen, sondern per getc() (oder per getch() - das wartet noch nichtmal auf das ENTER).

    PS: Und so oft, wie du die for-Schleife benötigst, solltest du sie aus dem switch auslagern 😉


Anmelden zum Antworten