日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言贪吃蛇黑方框,[求助][贪吃蛇]源程序,请教其中一个问题。

發布時間:2024/9/27 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言贪吃蛇黑方框,[求助][贪吃蛇]源程序,请教其中一个问题。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[求助][貪吃蛇]源程序,請教其中一個問題。

源程序如下: 我的問題是,調節游戲速度時,數字為什么越大時,有時候竟然越快?

#define N 200

#include

#include

#include

#define LEFT 0x4b00 /* 將這些特殊字符的ACSII值(這里主要的是擴展的)定義宏,來方便使用 */

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define ESC 0x011b

int i,key;

int score=0;/*得分*/

int gamespeed=60000;/*游戲速度自己調整 這個值應該是越小蛇運動的越快,但是我在Win-TC1.9.1運行時,當我把gamespeed增大時,在某些值下會反而會增快,不知道為什么*/

struct Food

{

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

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

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

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

struct Snake

{

int x[N];

int y[N];

int node;/*蛇的節數*/

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

int life;/* 蛇的生命,0活著,1死亡*/

}snake;

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

void Close(void);/*圖形結束*/

void DrawK(void);/*開始畫面*/

void GameOver(void);/*結束游戲*/

void GamePlay(void);/*玩游戲具體過程*/

void PrScore(void);/*輸出成績*/

/*主函數*/

void main(void)

{

Init();/*圖形驅動*/

DrawK();/*開始畫面*/

GamePlay();/*玩游戲具體過程*/

Close();/*圖形結束*/

}

/*圖形驅動*/

void Init(void)

{

int gd=DETECT,gm;

initgraph(&gd,&gm,"d:\\tc\program"); /* 初始化圖形系統, d:\\tc\program 為EGA VGA.bgi所在路徑 */

cleardevice(); /* 清除屏幕函數 */

}

/*開始畫面,左上角坐標為(50,40),右下角坐標為(610,460)的圍墻,不過畫完后圍墻的內圈是(60,50)(600,450)*/

void DrawK(void)

{

/*setbkcolor(LIGHTGREEN);*/ /* 設置背景顏色,可以添加 */

setcolor(11);/* 函數setcolor()設置當前繪圖顏色(或稱做前景色)。 */

setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設置線型 為畫線函數設置當前線型,包括線型、線圖樣和線寬。此處為實線加寬 */

for(i=50;i<=600;i+=10)/*畫圍墻*/

{

rectangle(i,40,i+10,49); /*上邊  畫矩形函數用當前繪圖色、線型及線寬,畫一個給定左上角與右下角的矩形 */

rectangle(i,451,i+10,460);/*下邊 此函數調用方式為void rectangle(int left,int top,int right,int bottom); */

}/* 以一個小格為一個單位來畫圍墻的上下兩行 */

for(i=40;i<=450;i+=10)

{

rectangle(50,i,59,i+10); /*左邊*/

rectangle(601,i,610,i+10);/*右邊*/

}/* 以一個小格為一個單位來畫圍墻的左右兩行 */

}

/*玩游戲具體過程*/

void GamePlay(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();/*輸出得分*/

while(1)/*可以重復玩游戲,壓ESC鍵結束*/

{

while(!kbhit())/*檢查當前按下的鍵 在沒有按鍵的情況下,蛇自己移動身體*/

{/* 關于kbhit()的返回值,查找有些地方都說檢查到按鍵返回1沒有檢查到返回0但本人在Win-TC1.9.1上測試為檢查到返回-1沒檢查到返回0 */

/* 所以kbhit()沒檢查到時返回0檢查到返回非0相對準確些 */

/* 再說一點,該函數只是檢查當前是否有按鍵信息,卻不捕獲該信息。也就是說你按下一個'Q'它知道你有按下鍵,后面如果有捕獲按鍵信息的函數,那么那個函數仍然可以捕獲這個'Q'信息的 */

if(food.yes==1) /*需要出現新食物*/

{

food.x=rand()%400+60;/* rand()產生隨機數。rand()%400+60這個表達式說明產生的隨機數范圍是[60,460) */

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

while(food.x%10!=0)/*食物隨機出現后必須讓食物能夠在整格內,這樣才可以讓蛇吃到,因為作者把每個小格的大小定義為10*10,所以蛇頭的位置必然在橫(列)中是10的整數倍 */

food.x++;

while(food.y%10!=0)

food.y++;

food.yes=0;/*畫面上有食物了*/

}

if(food.yes==0)/*畫面上有食物了就要顯示*/

{

setcolor(GREEN);

rectangle(food.x,food.y,food.x+10,food.y-10);/* 根據剛才設置的食物的位置畫出食物來 */

}

for(i=snake.node-1;i>0;i--)/*蛇的每個環節往前移動,也就是貪吃蛇的關鍵算法*/

{

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

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

}

/*1,2,3,4表示右,左,上,下四個方向,通過這個判斷來移動蛇頭*/

switch(snake.direction)

{

case 1:snake.x[0]+=10;break; /* 向右 */

case 2: snake.x[0]-=10;break; /* 向左 */

case 3: snake.y[0]-=10;break; /* 向上 */

case 4: snake.y[0]+=10;break; /* 向下 */

}

for(i=3;i

{

if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])

{

GameOver();/*顯示失敗*/

snake.life=1;

break;

}

}

if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455)/*蛇是否撞到墻壁這里的數字都是內壁與外壁的中點,來判斷蛇頭是否超過了內壁*/

{

GameOver();/*本次游戲結束*/

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

}

if(snake.life==1)/*以上兩種判斷以后,如果蛇死就跳出內循環,重新開始*/

break;

if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/

{

setcolor(0);/*把畫面上的食物東西去掉*/

rectangle(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;/*畫面上需要出現新的食物*/

score+=10;

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

}

setcolor(4);/*畫出蛇 這里4是紅色 */

for(i=0;i

rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);

delay(gamespeed);/* 將程序的執行暫停一段時間(毫秒) void delay(unsigned milliseconds); 程序暫停就是蛇在停止 */

setcolor(0);/*用黑色(作者說是黑色不過我測試的結果為setcolor(0)是設置成背景色,也就是說不管你的背景色設置成什么顏色,該函數都會使得繪圖色于背景色一樣,從而實現"不顯色"蛇最后一節,但setbkcolor(0)確實將背景色設置為黑色)去除蛇的的最后一節*/

rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]-10); /* 當程序休息過,先去掉蛇的最后一節,因為在重新畫蛇的時候(for語句)并沒有去掉蛇尾巴的過程 */

} /*end:while(!kbhit)*/

