C, c++ nyelvben hogy lehetne azt megcsinálni, hogy egy snake programban a kígyóm magától mozogna (menne előre) amíg meg nem változtatom az irányát?
Egy forráskódrészletet tudnál küldeni példával?
Úgy könnyebb lenne értelmeznem(még kezdő vagyok)
snake1.x += vX;
snake1.y += vY;
while (!exit) {
Remélem segített.
Itt van a forráskód(már amit eddig megírtam). Tudom h nem túl profi:
#include<stdio.h>
//#include<console.h>
#include<time.h>
#include<stdlib.h>
main()
{
setcodepage(WIN);//Ékezetes betük használatára. hosszú ö-t, ü-t ne írj!
srand(time(NULL));//Ténylegesen random számokhoz
clock_t start_t, end_t, total_t;//Idö számításához
int x=40,y=12;//Karakter koordinátáihoz
int a,b;//Gyümölcs koordinátáihoz
int i=0;//Felvett gyümölcs számlálásához
int j=0,k=0,l,m;//Fal rajzolásához
int e=10;
char c=1;
char d=' ';
char* z="Cube Game:Eat the fruits(c)!!!!!!";
title(z);
for(e=10;e>0;e--)
{
textcolor(LIGHTGREEN);
printf("Üdvözöllek! Te egy kis kocka vagy(amúgy tényleg, most is a gép elött ülsz).\n");
printf("Minél több gyümölcsöt kell enned, hogy nagyra nöjjél(legalábbis ezt mondják...)\n");
printf("Csak aztán nehogy fejjel menj a falnak(de tényleg, ha falnak mész, vége a játéknak)\n");
textcolor(WHITE);
printf("A játék indul: %d",e);
delay(1000);
clrscr();
}
a=rand()%78+1;//Gyümölcs lehetséges helye(oszlop)
b=rand()%23+3;//Gyümölcs lehetséges helye(sor)
start_t=clock();
do{
textcolor(BG_LIGHTGREEN);//Falak színe
for(j=0;j<79;j++){
gotoxy(0+j,1);
printf(" ");}
for(j=0;j<79;j++){
gotoxy(0+j,24);
printf(" ");}
for(k=0;k<24;k++){
gotoxy(0,1+k);
printf(" ");}
for(k=0;k<24;k++){
gotoxy(79,1+k);
printf(" ");}
gotoxy(2,2);
textcolor(YELLOW);
printf("Felvett gyümölcs: %d",i);//Felvett gyümölcs mennyiségének kiírása
gotoxy(a,b);//Gyümölcs koordinátáihoz ugrik
textcolor(BG_LIGHTRED);//Gyümölcs színe
printf(" ");//Gyümölcs
gotoxy(x,y);//Karakter helye
textcolor(LIGHTCYAN);//Karakter színe
printf("\x02");//Karakter
c=getch();//Karaktermozgatáshoz
gotoxy(x,y);
printf("%c",d);
if(c=='w')
{y--;}
else if(c=='s')
{y++;}
else if(c=='a')
{x--;}
else if(c=='d')
{x++;}
if(x==a&&y==b)//Gyümölcs felvétele
{
a=rand()%78+1;
b=rand()%23+3;
gotoxy(a,b);//oszlop,sor
textcolor(BG_LIGHTRED);
printf(" ");
i++;//Felvett gyümölcs pont hozzáadása
}
else{}
if(x==0||x==79||y==1||y==24)//Ha nekimész a falnak, vége a játéknak
{clrscr();
end_t=clock();
total_t=end_t-start_t;
for(l=9;l<16;l++)
{textcolor(BG_YELLOW);
gotoxy(28,l);
printf(" ");
gotoxy(52,l);
printf(" ");}
for(m=28;m<53;m++)
{
gotoxy(m,9);
printf(" ");
gotoxy(m,15);
printf(" ");
}
textcolor(LIGHTRED);
gotoxy(35,10);
printf("GAME OVER\n");
textcolor(LIGHTCYAN);
gotoxy(32,12);
printf("Eddig bírtad: %ld s",total_t/1000);
gotoxy(30,13);
printf("Felvett gyümölcsök: %d\n",i);
gotoxy(29,14);
printf("A játék hamarosan kilép\n");
delay(7000);
break;
}
else{}
}while(TRUE);
textcolor(BLACK);
return 0;
}
Szörnyű.
1. Nevezd el normálisan a változóidat. Ne a, b, c, x, y, satöbbi, hanem normális, azonnal érthető, beszédes neveket adj nekik.
2. Kerüld a "Magic Number"-ek használatát.
Lásd: a=rand()%78+1;
vagy: if(x==0||x==79||y==1||y==24)//Ha nekimész a falnak, vége a játéknak
Az ilyen számokat szintén mentsd ki egy beszédes nevű konstans változóba.
"int i=0;//Felvett gyümölcs számlálásához"
De ez akkora code smell, hogy sírok..
Szerinted mire való egy változó neve, amúgy? Miért lehet szöveg, és nem egy sorszám?
"srand(time(NULL));//Ténylegesen random számokhoz"
Én csak ebbe kötnék bele. Az ugye megvan, hogy determinisztikus automatánál nincs olyan, hogy tényleges random szám?
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!