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

【c++小游戏】Surviving版本v0.1.1

 规则在最后

//#include<graphics.h>
//#include<windows.h>
#include<unistd.h>
#include<time.h>
#include<iostream>
#include<fstream>
using namespace std;
#define attt 0
#define food 1
#define M 2
#define home 0
#define jungle 1
#define river 2
#define smalltown 3
short ssaw,day=1,ti,a1=0,a2=0,a3=0;//季节,天数,时间
short jt,jwf,rt,rw,tw2,tp;//森林树木,森林浆果,溪流树木,溪流净水,小镇麦子,小镇零件
struct obj{
	int cl;//类
	string name="";//名
	int a=0,b=0,c=0;/*
	cl=attt a=att b=durable耐久 c=digv挖掘速度
	cl=food a=+nhungry b=+water c=+confidence
	cl=M材料 a=数量 b,c无用
	*/
};
obj ax,dagger,wood,berry,water,wheat,parts;//斧头,短匕,木头,水,麦子,零件
void set(){
	ax.cl=attt;
	ax.name="斧头";
	ax.a=5,ax.b=30,ax.c=0;
	dagger.cl=attt;
	dagger.name="短匕";
	dagger.a=7,dagger.b=35,ax.c=0;
	wood.cl=M;
	wood.name="木头";
	berry.cl=food;
	berry.name="浆果";
	berry.a=1,berry.b=4,berry.c=2;
	water.cl=food;
	water.name="水";
	water.a=0,water.b=10,water.c=1;
	wheat.cl=food;
	wheat.name="麦子";
	wheat.a=5,wheat.b=0,water.c=0;
	parts.cl=M;
	parts.name="零件";
}
struct people{
	short hp,nhungry,water,energy,confidence;
	//血量,满腹,水分,体力,精神
	short location=0;
	//位置
	obj bag[20];
}me;
void dd(){
	fstream of("cd.f",ios::out);
	of<<me.hp<<" "<<me.nhungry<<" "<<me.water<<" "<<me.energy<<" "<<me.confidence<<" ";
	of<<ssaw<<" "<<day<<" "<<ti<<" "<<a1<<" "<<a2<<" "<<a3;
	of.close();
	of.open("cdb.f",ios::out);
	for(int i=0;i<20;i++){
		if(me.bag[i].name!="")of<<me.bag[i].cl<<" "<<me.bag[i].name<<" "<<me.bag[i].a<<" "<<me.bag[i].b<<" "<<me.bag[i].c<<" ";
	}
	of.close();
	of.open("ms.f",ios::out);
	of<<jt<<" "<<jwf<<" "<<rt<<" "<<rw<<" "<<tw2<<" "<<tp;
}
void cd(){
	fstream of("cd.f",ios::in);
	of>>me.hp>>me.nhungry>>me.water>>me.energy>>me.confidence>>ssaw>>day>>ti>>a1>>a2>>a3;
	of.close();
	of.open("cdb.f",ios::in);
	for(int i=0;i<20;i++){
		of>>me.bag[i].cl>>me.bag[i].name>>me.bag[i].a>>me.bag[i].b>>me.bag[i].c;
	}
	if(!a2||a3)me.location=0;
	else{
		system("cls");
		cout<<"\033[31m你在清晨的月光中醒来,你不知道自己在这待了千年还是一日。\033[30m\n";
		system("pause");
		system("cls");
		me.location=-1;
	}
	of.close();
	of.open("ms.f",ios::in);
	of>>jt>>jwf>>rt>>rw>>tw2>>tp;
}
int sgo(){
	int yi=0;
	cout<<"0.反回\n";
	cout<<"1.森林\n";
	cout<<"2.溪流\n";
	if(a1){}
	cin>>yi;
	system("cls");
	switch(yi){
		case 0:
			return 1;
			break;
		case 1:
			me.location=jungle;
			break;
		case 2:
			me.location=river;
			break;
		default:
			//TODO
			break;
	}
	return 0;
}
int fvt=0;
int fv(string a=""){
	short ret=20;bool ist=0;
	for(int i=0;i<20;i++){
		if(me.bag[i].name==a){
			if(!ist)ret=i;
			fvt++;
		}
	}
	return ret;
}
void eat(){
	system("cls");
		cout<<"背包:";
	for(int i=0;i<20;i++){
		if(me.bag[i].name!="")cout<<i<<":";
		cout<<me.bag[i].name;
		if(me.bag[i].name!=""){
			switch(me.bag[i].cl){
				case attt:
					cout<<me.bag[i].b;
					break;
				case M:
					cout<<"*"<<me.bag[i].a;
					break;
				default:
					//TODO
					break;
			}
			cout<<" ";
		}
	}
	cout<<endl;
	cout<<"你要吃什么?(-1返回)\n";
	short i;
	cin>>i;
	if(i<=-1)return;
	if(me.bag[i].cl==food&&me.bag[i].name!=""){
		me.bag[i].name="";
		me.nhungry+=me.bag[i].a;
		me.water+=me.bag[i].b;
		me.confidence+=me.bag[i].c;
		cout<<"满腹+"<<me.bag[i].a;
		cout<<"水分+"<<me.bag[i].b;
		cout<<"精神+"<<me.bag[i].c;
	}else{
		switch(rand()%3){
			case 0:
				cout<<"谢邀,你吃吧...\n";
				break;
			case 1:
				cout<<"这能吃吗?\n";
				break;
			case 2:
				cout<<"我略感满腹...\n";
				break;
			default:break;
		}
	}
	sleep(1);
	system("cls");
}
void game(){
	short yi=0;
	while(me.hp>0){
		begin:switch(ssaw%4){
			case 0:
				cout<<"春 ";
				break;
			case 1:
				cout<<"夏 ";
				break;
			case 2:
				cout<<"秋 ";
				break;
			case 3:
				cout<<"冬 ";
				break;
		}
		cout<<"第"<<day<<"天 ";
		switch(ti/3){
			case 0:case 1:
				cout<<"凌晨";
				break;
			case 2:case 3:case 4:
				cout<<"早上";
				break;
			case 5:case 6:
				cout<<"中午";
				break;
			case 7:case 8:
				cout<<"下午";
				break;
			case 9:
				cout<<"傍晚";
				break;
			case 10:case 11:case 12:
				cout<<"晚上";
				break;
		}
		cout<<endl;
		cout<<"血量:"<<me.hp<<" ";
		cout<<"满腹:"<<me.nhungry<<" ";
		cout<<"水分:"<<me.water<<" ";
		cout<<"体力:"<<me.energy<<" ";
		cout<<"精神:"<<me.confidence<<" ";
		cout<<"地点:";
		switch(me.location){
			case -1:
				cout<<"\033[31m诅咒之地\033[30m";
				break;
			case 0:
				cout<<"家";
				break;
			case 1:
				cout<<"森林";
				break;
			case 2:
				cout<<"江河";
				break;
			case 3:
				cout<<"小镇";
				break;
			default:
				//TODO
				break;
		}
		cout<<endl;
		cout<<"背包:";
		for(int i=0;i<20;i++){
			cout<<me.bag[i].name;
			if(me.bag[i].name!=""){
				switch(me.bag[i].cl){
					case attt:
						cout<<me.bag[i].b;
						break;
					case M:
						cout<<"*"<<me.bag[i].a;
						break;
					default:
						//TODO
						break;
				}
				cout<<" ";
			}
		}
		cout<<endl;
		for(int i=0;i<120;i++)cout<<"-";
		cout<<endl;
		cout<<"你的操作\n";
		if(me.location==home){
			cout<<"-1.吃东西\n";
			cout<<"0.保存";
			cout<<"1.出门";
			cout<<"2.建造";
			cout<<"\n";
			cin>>yi;
			system("cls");
			switch(yi){
				case -1:
					eat();
					goto begin;
					break;
				case 1:
					if(sgo()){
						system("cls");
						goto begin;
					}
					break;
				case 2:
					
					break;
				default:
					dd();
					exit(0);
					break;
			}
		}else
		if(me.location==jungle){
			cout<<"-1.吃东西\n";
			cout<<"0.返回\n";
			cout<<"1.伐木 现有木:"<<jt<<" 需:斧头*1,精力*5,2时间\n";
			cout<<"2.采集浆果 现有:"<<jwf<<" 需:精力*2,1时间\n";
			cout<<"3.流浪汉 \"救我...\" 对话\n";
			cin>>yi;
			system("cls");
			switch(yi){
				case -1:
					eat();
					goto begin;
					break;
				case 1:{
					if(jt)jt-=1;
					else goto begin;
					bool nhave=1,ne=0;
					for(int i=0;i<20;i++){
						if(me.bag[i].name=="斧头"&&me.bag[i].b>=1){
							if(me.energy>=5){
								me.bag[i].b-=1;
								if(me.bag[i].b==0){
									me.bag[i].name="";
								}
								bool a2=1;
								for(int i=0;i<20;i++)
									if(me.bag[i].name==wood.name){
										me.bag[i].a+=4;
										a2=0;
										break;
									}
								if(a2){
									int a=fv();
									me.bag[a]=wood;
									me.bag[a].a=4;
								}
								cout<<"挖掘成功!\nMining successful!\n";
								me.energy-=5;
								ti+=1;
								sleep(1);
								system("cls");
							}else ne=1;
							nhave=0;
							break;
						}
					}
					if(nhave)cout<<"我没有工具。\nI have no tools.\n";
					else if(ne)cout<<"好累...\nI am very tired...\n";
					if(ne||nhave){
						sleep(1);
						system("cls");
						goto begin;
					}
					}break;
				case 2:{
					if(jwf>=1&&me.energy>=2){
						jwf--;me.energy-=2;
						cout<<"挖掘成功!\nMining successful!\n";
						for(int i=0;i<4;i++)me.bag[fv()]=berry;
					}else{
						if(jwf<1){
							cout<<"哪里?\nWhere?\n";
						}else cout<<"好累...\nI am very tired...\n";
						sleep(1);
						system("cls");
						goto begin;
					}
					sleep(1);
					system("cls");
					}break;
				case 3:
					system("cls");
					cout<<"流浪汉:我想要8个浆果。\nI want 8 berries.\n(1给,0不给)\n";
					cin>>yi;
					if(yi==0){
						system("cls");
						goto begin;
					}else if(fv("浆果"),fvt>=8){
						for(int i=0;i<8;i++){
							me.bag[fv("浆果")].name="";
						}
						cout<<"流浪汉:谢谢你好心人。\n";
						if(!a1){
							a1=1;
							cout<<"你解锁了新地图。\n";
						}
					}else{
						system("cls");
						goto begin;
					}
					sleep(1);
					system("cls");
					fvt=0;
					break;
				default:
					me.location=home;
					break;
			}
		}else
		if(me.location==river){
			cout<<"-1.吃东西\n";
			cout<<"0.返回\n";
			cout<<"1.伐木 现有木:"<<rt<<" 需:斧头*1,精力*5,2时间\n";
			cout<<"2.采集水 现有:"<<rw<<" 需:精力*2,1时间\n";
			cout<<"3.老者 \"救我...\" 对话\n";
			cin>>yi;
			system("cls");
			switch(yi){
				case -1:
					eat();
					goto begin;
					break;
				case 1:{
					if(rt)rt-=1;
					else goto begin;
					bool nhave=1,ne=0;
					for(int i=0;i<20;i++){
						if(me.bag[i].name=="斧头"&&me.bag[i].b>=1){
							if(me.energy>=5){
								me.bag[i].b-=1;
								if(me.bag[i].b==0){
									me.bag[i].name="";
								}
								bool a2=1;
								for(int i=0;i<20;i++)
									if(me.bag[i].name==wood.name){
										me.bag[i].a+=4;
										a2=0;
										break;
									}
								if(a2){
									int a=fv();
									me.bag[a]=wood;
									me.bag[a].a=4;
								}
								cout<<"挖掘成功!\nMining successful!\n";
								me.energy-=5;
								ti+=1;
								sleep(1);
								system("cls");
							}else ne=1;
							nhave=0;
							break;
						}
					}
					if(nhave)cout<<"我没有工具。\nI have no tools.\n";
					else if(ne)cout<<"好累...\nI am very tired...\n";
					if(ne||nhave){
						sleep(1);
						system("cls");
						goto begin;
					}
					}break;
				case 2:{
					if(rw>=1&&me.energy>=2){
						rw--;me.energy-=2;
						cout<<"挖掘成功!\nMining successful!\n";
						me.bag[fv()]=water;
					}else{
						if(rw<1){
							cout<<"哪里?\nWhere?\n";
						}else cout<<"好累...\nI am very tired...\n";
						sleep(1);
						system("cls");
						goto begin;
					}
					sleep(1);
					system("cls");
					}break;
				case 3:
					system("cls");
					cout<<"老者:我好渴,我想要1些水。\nI am very thirsty.I want thirk some water.\n(1给,0不给)\n";
					cin>>yi;
					if(yi==0){
						system("cls");
						goto begin;
					}else if(fv("水"),fvt>=1){
						me.bag[fv("水")].name="";
						cout<<"老者:谢谢你好心人。\n";
						if(!a2&&ssaw!=0){
							a2=1;
							cout<<"老者给了你一把武器:诡异的长刀\n";
							cout<<"长刀散发出一种怪异、令人不适的气息\n";
							cout<<"这是一把非法武器,上面带着诅咒\n";
							cout<<"你感到头晕目眩,你来到了诅咒之地\n";
							me.location=-1;
							short a=fv();
							me.bag[a].name="诡秘长刀";
							me.bag[a].a=10,me.bag[a].b=32,me.bag[a].c=0;
						}
					}else{
						system("cls");
						goto begin;
					}
					sleep(5);
					system("cls");
					fvt=0;
					break;
				default:
					me.location=home;
					break;
			}
		}else
		if(me.location==smalltown){
			cout<<"-1.吃东西\n";
			cout<<"0.返回\n";
			cout<<"1.采集小麦 现有木:"<<rt<<" 需:精力*2,1时间\n";
			cout<<"2.采集零件 现有:"<<rw<<" 需:精力*2,1时间\n";
			cin>>yi;
			system("cls");
			switch(yi){
				case -1:
					eat();
					goto begin;
					break;
				case 1:{
					if(tw2>=1&&me.energy>=2){
						tw2--;me.energy-=2;
						cout<<"挖掘成功!\nMining successful!\n";
						for(int i=0;i<3;i++)me.bag[fv()]=wheat;
					}else{
						if(tw2<1){
							cout<<"哪里?\nWhere?\n";
						}else cout<<"好累...\nI am very tired...\n";
						sleep(1);
						system("cls");
						goto begin;
					}
					sleep(1);
					system("cls");
					}break;
				case 2:{
					if(tp>=1&&me.energy>=2){
						tp--;me.energy-=2;
						bool a2=1;
						for(int i=0;i<20;i++)
							if(me.bag[i].name==parts.name){
								me.bag[i].a+=3;
								a2=0;
								break;
							}
						if(a2){
							int a=fv();
							me.bag[a]=parts;
							me.bag[a].a=3;
						}
						cout<<"挖掘成功!\nMining successful!\n";
					}else{
						if(tp<1){
							cout<<"哪里?\nWhere?\n";
						}else cout<<"好累...\nI am very tired...\n";
						sleep(1);
						system("cls");
						goto begin;
					}
					sleep(1);
					system("cls");
					}break;
				default:
					me.location=home;
					break;
			}
		}else
		if(me.location==-1){
			cout<<"-1.吃东西\n";
			cout<<"0.返回\n";
			
			for(int i=0;i<120;i++)cout<<"-";
			cout<<"\n\033[31m这里很怪异,你在这没有感觉到饥饿和口渴,\
经管如此,你还是因为周围怪异的气氛感到后背阴凉。\033[30m\n";
			cin>>yi;
			switch(yi){
				case 1:
					//TODO
					break;
				case 2:
					//TODO
					break;
				default:
					//TODO
					break;
			}
			system("cls");
		}
		
		if(ti/39){
			ti-=39;day+=1;
			if(day/91){
				day-=90;ssaw+=1;
			}
		}
		if(me.location!=-1){
			ti+=1;
			me.nhungry-=((rand()%3)>=1?1:2);
			if(me.nhungry<0){
				me.nhungry=0;
				me.hp-=((rand()%3)>=1?1:2);
			}
			if(me.nhungry<=20){
				me.confidence-=7;
			}else if(me.nhungry<=50){
				me.confidence-=3;
			}
			me.water-=((rand()%3)>=1?1:2);
			if(me.water<0){
				me.water=0;
				me.hp-=((rand()%3)>=1?1:2);
			}
			if(me.water<=20){
				me.confidence-=10;
			}else if(me.water<=50){
				me.confidence-=5;
			}
			if((ti==38)&&me.location!=home){
				me.confidence-=7;
			}
			if(me.confidence<0){
				me.confidence=0;
			}
			me.energy-=(!(rand()%4));
		}else me.confidence-=(!(rand()%4));
	}
	dd();
	cout<<"You die!\n";
	system("pause");
}
int main(){
	system("color f0");
	set();
	srand(time(0));
	int yi;
	cout<<"输入任意开始\n";
	cin>>yi;
	bool i=1;
	if(yi==309){
		fstream of("cd.f",ios::out);
		of<<"100 100 100 100 100 0 1 0 0 0 0";
		of.close();
		of.open("cdb.f",ios::out);
		of<<"0 斧头 5 30 0 ";
		of.close();
		of.open("ms.f",ios::out);
		of<<"10 18 10 15 15 18";
		of.close();
		cd();
	}else
	if(yi==419){
		cd();i=0;
		system("color 0f");
		system("cls");
		cout<<"开发者模式\n";
		cout<<"-2://set:a2\n-1://set:a1\n0://exit\n1://set:hp\n2://set:nhungry\n3://set:water\n4://set:energy\n5://set:confidence\n6://set:ti\n7://set:jt\n8://set:jwf\n9://set:tw2\n10://set:tp\n";
		int bf,bh;
		while(1){
			cin>>bf>>bh;
			switch(bf){
				case -2://set:a2
					a2=bh;
					break;
				case -1://set:a1
					a1=bh;
					break;
				case 0://exit
					goto a;
					break;
				case 1://set:hp
					me.hp=bh;
					break;
				case 2://set:nhungry
					me.nhungry=bh;
					break;
				case 3://set:water
					me.water=bh;
					break;
				case 4://set:energy
					me.energy=bh;
					break;
				case 5://set:confidence
					me.confidence=bh;
					break;
				case 6://set:ti
					ti=bh;
					break;
				case 7://set:jt
					jt=bh;
					break;
				case 8://set:jwf
					jwf=bh;
					break;
				case 9://set:tw2
					tw2=bh;
					break;
				case 10://set:tp
					tp=bh;
					break;
				default:
					//TODO
					break;
			}
		}
	}
	a:if(i)cd();
	system("color 4c");
	sleep(1);
	system("color 08");
	sleep(1);
	system("color f0");
	system("cls");
	game();
}
/*
case -1:
	eat();
	goto begin;
	break;
*/

