c语言写贪吃蛇什么水平_关于C语言写贪吃蛇

展开全部

TC 贪吃e69da5e887aa62616964757a686964616f31333337623430蛇代码2008-06-08 13:50#define N 200

#include

#include

#include

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define ESC 0x011b

int i,key;

int score=0;

int gamespeed=32000;

struct Food /*食物的结构体*/

{

int x; /*食物的横坐标*/

int y; /*食物的纵坐标*/

int yes; /*食物是否出现的变量*/

}food;

struct Snack /*蛇的结构体*/

{

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 PrScore(void); /*分数输出函数*/

DELAY(char ch)/*调节游戏速度*/

{

if(ch=='3')

{

delay(gamespeed); /*delay是延迟函数*/

delay(gamespeed);

}

else if(ch=='2')

{

delay(gamespeed);

}

}

Menu()/*游戏开始菜单*/

{

char ch;

printf("Please choose the gamespeed:\n");

printf("1-Fast 2-Normal 3-Slow\n");

printf("\nPlease Press The numbers..\n");

do

{ch=getch();}

while(ch!='1'&&ch!='2'&&ch!='3');

clrscr();

return(ch);

}

/*主函数*/

void main(void)

{

int ch;

ch=Menu();

Init();

DrawK();

GamePlay(ch);

Close();

}

void Init(void)

{

int gd=DETECT,gm;

initgraph(&gd,&gm,"c:\\tc");

cleardevice();

}

void DrawK(void)

{

setcolor(11);

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); /*画出下边框*/

}

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

{

rectangle(50,i,59,i+10); /*画出左边框*/

rectangle(601,i,610,i+10); /*画出右边框*/

}

}

void GamePlay(char ch)

{

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) /*可以重复游戏*/

{

while(!kbhit()) /*在没有按键的情况下蛇自己移动*/

{

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

{

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

food.y=rand()%350+60; /*使用rand函数随机产生食物坐标*/

while(food.x%10!=0)

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]; /*贪吃蛇的身体移动算法*/

}

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); /*每次移动后将后面的身体擦去*/

for(i=0;i

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

delay(gamespeed);

DELAY(ch);

setcolor(0);

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

}

if(snake.life==1)

break;

key=bioskey(0); /*接受按键*/

if(key==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;

}

}

void GameOver(void)

{

cleardevice();

setcolor(RED);

settextstyle(0,0,4);

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

getch();

}

void PrScore(void)

{

char str[10];

setfillstyle(SOLID_FILL,YELLOW);

bar(50,15,220,35);

setcolor(6);

settextstyle(0,0,2);

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

outtextxy(55,20,str);

}

void Close(void)

{

getch();

closegraph();

}

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的贪吃蛇游戏示例,使用C语言: ```c #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <windows.h> #define width 20 // 地图宽度 #define height 20 // 地图高度 int score; // 得分 int gameover; // 游戏结束标记 int headx, heady; // 蛇头坐标 int foodx, foody; // 食物坐标 int tailx[100], taily[100]; // 蛇身坐标 int length; // 蛇身长度 enum direction { STOP = 0, LEFT, RIGHT, UP, DOWN }; // 方向枚举类型 enum direction dir; // 当前方向 void init() // 初始化游戏 { score = 0; gameover = 0; headx = width / 2; heady = height / 2; foodx = rand() % width; foody = rand() % height; dir = STOP; length = 0; } void draw() // 绘制地图和蛇 { system("cls"); // 清屏 for (int i = 0; i < width + 2; i++) // 绘制上边界 printf("#"); printf("\n"); for (int i = 0; i < height; i++) // 绘制地图和蛇 { for (int j = 0; j < width; j++) { if (j == 0) printf("#"); if (i == heady && j == headx) // 绘制蛇头 printf("O"); else if (i == foody && j == foodx) // 绘制食物 printf("X"); else { int flag = 0; for (int k = 0; k < length; k++) // 绘制蛇身 { if (tailx[k] == j && taily[k] == i) { printf("o"); flag = 1; } } if (!flag) printf(" "); } if (j == width - 1) printf("#"); } printf("\n"); } for (int i = 0; i < width + 2; i++) // 绘制下边界 printf("#"); printf("\n"); printf("Score: %d\n", score); // 绘制得分 } void input() // 处理用户输入 { if (_kbhit()) // 检测键盘输入 { switch (_getch()) // 获取输入字符 { case 'a': dir = LEFT; break; case 'd': dir = RIGHT; break; case 'w': dir = UP; break; case 's': dir = DOWN; break; case 'x': gameover = 1; break; } } } void logic() // 处理游戏逻辑 { int prex = tailx[0], prey = taily[0]; // 保存蛇尾 int pre2x, pre2y; tailx[0] = headx; // 更新蛇身坐标 taily[0] = heady; for (int i = 1; i < length; i++) { pre2x = tailx[i]; pre2y = taily[i]; tailx[i] = prex; taily[i] = prey; prex = pre2x; prey = pre2y; } switch (dir) // 更新蛇头坐标 { case LEFT: headx--; break; case RIGHT: headx++; break; case UP: heady--; break; case DOWN: heady++; break; } if (headx < 0 || headx >= width || heady < 0 || heady >= height) // 检测是否越界 gameover = 1; for (int i = 0; i < length; i++) // 检测是否撞到自己 { if (tailx[i] == headx && taily[i] == heady) gameover = 1; } if (headx == foodx && heady == foody) // 检测是否吃到食物 { score += 10; foodx = rand() % width; foody = rand() % height; length++; } } int main() { init(); while (!gameover) { draw(); input(); logic(); Sleep(50); // 控制游戏速度 } printf("Game Over! Your Score: %d\n", score); return 0; } ``` 这个示例使用了Windows.h头文件中的Sleep函数来控制游戏速度,Windows平台上可以直接编译运行。如果是其他平台,可能需要使用不同的清屏函数和延时函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值