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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

c语言写贪吃蛇什么水平_学了一些C语言,也不知道自己学到什么程度,自己想写个贪吃蛇但是写不出来,想看懂下面这个程序,求解释...

發布時間:2025/10/17 编程问答 17 豆豆

已結貼√

問題點數:20?回復次數:3

學了一些C語言,也不知道自己學到什么程度,自己想寫個貪吃蛇但是寫不出來,想看懂下面這個程序,求解釋

#include//基本庫

#include//系統庫

#include//光標定位、字符顏色函數庫

#include//時間函數庫

#include//鍵值讀入函數庫

#define width 60

#define height 25

struct ssnake

{

int f;//蛇身有效標志

int x;

int y;//蛇身坐標

};

void color(int b)?????????//顏色函數

{

HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ;

SetConsoleTextAttribute(hConsole,b) ;

}

void HideCursor()//隱藏光標

{

HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);

CONSOLE_CURSOR_INFO cursor_info={1,0};

SetConsoleCursorInfo(hOut,&cursor_info);

}

void gotoxy(int x,int y)//設置字符顯示位置

{

HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);

COORD loc={x,y};

SetConsoleCursorPosition(hOut,loc);

}

void drawmap(char *mp,char *omp,ssnake *snp)

{//畫場景

char pel[]="??◆■●";

int i,j,k;

for(i=0;snp[i].f>0;i++)

{

j=4;//蛇身

if(i==0)j=2;//蛇頭

mp[snp[i].x*height+snp[i].y]=j;

}

for(k=0;k

{

if(mp[k]!=omp[k])

{

i=k/height;j=k%height;

color(15);

if(mp[k]==6)color(13);

omp[k]=mp[k];

gotoxy(i,j);

printf("%c",pel[mp[k]]);

printf("%c",pel[mp[k]+1]);

}

}

}

void rndapple(ssnake *snp,int *px,int *py)

{//產生蘋果隨機位置

bool f=false;

int i,j,k=0,z[1500][2]={0};

char map[width][height]={0};

*px=-1;*py=-1;

for(i=0;snp[i].f>0;i++)map[snp[i].x][snp[i].y]=1;

for(i=0;i

for(j=0;j

{

if(map[i][j]==0)

{

z[k][0]=i;

z[k][1]=j;

k++;

}

}

if(k>0)

{

i=rand()%k;

*px=z[i][0];

*py=z[i][1];

}

}

int main(void)

{

char map[width][height]={0},oldmap[width][height]={0};//場景 0:空 2:蛇頭 4:蛇身 6:蘋果

int mx=0,my=0;//蛇頭移動方向

int apx=-1,apy=-1;//蘋果位置

int i,j,sc=0,ef=0,sp=210;

long t1,nt;//計時

char a;

bool pf=false;//暫停標志

ssnake sn[1500]={0};//蛇,最長1500個關節,關節數據結構為ssnake,

nt=clock();

t1=nt;

system("mode con cols=80 lines=25");

HideCursor();

for(i=0;i

color(14);

gotoxy(width+4,12);printf("控制:←↑→↓");

gotoxy(width+4,14);printf("空格:暫停");

gotoxy(width+4,16);printf("ESC :退出");

gotoxy(width+4,18);printf("得分:%d",sc);

sn[0].f=1;sn[0].x=30;sn[0].y=10;sn[1].f=0;//蛇頭位置

srand((unsigned)time(NULL));

while(1)

{

nt=clock();

if(kbhit())???//判斷擊鍵

{

a=getch();

if(a<0)

{

a=getch();

if(a=='K'&&mx!=2){mx=-2;my=0;}

if(a=='M'&&mx!=-2){mx=2;my=0;}//左右移動,由于用漢字符號表示,所以步長為2

if(a=='H'&&my!=1){my=-1;mx=0;}

if(a=='P'&&my!=-1){my=1;mx=0;}//上下移動

}

else

{

if(a==27){ef=1;break;}//人為退出

if(a==32)pf=!pf;

}

}

if(!pf&&nt-t1>sp)

{

t1=nt;

for(i=0;sn[i].f>0;i++);

for(j=i;j>0;j--){sn[j].x=sn[j-1].x;sn[j].y=sn[j-1].y;}//蛇身前進

sn[0].x+=mx;sn[0].y+=my;//蛇頭前進

if(sn[0].x<0||sn[0].x>=width||sn[0].y<0||sn[0].y>=height){ef=2;break;}//越界

for(j=1;sn[j].f>0;j++){if(sn[j].x==sn[0].x&&sn[j].y==sn[0].y)break;}

if(sn[j].f!=0){ef=3;break;}//判斷是否自己吃自己

if(sn[0].x==apx&&sn[0].y==apy)//吃了蘋果

{

sn[i].f=1;sn[i+1].f=0;apx=-1;apy=-1;sp--;

sc=sc+10+i;//成績累加

gotoxy(64,18);printf("得分:%d",sc);

}

}

for(i=0;i

for(j=0;j

map[i][j]=0;

if(apx<0&&apy<0)rndapple(sn,&apx,&apy);//獲取蘋果位置

if(apx>=0&&apy>=0)

map[apx][apy]=6;//設置蘋果

else

{//已經沒有空位畫蘋果位置了,說明蛇足夠長,這是不可能的

gotoxy(62,24);

printf("厲害,滿分!");

break;

}

drawmap(&map[0][0],&oldmap[0][0],sn);

}

gotoxy(25,23);

color(15);

if(ef==1)printf("不玩了!Game Over!\n");

if(ef==2)printf("越界死翹翹!Game Over!\n");

if(ef==3)printf("吃自己死翹翹!Game Over!\n");

}

總結

以上是生活随笔為你收集整理的c语言写贪吃蛇什么水平_学了一些C语言,也不知道自己学到什么程度,自己想写个贪吃蛇但是写不出来,想看懂下面这个程序,求解释...的全部內容,希望文章能夠幫你解決所遇到的問題。

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