C++ Snake programmieren, aber wie?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Wird das Programm überhaupt sauber kompiliert?

Ich sehe da schon 2 Fehler.

Z.B. hier:

else if(taste == links && richtung != 3 || taste == plinks && richtung != 3)

else { continue; }

Nach dem else if muss eine Anweisung folgen, stattdessen kommt bei dir direkt das else.

"punkte" ist auch nicht deklariert.

Generell würde ich bei einem Snake-Spiel mit Koordinaten und Richtungen arbeiten, dann kannst du nämlich auch Items an Positionen spawnen lassen (die Schlange frisst ja). Du brauchst:

  • ein Koordinatensystem (z.B. 100x80)
  • eine Variable für die aktuelle Richtung
  • einen Intervall
  • einen Kopf für die Schlange
  • Koordinaten für jedes Körperteil (Array)

Der Körper verlängert sich ja mit der Anzahl der gefressenen Items, jedes Körperteil nimmt bei jedem Step die Position seines Vorgängers ein. So kannst du auch die Position jedes Körperteils zu jederzeit herausfinden. Wenn der Schlangenkopf versucht, die Position eines Körperteils einzunehmen, ist Game over.

Und du musst natürlich verhindern, dass man die Richtung um 180 grad ändern kann (also wenn man sich nach oben bewegt, kann man nicht auf "nach unten" wechseln).

8

Vielen Dank für die Antwort. Ja das richtige Programm kompiliert ohne Probleme, allerdings habe ich die Frage von meinem Arbeitsplatz aus gestellt, wo ich mit meinem privaten Notebook kein Internet habe, daher musste ich den Quellcode nochmal manuell übertragen und hatte nicht die Möglichkeit diesen mit einem Compiler zu prüfen.

So nun hätte ich noch ein paar Fragen dazu:

Wie würdest du das Koordinatensystem realisieren? Mit einem 2d Array?

Die Variable für die Richtung ist doch schon enthalten, hast du das jetzt als generell benötigte Liste geschrieben oder würdest du meine einfach irgendwie verändern?

Wie realisiere ich einen Intervall? Tut mir Leid, ich programmiere noch nicht sonderlich lange daher habe ich mich damit noch nie befasst.

0
25
@avorox

Hi, das war als generelle Liste gedacht, die Richtung hattest du schon, das stimmt.

Genau, du könntest das als 2d-Array machen, das ginge aber auch eindimensional (erster Wert ist die Nummer der Körperteils, dann X-Koordinate, dann Y-Kooridnate).

Der Intervall hast du mit dem Sleep ja auch schon drin. Je länger die Sleep-Zeit desto langsamer die Schlange.

Bei jedem Intervall führst du dann folgende Aktionen durch:

  1. Testen, welche Richtung ausgewählt ist.
  2. Bestimmen, welche Position der Kopf hat.
  3. Check, ob der Kopf, wenn er sich in die aktuelle Richtung bewegt den Rand berühren würde, oder die Koordinaten eines Körperteils einnimmt, dann Game Over, ansonten:
  4. Den Kopf um die entsprechende Einheit in die gewählte Richtung nach vorn bewegen.
  5. Alle anderen Körperteile nehmen die Position ihres Vorgängers ein.

Dann kannst du noch zusätzlich alle paar Intervalle oder mit ein bisschen Zufallsprinzip Items an Koordinaten erscheinen lassen, an denen gerade kein Teil der Schlange ist. Wenn die Schlange dann so ein Teil mit dem Kopf berührt, wird sie um 1 länger und das item verschwindet.

Noch ein Tip: Bevor du so viele IF-Abfragen machst, google mal nach "switch case", das macht den Code übersichtlicher ;-)

0

C++ Funktion zur Berechnung der Dauer in Sekunden?

Hallo liebe Community,

und zwar sollte ich ein Programm schreiben, dass den Benutzer nach einer Zahl in Sekunden abfragt und dann mit dem abgefragten Wert die Stunden und Minuten ausrechnet und wieder ausgibt.

Bisheriger Code:

#include <iostream> 
#include <string>
    
using namespace std;
    
    double dauerInSekunden(double stunden) {
        double ergStunden;
    
        ergStunden = stunden / 3600;
    
        return ergStunden;
    }
    
    double dauerInSekunden2(double minuten) {
        double ergMinuten;
    
        ergMinuten = minuten / 60;
    
        return ergMinuten;
    }
    
    
    
    int main() {
        string Dauer;
        double Zahl;
        cout  << "Geben Sie das Format in Zahl (Sekunden) und die Einheit in die sie umrechnen \t wollen 'Stunden', 'Minuten', 'Sekunden' an!" << endl;
        cin >> Zahl;
        cin >> Dauer;
    
        if (Dauer == "Stunden") {
            cout << dauerInSekunden(Zahl) << " Stunden" << endl;
            }
        else if (Dauer == "Minuten") {
            cout << dauerInSekunden2(Zahl) << " Minuten" << endl;
            }
        else
            cout << Zahl << " Sekunden" << endl;
    
        system("pause");
    }

Meine Frage ist nun folgende ist es möglich die Funktionen auch so um zu schreiben, dass sie nur aus einer Funktion besteht und der Benutzer immer noch angeben kann in was für ein Format er umrechnen möchte?

