贪吃蛇,请问这个代码怎么实现死亡之后能询问是否继续,否退出,是的话重新开始游戏

GuaGuaJinDie GuaGuaJinDie 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include<stdio.h> #include<string.h> #include<windows.h> #include<time.h> #include<conio.h> #define up 'w' #define down 's' #define left 'a' #define right 'd' #define stop 'P' void welcome(); //55开始界面 void Finish(); //291结束界面 void creategraph(); //69围墙打印 void gotoxy(int x, int y); //111光标跳转,横为X 0,1,2.. void gotoprint(int x, int y); //121跳转打印 void gotodelete(int x, int y);//127跳转删除 void createfood(); //133食物产生 int ClickControl(); //157获取键盘信号 int Judge(); //270游戏结束判断 void MovingBody(); //172蛇的移动 void Eatting(); //223蛇吃到东西后的操作(伸长) void ChangeBody(int a, int b); //245蛇的坐标变换,后一个复制前一个STRUCT,a,b为head之前坐标 /*全局变量 + 预处理:*/ typedef struct Snakes { int x; int y; struct Snakes* next; }snake; snake* head, * tail; struct Food { int x; int y; }food; char name[20]; int score = 0; char click = 1; int speed; int main() { system("color 3E"); welcome(); creategraph(); createfood(); if (ClickControl() == 0) return 0; return 0; } void welcome() { gotoxy(15, 10); printf( "); gotoxy(15, 20); printf(" "); gotoxy(20, 13); printf("WELCOME TO THE GAME:贪吃蛇"); gotoxy(14, 16); printf("请在英文输入法中操作,相反方向移动则直接游戏结束,wasd控制,p暂停"); gotoxy(20, 18); printf("你的游戏名(英文):"); scanf_s("%s", &name, 10); system("cls"); } void creategraph() { int i; for (i = 0; i < 58; i += 2)//打印上下边框 { gotoprint(i, 0); gotoprint(i, 26); } for (i = 1; i < 26; i++) { gotoprint(0, i); gotoprint(56, i); } gotoxy(63, 10); printf("你好, %s,你正在玩贪吃蛇", name); gotoxy(63, 15); printf("你的当前得分是:%d ", score); gotoxy(63, 20); head = (snake*)malloc(sizeof(snake)); head->x = 16; head->y = 15; //gotoprint(head->x, head->y); tail = (snake*)malloc(sizeof(snake)); snake* p = (snake*)malloc(sizeof(snake)); snake* q = (snake*)malloc(sizeof(snake)); p->x = 16; p->y = 16; q->x = 16; q->y = 17; head->next = p; p->next = q; q->next = tail; tail->next = NULL; } /**********************************************************/ void gotoxy(int x, int y) { COORD pos; HANDLE hOutput; pos.X = x; pos.Y = y; hOutput = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOutput, pos); } /**********************************************************/ void gotoprint(int x, int y) { gotoxy(x, y); printf(" "); } /**********************************************************/ void gotodelete(int x, int y) { gotoxy(x, y); printf(" "); } /**********************************************************/ void createfood() { srand((int)time(NULL)); lable: food.y = rand() % (25 - 1 + 1) + 1; food.x = rand() % (54 - 2 + 1) + 2; if (food.x % 2 != 0) { food.x = food.x + 1; } snake* judge = head; while (1) //遍历排除蛇身重复 { if (judge->next == NULL) break; if (food.x == judge->x && food.y == judge->y) { goto lable; } judge = judge->next; } gotoxy(food.x, food.y); printf("¥"); } /**********************************************************/ int ClickControl() { char c; while (1) { if (Judge() == 0) return 0; if (_kbhit()) { click = _getch(); } MovingBody(); Eatting(); } return 1; } /**********************************************************/ void MovingBody() { int count = 0; int a = head->x, b = head->y; snake* p = head; //通过先清空后打印实现动画效果 while (1) { if (p->next == NULL) break; gotodelete(p->x, p->y); count++; p = p->next; } switch (click) { case up: head->y -= 1; ChangeBody(a, b); break; case down: head->y += 1; ChangeBody(a, b); break; case left: head->x -= 2; ChangeBody(a, b); break; case right: head->x += 2; ChangeBody(a, b); break; case stop: break; } p = head; while (1) { if (p->next == NULL) break; gotoprint(p->x, p->y); p = p->next; } p = head; gotoxy(0, 28); if (count <= 10) speed = 150; else if (count > 10 && count <= 20) speed = 100; else if (count > 20 && count <= 40) speed = 50; else speed = 10; Sleep(speed); } /**********************************************************/ void Eatting() { if (head->x == food.x && head->y == food.y) { createfood(); snake* _new = (snake*)malloc(sizeof(snake)); snake* p; p = head; while (1) { if (p->next->next == NULL) break; p = p->next; } p->next = _new; _new->next = tail; score += 10; gotoxy(77, 15); printf("%d", score); } } /**********************************************************/ void ChangeBody(int a, int b) { snake* p = head->next; int mid1, mid2, _mid1, _mid2; mid1 = p->x; mid2 = p->y; while (1) { if (p->next->next == NULL) break; _mid1 = p->next->x; _mid2 = p->next->y; p->next->x = mid1; p->next->y = mid2; mid1 = _mid1; mid2 = _mid2; p = p->next; } p = head->next; //if (p->next!= NULL) { p->x = a; p->y = b; } } /**********************************************************/ int Judge() { if (head->x == 0 || head->x == 56 || head->y == 0 || head->y == 26) { Finish(); return 0; } snake* p = head->next; while (1) { if (p->next == NULL) break; if (head->x == p->x && head->y == p->y) { Finish(); char q; printf("是否继续?y/n"); q = getchar(); if (q == 'y') main(); else if (q == 'n') return 0; } p = p->next; } return 1; } /**********************************************************/ void Finish() { system("cls"); gotoxy(15, 10); printf("····································"); gotoxy(15, 20); printf("····································"); gotoxy(18, 14); printf("游戏结束 下次加油(•w•ଓ)=33"); gotoxy(20, 16); printf("最终得分: %d 挺不错的", score); gotoxy(18, 18); printf("还不错哦, 继续努力(ŏ ﹏ ŏ)"); gotoxy(0, 27); system("pause"); printf(""); }
...全文

