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

用C++打造经典小游戏:从猜拳到扫雷的实战指南

1. 为什么选择C开发经典小游戏很多初学者问我为什么推荐用C来开发小游戏而不是Python或者JavaScript这个问题我十年前刚开始学编程时也思考过。经过多年实战我发现C有几个不可替代的优势首先是性能C直接编译成机器码运行效率极高其次是内存控制能力这对游戏开发至关重要最重要的是C的面向对象特性能让游戏代码结构更清晰。记得我第一次用C写石头剪刀布游戏时光是随机数生成就折腾了半天。后来才明白游戏开发中最基础的功能往往最能锻炼编程思维。比如用rand()函数生成随机数时如果不加srand(time(0))初始化每次运行程序电脑都会出同样的拳这让我深刻理解了随机数种子的重要性。2. 猜拳游戏从零开始实现2.1 游戏逻辑设计猜拳游戏的核心逻辑其实就三点玩家输入、电脑随机出拳、胜负判断。我建议新手先用纸笔画出流程图把石头赢剪刀、剪刀赢布、布赢石头这些规则理清楚。在实际编码时最常遇到的坑就是忘记处理平局的情况。下面这个改进版的代码增加了输入验证和更友好的交互#include iostream #include cstdlib #include ctime #include string using namespace std; // 转换数字为文字描述 string getChoiceName(int choice) { switch(choice) { case 1: return ✌️ 剪刀; case 2: return ✊ 石头; case 3: return ✋ 布; default: return 无效选择; } } int main() { srand(time(0)); int playerWins 0, computerWins 0; cout 猜拳游戏 endl; cout 1.剪刀 2.石头 3.布 (0退出) endl; while(true) { int playerChoice; cout \n你的选择; cin playerChoice; if(playerChoice 0) break; if(playerChoice 1 || playerChoice 3) { cout 请输入1-3的数字 endl; continue; } int computerChoice rand() % 3 1; cout 你出 getChoiceName(playerChoice) endl; cout 电脑出 getChoiceName(computerChoice) endl; // 胜负判断 int result (playerChoice - computerChoice 3) % 3; if(result 0) { cout 平局 endl; } else if(result 1) { cout 你赢了 endl; playerWins; } else { cout 你输了 endl; computerWins; } cout 当前比分 - 玩家 playerWins 电脑 computerWins endl; } cout 游戏结束最终比分 playerWins : computerWins endl; return 0; }2.2 常见问题排查新手最容易犯的错误有三个一是忘记初始化随机数种子导致每次运行结果相同二是没有处理非法输入导致程序崩溃三是胜负判断逻辑写得太复杂。我建议使用模运算来判断胜负代码会更简洁。调试时可以加个临时变量打印中间结果cout 调试信息玩家 playerChoice 电脑 computerChoice 差值 (playerChoice - computerChoice) endl;3. 扫雷游戏二维数组实战3.1 游戏板数据结构设计扫雷比猜拳复杂得多核心在于如何用二维数组表示游戏板。我习惯用三个二维数组一个存地雷位置一个存显示状态一个记录是否访问过。这种设计虽然占用内存多点但逻辑更清晰。初始化地雷时要注意避免重复放置。我推荐使用Fisher-Yates洗牌算法比随机放置更高效void placeMines(vectorvectorchar board) { // 创建所有可能的位置 vectorpairint,int positions; for(int i0; iBOARD_SIZE; i) { for(int j0; jBOARD_SIZE; j) { positions.emplace_back(i,j); } } // 随机打乱 for(int i0; iNUM_MINES; i) { int j rand() % (positions.size()-i) i; swap(positions[i], positions[j]); board[positions[i].first][positions[i].second] MINE_SYMBOL; } }3.2 递归揭示算法实现扫雷最精彩的部分是点击空白格子时的区域展开效果。这需要递归算法void revealArea(vectorvectorchar board, int x, int y) { // 边界检查 if(x0 || xBOARD_SIZE || y0 || yBOARD_SIZE) return; // 已揭示或标记的格子跳过 if(board[x][y] ! HIDDEN_SYMBOL) return; // 计算周围地雷数 int mines countAdjacentMines(board, x, y); if(mines 0) { board[x][y] 0 mines; } else { board[x][y] ; // 递归揭示周围8个格子 for(int dx-1; dx1; dx) { for(int dy-1; dy1; dy) { if(dx ! 0 || dy ! 0) { revealArea(board, xdx, ydy); } } } } }4. 游戏优化与扩展思路4.1 给猜拳游戏增加AI学习能力基础的随机出拳太简单了。可以记录玩家出拳习惯让电脑逐渐学会预测。比如// 在全局变量中添加 int playerHistory[3] {0}; // 记录玩家出各种拳的次数 // 在游戏循环中更新 playerHistory[playerChoice-1]; // 智能出拳函数 int smartComputerChoice() { // 找出玩家最常出的拳 int maxIndex 0; for(int i1; i3; i) { if(playerHistory[i] playerHistory[maxIndex]) { maxIndex i; } } // 出能打败玩家习惯的拳 return (maxIndex 1) % 3 1; }4.2 扫雷游戏的可视化改进控制台版的扫雷体验有限。可以考虑使用Windows API或Qt实现图形界面添加右键标记地雷功能实现计时器和排行榜支持不同难度级别// 简单的计时功能示例 #include chrono auto startTime chrono::steady_clock::now(); // 游戏结束时 auto endTime chrono::steady_clock::now(); auto duration chrono::duration_castchrono::seconds(endTime - startTime); cout 用时 duration.count() 秒 endl;5. 从游戏开发中学到的C核心概念通过这两个小游戏我们实际运用了以下C特性面向对象编程可以把游戏封装成类比如创建Game基类派生出RockPaperScissors和MinesweeperSTL容器vector用于动态数组map可用于存储游戏配置内存管理扫雷中大量使用二维数组要注意内存分配释放算法设计递归算法、随机算法、搜索算法的实际应用I/O操作处理用户输入和游戏输出建议下一步尝试用类重构游戏代码添加文件存储功能保存游戏记录实现简单的游戏引擎框架我在教学过程中发现很多同学通过开发这些小游戏对指针、引用等难点概念的理解明显加深了。比如在扫雷中用vectorvector传递游戏板引用既避免了拷贝开销又能修改原始数据。

