當前位置:編程學習大全網 - 源碼下載 - 貪吃蛇c語言代碼

貪吃蛇c語言代碼

#include<stdio.h>

#include<stdlib.h>

#include<Windows.h>

#include<conio.h>

#include<time.h>

char gamemap[20][40];//遊戲地圖大小 20*40

int score=0;//當前分數

//記錄蛇的結點

int x[800];//每個結點的行編號

int y[800];//每個結點的列編號

int len = 0;//蛇的長度

//記錄水果信息

int fx=0;//食物的橫坐標

int fy=0;//食物的縱坐標

int fcount=0;//食物的數目

//主要函數操作

void createfood();//生成食物

void PrintgameMap(int x[],int y[]);//畫遊戲地圖

void move(int x[],int y[]);//移動蛇

int main()

{

srand(time(NULL));

//初始化蛇頭和身體的位置,默認剛開始蛇長為2

x[len] = 9;

y[len] = 9;

len++;

x[len] = 9;

y[len] = 8;

len++;

createfood();

PrintgameMap(x,y);

move(x,y);

return 0;

}

void createfood()

{

if(0==fcount)

{

int tfx=rand()%18+1;

int tfy=rand()%38+1;

int i,j;

int have=0;//為0表示食物不是食物的壹部分

for(i=0;i<len;i++)

{

for(j=0;j<len;j++)

{

if(x[i]==fx&&y[j]==fy)

{

have=1;

break;

}

else

{

have=0;

}

}

if(1==have)//若為蛇的壹部分,執行下壹次循環

{

continue;

}

else//否則生成新的水果

{

fcount++;

fx=tfx;

fy=tfy;

break;

}

}

}

}

//遊戲地圖

void PrintgameMap(int x[],int y[])

{

int snake = 0,food=0;

int i, j;

//畫遊戲地圖,並畫出蛇的初始位置

for (i = 0; i < 20; i++)

{

for (j = 0; j < 40; j++)

{

if (i == 0 && j >= 1 && j <= 38)

{

gamemap[i][j] = '=';

}

else if (i == 19 && j >= 1 && j <= 38)

{

gamemap[i][j] = '=';

}

else if (j == 0 || j == 39)

{

gamemap[i][j] = '#';

}

else

{

gamemap[i][j] = ' ';

}

//判斷蛇是否在當前位置

int k;

for ( k = 0; k < len; k++)

{

if (i == x[k]&&j == y[k])

{

snake = 1;

break;

}

else

{

snake = 0;

}

}

{

if(fcount&&fx==i&&fy==j)

{

food=1;

}

else

{

food=0;

}

}

//若蛇在當前位置

if (1==snake )

{

printf("*");

}

else if(1==food)

{

printf("f");

}

//若蛇不在當前位置並且當前位置沒有水果

else

{

printf("%c", gamemap[i][j]);

}

}

printf("\n");

}

printf("score:%d",score);

}

//移動

void move(int x[],int y[])

{

char s;

s=getch();

int move=0,beat=0;

while (1)

{

int cx[800];

int cy[800];

memcpy(cx, x, sizeof(int)*len);

memcpy(cy, y, sizeof(int)*len);

//頭

if (s=='w')

{

x[0]--;

move=1;

if(x[0]<=0)

{

printf("Game over\n");

break;

}

}

else if (s=='s')

{

x[0]++;

move=1;

if(x[0]>=19)

{

printf("Game over\n");

break;

}

}

else if (s=='a')

{

y[0] --;

move=1;

if(y[0]<=0)

{

printf("Game over\n");

break;

}

}

else if (s=='d')

{

y[0]++;

move=1;

if(y[0]>=39)

{

printf("Game over\n");

break;

}

}

//身體

int i;

for ( i = 1; i < len; i++)

{

x[i] = cx[i - 1];

y[i] = cy[i - 1];

}

for(i=1;i<len;i++)//要是咬到了自己

{

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

{

beat=1;

}

else

{

beat=0;

}

}

if(1==beat)

{

printf("Game over\n");

break;

}

if(1==move)

{

if(fcount&&x[0]==fx&&y[0]==fy)//如果吃到了果子

{

//拷貝當前蛇頭地址到第二個結點

memcpy(x+1,cx,sizeof(int)*len);

memcpy(y+1,cy,sizeof(int)*len);

len++;

fcount--;

fx=0;

fy=0;

score++;

createfood();

}

Sleep(70);

system("cls");

PrintgameMap( x, y);

}

else

continue;

if(kbhit())//判斷是否按下按鍵

{

s=getch();

}

}

}

  • 上一篇:在Godaddy註冊的域名被偷了,怎樣能找回來。請說說詳細過程。謝謝。滿意再加分 。
  • 下一篇:如何進行WEB安全性測試
  • copyright 2024編程學習大全網