当前位置: 首页 > news >正文

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

相关文章:

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

C语言贪吃蛇小游戏演示和说明 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础&#xff0c;训练编程思维&#xff0c;培养解决问题的思路&#xff0c;领略多姿多彩的C语言。 游戏开始后&#xff0c;会在中间位置出现一条只有三个节点的贪吃蛇&#xff0c;并随机出现一个食物&am…...

C++三大特性——继承性(超万字详解)

目录 前言 一、封装 1. 封装&#xff08;Encapsulation&#xff09; 二、继承 1. 构造函数的调用顺序 原理&#xff1a; 2. 析构函数的调用顺序 原理&#xff1a; 3、派生类的隐藏 1. 成员函数隐藏 2. 成员变量隐藏 3. 基类函数的重载隐藏 三、多重继承问题 1. 构…...

electron使用npm install出现下载失败的问题

我在使用electron进行下载时&#xff0c;经常出现一个错误。 HTTPError: Response code 404 (Not Found) for https://registry.npmmirror.com/v21.4.4/electron-v21.4.4-win32-x64.zip 这个时候需要修改一些npm的配置。使用命令npm config list -ls 滑到下面&#xff0c;找到一…...

HT513 2.8W I2S 输入单声道D类音频功率放大器

1 特性 ● 电源供电 PVDD 2.5-6.5V; DVDD/AVDD 3.3V ● 灵活的音频输入: I2S,LJ, RJ TDM 输入 8,16,32,44.1,48,88.2,96,192kHz 采样频率输出功率: 1.40W(PVDD3.6V,RL4Ω,THDN10%) 2.80W(PVDD5.0V,RL4Ω,THDN10%) 4.70W(PVDD6.5V,RL4Ω,THDN10%) ● THDN0.08%(Po1W, …...

[PICO VR]Unity如何往PICO VR眼镜里写持久化数据txt/json文本

前言 最近在用PICO VR做用户实验&#xff0c;需要将用户实验的数据记录到PICO头盔的存储空间里&#xff0c;记录一下整个过程 流程 1.开启写入权限 首先开启写入权限&#xff1a;Unity->Edit->Player->安卓小机器人->Other Settings->Configuration->Wri…...

zico2打靶记录

一、环境搭建 下载地址&#xff1a;https://download.vulnhub.com/zico/zico2.ova 直接双击下载的.ova文件即可在VMware中打开 设置好保存路径后在虚拟机的设置中删除仅主机这个网卡 然后启动靶机 二、信息收集 扫描靶机ip arp-scan -l 扫描一下开放的端口 nmap -p- -sV…...

pick你的第一个人形机器人——青龙强化学习环境测试

文章目录 一、环境配置二、开始训练三、训练成果 最近感受到的大趋势是具身智能&#xff0c;强化学习&#xff0c;模仿学习做人形机器人&#xff0c;这个赛道很火&#xff0c;颇有前些年全力投入做自动驾驶的架势&#xff0c;正好最近用强化学习解决POMDP问题接触到了强化学习&…...

了解主机及进程资源占用情况、性能情况、性能瓶颈,TOP命令输出解释

列表前的字段解释 字段通俗解释top - 03:08:50 up 19:36当前时间是 03:08:50,系统已经运行了 19 小时 36 分钟1 user当前有 1 个用户登录使用系统load average: 0.00, 0.02, 0.00系统在过去 1 分钟、5 分钟和 15 分钟内平均的工作繁忙程度,数值越大表示越忙 对于一个 x个核的…...

计算机网络-小型综合网络的搭建涉及到无线路由交换安全

目录 1 拓扑架构 2 做项目的思路 3 做配置 3.1先做核心交换 3.2 防火墙的配置 4 ac 和ap 的配置 4.1 ac上配置安全的东西 5.1 测试​编辑 1 拓扑架构 要求看上面的图 2 做项目的思路 这张网很明显是一个小综合&#xff0c;设计到我们的无线交换&#xff0c;路由…...

CleanClip For Mac 強大的剪貼簿助手Paste替代工具 v2.2.1

软件介绍&#xff1a; CleanClip是一款专为Mac设计的强大剪贴板管理工具&#xff0c;旨在提升用户的工作效率和生产力。这款应用完全采用原生Swift编写&#xff0c;为Mac用户提供了流畅、快速且直观的使用体验。CleanClip不仅支持文本内容的管理&#xff0c;还能处理图片、文件…...

python全栈学习记录(十八)re、os和sys、subprocess

re、os和sys、subprocess 文章目录 re、os和sys、subprocess一、re1.正则字符2.正则表达式的使用3.group的使用4.贪婪匹配与惰性匹配5.其他注意事项 二、os和sys1.os2.sys 三、subprocess四、打印进度条 一、re python中的re模块用来使用正则表达式&#xff0c;正则就是用一系…...

GO Fsnotify学习与使用

文章目录 说明demo 说明 fsnotify 是 Go 的一个文件系统通知库&#xff0c;可以监视文件或目录的变化。基本用法如下&#xff1a; 安装库&#xff1a; go get github.com/fsnotify/fsnotify创建 watcher&#xff1a; watcher, err : fsnotify.NewWatcher() if err ! nil {log.…...

除了递归算法,要如何优化实现文件搜索功能

大家好&#xff0c;我是 V 哥&#xff0c;今天的文章来聊一聊 Java实现文件搜索功能&#xff0c;并且比较递归算法、迭代方式和Memoization技术的优缺点。 以下是一个使用 Java 实现的文件搜索功能&#xff0c;它会在指定目录及其子目录中搜索包含特定关键字的文件。此实现使用…...

【AI算法岗面试八股面经【超全整理】——NLP】

AI算法岗面试八股面经【超全整理】 概率论【AI算法岗面试八股面经【超全整理】——概率论】信息论【AI算法岗面试八股面经【超全整理】——信息论】机器学习【AI算法岗面试八股面经【超全整理】——机器学习】深度学习【AI算法岗面试八股面经【超全整理】——深度学习】NLP【A…...

Unity 设计模式 之 创建型模式 -【单例模式】【原型模式】 【建造者模式】

Unity 设计模式 之 创建型模式 -【单例模式】【原型模式】 【建造者模式】 目录 Unity 设计模式 之 创建型模式 -【单例模式】【原型模式】 【建造者模式】 一、简单介绍 二、单例模式 (Singleton Pattern) 1、什么时候使用单例模式 2、单例模式的好处 3、使用单例模式的…...

CSS中的字体样式、文本样式、列表样式以及背景和渐变

一、字体样式和文本样式 1.span标签 span标签的作用&#xff1a;能让某几个文字或者是词语凸显出来 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-…...

教你如何在Java中操作Redis

Redis的Java客户端 Redis 的 Java 客户端很多&#xff0c;常用的几种&#xff1a; Jedis&#xff1a;基于 Java 的 Redis 客户端&#xff0c;提供了 Redis 命令的全面支持。Lettuce&#xff1a;高性能的 Java 客户端库&#xff0c;用于与 Redis 数据库进行交互。它支持同步、…...

nsight-system教程

一 安装 参考 nsight-compute使用教程-CSDN博客https://blog.csdn.net/youzjuer/article/details/142549332 二 使用 nsys profile -t cuda,nvtx --force-overwrite true -o xxxx python xxx.py xxxx表示生成文档的名字 如果是cuda c 则 python xxx.py替换为./xxx即可 这…...

进程的那些事--进程控制

目录 前言 一、创建进程 二、退出进程 void exit (int retval) 三、进程等待 四、进程替换 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 前面我们认识了进程&#xff0c;现在让我们认识几个进程的接口 提示&#xff1a;以下是本篇文章正文内容…...

FortiOS SSL VPN 用户访问权限配置

简介 使用不同用户组或用户登录 SSL VPN 隧道模式后&#xff0c;可配置不同的访问权限。 本文介绍为不同用户组分配不同访问权限的配置方法。 相关组件 FortiGate&#xff1a;FortiOS v6.4.14 build2093 (GA) 客户端&#xff1a;Windows11&#xff0c;安装 FortiClient VPN 7.…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...

【多线程初阶】单例模式 指令重排序问题

文章目录 1.单例模式1)饿汉模式2)懒汉模式①.单线程版本②.多线程版本 2.分析单例模式里的线程安全问题1)饿汉模式2)懒汉模式懒汉模式是如何出现线程安全问题的 3.解决问题进一步优化加锁导致的执行效率优化预防内存可见性问题 4.解决指令重排序问题 1.单例模式 单例模式确保某…...