Kann jemand helfen beim Snake umProgrammieren ?
-
Hey ich hab mir hier den Snake Quellcode besorgt und wollte fragen ob mir jemand beim umprogrammieren helfen kann .. ich würde es gerne so schreiben das wenn man eine Taste einmal drückt auch nur ein Feld gegangen wird nur ich hab so meine Probleme die For schleifen rauszubekommen.
Warum das ganze ? ,.. naja ich möchte am ende einen Punkt haben den man durch das Feld navigieren kann .. dann möchte ich noch Vierecke dazuzeichnen die Häsuer darstellen zb in die man reinkann wenn man durch den offenen Eingang geht.
Und das man durch Ausgänge an den Wänden in andere gebiete gelangt .Hier der COde :
#include<iostream.h> #include<windows.h> #include<conio.h> #include<process.h> #include<time.h> #include<stdlib.h> #include<ctype.h> struct snak { int ada; int x; int y; }; static snak spieler[1000]; int nilai; struct bij { int x; int y; int ok; }; static bij biji; void gotoxy(int x, int y) { COORD coord; coord.X = x; coord.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); } int opt_cor; int a; int b; char simpan; int main() { int z,zz; int speed; char speed1[3]; int x; int y; char opt_ex='n'; char opt; gotoxy(18,9); cout<<"**********************************************"<<endl; gotoxy(18,10); cout<<"* Thanks for playing this game *"<<endl; gotoxy(18,11); cout<<"* *"<<endl; gotoxy(18,12); cout<<"* *"<<endl; gotoxy(18,13); cout<<"* *"<<endl; gotoxy(18,14); cout<<"* *"<<endl; gotoxy(18,15); cout<<"* *"<<endl; gotoxy(18,16); cout<<"* *"<<endl; gotoxy(18,17); cout<<"**********************************************"<<endl; getch(); system("cls"); cout<<endl<<endl; cout<<"How to play?"<<endl; cout<<"This is 4 keys which use to control the spieler"<<endl; cout<<"w up"<<endl <<"s down"<<endl <<"a left"<<endl <<"d right"<<endl <<endl; getch(); do { nilai=0; system("cls"); for(a=2;a<73;a++) { gotoxy(a,1); cout<<char(205)<<endl; gotoxy(a,21); cout<<char(205)<<endl; } gotoxy(1,1); cout<<char(201)<<endl; gotoxy(1,21); cout<<char(200)<<endl; gotoxy(73,1); cout<<char(187)<<endl; gotoxy(73,21); cout<<char(188)<<endl; for(a=2;a<21;a++) { gotoxy(1,a); cout<<char(186)<<endl; gotoxy(73,a); cout<<char(186)<<endl; } gotoxy(74,5); cout<<nilai<<endl; do { gotoxy(10,5); cout<<"BewegungsTemp (1-2)"<<endl; gotoxy(25,5); speed1[0]=getch(); putch(speed1[0]); speed=atoi(speed1); }while(speed>5&&speed<=0); gotoxy(10,5); cout<<" "<<endl; opt='0'; opt_ex='n'; simpan='w'; b=0; if(GetAsyncKeyState( VK_UP )&1 == 1) { spieler[a].ada=0; spieler[a].x=0; spieler[a].y=0; } spieler[b].ada=1; x=23; y=20; do { for(a=0;a<1000;a++) { if(spieler[a].ada==1) { gotoxy(spieler[a].x,spieler[a].y); cout<<char(0)<<endl; } } for(a=999;a>0;a--) { if(spieler[a].ada==1&&spieler[a-1].ada==1) { spieler[a].x=spieler[a-1].x; spieler[a].y=spieler[a-1].y; } } spieler[0].x=x; spieler[0].y=y; for(a=0;a<1000;a++) { if(spieler[a].ada==1) { gotoxy(spieler[a].x,spieler[a].y); cout<<char(4)<<endl; } } if(kbhit()) { opt=getch(); } if(opt=='w') { if(simpan=='s') { opt=simpan; } else { y=y-1; } } if(opt=='s') { if(simpan=='w') { opt=simpan; } else { y=y+1; } } if(opt=='d') { if(simpan=='a') { opt=simpan; } else { x=x+1; } } if(opt=='a') { if(simpan=='d') { opt=simpan; } else { x=x-1; } } simpan=opt; // WAND KOLLISON !!! if(x==1||x==73||y==21||y==1) { for(zz=0;zz<10;zz++) { if(zz%2==0) { for(z=0;z<1000;z++) { if(spieler[z].ada==1) { gotoxy(spieler[z].x,spieler[z].y); cout<<' '<<endl; } } } else { for(z=0;z<1000;z++) { if(spieler[z].ada==1) { gotoxy(spieler[z].x,spieler[z].y); cout<<char(4)<<endl; } } } Sleep(100); } gotoxy(20,10); cout<<"Da ist eine Wand !Dort kann ich nicht hin"<<endl; cout<<char(7)<<endl; opt=char(27); } if(x==biji.x&&y==biji.y) { gotoxy(x,y); cout<<' '<<endl; biji.ok=1; nilai=nilai+speed; b=b+1; gotoxy(74,5); cout<<nilai<<endl; spieler[b].ada=1; } Sleep(170/speed); }while(opt!=char(27)); do { gotoxy(23,23); cout<<"Do you want to play again : "<<endl; gotoxy(50,23); opt_ex=getch(); if(opt_ex=='y'||opt_ex=='Y'||opt_ex=='n'||opt_ex=='N') { opt_cor=1; } else { opt_cor=0; } }while(opt_cor==0); }while(opt_ex=='y'||opt_ex=='Y'); cout<<endl; getch(); }Hoffe das ist nicht zu viel arbeit , habs schon paar mal probiert wie man an dem
if(GetAsyncKeyState( VK_UP )&1 == 1)sieht das vorher eine for schleife war