相关文章:

用C++打造经典小游戏:从猜拳到扫雷的实战指南

1. 为什么选择C开发经典小游戏? 很多初学者问我,为什么推荐用C来开发小游戏而不是Python或者JavaScript?这个问题我十年前刚开始学编程时也思考过。经过多年实战,我发现C有几个不可替代的优势:首先是性能,C…...

Phi-4-mini-reasoning 3.8B 时序预测应用初探:结合LSTM进行销售数据分析

Phi-4-mini-reasoning 3.8B与LSTM结合的销售预测实战 1. 场景痛点与解决方案 在零售行业,销售预测一直是个令人头疼的问题。传统方法要么单纯依赖历史销售数据,忽略了促销文案、市场活动等文本信息;要么需要人工提取文本特征,效…...

智谱对标Anthropic,“中国版”之路挑战几何?

智谱业务模式从“重”到“轻”的转型探索2025年以来,智谱正经历业务模式的重大转变,从过去“卖发电机”的本地化部署模式,切换到AI时代的“卖电”生意,即云端API服务。以往本地化部署模式虽利润不低、客户粘性高,但属于…...

vLLM-v0.17.1实战体验:3步搭建大模型API服务,实测推理速度翻倍

vLLM-v0.17.1实战体验:3步搭建大模型API服务,实测推理速度翻倍 1. vLLM框架简介与核心优势 vLLM是一个专为大语言模型推理优化的高性能服务框架,由加州大学伯克利分校Sky Computing Lab开发并开源。最新发布的v0.17.1版本在推理速度、内存管…...

Bytenode加载器文件原理:深入理解CommonJS与ES模块的差异

Bytenode加载器文件原理:深入理解CommonJS与ES模块的差异 【免费下载链接】bytenode A minimalist bytecode compiler for Node.js 项目地址: https://gitcode.com/gh_mirrors/by/bytenode Bytenode作为一款轻量级的Node.js字节码编译器,通过将Ja…...

AI读脸术分布式部署:多节点负载均衡实战方案

AI读脸术分布式部署:多节点负载均衡实战方案 1. 项目背景与需求 在现代人工智能应用中,人脸属性识别技术已经成为许多业务场景的核心需求。从智能安防到个性化推荐,从用户分析到内容审核,准确快速的年龄和性别识别能力正在发挥越…...