相关推荐

Vue基于springboot的乡村生态旅游平台_k2864o48毕业设计源码数据库.zip

Vue基于springboot的乡村生态旅游平台_k2864o48毕业设计源码数据库

源码论文专家

Python3 datetime时区避坑指南

原生datetime.now()获取本地时间,不带时区属性,属于 naive时间,跨服务器比对会报错。带时区时间使用datetime.astimezone,强制绑定东八区时区。禁止手动加减8小时修改时差,夏令时更新会导致时间错误。时间计算:timedelta直接实现天数、小时增减,无需手动换算秒数。字符串解析使用strptime,格式化使用strftime,格式符号严格区分大小写,%Y四位年份、%y两位年份极易写错。线上时间异常大多源于时区不统一。 yc.ahsalar.com qsvsnks.yihucx.com tongjiang.xilaohan.com lq.aasmile.com xj.banutech.net

2601_97221268

前端开发基于history.js的HTML5与HTML4浏览器兼容方案:单页应用无刷新历史状态管理技术实现-jcbbroJ3l1792421687

内容概要:本文系统介绍了如何利用history.js实现单页应用(SPA)在HTML5c与HTML4浏览器间s草错发的无缝历史状态管理。通过封装原生History API并在不支持的浏览器中自动降级为哈希路由,history.js解决了因浏览器兼容性导致的后退按钮失效、URL混乱等问题。文章详细讲解了其核心机制,包括状态对象管理、自动模式切换(HTML5 pushState vs HTML4 哈希)、状态数据持久化以及针,对Safari、IE等浏\览器的兼容性修复方案,并提供了从入门到实战的完整示例,涵盖初始化、事,件监听、页面加载及性能优化技巧。;jcbbroJ3l1792421687 www.kfshiye.com www.wap.kfstjx.com www.kuaicai-mro.com lianyingjs.com www.kdd888.com

2601_97196180

MATLAB实现了约束感知混合水波和灰狼优化,用于作物规划。.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

海神之光

国央企如何通过数据驱动实现数字化转型目标?.docx

国央企如何通过数据驱动实现数字化转型目标?

BIZKEEN
评论
收藏 已收藏
分享
返回顶部
GuaGuaJinDie
C语言 70,039 成员 243,237 内容