if(snake.life==1)/*如果蛇死就跳出循環*/

break;

key=bioskey(0);/*接收按鍵函數bioskey()的原型為: int bioskey(int cmd); */

/* 當cmd==0時,bioskey()返回按健的鍵值,該值是2 個字節的整型數。當按下時,若返回值的低8 位為非零,則表示為普通鍵,其值代表該鍵的ASCII 碼。若返回值的低8 位為0,則高8 位表示為擴展的ASCII碼,表示按下的是特殊功能鍵*/

/* 由于while(!kbhit())的“再說一點”所以這里bioskey()函數仍然能捕獲這個按鍵的信息。 */

if(key==ESC)/*按ESC鍵退出*/

break;

else if(key==UP&&snake.direction!=4)

/*判斷是否往相反的方向移動,如果不是相反方向才確認新的方向*/

snake.direction=3;

else if(key==RIGHT&&snake.direction!=2)

snake.direction=1;

else if(key==LEFT&&snake.direction!=1)

snake.direction=2;

else if(key==DOWN&&snake.direction!=3)

snake.direction=4;

}/*end:while(1)*/

}

/*游戲結束*/

void GameOver(void)

{

cleardevice(); /* 清除整個屏幕,并且將當前位置移到屏幕原點。該函數類似于文本模式下的函數clrscr(),但clrscr()函數不能在圖形方式下工作;同樣cleardevice()函數不能在文本模式下工作。 */

PrScore();

setcolor(15); /* 以下三個函數見PrScore()中說明 */

settextstyle(0,0,4);

outtextxy(200,200,"GAME OVER");

getch();

}

/*輸出成績*/

void PrScore(void)