Nanbeige 4.1-3B极简WebUI惊艳案例:浅灰蓝波点背景下的沉浸对话

Nanbeige 4.1-3B极简WebUI惊艳案例:浅灰蓝波点背景下的沉浸对话 厌倦了千篇一律、布局死板的大模型对话界面吗?今天,我想和你分享一个让我眼前一亮的项目——一个专为Nanbeige 4.1-3B模型打造的本地Web交互界面。它没有复杂的侧边栏&#xf…...

BEYOND REALITY Z-Image开源镜像实操:Docker Compose一键部署全流程

BEYOND REALITY Z-Image开源镜像实操:Docker Compose一键部署全流程 想体验一下生成媲美专业摄影棚级别的人像照片吗?今天要介绍的这个工具,或许能让你眼前一亮。它叫BEYOND REALITY Z-Image,一个专注于生成高精度写实人像的开源…...

BackgroundRemover:基于U-2-Net的智能背景移除工具完全指南

BackgroundRemover:基于U-2-Net的智能背景移除工具完全指南 【免费下载链接】backgroundremover Background Remover lets you Remove Background from images and video using AI with a simple command line interface that is free and open source. 项目地址:…...

ZTE ONU设备管理工具:企业级自动化运维解决方案深度解析

ZTE ONU设备管理工具:企业级自动化运维解决方案深度解析 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 在光纤接入网络运维领域,中兴ONU设备的管理效率直接影响…...

终极指南:如何使用Sony-PMCA-RE解锁索尼相机的隐藏功能

终极指南:如何使用Sony-PMCA-RE解锁索尼相机的隐藏功能 【免费下载链接】Sony-PMCA-RE Reverse Engineering Sony Digital Cameras 项目地址: https://gitcode.com/gh_mirrors/so/Sony-PMCA-RE Sony-PMCA-RE是一款强大的索尼相机逆向工程工具,通过…...

ExplorerPatcher终极指南:Windows界面定制的完整专业解决方案

ExplorerPatcher终极指南:Windows界面定制的完整专业解决方案 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher Windows界面定制工具…...

Umi-CUT:解放你的双手,让图片批量处理变得如此智能

Umi-CUT:解放你的双手,让图片批量处理变得如此智能 【免费下载链接】Umi-CUT 项目地址: https://gitcode.com/gh_mirrors/um/Umi-CUT 还在为海量图片的裁剪、去边、压缩而烦恼吗?Umi-CUT批量图片处理工具正是你需要的解决方案。这款开…...

Windows效率神器PowerToys终极指南:30+免费工具快速提升工作效率

Windows效率神器PowerToys终极指南:30免费工具快速提升工作效率 【免费下载链接】PowerToys Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows 项目地址: https://gitcode.com/GitHub_Trending/po/…...

避雷笔灵花费24进行AIGC降重,只降重了百分之几

https://ibiling.cn/paper-pass 还有我知网查AIGC率的费用,避雷了...

5个简单步骤掌握Inter字体:从安装到高级应用的全方位指南

5个简单步骤掌握Inter字体:从安装到高级应用的全方位指南 【免费下载链接】inter The Inter font family 项目地址: https://gitcode.com/gh_mirrors/in/inter 在当今数字设计领域,选择合适的屏幕字体对于提升用户体验至关重要。Inter字体作为一款…...

Navicat试用期重置终极指南:5步轻松突破数据库工具时间限制

Navicat试用期重置终极指南:5步轻松突破数据库工具时间限制 【免费下载链接】navicat-premium-reset-trial Reset macOS Navicat Premium 15/16/17 app remaining trial days 项目地址: https://gitcode.com/gh_mirrors/na/navicat-premium-reset-trial 你是…...

2025年Node.js打包工具终极指南:传统方案的技术价值与生态现状

2025年Node.js打包工具终极指南:传统方案的技术价值与生态现状 【免费下载链接】pkg Package your Node.js project into an executable 项目地址: https://gitcode.com/gh_mirrors/pk/pkg 在现代软件开发中,将Node.js项目打包为独立可执行文件是…...

Cosmos-Reason1-7B代码生成实战:辅助Python爬虫开发与优化

