C/C++ 迷宫游戏

news/发布时间2024/9/20 7:54:46

游戏介绍

这个迷宫探险游戏有以下功能:

  1. 探险:选择该选项后,玩家会进入地下迷宫进行探险。在随机事件中,可能会遇到陷阱、发现金币或者什么都没有发生。陷阱会使玩家失去一定的生命值,金币可以增加玩家的金币数量。

  2. 休息:选择该选项后,玩家可以休息一会儿。在休息过程中,有50%的概率会丢失随机数量的金币。而体力值将会回复15点,但不超过上限100。

  3. 查看背包:选择该选项后,玩家可以查看背包中的道具。当前游戏中有三种道具:能量药水、地图和食物。能量药水可以增加20点体力值,地图可以指示方向,而食物则可以增加10点生命值。

  4. 结束游戏:选择该选项后,游戏将会结束。

玩家需要通过探险获得足够的金币(100个)以及保持生命值大于0才能获得胜利。如果生命值降到0或者选择结束游戏,则游戏失败。

游戏示例
在这里插入图片描述

在这里插入图片描述

运用的知识点如下:

  • 结构体:使用了结构体player来表示玩家的状态,包括生命值、体力值和金币数量。

  • typedef:使用typedef为结构体类型player定义别名Player,方便在代码中使用。

  • 随机数:使用srand函数设置随机种子。然后使用rand函数生成随机数,用于产生随机事件、陷阱伤害、金币奖励等。

  • 条件语句:使用if-else语句根据不同的条件执行相应的操作,例如判断玩家的选择、判断随机事件类型等。

  • 循环语句:使用while循环控制游戏的进行,直到玩家的生命值小于等于0或金币数量达到200时结束游戏。

  • 指针:使用指针作为函数参数,通过指针修改玩家的状态。

  • 数组:使用数组items来表示玩家的背包道具,下标对应道具编号-1,数组元素表示道具数量。

  • 函数:定义了多个函数来实现不同的功能,如探险、休息、查看背包、使用道具等。

  • switch语句:根据玩家的选择执行不同的操作。

  • 类型转换:使用int类型将字符转换为整数,例如将用户输入的选择转换为整数

结构体定义

struct player {int health;   // 欢乐值int stamina;   // 体力值int gold;   // 金币
};typedef struct player Player;
int items[3] = {0};   // 道具数组,下标分别对应道具编号-1

函数声明

void inif(Player* p);//初始化
void explore(Player* p);//收集
void rest(Player* p);//休息
void view_inventory(Player* p);//查看背包
void use_item(Player* p, int index);//使用道具
void use_item1(Player* p);//能量药水
void use_item2(Player* p);//地图
void use_item3(Player* p);//野果
void show_status(Player* p);//显示状态
void end_of_game(Player* p);//结束收集

