C语言开发实现贪吃蛇游戏
程序员文章站
2022-04-21 12:40:02
本文实例为大家分享了c语言实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下1、最好用vs运行2、用到的函数有:_kbhit _getch easyx图形库内一系列函数3、蛇身与食物用矩形画的代码如下...
本文实例为大家分享了c语言实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下
1、最好用vs运行
2、用到的函数有:_kbhit _getch easyx图形库内一系列函数
3、蛇身与食物用矩形画的
代码如下:
#include<stdio.h> #include<graphics.h> //easyx头文件 #include<conio.h> #include<time.h> /********************设置各种属性**********************/ //坐标属性 typedef struct point { int x, y; }pyint; //蛇 struct snake { pyint xy[100]; //蛇的每节坐标放到数组中 int position; //方向 int num; //长度 }snake; //食物 struct food{ pyint fdxy; int flag; //是否存在 int grade; //成绩 }food; //枚举:方向 //也可用宏 #define enum position { up, down, left, right }; /**********************对蛇的操作*****************************/ //初始化蛇 //蛇的每节为 10x10填充的矩形 void initsnake() { snake.xy[0].x = 0; snake.xy[0].y = 0; //数组第一个元素为蛇头 snake.xy[1].x = 10; snake.xy[1].y = 0; snake.xy[2].x = 20; snake.xy[2].y = 0; snake.position = right; //方向 (随便给) snake.num = 3; //数量 (随便给) } //画蛇 void drawsnake() { for (int i = 0; i < snake.num; i++) { setlinecolor(black); setfillcolor(rgb(rand() % 255, rand() % 255, rand() % 255)); fillrectangle(snake.xy[i].x, snake.xy[i].y, snake.xy[i].x + 10, snake.xy[i].y + 10); } } //使蛇动起来 /* 蛇头每向前动一格,其后紧随蛇头: 我们把蛇的每节坐标放到数组里(蛇头坐标放在数组的第一个),移动时,只需使蛇头(数组第一个元素)改变,其后与前面交换; */ void movesnake() { for (int i = snake.num; i > 0; i--) { snake.xy[i].x = snake.xy[i - 1].x; snake.xy[i].y = snake.xy[i - 1].y; //使每个元素向前移动 } switch (snake.position) { case up: snake.xy[0].y -= 10; break; case down: snake.xy[0].y += 10; break; //上下移动 x坐标不发生改变 case left: snake.xy[0].x -= 10; break; case right: snake.xy[0].x += 10; break; //左右移动 y坐标不发生改变 } } /******************************按键操作*****************************************/ //当蛇向上运动时,按向下键无效(其他三个相同) void keydown() { char ch = _getch(); switch (ch) { case 'w': case 'w': case 72: //小键盘上的“向上” if (snake.position != down) //是否向下 snake.position = up; break; case 's': case 's': case 80: //小键盘上的“向下” if (snake.position != up) //是否向上 snake.position = down; break; case 'a': case 'a': case 75: //小键盘上的“向左” if (snake.position != right) //是否向右 snake.position = left; break; case 'd': case 'd': case 77: //小键盘上的“向右” if (snake.position != left) //是否向左 snake.position = right; break; } } /******************************食物操作**************************************/ //初始化食物 void initfood() { food.fdxy.x = rand() % 60 * 10; food.fdxy.y = rand() % 40 * 10; //把食物的坐标控制在游戏界面内 food.flag = 1; //1代表存在食物 //food.grade = 0; for (int i = 0; i < snake.num; i++) { if (food.fdxy.x == snake.xy[i].x&&food.fdxy.y == snake.xy[i].y) //如果食物出现在蛇身上,重新产生x y的值 { food.fdxy.x = rand() % 60 * 10; food.fdxy.y = rand() % 40 * 10; } } } //画食物 void drawfood() { setlinecolor(black); setfillcolor(rgb(rand() % 255, rand() % 255, rand() % 255)); fillrectangle(food.fdxy.x, food.fdxy.y, food.fdxy.x + 10, food.fdxy.y + 10); } /*************************************吃食物*************************************************/ void eatfood() { if (snake.xy[0].x == food.fdxy.x&&snake.xy[0].y == food.fdxy.y) { snake.num++; food.flag = 0; //食物存在的标记(1:存在 0;不存在) food.grade += 10; //每吃一个食物分数加10 (每个食物是10分,可随意改变) } } /*************************************显示分数*************************************************/ void putgrade() { char str[20] = " "; sprintf_s(str, "greade: %d", food.grade); settextcolor(red); //设置字体颜色 outtextxy(500, 50, str); } /***********************************游戏结束***************************************************/ //当蛇头撞墙(蛇头撞上自身) //只分析一种情况 int gameover() { if (snake.xy[0].x > 600 || snake.xy[0].x < 0 | snake.xy[0].y>400 || snake.xy[0].y < 0) //撞墙 { initgraph(800, 600); settextcolor(red); outtextxy(600, 400, "你撞墙了"); settextcolor(yellow); settextstyle(50, 50, "楷体"); //字体样式 outtextxy(200, 250, "game over"); //指定位置输出字符串 return 1; } return 0; } /*****************************************************************************************/ int main() { initgraph(600, 400); setbkcolor(black); //背景颜色 cleardevice(); //清屏:刷新屏幕 srand((unsigned int)time(null)); //随机数种子 initsnake(); drawsnake(); while (1) { cleardevice(); //清屏 movesnake(); drawsnake(); if (food.flag == 0) { initfood(); } drawfood(); if (_kbhit()) { //_kbhit: 检测是否有按键动作 keydown(); } if (gameover()) { //若函数返回1:结束游戏 break; } eatfood(); putgrade(); sleep(100); //延长时间 (即蛇移动的速度) } _getch(); //防止闪屏 closegraph(); //关闭窗口 return 0; } /**********************************************************/ //rgb(rand() % 255, rand() % 255, rand() % 255) 在三基色范围内随机产生 //记得安装easyx插件
更多有趣的经典小游戏实现专题,分享给大家:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。