Spiel



  • Wollte nur sehen, ob es funktioniert!

    void printPositionInField(float markerX, float markerY) 
    { 
    char chquer = 205; 
    char chlaengs = 186; 
    char linksoben = 201; 
    char linksunten = 200; 
    char rechtsunten = 188; 
    char rechtsoben = 187; 
    char leerstelle = 32; 
    markerX; 
    markerY; 
    
    if (markerX == -10 && markerY == 10) 
    { 
    cout << "X"; 
    } 
    else 
    cout << linksoben; 
    
    if (markerX >= -9 && markerX <= 9 && markerY == 10) 
    { 
    for (int spalte = -9; spalte < markerX; spalte++) 
    { 
    cout << chquer; 
    } 
    cout << "X"; 
    for (int spalte = markerX; spalte <= 9; spalte++) 
    { 
    cout << chquer; 
    } 
    } 
    else 
    { 
    for (int spalte = -9; spalte <= 9; spalte++) 
    { 
    cout << chquer; 
    } 
    } 
    
    if (markerX == 10 && markerY == 10) 
    { 
    cout << "X"; 
    cout << endl; 
    } 
    else 
    { 
    cout << rechtsoben; 
    cout << endl; 
    } 
    
    if (markerX >= -10 && markerY <= 9 && markerY >= -9 && markerX <= 10) 
    { 
    for (int zeile = -9; zeile < 9; zeile++) 
    { 
    for (int spalte = -9; spalte < 9; spalte++) 
    { 
    cout << leerstelle; 
    } 
    } 
    } 
    else 
    { 
    for (int zeile = -9; zeile < 9; zeile++) 
    { 
    for (int spalte = -9; spalte < 9; spalte++) 
    { 
    cout << leerstelle; 
    } 
    } 
    } 
    
    if (markerX == 10 && markerY == -10) 
    { 
    cout << "X"; 
    cout << endl; 
    } 
    else 
    { 
    cout << linksunten; 
    } 
    
    for (int spalte = -9; spalte < 9; spalte++) 
    { 
    cout << chquer; 
    } 
    cout << rechtsunten; 
    
    }
    

    Main

    #include "feld.h" 
    
    // Einstiegspunkt des Programms 
    int main() 
    { 
    // Die Position unseres Markers auf dem Feld, zum Start 
    // setzen wir diese auf 0,0 welches die Mitte des Feldes sein soll 
    int markerX = 0; 
    int markerY = 0; 
    // Solange der Marker im Feld ist soll die Schleife laufen 
    while (true) 
    { 
    // Diese Anweisung löscht den Inhalt der Konsole 
    system("cls"); 
    
    // Gib das Feld aus und die Markierung 
    printPositionInField(markerX, markerY); 
    
    // Prüfe ob die Markierung mit dem Rand kollidiert, 
    // wenn ja brechen wir die Schleife ab 
    if (checkCollision(markerX, markerY)) 
    break; 
    
    //Verschiebe den Marker in eine beliebige Richtung 
    markerX += rand() % 5 - 2; 
    markerY += rand() % 5 - 2; 
    } 
    system("pause"); 
    return 0; 
    }
    

    Ja... scheint so.



  • kann mir niemand irgendwelche anhaltspunkte sagen?
    habe echt keine idee, wie ich dieses feld erstellen soll..



  • Was muss man eigentlich machen, damit der Code nicht formatiert wird und die Tags sichtbar sind? 🙄 😃


  • Mod

    Anti-Spezialist schrieb:

    Was muss man eigentlich machen, damit der Code nicht formatiert wird und die Tags sichtbar sind? 🙄 😃

    Man kann BBCode ausschalten, entweder gezielt bei jedem Beitrag (Checkbox ganz tief unter dem Editfenster) und ich meine auch allgemein im Profil. Warum jemand irgendeine dieser Optionen nutzen sollte (wie es hier anscheinend der Fall ist), kann ich jedoch nicht beantworten. Angst vor allem, was mit "Internet" und "Code" zu tun hat?


  • Mod

    delkandto schrieb:

    kann mir niemand irgendwelche anhaltspunkte sagen?
    habe echt keine idee, wie ich dieses feld erstellen soll..

    Ich weiß nicht, was du wissen willst.



  • also: ich soll ein Programm erstellen, wo eine X in einem Feld umherfliegt und wenn es auf den Rand kommt, anhält. Dazu soll ich die bereits gepostete main.cpp nutzen, jedoch muss man die beiden Funktionen implementieren, also einmal die Position von diesem X und einmal den Stopp des Programms, wenn das X auf den Rand kommt.

    Ich weiß ist etwas durcheinander, kann man es dennoch verstehen?



  • Und was ist mit "feld.h" ? Vielleicht kann dann mal jemand kapieren, was denn mit `Feld` gemeint sein soll



  • Feld ist einfach ein umrandeter Bereich im Konsolenfenster. Das ist jetzt aber nicht so schwer zu verstehen.



  • genau, meine umrandung hier ist ein doppel rahmen aus der ascii tabelle. dabei spielen länge und breite erstmal keine rolle!



  • Habe hier mal ein ziemlichen Kram zusammen geschrieben.

    Das geht sicherlich tausend mal besser, aber somit biete ich wenigstens Stoff, auf den sich die besseren Leute hier beziehen können, um bessere Versionen zu posten etc.
    Ich glaub die mögen das nicht, wenn kein Ansatz existiert.

    #include <iostream>
    #include <Windows.h>
    
    int main() {
    	int markX = 0, markY = 0; // Wäre der entsprechende Start-value
    	int topBotRows = 50;
    	int leftRightRows = 23;
    	markX = ((topBotRows - 1) / 2) + markX;
    	markY = ((leftRightRows - 1) / 2) + markY;
    
    	for (int rounds = 0; rounds = 100; rounds++) {
    
    			if (markX <= 0 || markX >= topBotRows-1 || markY <= 0 || markY >= leftRightRows-1) {
    				std::cout << "Collision";
    			break;
    		    }
    
    		for (int k = 0; k < leftRightRows; k++) {
    			std::cout << "|";
    			for (int i = 0; i < topBotRows; i++) {
    				if (k == 0 || k == leftRightRows - 1)
    					std::cout << "-";
    				else if (markX == i && markY == k)
    					std::cout << "X";
    				else
    					std::cout << " ";
    			}
    			std::cout << "|" << std::endl;
    
    		}
    		system("cls");
    		markX += rand() % 5 - 2;
    		markY += rand() % 5 - 2;
    	}
    
    	std::cin.get();
    	return 0;
    }
    

    Keine Ahnung was eine sinnvolle Alternative zu system("cls") ist, entsprechend viele newlines rauszuhauen fühlt sich irgendwie auch nicht besser an.

    Gibt anscheinend auch ein paar libs, um auf der Konsole mit Koordinaten zu zeichnen, PDCurse für Windows zB. Weiß aber nicht, wie sinnvoll solche sind.



  • Für Windows kannst du dir mal die Improved Console anschauen.


Anmelden zum Antworten