# 一、概述
## 1.1 设计的目的与意义
目的与意义:系统本身没有任何意义,主要是为了巩固和加深前段时间所需的C++知识尤其是类相关方面。写一个C++控制台小游戏,全方面利用知识储备,并进一步学习。
## 1.2 设计的主要内容
本小游戏为种菜游戏,是一个十分简化的农场类型游戏,而且还是控制台的。
虽然只是种菜,但包含的内容足够充分。拿游戏本身来说包含了种菜、摘菜、卖菜、买种子、买肥料、打水、查看各种信息等操作。通过一个农场对象进行各种操作。虽然没有界面,但应该知道的信息如蔬菜、种子、肥料、水量库存、土地种植状况等都可通过查看来得知。为了增加乐趣,游戏中添加了抽奖、自动升级机制。还模拟了登录注册功能。2600多行的代码,实现了一个严谨、富含乐趣的小游戏。
### 1.2.1 操作:
##### 1.2.1 游戏操作:
- 查看农场主具体信息:
- 查看蔬菜属性
- 查看土地种植情况
- 查看肥料、地皮价格
- 种菜
- 种菜
- 摘菜
- 卖菜
- 买土地
- 买种子
- 买肥料
- 打水
- 抽奖界面
- 返回主菜单
##### 1.2.1 登录操作
- 新用户注册
- 登录
- 找回密码
- 退出登录
- 更改用户名
- 更改密码
##### 1.2.1 查看农场主具体信息:
- 查看称号
- 查看等级
- 查看土地拥有数
- 查看金币
- 查看贡献度
- 查看多少种蔬菜
- 查看蔬菜总量
- 查看种子总量
- 查看水滴量
- 查看肥料量
- 查看某蔬菜库存
- 查看某种子库存
- 查看所有蔬菜库存
- 查看所有种子库存
- 查看农场主所有信息
##### 1.2.1 查看蔬菜属性:
- 显示所有蔬菜名
- 查看一次种植需多少包种子
- 查看一次种植需多少滴水
- 查看一次种植需多少包肥料
- 查看某蔬菜成熟时间
- 查看某蔬菜售价
- 查看某蔬菜种子进价
- 查看所有蔬菜成熟时间
- 查看所有蔬菜售价
- 查看所有蔬菜种子进价
- 查看显示所有信息
##### 1.2.1 查看土地种植状况
- 查看土地空闲、不空闲数
- 查看空闲土地
- 查看不空闲土地
- 查看所种蔬菜已成熟土地
- 查看所种蔬菜未成熟土地
- 查看某一块土地种植情况
- 查看所有土地种植情况
##### 1.2.1 查看土地、肥料价格
- 查看每包肥料价格
- 查看每块土地价格
## 1.3 分析与设计
### 1.3.1 类设计
主要由6个类组成1. 农民类 Farmers 2. 土地类 Land 3. 金库类 Gold 4. 仓库类Storage 5. 继承与Farmer类的farm类 6. 用于登录注册的User类(与游戏本身无关)。以及一个蔬菜结构体。
蔬菜结构体:
一个对象代表一种蔬菜,是游试内的固定属性,无法改变。
其中蔬菜名是唯一的,他是区分蔬菜的唯一判定。
```c++
typedef struct crop
{
const std::string cropName; //蔬菜名
const int ripeTime; //成熟时间
const int sellPrice; //售价
const int seedPrice; //一包种子价格
}Crop;
```
Land 类: 用来种菜,每个对象代表一块土地。
数据成员:
- 自身的编号
- 种植状态(是否有种植蔬菜)
- 种植的时间 (time_t类型,就是unsinged long)
- 所种蔬菜的名字
- 指向蔬菜结构体的指针
方法:
- 初始化一块土地
- 返回所中蔬菜是否已成熟的状态
- 返回是否种有蔬菜的状态
- 返回距离蔬菜成熟的时间
- 返回种植时间
- 返回编号
- 返回所中蔬菜的名字
- 两个<<和>>运算符重载
具体信息:
```c++
class Land
{
friend class Farmers;
friend std::ostream& operator<<(std::ostream& os, const Land& land);
friend std::istream& operator>>(std::istream& is, Land& land);
public:
Land(int num = 0) :
number(num), growState(false), growTime(0), cropname("0"), pcrop(nullptr) {} //初始化一块地皮
Land(int num, bool gS, time_t gT, const Crop* p) :
number(num), growState(gS), growTime(gT),cropname(p->cropName), pcrop(p) {}
time_t ripeDistance() const; //距离成熟时间
bool isRipe()const; //是否成熟
bool HasCrop() const { return growState; }返回是否种有蔬菜的状态
int getNum() const { return number; } 返回编号
time_t getGrowTime() const { return growTime; }返回种植时间
std::string getCropname() const { return cropname; }返回所中蔬菜的
private:
int number; //编号
bool growState; //是否为空
time_t growTime; //种植时间
std::string cropname; //蔬菜名
const Crop* pcrop; //指向Crop结构体的指针
};
```
Gold 类 ; 用来进行与金币相关的操作
数据成员: 一个保存现有金币的int 数据
方法:
- 返回金币数量
- 增加、消耗金币
- 两个<<和>>运算符重载
具体信息:
```c++
class Gold
{
friend std::ostream& operator<<(std::ostream& os, const Gold& G);
friend std::istream& operator>>(std::istream& is, Gold& G);
public:
Gold(int num = 0) : goldNum(num) {}
int getGoldNum() const { return goldNum; }返回金币数量
void consumeGold(int num) { goldNum -= num; } //增加金币
void increaseGold(int num) { goldNum += num; } //消耗金币
private:
int goldNum; //现有金币数量
};
```
Storage 类:用来存储信息,如蔬菜、种子、水、肥料等数据信息和进行相关增减操作。
数据成员:
- 蔬菜总库存
- 种子总库存
- 水滴库存
- 肥料库存
- 每种蔬菜的库存 (用一个关联容器map来保存蔬菜名字及对应的库存,类似散列表)
- 每种种子的库存
方法:
- 返回农作物总库存
- 返回某种农作物的库存
- 返回种子总库存
- 返回某种种子的库存
- 返回水滴库存
- 返回肥料库存
- 消耗农作物
- 消耗种子
- 消耗水
- 消耗肥料
- 增加种子
- 增加农作物
- 增加水
- 增加肥料
- 增加一种蔬菜
- 两个<<和>>运算符重载
具体信息:
```c++
class Storage
{
friend std::ostream& operator<<(std::ostream& os, const Storage& store);
friend std::istream& operator>>(std::istream& is, Storage& store);
public:
Storage() :cropStorage(0), seedStorage(0), waterStorage(0), manuerStorage(0) {}
Storage(int cS, int sS, int wS, int mS, std::vector<std::string>& cN,
std::vector<int>& eC, std::vector<int>& eS)
:cropStorage(cS), seedStorage(sS), waterStorage(wS), manuerStorage(mS)
{
auto pa = cN.cbegin();
for (auto pb = eC.cbegin(); pa != cN.cend(); pb++, pa++) {
everyCropStorage.insert({ *pa,*pb });
}
pa = cN.cbegin();
for (auto pb = eS.cbegin(); pa != cN.cend(); pb++, pa++) {
everySeedStorage.insert({ *pa,*pb });
}
}
int getCropNum() const { return cropStorage; } //返回农作物总库存
int getCropNum(const std::string& name); //返回每种农作物的库存
int getSeedNum() const { return seedStorage; } //返回种子总库存
int getSeedNum(const std::string& name); //返回每种种子的库存
int getWaterNum() const { return waterStorage; } //返回水滴库存
int getManuerNum() const { return manuerStorage; } //返回肥料库存
void consumeCrop(const std::string& name, int amount = 0); //消耗农作物
void consumeSeed(const std::string& name, int amount = 0); //消耗种子
void consumeWater(int amount) { waterStorage -=amount; } //消耗水
void consumeManuer(int amount) { manuerStorage -=amount; } //消耗肥料
void increaseSeed(const std::string& name, int amount = 0); //增加种子
void increaseCrop(const std::string& name, int amount = 0); //增加农作物
void increaseWater(int num) { waterStorage += num; } //增加水
void increaseManuer(int num) { manuerStorage += num; } //增加肥料
void addCrop(const std::string& name, int cropAmount = 0, int seedAmount = 0); //增加一种蔬菜
private:
int cropStorage; //蔬菜库存
int seedStorage; //种子总库存
int waterStorage; //水滴库存
int manuerStorage; //肥料库存
std::map<std::string, int> everyCropStorage; //每种农作物的库存
std::map<std::st
没有合适的资源?快使用搜索试试~ 我知道了~
基于C++实现的控制台种菜游戏【100012858】
共76个文件
obj:18个
tlog:12个
txt:11个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 175 浏览量
2023-07-01
10:22:09
上传
评论 1
收藏 8.9MB ZIP 举报
温馨提示
小游戏为种菜游戏,是一个十分简化的农场类型游戏,而且还是控制台的。 虽然只是种菜,但包含的内容足够充分。拿游戏本身来说包含了种菜、摘菜、卖菜、买种子、买肥料、打水、查看各种信息等操作。通过一个农场对象进行各种操作。虽然没有界面,但应该知道的信息如蔬菜、种子、肥料、水量库存、土地种植状况等都可通过查看来得知。为了增加乐趣,游戏中添加了抽奖、自动升级机制。还模拟了登录注册功能。2600多行的代码,实现了一个严谨、富含乐趣的小游戏。
资源推荐
资源详情
资源评论
收起资源包目录
100012858-基于C++实现的控制台种菜游戏.zip (76个子文件)
czhongcai
LICENSE 18KB
README.txt 77B
README.md 17KB
c++大作业
设计报告.doc 117KB
vegetable
Farmers.h 5KB
vegetable.vcxproj.filters 2KB
user.cpp 10KB
Date
121212.txt 159B
12345678.txt 113B
232323.txt 89B
123456.txt 89B
17223441.txt 101B
Land.cpp 591B
user.h 2KB
farm.cpp 8KB
vegetable.vcxproj.user 165B
.vs
vegetable
v16
Browse.VC.db 6.57MB
.suo 25KB
Storage.cpp 2KB
main.cpp 4KB
Farmers.cpp 4KB
x64
Debug
vegetable.exe 625KB
Farmers.obj 959KB
vc142.idb 291KB
vc142.pdb 908KB
Land.obj 211KB
vegetable.tlog
CL.write.1.tlog 3KB
vegetable.lastbuildstate 222B
CL.command.1.tlog 5KB
link.command.1.tlog 2KB
link.read.1.tlog 5KB
link.write.1.tlog 1KB
CL.read.1.tlog 157KB
user.obj 2.4MB
faction.obj 1.15MB
vegetable.ilk 3.01MB
vegetable.pdb 1.86MB
Storage.obj 608KB
menu.obj 106KB
farm.obj 1.41MB
vegetable.log 6KB
main.obj 1.18MB
faction.cpp 18KB
vegetable.sln 1KB
vegetable.vcxproj 6KB
Debug
vegetable.exe 553KB
Farmers.obj 716KB
vc142.idb 291KB
Date
121212.txt 160B
vc142.pdb 1.18MB
Land.obj 168KB
vegetable.tlog
CL.write.1.tlog 30KB
vegetable.lastbuildstate 187B
CL.command.1.tlog 5KB
link.command.1.tlog 2KB
link.read.1.tlog 4KB
link.write.1.tlog 786B
CL.read.1.tlog 158KB
vegetable.vcxproj.FileListAbsolute.txt 0B
vegetable.Build.CppClean.log 794B
user.obj 1.94MB
Gold.obj 37KB
faction.obj 1.01MB
vegetable.ilk 10.06MB
vegetable.pdb 3.68MB
Storage.obj 565KB
myfarm.obj 671KB
menu.obj 95KB
farm.obj 1.22MB
vegetable.log 694B
main.obj 1.03MB
user.txt 18B
farm.h 5KB
recentUser.txt 19B
menu.cpp 6KB
user.txt 104B
共 76 条
- 1
资源评论
神仙别闹
- 粉丝: 4302
- 资源: 7532
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 英国地铁站SHP矢量数据集
- 2014年Q2中国主要城市交通分析报告.pdf
- MATLAB环境下2D 3D局部边坡估计和结构滤波方法 算法运行环境为matlab r2018a,执行一种2D 3D局部边坡估计和结构滤波方法 %% calculate SNR snrn=str-s
- 2014年度户外广告市场及2015年发展趋势.pdf
- 2014年世界杯赛事热点概览.pdf
- 2014年世界杯营销启点报告.pdf
- 2014年中国智能电视用户及用户行为研究报告.pdf
- 2015-2016年京东全球购消费白皮书.pdf
- 2014中国网络房产服务行业报告.pdf
- 2015-2016年中国手机地图市场研究报告.pdf
- 2015-2016年年中国手机浏览器市场研究报告.pdf
- 2015-2016年中国移动DSP行业发展研究报告.pdf
- 2015-2016网生世代流行文化观察系列报告.pdf
- 2015-2016中国APP年度排行榜.pdf
- 2015-2016中国手机新闻客户端市场研究报告.pdf
- 2015-2016中国手机音乐客户端市场研究报告.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功