帮我用C语言写一个可以玩贪吃蛇的程序

时间: 2023-08-28 08:08:50 浏览: 61
好的,下面是一个基于控制台的简单贪吃蛇游戏的代码,使用C语言编写。 ```c #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <windows.h> #define WIDTH 20 // 地图宽度 #define HEIGHT 20 // 地图高度 #define SNAKE_LENGTH 3 // 初始蛇长 #define SPEED 100 // 游戏速度 int map[WIDTH][HEIGHT]; // 地图 int snake[SNAKE_LENGTH][2]; // 蛇的身体数组 int direction = 'd'; // 蛇的方向 int score = 0; // 得分 // 初始化地图 void init_map() { int i, j; for (i = 0; i < WIDTH; i++) { for (j = 0; j < HEIGHT; j++) { if (i == 0 || j == 0 || i == WIDTH - 1 || j == HEIGHT - 1) map[i][j] = 1; // 周围一圈为墙 else map[i][j] = 0; // 其他为可行走区域 } } } // 初始化蛇 void init_snake() { int i, j; snake[0][0] = WIDTH / 2; snake[0][1] = HEIGHT / 2; for (i = 1; i < SNAKE_LENGTH; i++) { snake[i][0] = snake[i - 1][0] - 1; snake[i][1] = snake[i - 1][1]; } } // 初始化食物 void init_food() { int x, y; do { x = rand() % (WIDTH - 2) + 1; y = rand() % (HEIGHT - 2) + 1; } while (map[x][y] == 2); // 如果生成的位置已经是蛇或墙,则重新生成 map[x][y] = 2; // 食物为2 } // 显示地图 void display_map() { system("cls"); // 清屏 int i, j; for (i = 0; i < WIDTH; i++) { for (j = 0; j < HEIGHT; j++) { if (map[i][j] == 0) printf(" "); else if (map[i][j] == 1) printf("#"); else if (map[i][j] == 2) printf("*"); int k; for (k = 0; k < SNAKE_LENGTH; k++) { if (snake[k][0] == i && snake[k][1] == j) { printf("o"); break; } } } printf("\n"); } printf("Score: %d\n", score); } // 更新蛇的位置 void update_snake() { int i; for (i = SNAKE_LENGTH - 1; i > 0; i--) { snake[i][0] = snake[i - 1][0]; snake[i][1] = snake[i - 1][1]; } switch (direction) { case 'w': snake[0][0]--; break; // 上 case 's': snake[0][0]++; break; // 下 case 'a': snake[0][1]--; break; // 左 case 'd': snake[0][1]++; break; // 右 } } // 判断是否吃到食物 void check_food() { if (map[snake[0][0]][snake[0][1]] == 2) { score++; map[snake[0][0]][snake[0][1]] = 0; // 清空食物 SNAKE_LENGTH++; snake[SNAKE_LENGTH - 1][0] = snake[SNAKE_LENGTH - 2][0]; snake[SNAKE_LENGTH - 1][1] = snake[SNAKE_LENGTH - 2][1]; init_food(); } } // 判断是否撞墙或撞到自己 int check_crash() { if (map[snake[0][0]][snake[0][1]] == 1) // 撞墙 return 1; int i; for (i = 1; i < SNAKE_LENGTH; i++) { if (snake[i][0] == snake[0][0] && snake[i][1] == snake[0][1]) // 撞到自己 return 1; } return 0; } int main() { init_map(); init_snake(); init_food(); while (1) { display_map(); update_snake(); check_food(); if (check_crash()) { printf("Game Over!\n"); break; } Sleep(SPEED); if (_kbhit()) { // 如果有键盘输入 char c = _getch(); switch (c) { case 'w': case 's': case 'a': case 'd': if (abs(c - direction) != 2) // 判断是否掉头 direction = c; break; } } } return 0; } ``` 该程序基于控制台,使用方向键控制蛇的运动方向,吃到食物会增加得分和蛇的长度,撞墙或撞到自己会游戏结束。

相关推荐

最新推荐

recommend-type

C语言课程设计报告——贪吃蛇源程序.doc

C 语 言 课 程 设 计(小游戏贪吃蛇的程序设计报告) 目 录 一:概述 1:研究背景及意义 2:设计的任务与需要知识点 3:具体完成设计容 二:需求分析 1:功能需求 2:操作方法 三:总体设计 1:模块划分 2:数据结构...
recommend-type

计算机专业毕业设计范例845篇jsp2118基于Web停车场管理系统的设计与实现_Servlet_MySql演示录像.rar

博主给大家详细整理了计算机毕业设计最新项目,对项目有任何疑问(部署跟文档),都可以问博主哦~ 一、JavaWeb管理系统毕设项目【计算机毕设选题】计算机毕业设计选题,500个热门选题推荐,更多作品展示 计算机毕业设计|PHP毕业设计|JSP毕业程序设计|Android毕业设计|Python设计论文|微信小程序设计
recommend-type

Windows 10 平台 FFmpeg 开发环境搭建 博客资源

【FFmpeg】Windows 10 平台 FFmpeg 开发环境搭建 ④ ( FFmpeg 开发库内容说明 | 创建并配置 FFmpeg 项目 | 拷贝 DLL 动态库到 SysWOW64 目录 ) https://hanshuliang.blog.csdn.net/article/details/139172564 博客资源 一、FFmpeg 开发库 1、FFmpeg 开发库编译 2、FFmpeg 开发库内容说明 二、创建并配置 FFmpeg 项目 1、拷贝 dll 动态库到 C:\Windows\SysWOW64 目录 - 必须操作 特别关注 2、创建 Qt 项目 - C 语言程序 3、配置 FFmpeg 开发库 - C 语言项目 4、创建并配置 FFmpeg 开发库 - C++ 项目
recommend-type

基于 Spring Cloud 、Spring Boot、 OAuth2 的 RBAC 企业快速开发平台

基于 Spring Cloud 、Spring Boot、 OAuth2 的 RBAC 企业快速开发平台, 同时支持微服务架构和单体架构。提供对 Spring Authorization Server 生产级实践,支持多种安全授权模式。提供对常见容器化方案支持 Kubernetes、Rancher2 、Kubesphere、EDAS、SAE 支持
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

深入了解MATLAB开根号的最新研究和应用:获取开根号领域的最新动态

![matlab开根号](https://www.mathworks.com/discovery/image-segmentation/_jcr_content/mainParsys3/discoverysubsection_1185333930/mainParsys3/image_copy.adapt.full.medium.jpg/1712813808277.jpg) # 1. MATLAB开根号的理论基础 开根号运算在数学和科学计算中无处不在。在MATLAB中,开根号可以通过多种函数实现,包括`sqrt()`和`nthroot()`。`sqrt()`函数用于计算正实数的平方根,而`nt
recommend-type

react的函数组件的使用

React 的函数组件是一种简单的组件类型,用于定义无状态或者只读组件。 它们通常接受一个 props 对象作为参数并返回一个 React 元素。 函数组件的优点是代码简洁、易于测试和重用,并且它们使 React 应用程序的性能更加出色。 您可以使用函数组件来呈现简单的 UI 组件,例如按钮、菜单、标签或其他部件。 您还可以将它们与 React 中的其他组件类型(如类组件或 Hooks)结合使用,以实现更复杂的 UI 交互和功能。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依