源代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>struct player {int health;   // 欢乐值int stamina;   // 体力值int gold;   // 金币
};typedef struct player Player;int items[3] = {0};   // 道具数组,下标分别对应道具编号-1void inif(Player* p);//初始化
void explore(Player* p);//收集
void rest(Player* p);//休息
void view_inventory(Player* p);//查看背包
void use_item(Player* p, int index);//使用道具
void use_item1(Player* p);//能量药水
void use_item2(Player* p);//地图
void use_item3(Player* p);//野果
void show_status(Player* p);//显示状态
void end_of_game(Player* p);//结束收集int main() {srand(time(NULL));   // 每次运行产生不同的随机种子Player player;// 初始化玩家状态inif(&player);printf("欢迎进行迷宫探险之旅!\n");while (player.health > 0 && player.gold < 100) {printf("\n-----------------------------------\n");printf("你现在的状态:\n");show_status(&player);int choice;scanf("%d", &choice);switch (choice) {case 1:explore(&player);   // 进行探险break;case 2:rest(&player);   // 休息break;case 3:view_inventory(&player);   // 查看背包中的道具break;case 4:end_of_game(&player);return 0;default:printf("无效选项,请重新输入。\n");}}if (player.health <= 0) {printf("\n你精疲力尽!收集失败...\n");} else {printf("\n你拥有%d个金币,有足够的信心离开迷宫。收集成功!\n", player.gold);}return 0;
}void inif(Player* p){p->health = 100;p->stamina = 100;p->gold = 0;
}void explore(Player* p) {if(p->stamina<=0){printf("\n体力过低请补充体力...\n");return;}printf("\n你开始了收集之旅...\n");int random_event = (rand() % 10) + 1;   // 随机事件if (random_event < 3 && p->health > 0 && p->stamina >= 15) {   // 遇到陷阱p->stamina -= 15;int damage = rand() % 31 + 10;   // 随机减少10-20点生命值printf("你踩到了陷阱,失去了%d点欢乐值\n", damage);p->health -= damage;} else if (random_event < 6 && p->health > 0 && p->stamina >= 10) {   // 发现金币p->stamina -= 10;int gold = rand() % 36 + 5;   // 随机获得金币printf("你发现了%d个金币\n", gold);p->gold += gold;}else if(random_event < 9){if(random_event==6){p->stamina -=5;printf("你获得了能量药水\n");items[0]++;}else if(random_event==7){p->stamina -=5;printf("你获得了地图\n");items[1]++;}else {p->stamina -=5;printf("你获得了野果\n");items[2]++;}}else {   // 什么都没发生,但是消耗体力值p->stamina -= 5;printf("你在迷宫徘徊...\n");}}void show_status(Player* p) {printf("\n体力:%d,欢乐值:%d,金币:%d\n\n", p->stamina, p->health, p->gold);printf("请选择下一步操作:\n");printf("1. 收集\n");printf("2. 休息\n");printf("3. 查看背包\n");printf("4. 结束收集\n");
}void rest(Player* p) {printf("\n你决定休息一会儿...\n");int lost_gold = rand() % 6;   // 50% 的概率丢失随机数量的金币if (lost_gold < 3 && p->gold > 0) {int gold_loss = rand() % (p->gold + 1);   // 丢失随机数量的金币printf("你在休息过程中丢失了%d个金币\n", gold_loss);p->gold -= gold_loss;}p->stamina += 15;   // 回复15点体力值if (p->stamina > 100) {p->stamina = 100;}
}void view_inventory(Player* p) {printf("\n你打开了背包...\n");for (int i = 0; i < 3; i++) {if (items[i] > 0) {switch (i+1) {case 1:printf("1. 能量药水(增加20点体力):%d\n", items[0]);break;case 2:printf("2. 地图(告诉你方向):%d\n", items[1]);break;case 3:printf("3. 野果(增加10点欢乐值):%d\n", items[2]);break;}} else {switch (i+1) {case 1:printf("1. 能量药水(增加20点体力):0\n");break;case 2:printf("2. 地图(告诉你方向):0\n");break;case 3:printf("3. 野果(增加10点欢乐值):0\n");break;}}}printf("\n请选择要使用的道具,或者输入其他选项返回游戏:\n");int choice;scanf("%d", &choice);if (choice != 1 && choice != 2 && choice != 3) {printf("\n你选择了返回游戏。\n");return;}use_item(p,choice);
}void use_item(Player* p, int index) {if (items[index-1] <= 0) {   // 没有该道具printf("\n你没有这个道具!\n");return;}switch (index) {case 1:use_item1(p);break;case 2:use_item2(p);break;case 3:use_item3(p);break;default:printf("\n该选项无效!\n");}
}void end_of_game(Player* p) {printf("\n游戏结束...\n");printf("你的最终状态为:\n");printf("体力:%d,欢乐值:%d,金币:%d\n", p->stamina, p->health, p->gold);if (p->health <= 0) {printf("你已经死亡!\n");}else if (p->gold >= 100) {printf("你找到了100枚个金币,收集成功!\n");}else {printf("你没有找到足够的金币,收集失败!\n");}
}void use_item1(Player* p){if (p->stamina == 100) {   // 体力值已满printf("\n你现在的体力已经是满的了!\n");return;}p->stamina += 20;   // 增加20点体力值if (p->stamina > 100) {   // 不超过上限100p->stamina = 100;}printf("\n你使用了一瓶能量药水,增加了20点体力值!\n");items[0]--;
}void use_item2(Player* p){printf("\n你打开了地图,发现...还需要继续收集才能找到金币。\n");items[1]--;
}void use_item3(Player* p){if (p->health == 100) {   // 生命值已满printf("\n你现在的欢乐值已经是满的了!\n");return;}p->health += 10;   // 增加10点生命值if (p->health > 100) {   // 不超过上限100p->health = 100;}printf("\n你食用了一份美味佳肴,增加了10点欢乐值!\n");items[2]--;
}

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

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

相关文章

C++——内存管理(new和delete)详解

目录 C/C内存管理 案例&#xff1a;变量在内存中到底会在哪&#xff1f; New和delete Operator new和operator delete函数 New和delete的原理 对内置类型 对自定义类型 定位new New/delete和malloc/free的区别 C/C内存管理 C/C内存管理分布图&#xff1a;&#xff08;从…

2024牛客寒假算法基础集训营4

目录 A.柠檬可乐 B.左右互博 C.冬眠 D.守恒 E.漂亮数组 F.来点每日一题 G.数三角形&#xff08;easy&#xff09; A.柠檬可乐 阅读理解题&#xff0c;依照题目直接模拟即可 void solve(){int a,b,k; cin>>a>>b>>k;if(a>k*b) cout<<"go…

【Java】基本数据类型、包装类与字符串间的转换 例题

写在前面&#xff1a; 关于这道题&#xff0c;初见感觉有点cpu烧坏了&#xff0c;准确来说是看了网上的一些讲解都感觉不尽人意。自己整理了一下&#xff0c;希望能帮助到大家。 题目&#xff1a; 如下两个题目输出结果相同吗&#xff1f;各是什么。 Object o1 true ? new…

Java毕业设计-基于springboot开发的Web社区医院管理服务系统-毕业论文+答辩PPT(有源代码)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1.开发说明2.需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、管理员功能模块3、用户功能模块4、医生功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发…

CGI程序与ShellShock漏洞

CGI是什么&#xff1f; CGI&#xff08;通用网关接口&#xff0c;Common Gateway Interface&#xff09;程序是一种用于在Web服务器上执行动态内容的技术。与服务器上普通的后端代码相比&#xff0c;CGI程序有几个区别&#xff1a; 执行环境&#xff1a; CGI程序在服务器上作为…

从CPU缓存结构到原子操作

一、CPU缓存结构 1.1 CPU的多级缓存 因为CPU的计算速度非常快&#xff0c;但内存的访问速度相对较慢。因此&#xff0c;如果CPU每次都要从内存读取数据&#xff0c;会造成大量的等待时间&#xff0c;降低整体性能。 通过引入多级缓存&#xff0c;可以在CPU和内存之间建立数据…

3月1号代码随想录二叉搜索树中的插入操作

301.二叉搜索树中的插入操作 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 &#xff0c;新值和原始二叉搜索树中的任意节点值都不同。 注意&#xff0c;…

html样式排版

<template><div class"box"><div class"header">头部</div><div class"main"><div class"left">菜单</div><div class"right"><div class"right-contentr"&g…

Redis——服务器

Redis服务器负责与多个客户端建立网络连接&#xff0c;处理客户端发送的命令请求&#xff0c;在数据库中保存客户端执行命令所产生的数据&#xff0c;并通过资源管理来维持服务器自身的运行。 一. 命令请求的执行过程 一个命令请求从发送到获得回复过程中&#xff0c;客户端和服…

【精品】集合list去重

示例一&#xff1a;对于简单类型&#xff0c;比如String public static void main(String[] args) {List<String> list new ArrayList< >();list.add("aaa");list.add("bbb");list.add("bbb");list.add("ccc");list.add(…

数据之光:探索数据库技术的演进之路

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua&#xff0c;在这里我会分享我的知识和经验。&#x…

09-Java组合模式 ( Composite Pattern )

Java组合模式 摘要实现范例 组合模式&#xff08;Composite Pattern&#xff09;&#xff0c;又叫部分整体模式&#xff0c;是用于把一组相似的对象当作一个单一的对象 组合模式依据树形结构来组合对象&#xff0c;用来表示部分以及整体层次 组合模式创建了一个包含自己对象组…

Mac 重新安装系统

Mac 重新安装系统 使用可引导安装器重新安装&#xff08;可用于安装非最新的 Mac OS&#xff0c;系统降级&#xff0c;需要清除所有数据&#xff09; 插入制作好的可引导安装器&#xff08;U盘或者移动固态硬盘&#xff09;&#xff0c;如何制作可引导安装器将 Mac 关机将 Ma…

SpringBoot实现短链跳转

目录 1.背景介绍 2.短链跳转的意义 3.SpringBoot中的代码实现 1.建议短链-长链的数据库表&#xff1a;t_url_map: 2.映射实体 3.Dao层实现 4.Service层实现 5.Controller层实现 3.结果测试 4.问题 1.背景介绍 短链跳转是一种通过将长链接转换为短链接的方式&…

Socket网络编程(一)——网络通信入门基本概念

目录 网络通信基本概念什么是网络&#xff1f;网络通信的基本架构什么是网络编程?7层网络模型-OSI模型什么是Socket&#xff1f;Socket的作用和组成Socket传输原理Socket与TCP、UDP的关系CS模型(Client-Server Application)报文段牛刀小试&#xff08;TCP消息发送与接收&#…

OceanMind海睿思-知信版本升级:多轮对话+LLM加速!

OceanMind海睿思-知信 产品能力全新升级&#xff1a; ❖ 知识库增加多轮对话能力&#xff0c;给用户带来更“人性化”的问答体验 ❖ 自研大模型推理加速机制&#xff0c;为大模型回答提速&#xff0c;减少用户等待时间消耗 1 多轮对话升级 基于“RAG大模型”框架的知识库问…

ChatGPT科研绘图丨散点图、柱状图、小提琴图、箱型图、雷达图、玫瑰图、气泡图、森林图、三元图、三维图等各类科研图

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

Rocky Linux 运维工具 vim

一、vim的简介 vi​m是一种文本编辑器。它提供了丰富的编辑功能&#xff0c;包括插入、删除、替换文本、搜索和查找等。使用键盘命令和模式切换&#xff0c;以实现高效的文本编辑操作。 二、vim的参数说明 序号视图命令描述1命令视图i在当前光标位置进入‘INSERT视图’2命令视…

2024年四川媒体新闻发布渠道,媒体邀约资源表

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 四川有哪些媒体新闻发布渠道&#xff0c;媒体邀约资源表&#xff1f; 2024年四川媒体新闻发布渠道&#xff0c;媒体邀约资源表 四川本地媒体&#xff1a;如四川日报、华西都市报、成都商…

浅谈MySQL的B树索引与索引优化

MySQL的MyISAM、InnoDB引擎默认均使用B树索引&#xff08;查询时都显示为“BTREE”&#xff09;&#xff0c;本文讨论两个问题&#xff1a; 为什么MySQL等主流数据库选择B树的索引结构&#xff1f;如何基于索引结构&#xff0c;理解常见的MySQL索引优化思路&#xff1f; 为什…
推荐文章