當前位置:編程學習大全網 - 編程語言 - 壹個C語言的蛇代碼,如何在代碼中添加兩個固定的障礙物,蛇撞上就死,食物不能在障礙物上。

壹個C語言的蛇代碼,如何在代碼中添加兩個固定的障礙物,蛇撞上就死,食物不能在障礙物上。

#定義N 200

# include & ltgraphics.h & gt

# include & ltstdlib.h & gt

# include & ltdos.h & gt

#定義左0x4b00

#定義右0x4d00

#向下定義0x5000

#定義高達0x4800

#定義ESC 0x011b

int i,key

int得分= 0;/*分數*/

int gamespeed = 50000/*自己調整遊戲速度*/

結構食品

{

int x;/*食物橫坐標*/

int y;/*食物的縱坐標*/

int yes/*判斷食物的變量是否會出現*/

}食物;/*食物的結構*/

結構蛇

{

int x[N];

int y[N];

int節點;/*蛇的結數*/

int方向;/*蛇的移動方向*/

int life/*蛇的命,0是活的,1是死的*/

}蛇;

void Init(void);/*圖形驅動程序*/

void Close(無效);/*圖表結束*/

void DrawK(無效);/*開始屏幕*/

void game over(void);/*結束遊戲*/

void玩法(void);/*玩遊戲的具體流程*/為什麽都是作廢的?

void PrScore(void);/*輸出結果*/

/*主函數*/

無效總管(無效)

{

init();/*圖形驅動程序*/

DrawK();/*開始屏幕*/

遊戲性();/*玩遊戲的具體流程*/

close();/*圖表結束*/

}

/*圖形驅動程序*/

void初始化(void)

{

int gd=DETECT,GM;;/*定義圖形的驅動變量和模式變量,驅動變量是自動檢測*/

init graph(& amp;gd,& ampgm," c:\ \ TC ");/*這裏是turboc的路徑*/

clear device();/*清空屏幕*/

}

/*開始屏幕,左上角坐標為(50,40),右下角坐標為(610,460 */

void DrawK(無效)

{

/*setbkcolor(淺綠色);*/

set color(11);

setlinestyle(SOLID_LINE,0,THICK _ WIDTH);/*設置線型*/

for(I = 50;我& lt=600;I+=10)/*畫壹個柵欄*/

{

矩形(I,40,i+10,49);/*高於*/

矩形(I,451,i+10,460);/*低於*/

}

for(I = 40;我& lt=450;i+=10)

{

矩形(50,I,59,I+10);/*左*/

矩形(601,I,610,I+10);/*右*/

}

}

/*玩遊戲的具體流程*/

無效遊戲(void)

{

randomize();/*隨機數生成器*/

food . yes = 1;/*1表示新的食物需要出現,0表示食物已經存在*/

snake . life = 0;/*活著*/

snake . direction = 1;/*向右方向*/

snake . x[0]= 100;snake . y[0]= 100;/*蛇頭*/

snake . x[1]= 110;snake . y[1]= 100;

snake . node = 2;/*節數*/

PrScore();/*輸出分數*/

而(1)/*可以反復玩遊戲,按ESC結束*/

{

而(!Khit ())/*蛇在不按鍵的情況下自行移動*/

{

If(food.yes==1)/*需要新的食物*/

{

food . x = rand()% 400+60;

food . y = rand()% 350+60;

而(food.x%10!=0)/*食物隨機出現後,食物必須在整個格子裏,蛇才能吃*/

food . x++;

而(food.y%10!=0)

food . y++;

food . yes = 0;/*屏幕上有食物*/

}

If(food.yes==0)/*如果屏幕上有食物,就會顯示出來*/

{

setcolor(綠色);

矩形(food.x,food.y,food.x+10,food . y-10);

}

for(I = snake . node-1;我& gt0;I-)/*蛇的每壹個環節都向前移動,這是蛇的關鍵算法*/

{

snake . x[I]= snake . x[I-1];

snake . y[I]= snake . y[I-1];

}

/*1,2,3,4表示右,左,上,下,這個判斷可以移動蛇頭*/

開關(蛇形方向)

{

case 1:snake . x[0]+= 10;打破;

案例二:snake . x[0]-= 10;打破;

案例三:snake . y[0]-= 10;打破;

案例四:snake . y[0]+= 10;打破;

}

for(I = 3;我& ltsnake .節點;I++)/*從蛇的第四節判斷自己是不是打中了自己,因為蛇頭有兩節,第三節是不可能轉身的*/

{

if(snake . x[I]= = snake . x[0]& amp;& ampsnake.y[i]==snake.y[0])

{

game over();/*顯示失敗*/

snake . life = 1;

打破;

}

}

if(snake . x[0]& lt;55 | | snake . x[0]& gt;595 | | snake . y[0]& lt;55||

snake . y[0]& gt;455)/*蛇有沒有撞到墻上*/

{

game over();/*這個遊戲結束了*/

snake . life = 1;/*蛇死*/

}

If(snake.life==1)/*以上兩個判斷後,如果蛇死了,跳出內循環重新開始*/

打破;

if(snake . x[0]= = food . x & amp;& ampSnake.y[0]==food.y)/*吃完食物*/

{

set color(0);/*從圖片中移除食物*/

矩形(food.x,food.y,food.x+10,food . y-10);

snake . x[snake . node]=-20;snake . y[snake . node]=-20;

/*先把新段放到看不見的地方,在下壹個循環中取前壹段的位置*/

snake . node++;/*蛇的身體有很長的壹段*/

food . yes = 1;/*新食物需要出現在屏幕上*/

得分+= 10;

PrScore();/*輸出新分數*/

}

set color(4);/*畫壹條蛇*/

for(I = 0;我& ltsnake .節點;i++)

矩形(snake.x[i],snake.y[i],snake.x[i]+10,

snake . y[I]-10);

延遲(gamespeed);

set color(0);/*用黑色去掉蛇的最後壹段*/

矩形(snake.x[snake.node-1],snake.y[snake.node-1],

snake . x[snake . node-1]+10,snake . y[snake . node-1]-10);

} /*endwhile(!kbhit)*/

If(snake.life==1)/*如果蛇死了,跳出循環*/

打破;

key = BIOS key(0);/*接收按鈕*/

If(key==ESC)/*按ESC退出*/

打破;

其他

if(key = = UP & amp;& amp蛇,方向!=4)

/*判斷是否向相反方向移動*/

snake . direction = 3;

其他

if(key = = RIGHT & amp;& amp蛇,方向!=2)

snake . direction = 1;

其他

if(key = = LEFT & amp;& amp蛇,方向!=1)

snake . direction = 2;

其他

if(key = = DOWN & amp;& amp蛇,方向!=3)

snake . direction = 4;

}/*endwhile(1)*/

}

/*遊戲結束*/

無效遊戲結束(無效)

{

clear device();

PrScore();

setcolor(紅色);

settextstyle(0,0,4);

outtextxy(200,200,“遊戲結束”);

getch();

}

/*輸出結果*/

無效PrScore(無效)

{

char str[10];

setfillstyle(SOLID_FILL,黃色);

吧(50,15,220,35);

set color(6);

settextstyle(0,0,2);

sprintf(str," score:%d ",score);

outtextxy(55,20,str);

}

/*圖表結束*/

無效關閉(無效)

{

getch();

closegraph();

}

  • 上一篇:Gba編程手冊免費。
  • 下一篇:當前網站開發較成熟的ui組件有哪些_前端ui組件開發
  • copyright 2024編程學習大全網