使用vs2017实现的贪吃蛇小游戏
基于c语言,玩了很久的单片机了突然想回去玩玩上位机就跟着视频学些了这个
因为不会录制视频视频就不上传了
纯属个人兴趣爱好
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #include <conio.h>
- #include <windows.h>
- //辅助宏定义
- #define maph 25
- #define mapw 40
- #define snakesize 50
- struct
- {
- //如何去定位:坐标
- int x;
- int y;
- }food;
- //蛇的结构体
- struct
- {
- //记录蛇得坐标
- int x[snakesize];
- int y[snakesize];
- //蛇的长度
- int len;
- int speed;
- }snake;
- //全局变量
- int key = 'w';//初始方向
- int changeFlage = 0;//变化标记
- //////////////////////
- //模块设计
- ////////////////////
- //地图
- void drawmap();
- //食物
- void creatfood();
- //按键控制方向
- void keydown();
- //状态,判断是否结束游戏
- int snakestatus();
- //光标移动,光标移动
- void gotoxy(int x,int y);
- //////////////////
- ////////////主函数
- //////////
- int main(void)
- {
- drawmap();
- while (1)
- {
- creatfood();
- Sleep(snake.speed);
- keydown();
- if (!snakestatus())
- {
- break;
- }
- }
- gotoxy(mapw/2, maph/2);
- printf("Game Over");
- system("pause");
- return 0;
- }
- //地图
- void drawmap()
- { //○食物■墙和贪吃蛇
- //随机函数种子
- srand((unsigned int)time(NULL));
- //圈地
- for (int i = 0; i <= maph; i++)
- {
- gotoxy(0,i);
- printf("■");
- gotoxy(mapw-2, i);
- printf("■");
- }
- for (int i = 1; i <= mapw; i+=2)
- {
- gotoxy(i, 0);
- printf("■");
- gotoxy(i, maph-1);
- printf("■");
- }
- //化蛇
- //确定蛇的属性
- snake.len = 3;
- snake.speed = 300;
- snake.x[0] = mapw / 2;
- snake.y[0] = maph / 2;//将蛇放到屏幕中间
- //画蛇头
- gotoxy(snake.x[0],snake.y[0]);
- printf("■");
- //画蛇的身体
- for (int k = 1; k < snake.len; k++)
- {
- snake.x[k] = snake.x[k - 1] + 2;
- snake.y[k] = snake.y[k-1];
- gotoxy(snake.x[k], snake.y[k]);
- printf("■");
- }
- //画食物
- //坐标的确定
- while(1)
- {food.x = rand() % (mapw - 4) + 2;
- food.y = rand() % (maph - 2) + 1;
- if (food.x % 2 == 0)
- {
- break;
- }
- }
- //将确定的坐标画出来
- gotoxy(food.x, food.y);
- printf("○");
- }
- //食物产生
- void creatfood()
- {
- //蛇吧食物吃了
- if (snake.x[0] == food.x&&food.y[0] == food.y)
- {
- srand((unsigned int )time(NULL));
- //产生的食物不能再蛇的身上并且坐标要是偶数
- while (1)
- {
- int flag = 1;
- food.x = rand() % (mapw - 4) + 2;
- food.y = rand() % (maph - 2) + 1;
- //产生的食物不能再蛇的身上
- for (int k = 0; k < snake.len; k++)
- {
- if (snake.x[k] == food.x&&snake.y[k] == food.y)
- {
- flag = 0;
- break;
- }
- }
- if (flag&&food.x % 2 == 0)
- {
- break;
- }
- }
- }
- gotoxy(food.x,food.y);
- printf("○");
- snake.len++;
- changeFlage =1;//蛇的标记
- }
- //按键实现
- void keydown()
- {
- //无按键的处理
- if (_kbhit())
- { //有按键接受
- fflush(stdin);
- key = _getch();
- }
- //擦除最后一节
- if (!changeFlage)
- {
- gotoxy(snake.x[snake.len-1], snake.y[snake.len - 1]);
- printf(" ");
- }
- //后面的蛇身处理
- for (int i =snake.len-1 ; i > 0; i--)
- {
- snake.x[i] = snake.x[i - 1];
- snake.y[i] = snake.y[i - 1];
- }
- //按键处理移动方向的处理
- switch (key)
- {
- case 'w':
- case 'W':
- snake.y[0]--;
- break;
- case 's':
- case 'S':
- snake.y[0]++;
- break;
- case 'a':
- case 'A':
- snake.x[0]-=2;
- break;
- case 'd':
- case 'D':
- snake.x[0]+=2;
- break;
- }
- //蛇头画出来
- gotoxy(snake.x[0], snake.y[0]);
- printf("■");
- changeFlage = 0;
- gotoxy(maph +2,0);
- }
- //状态
- int snakestatus()
- {
- if (snake.x[0] == 2 || snake.x[0] == maph-2 || snake.y[0] == 0 || snake.y[0] == mapw-1)
- return 0;
- //蛇头不能吃自己
- for (int k = 1; k < snake.len; k++
- 余下内容下载附件
-
复制代码
全部资料51hei下载地址:
贪吃蛇c语言版本.docx
(16.32 KB, 下载次数: 29)
|