{

char str[10];

setfillstyle(SOLID_FILL,14); /* 為各種圖形函數設置填充圖樣和顏色 */

bar(50,15,220,35); /* 用當前填充圖樣和填充色(注意不是給圖色)畫出一個指定上左上角與右下角的實心長條形(長方塊或正方塊),但沒有四條邊線 */

/* bar()函數調用方式為void bar(int left,int top,int right,int bottom);調用此函數前,可用setfillstyle()或setfillpattern()設置當前填充圖樣和填充色。 */

setcolor(6); /* 函數setcolor()設置當前繪圖顏色(或稱做前景色)。voids setcolor(int color);在低分辨率顯示模式(320X200)下,選取的color是調色板顏色號,不是實際色彩值。 */

settextstyle(0,0,2); /* 為圖形輸出設置當前的文本屬性 void far settextstyle (int font, int direction, char size); 設置圖形文本當前字體、文本顯示方向(水平顯示或垂直顯示)以及字符大小。 */

sprintf(str,"score:%d",score); /* score已經被定義成了全局變量,score內容格式化到str */

outtextxy(55,20,str); /* 在(x,y)處顯示字符串 */

}

/*圖形結束*/

void Close(void)

{

getch();

closegraph(); /* 關閉圖形系統 */

}

總結

以上是生活随笔為你收集整理的c语言贪吃蛇黑方框,[求助][贪吃蛇]源程序,请教其中一个问题。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美hdxxxx | 懂色av蜜臀av粉嫩av喷吹 | 亚洲国产成人精品久久 | 最新视频在线观看 | 欧美性xxxx在线播放 | 我色综合| av午夜激情 | 高h奶汁双性受1v1 | 女同久久另类69精品国产 | 妺妺窝人体色777777 | 亚洲高清免费观看 | 欧美高清视频在线观看 | 深夜福利网 | 国产熟女一区二区丰满 | 用力使劲高潮了888av | 尹人香蕉 | 久久爰| 五月天综合视频 | 日韩中文字幕av电影 | 欧美xxxxx牲另类人与 | 西西午夜影院 | 亚洲超碰在线 | 翔田千里在线播放 | 明星毛片| japanese强行粗暴 | av在线高清观看 | 色综合av在线 | 1024金沙人妻一区二区三区 | 国产对白自拍 | 成人免费一区二区 | 91免费版在线看 | 欧美午夜性生活 | 五月激情婷婷丁香 | 精品人妻人人做人人爽夜夜爽 | 婷婷激情影院 | 另类天堂 | 美女一区 | 色99在线| 足疗店女技师按摩毛片 | 手机看片欧美 | 国产综合精品 | 黄色三级a | 国产网站一区 | 麻豆成人在线观看 | 日本在线观看视频网站 | 日韩电影第一页 | 草草地址线路①屁屁影院成人 | 自拍偷拍 亚洲 | 女攻总攻大胸奶汁(高h) | 1000部啪啪 | 边吃奶边添下面好爽 | 久久精品视频观看 | 日本一级理论片在线大全 | 91精品视频在线 | 大地资源高清播放在线观看 | 在线a| 午夜久久剧场 | 97涩涩网| 精品在线观看一区 | 久久久久久亚洲av毛片大全 | 亚洲综合精品视频 | 中日韩精品一区二区三区 | 久久二 | 福利一二三区 | 一区二区欧美视频 | 色之久久综合 | 麻豆成人免费视频 | 国产精品 欧美 日韩 | 在线免费看av网站 | 成人一级影片 | 日韩一区二区三区免费 | 久久久久中文字幕 | 欧美视频在线免费 | 欧美日韩亚洲在线 | 熟妇高潮一区二区三区在线播放 | 日韩精品一区二区三区av | 日韩视频一 | 国模私拍在线观看 | 美丽的姑娘在线观看免费 | 狠狠五月 | av黄色一级片 | 亚洲精品一区二区三区四区五区 | 国产77777| 丰满少妇大力进入 | 成全影视在线观看第8季 | 欧美www视频 | 青娱乐久久 | 亚洲网站在线 | 黄色工厂这里只有精品 | 欧美成人精品一区二区免费看片 | 老熟妇精品一区二区三区 | 欧美日韩亚洲国产精品 | 91色网站| av黄色片在线观看 | 91免费看网站| 五月婷婷啪啪 | 荒野求生21天去码版网站 | 波多野结衣一区二区三区高清 | 免费在线中文字幕 |