帮助
-----------------------------------
v0.1.0 2024年10月4日 14:55:35
进入:
输入任意数字进入游戏,输入309重开(创造新存档)
机制:
血量:归0时死亡
满腹/水分:归0时扣血,会随时间降低
体力:干事情时消耗
精神:在属性低时/在外过夜时消耗,会影响伤害和爆率
注:满腹/水分是随机降低的,体力有概率随时间降低
背包:
一共有20格,只有材料可以堆叠,武器显示耐久
地点:
新增小溪,未完善
玩法:
活下去,
物品(官方)
斧头,短匕,魔刀(测试使用,已删除),木头
-----------------------------------
v0.1.1
eat:
在显示时间的界面输入-1,会出现吃的界面
(提示:吃一些怪怪的东西,会有彩蛋,比方斧头?)

地点:

新增许多


http://www.kler.cn/news/363915.html

相关文章:

  • 信息安全工程师(54)网络安全审计主要产品与技术指标
  • 【机器学习】VQ-VAE(Vector Quantized Variational Autoencoder)
  • 后端C++
  • 凹凸性和拐点的概念
  • LeetCode练习-删除链表的第n个结节
  • 高效改进!防止DataX从HDFS导入关系型数据库丢数据
  • [LeetCode] 78. 子集
  • 标准函数let、run、also、all、with、takeIf、takeUnless
  • [LeetCode] 207. 课程表
  • 【Java知识】一款强大的SQL处理库JSqlPaser
  • 【优选算法篇】在分割中追寻秩序:二分查找的智慧轨迹
  • Oracle CONNECT BY、PRIOR和START WITH关键字详解
  • MoCoOp: Mixture of Prompt Learning for Vision Language Models
  • PHP多功能图片编辑器
  • 深入解析Golang GMP
  • WebSocket Secure (WSS)
  • 在python中,导入Echart.js并运用可视化图表
  • docker run和docker start的区别
  • Rust编程语言变量的所有权(ownership)
  • Web前端-JavaScript输入输出语法
  • APP综合应用之业务场景脚本测试任务(5)--多重继承与总结
  • mov 转 mp4
  • 信号与系统学习:傅里叶级数
  • HarmonyOS 最新API12 创建云端一体化项目(带图展示)
  • 基于stm32的楼宇照明控制系统设计
  • 代码解释(10.20)