纯C语言贪吃蛇demo
发布日期:2021-05-09 00:16:56 浏览次数:22 分类:精选文章

本文共 5048 字,大约阅读时间需要 16 分钟。

main.c

1 //纯C语言贪吃蛇  2 #define _CRT_SECURE_NO_WARNINGS  3 #include"snake.h"  4 #include
5 int main() 6 { 7 //去除光标 8 CONSOLE_CURSOR_INFO test1; 9 test1.dwSize = sizeof(test1); 10 test1.bVisible = false; 11 SetConsoleCursorInfo((GetStdHandle(STD_OUTPUT_HANDLE)), &test1); 12 13 14 initSnake(); 15 initFood(); 16 //initUI(); 17 DrawWall(); 18 playGame(); 19 system("cls"); 20 printf("您的得分为:%d\n", score); 21 return 0; 22 } 23 24 //初始化蛇 25 void initSnake(void) 26 { 27 SNAKE_1.size = 2; 28 SNAKE_1.body[0].x = LENGTH / 2; //🐍头从中间初始化 29 SNAKE_1.body[0].y = WIDTH / 2; 30 //假定初始化的🐍身只有一个,且蛇头朝左 31 SNAKE_1.body[1].x = LENGTH / 2-1; 32 SNAKE_1.body[1].y = WIDTH / 2; 33 34 } 35 36 //初始化食物 37 void initFood(void) 38 { 39 srand(time(NULL));//每次都更改随机数的种子使得每次生成的随机数不同 40 FOOD_1.x = rand() % (LENGTH);//注意出现墙壁的情况 41 FOOD_1.y = rand() % (WIDTH); 42 } 43 void DrawWall() 44 { 45 for (int i = 0; i <= WIDTH; i++) 46 { 47 for (int j = 0; j <= LENGTH; j++) 48 { 49 if (i == WIDTH) 50 { 51 printf("-"); 52 } 53 else if(j== LENGTH) 54 { 55 printf("|"); 56 } 57 else 58 { 59 printf(" "); 60 } 61 62 } 63 printf("\n"); 64 } 65 } 66 67 void initUI() 68 { 69 //画蛇头 70 coord.X = SNAKE_1.body[0].x; 71 coord.Y = SNAKE_1.body[0].y; 72 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);//采用函数来移动光标 73 putchar('@'); 74 75 //画蛇身体 76 for (int i = 1; i < SNAKE_1.size; i++) 77 { 78 coord.X = SNAKE_1.body[i].x; 79 coord.Y = SNAKE_1.body[i].y; 80 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); 81 putchar('*'); 82 } 83 //清除蛇尾 84 coord.X = lastX; 85 coord.Y = lastY; 86 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); 87 printf(" "); 88 89 90 //画食物 91 coord.X = FOOD_1.x; 92 coord.Y = FOOD_1.y; 93 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); 94 printf("¥"); 95 96 //将光标移到不干扰游戏的位置 97 coord.X = 0; 98 coord.Y = WIDTH+1; 99 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);100 }101 void playGame()102 {103 char way = 'a';104 while ((SNAKE_1.body[0].x
=0) && (SNAKE_1.body[0].y
=0))//首先判断蛇头是否撞墙105 {106 initUI();//更新蛇107 if (_kbhit())//利用kbhit()函数来确保用户是否输入108 {109 way = _getch();110 }111 //蛇移动,前一节身体给后一节身体赋值112 switch (way)113 {114 case 'a':115 kx = -1;116 ky = 0;117 break;118 case 's':119 kx = 0;120 ky = 1;121 break;122 case 'd':123 kx = 1;124 ky = 0;125 break;126 case 'w':127 kx = 0;128 ky = -1;129 break;130 }131 //判断蛇头是否撞到任意一节身体132 for (int i = 1; i < SNAKE_1.size; i++)133 {134 if (SNAKE_1.body[0].x == SNAKE_1.body[i].x && SNAKE_1.body[0].y == SNAKE_1.body[i].y)135 {136 return;//游戏结束137 }138 }139 //蛇头撞食物140 if (SNAKE_1.body[0].x == FOOD_1.x && SNAKE_1.body[0].y == FOOD_1.y)141 {142 //食物消失143 initFood();144 //身体增长145 SNAKE_1.size += 1;146 //吃一个食物加10分147 score += 10;148 }149 //存储蛇尾位置150 lastX = SNAKE_1.body[SNAKE_1.size - 1].x;151 lastY = SNAKE_1.body[SNAKE_1.size - 1].y;152 //蛇移动,前一节给后一节赋值153 for (int i = SNAKE_1.size - 1; i > 0; i--)154 {155 SNAKE_1.body[i].x = SNAKE_1.body[i - 1].x;156 SNAKE_1.body[i].y = SNAKE_1.body[i - 1].y;157 }158 //移动蛇头a159 SNAKE_1.body[0].x += kx;160 SNAKE_1.body[0].y += ky;161 Sleep(300);162 }163 }
View Code

 

 

snake.h

1 #ifndef __SNAKE_H__ 2 #define __SNAKE_H__ 3 #include
4 #include
5 #include
6 #include
7 8 #define WIDTH 20 9 #define LENGTH 4010 struct BODY {11 int x;//x坐标12 int y;//y坐标13 };14 //定义整个蛇15 struct snake {16 struct BODY body[WIDTH * LENGTH];//蛇身最长的长度17 int size;//当前🐍的长度18 }SNAKE_1;19 20 //定义食物对象21 struct food {22 int x;23 int y;24 }FOOD_1;25 //初始化光标26 COORD coord;//引入光标COORD类来移动光标27 28 //定义对象和食物对象29 int score = 0;30 31 //定义当用户输入asdw的时候坐标的变化32 int kx, ky;33 //记录蛇尾的位置34 int lastX = SNAKE_1.body[SNAKE_1.size - 1].x;35 int lastY = SNAKE_1.body[SNAKE_1.size - 1].y;36 37 //初始化蛇38 void initSnake(void);39 //初始化食物40 void initFood(void);41 //初始化界面42 void initUI();43 //进行游戏44 void playGame();45 //接收用户按键46 void GetKey();47 void DrawWall();48 #endif
View Code

 

上一篇:C语言+easyX图形库的推箱子实现
下一篇:C语言-文件操作下

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年04月30日 21时38分46秒