C语言贪吃蛇小游戏演示和说明

C语言贪吃蛇小游戏演示和说明


设计贪吃蛇游戏的主要目的是让大家夯实C语言基础,训练编程思维,培养解决问题的思路,领略多姿多彩的C语言。

游戏开始后,会在中间位置出现一条只有三个节点的贪吃蛇,并随机出现一个食物,如下图所示:


图1:游戏初始化


按下键盘上的任意一个键,贪吃蛇开始移动。和大部分游戏一样,你可以通过W、A、S、D四个键来控制移动方向,如下图所示:


图2:游戏进行中


当贪吃蛇出界或者撞到自己时,游戏结束,如下图所示:


图3:游戏结束

这个版本的贪吃蛇将有以下特点:

  • 使用控制台(终端)
  • ASCII字符表示蛇和食物
  • 方向控制(W, A, S, D)
  • 简单的游戏结束逻辑(蛇撞墙或撞到自己)

c
#include <stdio.h>  
#include <stdlib.h>  
#include <conio.h> // 注意:这是特定于某些编译器的,如Borland C或Turbo C  
#include <windows.h> // 用于Sleep函数  #define WIDTH 20  
#define HEIGHT 10  
#define SNAKE_LEN 100  typedef struct {  int x, y;  
} Point;  Point snake[SNAKE_LEN], food;  
int snakeSize = 3;  
int direction = 2; // 0: left, 1: up, 2: right, 3: down  
int gameOver = 0;  void initialize() {  for (int i = 0; i < WIDTH + 2; i++)  printf("#");  printf("\n");  for (int i = 0; i < HEIGHT; i++) {  for (int j = 0; j < WIDTH; j++)  printf(" ");  printf("#\n");  }  for (int i = 0; i < 3; i++) {  snake[i].x = WIDTH / 2 + i;  snake[i].y = HEIGHT / 2;  }  food.x = rand() % (WIDTH - 2) + 1;  food.y = rand() % (HEIGHT - 1) + 1;  while (snake[0].x == food.x && snake[0].y == food.y) {  food.x = rand() % (WIDTH - 2) + 1;  food.y = rand() % (HEIGHT - 1) + 1;  }  draw();  
}  void draw() {  system("cls");  for (int i = 0; i < WIDTH + 2; i++)  printf("#");  printf("\n");  for (int i = 0; i < HEIGHT; i++) {  for (int j = 0; j < WIDTH; j++) {  if (j == 0 || j == WIDTH - 1)  printf("#");  else if (i == snake[0].y && j == snake[0].x)  printf("O");  else {  int eat = 0;  for (int k = 0; k < snakeSize; k++)  if (snake[k].x == j && snake[k].y == i) {  printf("o");  eat = 1;  break;  }  if (!eat && i == food.y && j == food.x)  printf("F");  else  printf(" ");  }  }  printf("#\n");  }  for (int i = 0; i < WIDTH + 2; i++)  printf("#");  printf("\n");  
}  void input() {  if (_kbhit()) {  switch (_getch()) {  case 'w':  case 'W':  if (direction != 1) direction = 0;  break;  case 's':  case 'S':  if (direction != 0) direction = 1;  break;  case 'a':  case 'A':  if (direction != 3) direction = 2;  break;  case 'd':  case 'D':  if (direction != 2) direction = 3;  break;  }  }  
}  void move() {  Point head = snake[0];  switch (direction) {  case 0: head.x--; break;  case 1: head.y--; break;  case 2: head.x++; break;  case 3: head.y++; break;  }  // Check collision  if (head.x >= WIDTH || head.x < 0 || head.y >= HEIGHT || head.y < 0)  gameOver = 1;  for (int i = 1; i < snakeSize; i++)  if (snake[i].x == head.x && snake[i].y == head.y)  gameOver = 1;  for (int i = snakeSize - 1; i > 0; i--)  snake[i] = snake[i - 1];  snake[0] = head;  if (head.x == food.x && head.y == food.y) {  food.x = rand() % (WIDTH - 2) + 1;  food.y = rand() % (HEIGHT - 1) + 1;  snakeSize++;  while (snake[0].x == food.x && snake[0].y == food.y) {  food.x = rand() % (WIDTH - 2) + 1;  food.y = rand() % (HEIGHT - 1) + 1;  }  }  
}  int main() {  initialize();  while (!gameOver) {  input();  move();  draw();  Sleep(100); // 控制游戏速度  }  printf("Game Over!\n");  return 0;  
}

注意:

代码中使用了_kbhit()和_getch()函数,这些函数是特定于某些编译器的(如Borland C或Turbo C),在标准C库中并不包含。如果你使用的是GCC或其他不支持这些函数的编译器,你可能需要寻找替代方法(如使用curses库等)。
Sleep()函数用于Windows平台,如果你在其他平台上编译,可能需要替换为相应的函数(如usleep()在Unix/Linux上)。
 

演示程序百度网盘下载地址:百度网盘 请输入提取码  密码:u5ee

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

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

相关文章

数据结构练习题————(二叉树)——考前必备合集!

今天在牛客网和力扣上带来了数据结构中二叉树的进阶练习题 1.二叉搜索树与双向链表———二叉搜索树与双向链表_牛客题霸_牛客网 (nowcoder.com) 2.二叉树遍历————二叉树遍历_牛客题霸_牛客网 (nowcoder.com) 3.二叉树的层序遍历————102. 二叉树的层序遍历 - 力扣&am…

寿司检测系统源码分享

寿司检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

一文了解高速工业相机

超高速相机是工业相机的一种&#xff0c;一般高速相机指的是数字工业相机&#xff0c;其一般安装在机器流水线上代替人眼来做测量和判断&#xff0c;通过数字图像摄取目标转换成图像信号&#xff0c;传送给专用的图像处理系统。 超高速工业相机的采集速率> 50Gb/s&#xff…

window系统DockerDesktop 部署windows容器

目录 参考文献1、安装Docker Desktop1.1 下载安装包1.2 安装教程1.3 异常解决 2、安装windows容器2.1 先启动DockerDesktop 软件界面2.2 检查docker版本2.3 拉取windows镜像2.4 网盘下载windows镜像 参考文献 windows容器docker中文官网 Docker: windows下跑windows镜像 1、安…

软件测试标准流程(思维导图版)

一套标准的流程在实际工作落地并执行起来&#xff0c;针对管理可起到很好的作用。 针对效率可在工作中不断的执行&#xff0c;执行后不断的进行优化&#xff0c;再次执行&#xff0c;在不断的工作实践中慢慢完善最终适用于整个团队。 这就是标准流程的作用与实际的好处&#…

华为申请鸿蒙甄选、鸿蒙优选商标,加词的注意!

近日华为在35类广告销售上申请鸿蒙智选、鸿蒙优选、鸿蒙精品&#xff0c;鸿蒙甄选等商标&#xff0c;后面所加的词智选、优选、精品、甄选等基本上是属于通用词。 这样在35类拿到鸿蒙通用词商标&#xff0c;需要先拿到“鸿蒙“商标&#xff0c;经普推知产商标老杨检索发现&…

【Linux】yum、vim、gcc使用(超详细)

目录 yum 安装软件 卸载软件 查看安装包 安装一下好玩的命令 vim vim基本操作 模式切换 命令集 vim批量注释 vim配置 gcc 函数库 小知识点&#xff1a; Linux中常见的软件安装方式 --------- 下载&&安装 a、yum/apt b、rpm安装包安装 c、源码安装 y…

周家庄智慧旅游小程序

项目概述 周家庄智慧旅游小程序将通过数字化手段提升游客的旅游体验&#xff0c;依托周家庄的自然与文化资源&#xff0c;打造智慧旅游新模式。该小程序将结合虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;和人工智能等技术&#xff0c;提供丰富的…

vue嵌套路由刷新页面空白问题

问题描述 在vue项目开发中遇到这样一个问题&#xff0c;在history模式下通过页面点击路由跳转可以打开页面&#xff0c;但是在当前页面刷新就空白了&#xff0c;如下&#xff1a; 点击路由跳转页面是有的 刷新页面就空白 代码 {path: "/home",name: "home&qu…

SQL常用数据过滤 - EXISTS运算符

SQL查询中的EXISTS运算符用于检查查询子句是否存在满足特定条件的记录&#xff0c;如果有一条或者多条记录存在&#xff0c;则返回True&#xff0c;否则返回False。 语法结构 SELECT column_name(s)FROM table_nameWHERE EXISTS(SELECT column_name FROM table_name WHERE co…

React学习笔记(2.0)

React事件绑定 语法&#xff1a;在对应标签上书写on事件&#xff08;比如onClick,onChange&#xff09;&#xff0c;注意和原生的事件区分&#xff0c;React的事件首字母要大写。 const handleChange(e:any)>{console.log(e);console.log(change事件触发);// e不是原生事件…

Acwing 最小生成树

最小生成树 最小生成树:由n个节点&#xff0c;和n-1条边构成的无向图被称为G的一棵生成树&#xff0c;在G的所有生成树中&#xff0c;边的权值之和最小的生成树&#xff0c;被称为G的最小生成树。&#xff08;换句话说就是用最小的代价把n个点都连起来&#xff09; Prim 算法…

初识Jenkins持续集成系统

随着软件开发复杂度的不断提高&#xff0c;团队成员之间如何更好地协同工作以确保软件开发的质量&#xff0c;已经慢慢成为开发过程中不可回避的问题。Jenkins 自动化部署可以解决集成、测试、部署等重复性的工作&#xff0c;工具集成的效率明显高于人工操作;并且持续集成可以更…

Java线程池详解

目录 前言 线程池概述 线程池的实现 线程池的构造 拒绝策略 任务队列 线程池的工作原理 线程池的监控 Executors线程池工厂 自定义线程池 使用线程池的好处 应用场景 总结 本文详细探讨了线程池在并发编程领域的应用&#xff0c;介绍了ThreadPoolExecutor的核心组…

MySQL的登录、访问、退出

一、登录&#xff1a; 访问MySQL服务器对应的命令&#xff1a;mysql.exe ,位置&#xff1a;C:\Program Files\MySQL\MySQL Server 8.0\bin &#xff08;mysql.exe需要带参数执行&#xff0c;所以直接在图形界面下执行该命令会自动结束&#xff09; 执行mysql.exe命令的时候出…

2024年9月26日历史上的今天大事件早读

1620年9月26日 大明皇帝朱常洛驾崩 1815年9月26日 俄、普、奥三国在巴黎发表缔结“神圣同盟” 1841年9月26日 清代思想家、诗人龚自珍逝世 1849年9月26日 “生理学之父”巴甫洛夫诞生 1909年9月26日 云南陆军讲武堂创办 1953年9月26日 画家徐悲鸿逝世 1980年9月26日 国际…

VulnHub-Narak靶机笔记

Narak靶机笔记 概述 Narak是一台Vulnhub的靶机&#xff0c;其中有简单的tftp和webdav的利用&#xff0c;以及motd文件的一些知识 靶机地址&#xff1a; https://pan.baidu.com/s/1PbPrGJQHxsvGYrAN1k1New?pwda7kv 提取码: a7kv 当然你也可以去Vulnhub官网下载 一、nmap扫…

ChatGPT高级语音助手正式上线!OpenAI:50多种语言、9种声线可选

①OpenAI终于要面向其所有付费用户开放ChatGPT的类人高级人工智能&#xff08;AI&#xff09;语音助手功能——“高级语音模式”&#xff08;AVM&#xff09;&#xff1b; ②所有付费订阅ChatGPT Plus和Team计划的用户&#xff0c;都将可以使用新的AVM功能&#xff0c;不过该模…

Tomcat后台弱口令部署war包

1.环境搭建 cd /vulhub/tomcat/tomcat8 docker-compose up -d 一键启动容器 2.访问靶场 点击Manager App tomcat8的默认用户名和密码都是tomcat进行登录 3.制作war包 先写一个js的一句话木马 然后压缩成zip压缩包 最后修改后缀名为war 4.在网站后台上传war文件 上传war文件…

功能测试详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、测试项目启动与研读需求文档 &#xff08;一&#xff09; 组建测试团队 1、测试团队中的角色 2、测试团队的基本责任 尽早地发现软件程序、系统或产品中所…