贪吃蛇C语言

有趣的小游戏,实现关键点有光标移动,按键检测,状态转移,随机数生成等。欢迎讨论!
在这里插入图片描述

#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<conio.h>#define UP 'w'
#define DOWN 's'
#define LEFT 'a'
#define RIGHT 'd'
#define ESC 27
#define ENTER 13
#define WALLLENGTH 40
#define WALLWIDTH 15/*构造蛇*/
struct snake_tag {short x[100];//各点的横向坐标short y[100];//各点的纵向坐标short len;//长度short speed;//速度因子
}snake;/*光标移动函数*/
void gotoxy(short x, short y) {COORD coord = { x, y };SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}/*随机苹果*/
void apple_gen(int &applex, int &appley)
{
regen:srand(time(NULL));applex = rand() % (WALLLENGTH - 2) + 1;appley = rand() % (WALLWIDTH - 2) + 1;for (int i = 0; i < snake.len; i++){if (applex == snake.x[i] && appley == snake.y[i])goto regen;}
}/*方向键检测*/
char direction_key_capture()
{char key = '\0';if (!_kbhit())//_kbhit()可以检测键盘是否有输入,有返回非零值,无则返回零值{return NULL;//未按键}else{key = getch();if (key == UP || key == DOWN || key == LEFT || key == RIGHT)return key;else if (key == ESC)return ESC;elsereturn NULL;}
}/*蛇移动*/
void snake_move(char direction)
{//1.第二个点至蛇尾的各点坐标,最后一个点snake.x[snake.len]生成的为待判断点,不确定是否为蛇的一部分for (int k = snake.len; k > 0; k--){snake.x[k] = snake.x[k - 1];snake.y[k] = snake.y[k - 1];}//2.蛇首坐标switch (direction){case UP:snake.y[0]--; break;case DOWN:snake.y[0]++; break;case LEFT:snake.x[0]--; break;case RIGHT:snake.x[0]++; break;default:;}
}/*打印画面*/
void wall_display()
{for (int i = 0; i < WALLLENGTH; i++){for (int j = 0; j < WALLWIDTH; j++){gotoxy(i, j);if (i == 0 || i == WALLLENGTH - 1){if (i == 0 && j == 0)printf("┍");else if (i == 0 && j == WALLWIDTH - 1)printf("┕");else if (i == WALLLENGTH - 1 && j == 0)printf("┑");else if (i == WALLLENGTH - 1 && j == WALLWIDTH - 1)printf("┙");elseprintf("│");}else if (j == 0 || j == WALLWIDTH - 1){printf("━");}else;}}gotoxy(0, 0);
}
void snake_display()
{gotoxy(snake.x[0], snake.y[0]);printf("@");if (snake.x[snake.len] != 0 && snake.y[snake.len] != 0){gotoxy(snake.x[snake.len], snake.y[snake.len]);printf(" ");}gotoxy(0, 0);
}
void apple_display(int &applex, int &appley)
{gotoxy(applex, appley);printf("*");gotoxy(0, 0);
}/*菜单*/
int menu()
{gotoxy(0, WALLWIDTH);printf("按ESC键返回游戏,其他键退出...\n");printf("==贪吃蛇==\nby:雪沐osays\nQQ:1624784311\n");gotoxy(0, 0);char ch = getch();if (ch == ESC){return 1;}return 0;
}int main()
{
restart:system("cls");/*数据初始化*/snake.x[0] = WALLLENGTH / 2;snake.y[0] = WALLWIDTH / 2 + 1;snake.x[1] = WALLLENGTH / 2;snake.y[1] = WALLWIDTH / 2;snake.x[2] = WALLLENGTH / 2;snake.y[2] = WALLWIDTH / 2 - 1;snake.len = 3;snake.speed = 300;//越小越快char direction = DOWN;int applex, appley;apple_gen(applex, appley);/*画面初始化*/wall_display();for (int i = 0; i < snake.len; i++){gotoxy(snake.x[i], snake.y[i]);printf("@");}/*运行*/while (1){/*键入方向*/char directionKey = direction_key_capture();if (directionKey == ESC){//system("cls");if (menu() == 1){gotoxy(0, WALLWIDTH );printf("                                               \n                                     \n                                  \n                         \n");}else{system("cls");return 0;}}else if (directionKey == NULL){direction = direction;}else if ((directionKey ==UP&&direction==DOWN)||(directionKey == DOWN&&direction == UP)||(directionKey == LEFT&&direction == RIGHT)||(directionKey == RIGHT&&direction == LEFT)){direction = direction;}else{direction = directionKey;}/*移动蛇*/snake_move(direction);/*吃苹果判定*/if (snake.x[0] == applex&&snake.y[0] == appley){snake.len++;apple_gen(applex, appley);}/*失败判定*/for (int i = 1; i < snake.len; i++){if ((snake.x[0] == snake.x[i] && snake.y[0] == snake.y[i]) || snake.x[0] == 0 || snake.x[0] == WALLLENGTH - 1 || snake.y[0] == 0 || snake.y[0] == WALLWIDTH-1){gotoxy(WALLLENGTH / 2 - 4, WALLWIDTH / 2 - 1);printf("游戏结束\n");gotoxy(WALLLENGTH / 2 - 4, WALLWIDTH / 2);printf("分数:%d\n", (snake.len - 3) * 100);gotoxy(0, WALLWIDTH + 1);printf("是否重开?y/n\n");gotoxy(0, 0);char choice = getch();if (choice== 'y'||choice==ENTER)goto restart;elsesystem("cls");return 0;}}/*画面更新*/snake_display();apple_display(applex, appley);/*延时*/Sleep(snake.speed);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491970.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全球及美国首张无人机配送商业化“驾照”先后落地,国内还要多久?

来源&#xff1a;智能相对论&#xff08;aixdlun&#xff09;前不久&#xff0c;美国首张无人机配送“驾照”正式落地&#xff0c;获得者还是之前在澳大利亚拿下全球首张无人机商业飞行许可的谷歌。最早提出无人机配送的亚马逊被谷歌两次捷足先登&#xff0c;贝佐斯心里一定不好…

IBM的医疗AI为何失败

来源&#xff1a;陆志方科学网博客最近&#xff0c;看到一篇关于医疗AI的文章《IBM医疗AI宣告失败&#xff0c;率先入局却踏步不前》。1997年IBM深蓝战胜国际象棋世界冠军卡斯帕罗夫&#xff0c;名声大噪&#xff1b;2011年开始&#xff0c;IBM在医疗AI押上重注&#xff0c;此后…

机器学习加深了“知识”和“理解”之间的鸿沟

来源&#xff1a;36氪无法理解人工智能“黑箱”&#xff0c;人工智能就能帮我们理解世界吗&#xff1f;编者按&#xff1a;机器学习和互联网意味着海量数据和复杂的联系&#xff0c;同时也意味着人类无法理解的运行过程——人工智能的“黑箱”是近期学界热议的一个话题&#xf…

德国人工智能战略

来源&#xff1a;中国工业和信息化德国联邦政府为了进一步发展和应用人工智能&#xff0c;根据当前的人工智能战略&#xff0c;建立了一个整体的政策框架。首先&#xff0c;联邦政府考虑了人工智能技术的快速发展&#xff0c;以及由新人工智能技术驱动的全球生产和价值链变化。…

一文看懂70年的人工智能简史

来源&#xff1a;techjury【导读】如果从阿兰图灵1943年首次提出“图灵机”的概念算起&#xff0c;AI已经经历了86年的发展史。本文以信息图的形式回顾了这70多年的标志性事件&#xff0c;并归纳出AI发展的几个方向和技术应用&#xff0c;以及10大AI企业和国家排行榜。这篇AI“…

Django中间件与python日志模块 介绍

一、Django中间件 1.1 介绍 Django中的中间件是一个轻量级、底层的插件系统&#xff0c;介于request与response处理之间的一道处理过程&#xff08;用来处理特定业务的请求和响应&#xff09;。中间件的设计为开发者提供了一种无侵入式的开发方式&#xff0c;增强了Django框架…

无人系统自主性研究综述

来源&#xff1a;人机与认知实验室一、引言2012年7月&#xff0c;美国国防科学委员会发布了《自主性在国防部无人系统中的地位》&#xff0c;进一步指出自主能力是美军无人系统中的核心能力&#xff0c;分析了自主能力给无人机(UAV)、无人地面系统(UGS)、无人海上平台(UMV)和无…

一文看尽微软开发者大会 让AI和云驱动一切

来源 | 网易智能一年一度的微软开发者大会Build 2019在美国华盛顿州雷德蒙德拉开帷幕&#xff0c;微软公司CEO萨提亚纳德拉&#xff08;Satya Nadella&#xff09;介绍和发布了一系列全新技术&#xff0c;并在现场展示了以客户为中心的智能体验全新解决方案。微软此次发布的新功…

爬虫文档学习 xpath bs4 selenium scrapy...

爬虫 一、介绍 1、什么是爬虫 1.1 爬虫(Spider)的概念 爬虫用于爬取数据&#xff0c; 又称之为数据采集程序。 爬取的数据来源于网络&#xff0c;网络中的数据可以是由Web服务器&#xff08;Nginx/Apache&#xff09;、数据库服务器(MySQL、Redis)、索引库&#xff08;Ela…

用人工神经网络控制真实大脑,MIT的科学家做到了

来源&#xff1a;网络大数据三位研究者分别是 MIT 大脑与行为科学系主任 James DiCarlo、MIT 博士后 Pouya Bashivan 和 Kohitij Kar。相关论文发表在 5 月 2 日 Science 的网络版上。论文链接&#xff1a; http s://www.biorxiv.org/content/10.1101/461525v1研究人员表示&…

学习卫星菜单

学会坚持的自己写的底部中间菜单 转自http://www.cnblogs.com/persist-confident/p/4487386.html 看了hyman老师的视频&#xff0c;听起来有点迷糊&#xff0c;所以就想把实现卫星菜单的实现总结一下。长话短说&#xff0c;下面总结一下&#xff1a; 一、自定义ViewGroup1&…

Python 的垃圾回收回收机制(源码)

python内存管理及垃圾回收 1. 引用计数器 1.1 环状双向连表 refchain 在python程序中创建的任何对象都会放在refchain链表中&#xff0c;并且可以通过这个对象访问到上一个和下一个对象。 name 张三 age 18 hobby [美女,吃饭]内部会建立一些数据 -打包 C语言叫做结构体-…

未来五年人工智能将实现的五大突破

来源&#xff1a;资本实验室不论是可以和你对话的智能音箱&#xff0c;还是能够自己作画的虚拟艺术家&#xff1b;不论是能够帮助农民准确判断种植和施肥时间的农场管理系统&#xff0c;又或者是能够在演唱会现场快速识别罪犯的人脸识别程序&#xff0c;人工智能已经开始在各行…

python面试常问

一、Python基础部分 1. 数据类型 数字类型(Numbers)&#xff1a; 整数(int), 浮点数(float), 复数(complex) 布尔(Booleans)&#xff1a; True和False 字符串(Str)&#xff1a;Uniconde字符序列, 在引号内包含 列表(list)&#xff1a; 有序的值的序列 元组(Tuples)&#x…

springJDBC一对多关系,以及Java递归,jsp递归的实现

maven编译&#xff0c;springMVCspringspringJDBC框架。 要实现的功能是一个文件夹下&#xff0c;可能显示n个文件夹&#xff0c;每个文件夹下又可能显示n个文件夹。。。。 前台效果&#xff1a; controller中的方法如下&#xff1a; RequestMapping(value"/index",m…

未来全球15大热门研究方向出炉!

转自&#xff1a;科学网&#xff08;sciencenet-cas&#xff09;要点速览伦敦、纽约、新加坡、香港、巴黎、北京、东京、迪拜、上海、柏林、波士顿&#xff0c;这些国际性大都市在科技创新方面的表现如何&#xff1f;它们主要关注哪些研究方向&#xff1f;15大科技创新策源点&a…

Django-rest framework

Django-rest Framework 1. FBV CBV 1.1 开发模式 普通开发方式&#xff08;前后端放在一起写&#xff09;前后端分离 1.2 后端开发 为前端提供URL&#xff08;API/接口的开发&#xff09; 注&#xff1a;永远返回HttpResponse 1.3 Django FBV、CBV # FBV(function base …

常用的网络营销方法有哪些

索引擎营销 电子邮件营销 即时通讯营销 病毒式营销 BBS营销 博客营销 播客营销 RSS营销 SN营销 创意广告营销 知识型营销 事件营销 口碑营销 转载于:https://www.cnblogs.com/happyday56/p/4739488.html

AI产业链分布图曝光:1040个玩家,BAT率先步入应用

来源&#xff1a;网络大数据5月9日&#xff0c;在苏州举办的全球人工智能产品应用博览会上&#xff0c;《新一代人工智能发展年度报告(2018)》重磅发布。发布方是中国经济信息社与新一代人工智能产业技术创新战略联盟。报告相当于对2018年以来全球AI领域融资、国内AI企业分布、…

什么是混合云?

来源&#xff1a;光联集团混合云是使那些正常的进化措施看起来更酷&#xff0c;是IT前沿术语之一。亚马逊&#xff0c;谷歌和微软等云供应商倡导企业关闭内部数据中心并将所有基础架构迁移到云端&#xff0c;这就是“超融合”数据中心战略。1转移基础设施对于刚刚起步的公司而言…