...zur Frage

C++, Umrechnung von Zahlensystemen

Hi Leuts, ich programmiere grad einen Rechner der von einem belibiegen Z-System in ein anderes rechnet, ich komme nicht weiter, kann mr da einer helfen ich habs mit do-while Schlife versucht, und mit for Schleife, aber seht ihr ja im Quelltext:

thx im vorraus...

in der Vorschau seh ich grad das die Befehle cout & cin falsch dar gestellt werden...

#include <iostream>
#include <conio.h>

using namespace std;

main()
{

int v,z,w,e,r;
char nochmal;


do
{

cout<<"     *****************************"<<endl;
cout<<"     *                           *"<<endl;
cout<<"     *       Zahlensysteme       *"<<endl;
cout<<"     *         umrechnen         *"<<endl;
cout<<"     *                           *"<<endl;
cout<<"     *****************************"<<endl;
cout<<endl;

cout<<"    Geben Sie..."<<endl<<"    ...das Ausgangs-system an:   ";
cin>>v;
cout<<"    ...das End-system an:        "; 
cin>>z;
cout<<"    ...die Zahl im "<<v<<"er-system an:";
cin>>w;
cout<<endl<<endl;
w=e;
   /*  do 
       {

       cout<<w<<" / "<<z<<" = "<<e<<" R "<<r<<endl;

       }
       while(e != 0 && r != 0); */
for(w; e != 0 && r != 0; e=e/z)
    {
        cout<<w<<" / "<<z<<" = "<<e<<" R "<<r<<endl;
    }


cout<<endl<<"Nochmal?"<<endl;
cin>>nochmal;
system("cls");
}
while(nochmal=='J'||nochmal=='j');

     }
...zur Frage

C++ Paritätsbit Aufgaben hilfe?

Hi,

ich brächte mal hilfe und zwar habe ich seit 5 wochen in der schule Programmieren. Dazu hat mir mein Lehrer die Aufgabe erstellt eine Dezimal Zahl als erstes in Binär zu übersetzen und dann die Parrität zu vergleichen. Mein Lehrer erklärt leider nicht viel deswegen verstehe ich die erste For Schleife nicht ganz. Wenn mir die Jemand erklären kann wäre das gut. Dazu funktioniert das so noch nicht da wenn ich 445 als zahl eingebe die zahl als 32 bit wie folgt ausgegeben wird:

0000 0000 0000 0000 0000 0001 1011 1101 = Zahl in 32bit binär

Even Even Even Even = Parität

Aber es müsste raus kommen in der Parität spalte

Even Even Odd Even

Dies wäre soweit mein Lösungsansatz.

#include <iostream>
#include <cstdlib>
                                                                                                                                                                                                                   
int i;
int a;
int bits[sizeof(int)*8];
unsigned int unum;
int num;
                                                                                                                                                                                                                   
int main (int nargs, char **args) {
        num=atoi(args[1]);                                                                                                                                                                                         
        unum = (unsigned int)num;
                                                                                                                                                                                                                   
        for(int i=0; i<sizeof(int)*8; i++) {
                bits[i]=unum % 2;                                                                                                                                                                                  
                unum /=2;                                                                                                                                                                                          
        }                                                                                                                                                                                                          
        if(bits[1,2,3,4] == bits[5,6,7,8]) {
                std::cout << "Even\n";
                                                                                                                                                                                                                   
        } else {
                std::cout << "Odd\n";
        }                                                                                                                                                                                                          
        if(bits[9,10,11,12] == bits[13,14,15,16]) {
                std::cout << "Even\n";
        } else {
                std::cout << "Odd\n";
        }                                                                                                                                                                                                          
        if(bits[17,18,19,20] == bits [21,22,23,24]) {
                std::cout << "Even\n";
        } else {
                std::cout << "Odd\n";
        }                                                                                                                                                                                                          
        if(bits[25,26,27,28] == bits[29,30,31,32]) {
                std::cout << "Even\n";
        } else {
                std::cout << "Odd\n";
        }                                                                                                                                                                                                          
        return 0;
}                                                                                                                                                                                                                  
...zur Frage

C++ Wie kann ich den Benutzter eine Rechenart auswählen lassen. (Konsolen Anwendung)

Also ich bin dabei C++ zu lernen und ich habe schon selber versucht das dass Problem mit einer char Variable zu lösen und dann mehrere if abfragen zu erstellen aber dass funktioniert nicht ganz, außerdem ist es eine Konsolen Anwendung.Kann mir jemand helfen ?

#include <iostream>

using namespace std;

int main(){
char Rechenart;
int Summe1, Summe2, Ergebnis;

cout << "Mit welcher Rechenart wollen sie Rechnen(Multiplikation*)(Divison/)(Addition+)(Subtraktion-)";
cin >> Rechenart;
cout << "Benutzereingabe:";
cin  >> Summe1;
cout << "Benutzereingabe:";
cin  >> Summe2;

Ergebnis = Summe1 * Summe2;

getchar();

std::cout << Summe1 << Rechenart << Summe2
    << " = "
    << Ergebnis
    << std::endl;

if (true)
{
 
}

else
{

}

getchar();
return 0;
}
...zur Frage

Was möchtest Du wissen?