C++ Snake programmieren, aber wie?

Hallo, ich schreibe gerade an einem Spiel(Snake) in c++. Ich weiß aber nicht wie ich die punkte einfüge die die schlange dann einsammeln kann, wie ich die Schlange länger mache und wie ich die kollision zwischen schlangenkopf und schlangenkörper integriere.

Hier mein bisheriger code:

include <conio.h> include <Windows.h> include

using namespace std;

const int rechts = 'd'; const int links = 'a'; const int hoch = 'w'; const int runter = 's'; const int prechts = 0x4d; //Hexadezimale codes der Pfeiltasten const int plinks = 0x4b; const int phoch = 0x48; const int prunter = 0x50;

void Bewegung(int, int);

int main() { bool ende = false; int x = 12; //x Koordniate (erst definition = Startpunkt) int < = 10; //y Koordniate (erst definition = Startpunkt) int richtung = 1; int punkt = 0;

cout << "Punkte " << punkte << endl; cout <<"XXXXXXXXXXXXXXXXXXXXXXXXX"<<endl; for(int i = 1; i < 24; i++) { cout << "X X"<<endl; } cout <<"XXXXXXXXXXXXXXXXXXXXXXXXX"<<endl;

do { Bewegung(x, y); cout << "o";

if(kbhit()) { int taste = getch(); if(!taste || taste == 0xe0)) taste = getch();

if(taste == hoch && richtung != 2 || taste == phoch && richtung != 2) { richtung = 1; --y; }

else if(taste == runter && richtung != 1 || taste == prunter && richtung != 1) { richtung = 2; ++y; }

else if(taste == rechts && richtung != 4 || taste == prechts && richtung != 4) { richtung = 3; ++x; }

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

else { continue; }

Sleep(150); }

else if(!kbhit()) { if(richtung == 1) { --y; } if(richtung == 2) { ++y; } if(richtung == 3) { ++x; } if(richtung == 4) { --x; } Sleep(150); }

system("cls");

if( x <= 0 || x >= 24 || x <= 1 || y >= 25) { cout << "Game Over!" << endl << endl; cout << "Du hast " << punkte << " Punkte erreicht" << endl << endl; system("pause"); return 0; }

cout << "Punkte " << punkte << endl; cout <<"XXXXXXXXXXXXXXXXXXXXXXXXX"<<endl; for(int i = 1; i < 24; i++) { cout << "X X"<<endl; } cout <<"XXXXXXXXXXXXXXXXXXXXXXXXX"<<endl;

}while(true);

return 0; }

void Bewegung(int b, int h) { COORD punkt; punkt.X = b; punkt.Y = h; SetConsoleCursorPosition(GetStdHandle(STDOUTPUTHANDLE), punkt); }

...zur Frage

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).

...zur Antwort

So schwer ist das nicht, wenn du Newton erst mal umrechnest:

1N = 1 (kg * m) / s²

Du hast 4*200kN, also 800kN, also 800.000 N, also 800.000 (kg * m) / s². Das Flugzeug wiegt 330t, also 330.000 kg.

Beschleunigung (a) misst man in m/s².

Also teilst du einfach das Gewicht des Flugzeuges durch die Kraft (F), denn a=F/M, oder Beschleunigung = Kraft / Masse:

800.000 (kg * m) / s² /  330.000 kg
= 2,424242424 m/s²

Soviel zur Beschleunigung.

Die Länge der Startbahn errechnet sich einfach aus der benötigten Endgeschwindigkeit und der Beschleunigung. Dazu rechnest du die km/h erst mal in m/s um, also *1000/60².

330 km/h = 330*1000/60² m/s
330 km/h = 91,666666667 m/s

Um die Strecke rauszufinden, brauchen wir erst die Zeit:

a=v/t
Umstellen:
t=v/a
t= 91,66667m/s /2,424242424 m/s²
t= ~37,8125s

So und jetzt die zweite Formel

t=Wurzel(2s/a)
Umstellen:
s=0,5*a*t²
s=0,5*2,424242424m/s²*(37,8125s)²
s=0,5*2,424242424m*~1429,785
s=~1733,073m

Ich hab ein bissl gerundet, wenn du es genauer haben willst, musst du dann die Werte entsprechend einsetzen.

...zur Antwort

Bei der Parallelschaltung ist der Gesamtwiderstand immer kleiner als der kleinste Teilwiderstand.

Kleine Erklärung warum:

Stell dir einfach vor du hast eine Wasserleitung und an einer Stelle wird das Rohr enger (also ein Widerstand), dann kommt weniger Wasser durch.

Jetzt schließt du vor dem engen Teil noch ein Rohr daneben an (wie in einer Paralelschaltung), was ein bisschen breiter ist, aber immer noch nicht so breit wie das Rohr (zweiter, kleinerer Widerstand).

Dann fließt natürlich mehr Wasser durch als vorher und zwar mehr als bei dem kleinen Widerstand an sich durchkommt, denn es gibt ja jetzt zwei Rohre.

Bei Parallelschaltungen erhöht sich also nicht der Widerstand, sondern er verringert sich.