Cosmos-Reason1-7B代码生成实战:辅助Python爬虫开发与优化 1. 引言 做数据采集的朋友,估计都经历过这样的时刻:盯着一个网站,脑子里已经想好了要抓什么数据,但打开编辑器,从零开始写爬虫代码,…...

芝麻粒-TK:蚂蚁森林自动化能量收取终极指南

芝麻粒-TK:蚂蚁森林自动化能量收取终极指南 【免费下载链接】Sesame-TK 芝你麻咸鱼的粒-TK 项目地址: https://gitcode.com/gh_mirrors/ses/Sesame-TK 芝麻粒-TK(Sesame-TK)是一款专为蚂蚁森林用户打造的自动化能量收取工具&#xff0…...

Windows 10/11下快速搞定Netcat安装:从下载到测试的完整指南

Windows 10/11下快速搞定Netcat安装:从下载到测试的完整指南 在Windows环境下进行网络应用开发时,经常需要测试TCP/UDP连接或模拟简单的客户端/服务器交互。虽然Linux系统自带netcat工具,但频繁切换操作系统环境会打断开发节奏。本文将手把手…...

5分钟搞定明日方舟重复劳动:MAA自动化助手完整攻略

5分钟搞定明日方舟重复劳动:MAA自动化助手完整攻略 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://gitcod…...

LLM服务SLA从99.5%跃升至99.99%的6个工程化动作(附奇点大会现场压测对比数据)

第一章:LLM服务SLA从99.5%跃升至99.99%的工程化跃迁全景图 2026奇点智能技术大会(https://ml-summit.org) 实现LLM服务可用性从99.5%(年宕机约43.8小时)到99.99%(年宕机≤52.6分钟)的跃迁,绝非简单扩容或…...

闲置机顶盒秒变Linux服务器:Armbian 20.10 Buster搭配rtl8188eu网卡实战教程

闲置机顶盒改造指南:Armbian系统与rtl8188eu网卡的完美融合方案 家里积灰的旧机顶盒除了占地方还能做什么?今天我们就来解锁它的隐藏技能——低成本打造一台高性能Linux服务器。不同于常规教程的流水账式操作,本文将深入探讨硬件适配原理与实…...

深入解读:SOEM配置汇川SV660N时,PDO映射与EtherCAT状态机的那些关键细节

深入解读:SOEM配置汇川SV660N时,PDO映射与EtherCAT状态机的那些关键细节 在工业自动化领域,EtherCAT协议因其高效性和实时性已成为运动控制系统的首选。然而,当工程师们在实际项目中配置汇川SV660N伺服驱动器时,常常会…...

Qwen3.5-9B GPU高性能部署:TensorRT-LLM引擎集成实测指南

Qwen3.5-9B GPU高性能部署:TensorRT-LLM引擎集成实测指南 1. 项目概述 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型,在逻辑推理、代码生成和多轮对话方面表现出色。最新版本还支持多模态理解(图文输入)和长达128K tokens的上…...

GME-Qwen2-VL-2B-Instruct保姆级教程:无CUDA经验开发者GPU部署避坑指南

GME-Qwen2-VL-2B-Instruct保姆级教程:无CUDA经验开发者GPU部署避坑指南 1. 项目简介与核心价值 GME-Qwen2-VL-2B-Instruct是一个专门用于图文匹配度计算的多模态AI工具。如果你需要判断一张图片和多个文字描述中哪个最匹配,这个工具就是你的最佳选择。…...

终极PS Vita内容管理指南:用QCMA实现无线自由传输

终极PS Vita内容管理指南:用QCMA实现无线自由传输 【免费下载链接】qcma Cross-platform content manager assistant for the PS Vita 项目地址: https://gitcode.com/gh_mirrors/qc/qcma 还在为PS Vita繁琐的内容管理而烦恼吗?QCMA(Q…...

Windows系统终极优化方案:WinUtil一键管理工具完全指南

Windows系统终极优化方案:WinUtil一键管理工具完全指南 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil WinUtil是一款由Chris Tit…...

暗黑破坏神2存档编辑器的终极指南:打造你的完美角色

暗黑破坏神2存档编辑器的终极指南:打造你的完美角色 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾为暗黑破坏神2中某个角色的属性分配不当而后悔?是否想体验不同装备组合却不想花费数小时刷装备…...