Snake
-
Hallo ich habe folgendes Problem ich will ein Snake Spiel in DOS schreiben..ich bin jezze soweit das ich nen bewegenden Punkt hab den ich mit Pfeiltasten steuern kann..soweit so gut..nun aber mein Problem : ich möchte "Obst" einbauen wenn man mit dem Punkt drüber geht soll der um 1 punkt wachsen..aber irgendwie geht das nicht richtig ..
anbei der Quellcode#include "iostream" #include "stdlib.h" #include "stdio.h" #include "conio.h" #include "gotoxy.h" using namespace std; void main() { int key=0, press=1, hang=0, fire=0, firematrix[25][80], x=2, y=2, rnd=0, i, del=1, prn=0, save=0, speed=25, skey=0; system("TITLE Snake Version 1.0 beta by Steven Krätschmann"); p1: for(i=1; i<=80; i++) { gotoxy(i,1); printf("°"); gotoxy(i,24); printf("°"); } for(i=1; i<=24; i++) { gotoxy(1, i); printf("°"); gotoxy(80, i); printf("°"); } gotoxy(60,25); cout<<("Position: "); gotoxy(1,25); printf("F1=Snake [on/off] F2=Speed:"); gotoxy(52,25); cout<<("%i", speed); do { press=kbhit(); if(press!=0) { key=getch(); } if(press==0) { switch(key) { case 72: hang=1; break; case 80: hang=2; break; case 75: hang=3; break; case 77: hang=4; break; case 32: hang=0; /*fire=1;*/ break; case 59: if(del==1) { prn=0; } if(del==0) { prn=1; } key=0; break; case 60: gotoxy(52,25); printf(" "); gotoxy(52,25); printf("%i", speed); do { skey=getch(); switch(skey) { case 72: speed++; if(speed>100) { speed=100; } gotoxy(52,25); printf(" "); gotoxy(52,25); printf("%i", speed); break; case 80: speed--; if(speed<1) { speed=1; } gotoxy(52,25); printf(" "); gotoxy(52,25); printf("%i", speed); break; } key=0; } while(skey!=13); break; } } gotoxy(69,25); printf(" "); if(del==1 && prn==0) { del=0; save=1; system("cls"); goto p1; } if(del==0 && prn==1) { del=1; save=0; } if(save==1) { gotoxy(x,y); printf(" "); } switch(hang) { case 1: y--; if(y<2) y=23; break; case 2: y++; if(y>23) y=2; break; case 3: x--; if(x<2) x=79; break; case 4: x++; if(x>79) x=2; break; case 0: break; } gotoxy(x,y); printf("²"); gotoxy(70,25); printf("%i x %i", x,y); Sleep(speed); } while(1); }
-
Als erstes solltest du per rand() die Position des Obstes bestimmen und dann kannst du jeweils nach der switch(hang)-Überprüfung eine Abfrage einbauen:
if(x==ox && y==oy) { punkte++ //ox und oy neu berechnen ... }
btw solltest du auch noch überprüfen, ob du mit deinem eigenen Schwanz kollidiert bist.
(dazu könntest du ein Array anlegen, in dem du die letzten n Bewegungen der Schlange mitverfolgst - wenn die aktuelle Position in diesem Array steht, gab's eine Kollision)