VC 6.0 运行起来的


#include<stdio.h>
#include<time.h>
#include<windows.h>
#include<stdlib.h>#define U 1
#define D 2
#define L 3
#define R 4       //蛇的状态,U:上 ;D:下;L:左 R:右
/*
GetAsyncKeyState() 确定用户当前是否按下了键盘上的一个键的函数VK_SPACE空格键VK_UP↑键VK_DOWN↓键VK_LEFT←键VK_RIGHT→键
*/typedef struct SNAKE //蛇身的一个节点
{int x;int y;struct SNAKE *next;
}snake;
char cd;
//全局变量//
int score = 0, add = 10;//总得分与每次吃食物得分。
int status, sleeptime = 200;//每次运行的时间间隔
snake *head, *food;//蛇头指针,食物指针
snake *q;//遍历蛇的时候用到的指针
int endGamestatus = 0; //游戏结束的情况,1:撞到墙;2:咬到自己;3:主动退出游戏。//声明了全部函数//
void Pos();
void creatMap();
void initSnake();
int biteSelf();
void createFood();
void cantCrossWall();
void snakeMove();
void pause();
void runGame();
void initGame();
void endGame();
void gameStart();
void news();void Pos(int x, int y)//设置光标位置
{COORD pos;//coord是windoes API的一个函数,用来控制物体在屏幕上的输出位置HANDLE hOutput;pos.X = x;pos.Y = y;hOutput = GetStdHandle(STD_OUTPUT_HANDLE);//返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误的屏幕缓冲区的句柄SetConsoleCursorPosition(hOutput, pos);//定位光标的位置,获得GetStdHandle的输出,并且赋值给pos,在屏幕上定位
}void creatMap()//创建地图
{int i;for (i = 0; i<58; i += 2)//打印上下边框{Pos(i, 0);printf("■");//一个方块占两个位置Pos(i, 26);printf("■");}for (i = 1; i<26; i++)//打印左右边框{Pos(0, i);printf("■");Pos(56, i);printf("■");}
}void initSnake()//初始化蛇身
{snake *tail;int i;tail = (snake*)malloc(sizeof(snake));//从蛇尾开始,头插法,以x,y设定开始的位置tail->x = 26;tail->y = 6;tail->next = NULL;for (i = 1; i <= 4; i++)//初始长度为4{head = (snake*)malloc(sizeof(snake));head->next = tail;head->x = 26 + 2 * i;head->y = 6;tail = head;}while (tail != NULL)//从头到尾,输出蛇身{Pos(tail->x, tail->y);printf("■");tail = tail->next;}
}
int biteSelf() //判断是否咬到了自己
{snake *self;self = head->next;while (self != NULL){if (self->x == head->x && self->y == head->y){return 1;} self = self->next;}return 0;
}void createFood()//随机出现食物
{snake *food_1;srand((unsigned)time(NULL));//为了防止每次产生的随机数相同,种子设置为timefood_1 = (snake*)malloc(sizeof(snake));while ((food_1->x % 2) != 0)    //保证其为偶数,使得食物能与蛇头对其{food_1->x = rand() % 52 + 2;}food_1->y = rand() % 26 + 1;q = head;while (q->next == NULL){if (q->x == food_1->x && q->y == food_1->y) //判断蛇身是否与食物重合{free(food_1);createFood();}q = q->next;}Pos(food_1->x, food_1->y);food = food_1;printf("■");
}void cantCrossWall()//不能穿墙
{if (head->x == 0 || head->x == 56 || head->y == 0 || head->y == 26){endGamestatus = 1;endGame();}
}void snakeMove()//蛇前进,上U,下D,左L,右R
{snake * nexthead;cantCrossWall();nexthead = (snake*)malloc(sizeof(snake));if (status == U){nexthead->x = head->x;nexthead->y = head->y - 1;if (nexthead->x == food->x && nexthead->y == food->y)//如果下一个有食物{nexthead->next = head;head = nexthead;q = head;while (q != NULL){Pos(q->x, q->y);printf("■");q = q->next;}score = score + add;createFood();}else                                               //如果没有食物{nexthead->next = head;head = nexthead;q = head;while (q->next->next != NULL){Pos(q->x, q->y);printf("■");q = q->next;}Pos(q->next->x, q->next->y);printf("  ");free(q->next);q->next = NULL;}}if (status == D){nexthead->x = head->x;nexthead->y = head->y + 1;if (nexthead->x == food->x && nexthead->y == food->y)  //有食物{nexthead->next = head;head = nexthead;q = head;while (q != NULL){Pos(q->x, q->y);printf("■");q = q->next;}score = score + add;createFood();}else                               //没有食物{nexthead->next = head;head = nexthead;q = head;while (q->next->next != NULL){Pos(q->x, q->y);printf("■");q = q->next;}Pos(q->next->x, q->next->y);printf("  ");free(q->next);q->next = NULL;}}if (status == L){nexthead->x = head->x - 2;nexthead->y = head->y;if (nexthead->x == food->x && nexthead->y == food->y)//有食物{nexthead->next = head;head = nexthead;q = head;while (q != NULL){Pos(q->x, q->y);printf("■");q = q->next;}score = score + add;createFood();}else                                //没有食物{nexthead->next = head;head = nexthead;q = head;while (q->next->next != NULL){Pos(q->x, q->y);printf("■");q = q->next;}Pos(q->next->x, q->next->y);printf("  ");free(q->next);q->next = NULL;}}if (status == R){nexthead->x = head->x + 2;nexthead->y = head->y;if (nexthead->x == food->x && nexthead->y == food->y)//有食物{nexthead->next = head;head = nexthead;q = head;while (q != NULL){Pos(q->x, q->y);printf("■");q = q->next;}score = score + add;createFood();}else                                         //没有食物{nexthead->next = head;head = nexthead;q = head;while (q->next->next != NULL){Pos(q->x, q->y);printf("■");q = q->next;}Pos(q->next->x, q->next->y);printf("  ");free(q->next);q->next = NULL;}}if (biteSelf() == 1)       //判断是否会咬到自己{endGamestatus = 2;endGame();}
}void pause()//暂停
{while (1){Sleep(300);if (GetAsyncKeyState(VK_SPACE))//GetAsyncKeyState() 确定用户当前是否按下了键盘上的一个键的函数{break;}}
}void runGame()//控制游戏
{Pos(64, 15);printf("不能穿墙,不能咬到自己\n");Pos(64, 16);printf("用↑.↓.←.→分别控制蛇的移动.");Pos(64, 17);//printf("F1 为加速,F2 为减速\n");Pos(64, 18);printf("ESC :退出游戏.space:暂停游戏.");Pos(64, 20);status = R;while (1){Pos(64, 10);printf("得分:%d  ", score);Pos(64, 11);printf("每个食物得分:%d分", add);if (GetAsyncKeyState(VK_UP) && status != D){status = U;}else if (GetAsyncKeyState(VK_DOWN) && status != U){status = D;}else if (GetAsyncKeyState(VK_LEFT) && status != R){status = L;}else if (GetAsyncKeyState(VK_RIGHT) && status != L){status = R;}else if (GetAsyncKeyState(VK_SPACE)){pause();}else if (GetAsyncKeyState(VK_ESCAPE)){endGamestatus = 3;break;}else if (GetAsyncKeyState(VK_F1)){if (sleeptime >= 50){sleeptime = sleeptime - 30;add = add + 2;if (sleeptime == 320){add = 2;//防止减到1之后再加回来有错}}}else if (GetAsyncKeyState(VK_F2)){if (sleeptime<350){sleeptime = sleeptime + 30;add = add - 2;if (sleeptime == 350){add = 1;  //保证最低分为1}}}Sleep(sleeptime);snakeMove();}
}void initGame()//开始界面
{Pos(40, 12);printf("欢迎来到贪食蛇游戏!");Pos(40, 25);system("pause");system("cls");Pos(25, 12);printf("用↑.↓.←.→分别控制蛇的移动, F1 为加速,2 为减速\n");Pos(25, 13);printf("加速将能得到更高的分数。\n");system("pause");//冻结屏幕,用户按任意键结束system("cls");
}
void endGame()//结束游戏
{system("cls");Pos(24, 12);if (endGamestatus == 1){printf("对不起,您撞到墙了。游戏结束.");}else if (endGamestatus == 2){printf("对不起,您咬到自己了。游戏结束.");}else if (endGamestatus == 3){printf("您的已经结束了游戏。");}Pos(24, 13);printf("您的得分是%d\n", score);printf("请按y退出游戏\n");while (getchar() != 'y'){//news();printf("请按y退出游戏\n");}exit(0);
}
void gameStart()//游戏初始化
{system("mode con cols=100 lines=30");//设置窗口大小initGame();//开始界面creatMap();//创建地图initSnake();//初始化蛇身createFood();//随机出现食物
}
void news()
{gameStart();runGame();//控制游戏endGame();//结束游戏
}
int main()
{gameStart();runGame();//控制游戏   endGame();//结束游戏return 0;
}

*******贪吃蛇********相关推荐

  1. cocos creator开发微信小游戏(五)贪吃蛇大作战

    目录 小游戏介绍 小游戏cocos creator场景图 小游戏部分JS代码 开发中碰到的问题 工程及说明 小游戏介绍 贪吃蛇小游戏:贪吃蛇试玩(首次加载比较慢),类似贪吃蛇大作战的小游戏.当玩家的蛇 ...

  2. 用java写2468游戏_关于第一次用java写小游戏(贪吃蛇)的体会记录

    作为一只菜鸡,对于编程的世界还一无所知,但是感觉应该要写点实用的东西.突然发现好像贪吃蛇应该能写出来(那种几乎没有用户界面的),于是就开始了. 1.关于对简单的动画呈现的资料准备 因为只有一些捉襟见肘 ...

  3. java小项目之贪吃蛇项目(图解超详细)

    在刷视频的时候,看到了一个讲解用java写一个贪吃蛇的项目,于是想照猫画虎的学习仿制一下. 学习视频的地址:https://www.bilibili.com/video/BV1HE41127CV 也欢 ...

  4. 基于RT-Thread实现的小游戏(贪吃蛇、俄罗斯方块)

    前言:本实现基于stm32芯片,移植RT_Thread Nano系统源码,实现两个小游戏(贪吃蛇/俄罗斯方块).本实验提供完整的IAR工程源码并且有很多注释,是一个不错的参考例程.关键知识点:OLED ...

  5. 贪吃蛇html网页小游戏,网页贪吃蛇HTML5小游戏制作

    贪吃蛇是以前我们经常在手机里玩的一个小游戏,现在要是把它搬到网页上也会让人更回味.这是一款非常有趣的HTML5响应式网页贪吃蛇小游戏.在游戏中你可以使用键盘的上下左右来控制蛇的运动方向.现在要列出的是 ...

  6. 超级详细的注释C语言简单实现童年小游戏:贪吃蛇

    引言: 记得小时候还没有现在超级高端的智能手机,当时的诺基亚类型的老人机是我的最爱,而里面的贪吃蛇小游戏我总是能玩很久,所以今天就用C语言简单实现一下贪吃蛇这一个小游戏吧. 一. 准备工作: 1.VS ...

  7. Scratch图形化编程之简单小游戏(贪吃蛇)

    目录 一.前言介绍 二.对象及其背景 三.面向对象的模块程序 3.1 贪吃蛇头 3.2 贪吃蛇身 3.3 Apple 四.成果展示 一.前言介绍 运用Scratch图像编程化编程,制作了一个能够通过按 ...

  8. Python小游戏:贪吃蛇——turtle的使用

    突然想把去年写的小游戏练习整合一下,写一个简单的教学文章吧. 该篇主要讲解利用python中turtle包制作小游戏,不涉及pygame的使用,仅用pycharm就可实现 0.理清游戏思路 要实现的效 ...

  9. C语言 小游戏之贪吃蛇

    还记得非常久曾经听群里人说做贪吃蛇什么的,那时候大一刚学了C语言,认为非常难,根本没什么思路. 前不久群里有些人又在谈论C语言贪吃蛇的事了,看着他们在做,我也打算做一个出来. 如今大三,经过了这一年半 ...

  10. JavaScript+ Canvas开发趣味小游戏《贪吃蛇》

    一.效果展示 二.<贪吃蛇>基本实现思路 蛇头部分+蛇身体部分:采用对象形式来存储坐标,并将每个坐标对象放到一个snake数组中,方便使用.设置每个方格宽度30px,高度30px,画布高度 ...

最新文章

  1. html5子页面无法弹出,弹出子页面,兼容ie
  2. 一位像素艺术家用39张动图,将大自然的唯美尽收眼底…
  3. bind1nd\bind2nd
  4. 卷积神经网络结构优化综述
  5. PXF webapp is inaccessible but tomcat is up
  6. Adobe illustrator 粉色背景字体是为什么 - 连载19
  7. JAVA 不足N位后面补XX符号
  8. 矩池云上安装yolov5并测试
  9. ZOJ 3992 2017CCPC秦皇岛 L:One-Dimensional Maze
  10. 【已解决】python远程连接数据库问题
  11. 【三维路径规划】基于matlab蚁群算法水下潜器三维路径规划【含Matlab源码 043期】
  12. 浏览器打印设置横向打印_震旦打印机如何设置认证打印
  13. Qt怎么实现将bmp图片转换成Ascii_你保存的word和pdf文档图片为什么变模糊了?
  14. Verilog学习——T触发器
  15. golang使用gorm出现reflect.Value.Addr of unaddressable value [recovered]
  16. .NET Reflector Visual Studio Extension
  17. python大作业黑白棋_计算概论大作业——黑白棋AI设计
  18. File---文件、文件夹的创建
  19. A“一个部族,一个民族,一个弗雷尔卓德。”(素数筛,逆序对,树状数组)...
  20. 中秋节灯谜趣事:古人中秋节…

热门文章

  1. 昨天愚人节,互联网大厂都恶搞了啥?
  2. ABBYY FineReader for Mac快速安装、注册方法
  3. 操作流python_python处理字节流
  4. 高性能低延迟无线蓝牙耳机,国产高人气时尚真无线蓝牙耳机测评
  5. 海藻酸钠-聚乙二醇-透明质酸|Hyaluronicacid-PEG-alginate
  6. JavaScript childNodes
  7. Media Foundation——架构
  8. 新手抖音涨粉变现是怎么做的?
  9. PCA9685地址疑案
  10. numpy中matmul的使用(个人笔记)