Cursor-Problem



  • Hallo Leute,

    ich habe ein kleines Problem beim allseits bekannten Spiel "GameOfLife", allerdings geht es nichtmal um das Spiel selber, sondern um die Cursorpositionierung und die Bewegung:

    Hier mal ein kleiner Auszug aus dem Quellcode:

    case 6:
    		void cursorOn();
    		int i = 11, j = 39, ende = 0;
    		setCursor(i, j);
    		char eingabe;
    		cls();
    		koordinaten();
    		while(!ende) {
    			eingabe = _getch();
    			switch(eingabe) {
    	case 'w':
    		if(i > 0) i--;
    		break;
    
    	case 's':
    		if(i < 20) i++;
    		break;
    
    	case 'a':
    		if(j > 0) j--;
    		break;
    
    	case 'd':
    		if(j < 78) j++;
    		break;
    
    	case ' ':
    		if(a[i][j] == 1) 
    		{
    			printf(" ");
    			a[i][j] = 0;
    		} 
    		else 
    		{
    			printf("X");
    			a[i][j] = 1;
    		}
    		break;
    
    	case 'e':
    		ende = 1;
    		break;
    			}
    			setCursor(i, j);
    		}
    		break;
    			}
    

    So, es klappt alles mit Bewegung und Eingabe.
    Problem ist jetzt, dass wenn ich "e" drücke um die Eingabe zu beenden und das Spiel zu starten verrücken die eingegebenen "X" um eine Spalte nach rechts.
    Ich habe schon das setCursor(i,j); schon versucht mit i+1 oder j+1 zu verändern, aber trotzdem werden die "X" nach drücken des "e" wieder verschoben.
    Danach läuft wieder alles klasse, nur diese Verschiebung direkt nach dem Drücken verstehe ich nicht.
    Wär klasse, wenn jemand eine Lösung weiß 🙂

    Lieben Gruß,
    Basti



  • Erstens: sfds

    basti273 schrieb:

    case 6:
    	void cursorOn();
    	int i = 11, j = 39, ende = 0;
    	setCursor(i, j);
    	char eingabe;
    	cls();
    	koordinaten();
    	while(!ende) {
    		eingabe = _getch();
    		switch(eingabe) {
    		case 'w':
    			if(i > 0) i--;
    			break;
    	
    		case 's':
    			if(i < 20) i++;
    			break;
    	
    		case 'a':
    			if(j > 0) j--;
    			break;
    
    		case 'd':
    			if(j < 78) j++;
    			break;
    
    		case ' ':
    			if(a[i][j] == 1) 
    			{
    				printf(" ");
    				a[i][j] = 0;
    			} 
    			else 
    			{
    				printf("X");
    				a[i][j] = 1;
    			}
    			break;
    
    		case 'e':
    			ende = 1;
    			break;
    		}
    		setCursor(i, j);
    	}
    	break;
    }
    

    Zweitens: In Zeile 2 dürfte schonmal das "void" zu viel sein.

    Drittens: Gibst du das Spielfeld nach dem Ende der Eingaben nochmal komplett aus? Wenn ja, hast du womöglich dort die Cursor-Positionen falsch ermittelt.



  • Alles klar, habs oben mal geändert mit dem [cpp].

    Ich gebe tatsächlich nach dem Code nochmal das Spielfeld aus, allerdings in der Spielfeldausgabe drucke ich nur das "Koordinatensystem" und habe was mit Cursor gar nicht da drin.



  • Habe diese Funktion noch danach:

    void ausgabe(void)
    {
    	int zeile, spalte;
    	for (zeile=0; zeile < 21; zeile++)
    	{
    		setCursor(zeile,1);
    		for (spalte=0; spalte < 77; spalte++)
    		{
    			if (a[zeile][spalte] == 1) printf("X");
    			if (a[zeile][spalte] == 0) printf(" ");
    		}			
    	}
    }
    

    der main teil sieht dann so aus:

    if(moeglichkeit == 1)
    	{
    
    		anzeige(muster);			
    
    		cls();
    
    		koordinaten();
    
    		while(getchar())
    		{
    
    			printf("\n\n\nGeneration: %d", generation);
    			ausgabe();
    
    			naechsteGeneration();
    
    			generation++;
    
    		}
    	}
    

    Glaube das hängt mit dem setCursor(zeile,1);
    zusammen irgendwie.
    veränder ich das aber, dann zeigt der mir immer Fehler an.



  • Ist gelöst.

    Musste tatsächlich nur die spalte um 1 verschieben, damit der sozusagen gar nicht mehr verschiebt, klasse 🙂


Anmelden zum Antworten