c语言写贪吃蛇什么水平_学了一些C语言,也不知道自己学到什么程度,自己想写个贪吃蛇但是写不出来,想看懂下面这个程序,求解释...
已結貼√
問題點數: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语言,也不知道自己学到什么程度,自己想写个贪吃蛇但是写不出来,想看懂下面这个程序,求解释...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python教学研究_Python程序设
- 下一篇: hadoop 依赖式job_Hadoop