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语言基础,训练编程思维,培养解决问题的思路,领略多姿多彩的C语言。 游戏开始后,会在中间位置出现一条只有三个节点的贪吃蛇,并随机出现一个食物&am…...
C++三大特性——继承性(超万字详解)
目录 前言 一、封装 1. 封装(Encapsulation) 二、继承 1. 构造函数的调用顺序 原理: 2. 析构函数的调用顺序 原理: 3、派生类的隐藏 1. 成员函数隐藏 2. 成员变量隐藏 3. 基类函数的重载隐藏 三、多重继承问题 1. 构…...

electron使用npm install出现下载失败的问题
我在使用electron进行下载时,经常出现一个错误。 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 滑到下面,找到一…...

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做用户实验,需要将用户实验的数据记录到PICO头盔的存储空间里,记录一下整个过程 流程 1.开启写入权限 首先开启写入权限:Unity->Edit->Player->安卓小机器人->Other Settings->Configuration->Wri…...

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

pick你的第一个人形机器人——青龙强化学习环境测试
文章目录 一、环境配置二、开始训练三、训练成果 最近感受到的大趋势是具身智能,强化学习,模仿学习做人形机器人,这个赛道很火,颇有前些年全力投入做自动驾驶的架势,正好最近用强化学习解决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 做项目的思路 这张网很明显是一个小综合,设计到我们的无线交换,路由…...

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

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模块用来使用正则表达式,正则就是用一系…...
GO Fsnotify学习与使用
文章目录 说明demo 说明 fsnotify 是 Go 的一个文件系统通知库,可以监视文件或目录的变化。基本用法如下: 安装库: go get github.com/fsnotify/fsnotify创建 watcher: watcher, err : fsnotify.NewWatcher() if err ! nil {log.…...
除了递归算法,要如何优化实现文件搜索功能
大家好,我是 V 哥,今天的文章来聊一聊 Java实现文件搜索功能,并且比较递归算法、迭代方式和Memoization技术的优缺点。 以下是一个使用 Java 实现的文件搜索功能,它会在指定目录及其子目录中搜索包含特定关键字的文件。此实现使用…...

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

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

CSS中的字体样式、文本样式、列表样式以及背景和渐变
一、字体样式和文本样式 1.span标签 span标签的作用:能让某几个文字或者是词语凸显出来 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-…...
教你如何在Java中操作Redis
Redis的Java客户端 Redis 的 Java 客户端很多,常用的几种: Jedis:基于 Java 的 Redis 客户端,提供了 Redis 命令的全面支持。Lettuce:高性能的 Java 客户端库,用于与 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) 三、进程等待 四、进程替换 前言 提示:这里可以添加本文要记录的大概内容: 前面我们认识了进程,现在让我们认识几个进程的接口 提示:以下是本篇文章正文内容…...

FortiOS SSL VPN 用户访问权限配置
简介 使用不同用户组或用户登录 SSL VPN 隧道模式后,可配置不同的访问权限。 本文介绍为不同用户组分配不同访问权限的配置方法。 相关组件 FortiGate:FortiOS v6.4.14 build2093 (GA) 客户端:Windows11,安装 FortiClient VPN 7.…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...