-
dir wird hier keiner die Arbeit abnehmen, und bestimmt wird auch keiner sich durch den berg quellcode durcharbeiten. Wie wäre es, wenn du das Problem minimierst, und die 10 Zeilen postest, wo du nicht weiterkommst. Und es ist hier der falsche bereich.
-
Sorry danke du hast recht
..also es geht um folgende Zeilen :
simpan='w'; b=0; if(GetAsyncKeyState( VK_UP )&1 == 1) { spieler[a].ada=0; spieler[a].x=0; spieler[a].y=0; } spieler[b].ada=1; x=23; y=20; do { for(a=0;a<1000;a++) { if(spieler[a].ada==1) { gotoxy(spieler[a].x,spieler[a].y); cout<<char(0)<<endl; } } for(a=999;a>0;a--) { if(spieler[a].ada==1&&spieler[a-1].ada==1) { spieler[a].x=spieler[a-1].x; spieler[a].y=spieler[a-1].y; } } spieler[0].x=x; spieler[0].y=y; for(a=0;a<1000;a++) { if(spieler[a].ada==1) { gotoxy(spieler[a].x,spieler[a].y); cout<<char(4)<<endl; } }durch die For schleifen wird die bewegung die ganze Zeit ausgeführt aber ich möchte das wenn man die taste nur einmal drückt auch nur ein Feld gegangen wird.
Falscher bereich ? Hätte ich es unter SpieleProgrammierung Posten sollen ? Weil es geht doch nur um die Bewegung eines Punktes , später soll noch Kollision dazu kommen aber ich finde niergends Beispiele zu bewegung von Punkten in Konsolen und dazu passende Kollisionsabfragen.Gibt nicht mal ein Tut dazu hier im Forum .
-
wie sieht den dein konzept aus? aus dem Code kann man leider immer noch net lsen was genau du willst! Wie hast du dir die berweung der schlange vorgestellt.. wie realisierst du das?
-
Also nein ich versuch es ma ganz genau zu erklären^^
Eigentlich möchte ich ein Programm schreiben , indem man einen Punkt hat und herumlaufen kann ( Konsolen basierend). Zusätzlich soll er wissen wenn er gegen etwas läuft etc. Hab hier schon mal nachgefragt da wurde mir gesagt das ich , framworks für die Grafik brauche aber eigentlich brauch ich doch nur einen Punkt und striche etc. Dann kollisionsabfrage und Tastenevents .. dann hab ich ein bisschen gegoogelt aber nie etwas passendes gefunden. Hier im Forum hab ich auch keine Beispielcodes für bewegung in der konsole mit kollisionsabfrage und zeichnen gefunden
.. deswegen hab ich mir gedacht das ich mir was suche das so ähnlich ist also der snake quellcode nur nun merke ich das es mit dem snake quellcode auch nicht klappt und bin leicht verzeifelt weil ich schon stunden lang bzw Tage gegoogelt habe 
-
da snake ein typischen konsolespiel ist, würde ich auf keinen fall "punkte a la pixel" verwenden.
in c++ hat das alles nix zu suchen, sondern je nach betriebssystem musst du nun entweder für windows in die konsolenapi einsteigen (siehe konsolenfaq), oder einen geeigneten compiler nutzen (turbo c und djgpp haben beide die gotoxy an bord), und für linux entspechend ncurses ...nu, bewegung ist einfach laufen mit kleinen pausen dazwischen. immer nur schleifen.
kollision musste selber abfangen, merken, wo die schlange grad ist und dann schaun.
steuern würde ich banal mit tasten, oder .. etwas schwieriger .. mit pfeiltasten.ansonsten: fang an, das konsolenfaq zu durchleuchten.
snake gibts übrigens zuhauf im netz, aber ich rate zum selbermachen

-
Hatte das mit dem snake ja nur gemacht damit ich mal rausfinde wie man einen punkt bewegen kann. Aber ich weiß nicht wie ich striche und soetwas in ein konsolen fenster zeichnen soll. Möchte am Ende nämlich einen Punkt haben den man in einem Feld bewegen kann. Hast du vielleicht beispielcodes fürs sowas von vergangenen Tagen damit ich mir das ganze mal anschaun kann ? .. werde auf jedenfall das Konsolen Faq mal durchForsten ...
-
theoretisch bruachst du nur eine endlos schleifen mit switch case Tasten abfragen.. der punkt bewegst sich ja immer nur in vier richtugen nord/west/süd ost. d.h. in der schliefe wird je nach tastendruck dem punkt eine richtung vorgegeben.
Wenn du aus dem punkt eine schlange machen willst, musst du ein array erstellen , wo alle punte samt koordinaten enthält.
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum Spiele-/Grafikprogrammierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
nu, bewegung ist einfach laufen mit kleinen pausen dazwischen. immer nur schleifen.
kollision musste selber abfangen, merken, wo die schlange grad ist und dann schaun.
steuern würde ich banal mit tasten, oder .. etwas schwieriger .. mit pfeiltasten.Ich möchte den oben aufgeführten Text mit folgender Aussage erweitern: Wenn du Problem hast so, dann guck einfach mal, ne? Aber hier mit Köpfchen und so!
-
Okkkkkaayyyy ... Ich mach das ganze jetzt anders ,bastel mir ein 2 D arry und lass mein Pünkchen sich darin bewegen xD ... naja danke für die mühe die ich euch gemacht habe .
MFG Toa