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;
}
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;
}