【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,会出现吃的界面
(提示:吃一些怪怪的东西,会有彩蛋,比方斧头?)
地点:
新增许多