PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C] Komm nicht mehr weiter bei Snake Game.



der_Dude
13.02.2010, 23:05
Moin, ich probier mich zurzeit an einer C - Version von Snake. Allerdings hab ich schon am Anfang Probleme:

1. Ich weiß nicht, wie ich es machen soll, dass der Rahmen die Funktion clrscr() überleben sollte. Die Funktion entfernen kann ich auch nicht, da ich diese explizit für das Spiel brauche.

2. Ist der ganze Bewegunsablauf ein bisschen "buggy" seitdem ich aus einem Zeichen einen Schwanz von 3 Zeichen gemacht habe.

Kann mir wer helfen?

Hier mal der Source Code:



#include <stdio.h>
#include "gconio.h"
#define MAX_X 30
#define MAX_Y 20
#define ZAEHLER 3

int rahmen();

void main(){


char taste='a';
int x=5,y=5,a,d,bla=1;
int feind_x,feind_y;
int schwanz[4];
int zaehler=1;


srand ( time(NULL) );
feind_x=rand()%50;
feind_y=rand()%50;

//printf("%d\n",feind_x);
//printf("%d\n",feind_y);




while ( bla==1)

{


if (kbhit())

{
taste=getch();

switch (taste) {



case 'a':
x--;
if (x<=1)
x=MAX_X;
clrscr();
rahmen();
gotoxy(x,y);
printf("#");
gotoxy(schwanz[x+1],y);
printf("#");
gotoxy(schwanz[x+2],y);
printf("#");
gotoxy(schwanz[x+3],y);
printf("#");
break;





case 'd':
x++;
if (x>=MAX_X)
x=1;
clrscr();
rahmen();
gotoxy(x,y);
printf("#");
gotoxy(schwanz[x-1],y);
printf("#");
gotoxy(schwanz[x-2],y);
printf("#");
gotoxy(schwanz[x-3],y);
printf("#");
break;

case 'w':
y--;
if (y<=1)
y=MAX_Y;
clrscr();
rahmen();
gotoxy(x,y);
printf("#");
gotoxy(x,schwanz[y+1]);
printf("#");
gotoxy(x,schwanz[y+2]);
printf("#");
gotoxy(x,schwanz[y+3]);
break;

case 's':
y++;
if (y>=MAX_Y)
y=1;
clrscr();
rahmen();
gotoxy(x,y);
printf("#");
gotoxy(x,schwanz[y-1]);
printf("#");
gotoxy(x,schwanz[y-2]);
printf("#");
gotoxy(x,schwanz[y-3]);
break;


}




}


else {

switch (taste) {



case 'a':
x--;
if (x<=1)
x=MAX_X;
clrscr();
rahmen();
gotoxy(x,y);
printf("#");
gotoxy(schwanz[x+1],y);
printf("#");
gotoxy(schwanz[x+2],y);
printf("#");
gotoxy(schwanz[x+3],y);
printf("#");
break;





case 'd':
x++;
if (x>=MAX_X)
x=1;
clrscr();
rahmen();
gotoxy(x,y);
printf("#");
gotoxy(schwanz[x-1],y);
printf("#");
gotoxy(schwanz[x-2],y);
printf("#");
gotoxy(schwanz[x-3],y);
printf("#");
break;

case 'w':
y--;
if (y<=1)
y=MAX_Y;
clrscr();
rahmen();
gotoxy(x,y);
printf("#");
gotoxy(x,schwanz[y+1]);
printf("#");
gotoxy(x,schwanz[y+2]);
printf("#");
gotoxy(x,schwanz[y+3]);
break;

case 's':
y++;
if (y>=MAX_Y)
y=1;
clrscr();
rahmen();
gotoxy(x,y);
printf("#");
gotoxy(x,schwanz[y-1]);
printf("#");
gotoxy(x,schwanz[y-2]);
printf("#");
gotoxy(x,schwanz[y-3]);
break;



}

}


}







}

int rahmen()

{

int rahmen_x=1,rahmen_y=1;

while (rahmen_x < (MAX_X+2))
{
gotoxy(rahmen_x,1);
printf("A");
rahmen_x++;
}

while (rahmen_y < (MAX_Y+2))

{
gotoxy(1,rahmen_y);
printf("A");
rahmen_y++;
}

rahmen_x=1;
rahmen_y=1;

while (rahmen_x < (MAX_X+2))
{
gotoxy(rahmen_x,(MAX_Y+2));
printf("A");
rahmen_x++;
}

while (rahmen_y < (MAX_Y+2))

{
gotoxy(MAX_X,rahmen_y);
printf("A");
rahmen_y++;
}


return 1;

}

4ndre
13.02.2010, 23:08
1. Ich weiß nicht, wie ich es machen soll, dass der Rahmen die Funktion clrscr() überleben sollte. Die Funktion entfernen kann ich auch nicht, da ich diese explizit für das Spiel brauche.


Überhaupt nicht. Das Zeichnen des Rahmens lagerst du in eine Funktion aus, die du nach jedem Löschen des Bildschirms aufrufst.

//Edit: http://www.gamespp.com/sourcecode/wsnake.zip guck dir das mal an :D

der_Dude
14.02.2010, 19:55
Hättest du dir meinen Src angeschaut, wärest du drauf gekommen, dass ich das bereits gemacht habe ;)

crusher
17.02.2010, 21:12
void main(){
hahaohwow. Welchen Compiler nutzt du denn?



gconio.h
Ich nutze POSIX-konforme Betriebsysteme und was ist das?

-[RiDER]-
22.02.2010, 09:49
Hi,

ich würde behaupten, dass es nicht gerade zweckmäßig ist, ein Snake-Game auf diese Art und Weise zu schreiben... ;)

Du solltest eine Bibliothek einsetzen, die Dir die wichtigen Dinge bei der Spieleprogrammierung etwas näher bringt, z.B. Tastaturabfragen, die Grafik usw.

Schau Dir doch mal Allegro [http://www.allegro.cc/] an, Google sollte Dir ein paar einfache Tutorials ausspucken, außerdem kannst Du Dir auf der Website selbst ein paar Source-Codes reinziehn. Centipede [http://www.allegro.cc/depot/Centipede/] sieht z.B. vielversprechend aus.

Viel Erfolg.
GreetZ RiDER