Zur Rechnung:

Zur Bestimmung des Gesamtwiderstands Rg bei einer Parallelschaltung (bestehend aus 2 Widerständen R1 und R2) wird dann gerechnet:

1/Rg = 1/R1 + 1/R2

Wenn dann R1 100 Ohm ist und R2 200 Ohm ergibt sich:

1/Rg = 1/100 + 1/200
1/Rg = 2/200 + 1/200
1/Rg = 3/200
1/Rg = 1/66,6666667
Rg = 66,6666667

Normalerweise schreibt man das in Brüchen, aber das geht hier leider nicht.

Reihenschaltungen ist dir ja klar, da addieren sich die Widerstände einfach.

Bei Mischschaltungen ist es jetzt so, dass man erste jede Parallelschaltung einzeln berechnet, um Teilwiderstände herauszufinden und diese werden dann addiert.

Habe mal eine kleine Schaltung als Bild angefügt.

Jetzt hast du zum Beispiel R1.1 = 100 Ohm und R1.2 = 300 Ohm, die parallel geschaltet sind. Dahinter kommt R2 mit nochmal 100 Ohm, der in Reihe dazu geschaltet ist.

Um jetzt den Teilwiderstand (bei mir R1, farblich markiert) zu berechnen, rechnest du wie eben erst die Parallelschaltung:

1/R1 = 1/R1.1 + 1/R1.2
1/R1 = 1/100 + 1/300
1/R1 = 3/300 + 1/300
1/R1 = 4/300
1/R1 = 1/75
R1 = 75

Jetzt rechnest du nur noch den zweiten Widerstand dazu, also

Rg = R1 + R2
Rg = 75+100
Rg = 175

Natürlich in der Schule immer schön das Ohm hinter die Werte schreiben, aber das hab ich mir hier gespart ;-)

...zur Antwort

Du darfst den Autor der Seite schriftlich fragen und wenn er es dir erlaubt (eventuell mit Auflagen, z.B. Nennung seines Namens etc.) darfst du das.

Du darfst aber natürlich nicht einfach seine css Datei runterladen und bei dir einbinden, das ist Diebstahl geistigen Eigentums. Und schon gar nicht kannst du seine CSS Datei von seinem Server bei dir einbinden, das geht absolut gar nicht, damit klaust du nicht nur sein geistiges Eigentum, sondern auch noch seine Serverbandbreite.

...zur Antwort

Du musst unter Format-->Formatvorlagen (Taste F11 drücken geht auch) bei den Absatzvorlagen (das ist das mit dem Zeichen, das wie ein umgedrehtes P aussieht) nach Inhaltsverzeichnis 1, Inhaltsverzeichnis 2 usw. suchen (eventuell musst du unten noch auf "alle Vorlagen" gehen, wenn du sie in der Liste nicht findest). Mit einem Rechtsklick und dann auf "Ändern" kannst du dann alles mögliche anpassen.

Das ist übrigens kein Fehler, sondern Absicht, weil das Inhaltsverzeichnis sich ja automatisch anhand der Überschriften erstellt und deshalb nicht jede Zeile einzeln formatiert werden soll.

...zur Antwort

Naja, meistens passiert nicht viel, aber es KANN was passieren. Zum Beispiel:

  • eine Datei, die gerade beschrieben wurde, ist defekt (weil sie halt nur zu einem Teil beschrieben wurde als der Strom weg war). Ist dies eine Systemdatei, kann das dazu führen, dass dein Betriebssystem nicht mehr startet oder fehler hat. Am schlimmsten wäre so ein "Strom-Aus" mitten im Updateprozess eines Treibers oder des Betriebssystems. Dieser Fehler tritt bei allen Festplattentypen auf.

  • Deine Festplatte wird beschädigt: wenn deine Festplatte läuft, "schweben" die Leseköpfe auf einem Luftpolster über den Platten. Wenn du normal herunterfährst, werden die Leseköpfe auf eine "Parkposition" gefahren und abgelegt. Geht der Strom einfach aus, fällt das Luftpolster weg, weil sich die Platten nicht mehr drehen und die Leseköpfe haben keinen Strom, um zurück zu fahren. Im schlimmsten Fall berühren sie die empfindlichen Platten, was dazu führt, dass Speicherbereiche unwiederbringlich beschädigt werden (defeke Bereiche werden von SMART protokolliert). Liegt in diesem Speicherbereich eine wichtige Datei dann tritt das gleiche auf wie oben.

Es ist also immer ungut, wenn das passiert, deshalb werden bei Servern auch USVs eingesetzt, die fangen Über- und Unterspannung ab, versorgen den Server bei Stromausfall aus einem Akku und wenn der Akku leer wird, fahren sie den Server "sanft" herunter, damit genau das nicht passieren kann.

Es kann 1000 mal gut gehen, kann aber auch schon beim ersten mal das System zerschießen. Hab auf der Arbeit schon beides erlebt.

...zur Antwort
Weitere Inhalte können nur Nutzer sehen, die bei uns eingeloggt sind.