社区讨论

林场模拟器

灌水区参与者 8已保存回复 21

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
21 条
当前快照
1 份
快照标识符
@m2h9hwrk
此快照首次捕获于
2024/10/20 15:24
去年
此快照最后确认于
2025/11/05 01:39
4 个月前
查看原帖
做了好久,通关仅需三分钟左右。
一定要仔细阅读每一行文字。但不是解谜
通关步骤:砍树--种植树苗--合成木桶--给树苗浇水
可以顺便解锁全成就。
CPP
#include <bits/stdc++.h>
#include <windows.h>
#include <conio.h>
using namespace std;
int ti(float a) {return ((int)(a*10+5))/10;}
void Setpos(float x,float y){COORD pos;pos.X=ti(y*4)/2;pos.Y=ti(x);SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);}
string mapp[100][100];
struct item{
	string name;
	string use; 
};
item _(string a,string b){
	item h;
	h.name=a;
	h.use=b;
	return h;
};
bool ftree,fwood,fcraft,froad,fsapling,fwtr,fgoal; 
int fgoals;
const int th=9; 
item its[th]={
	_("手","用手撸掉并获取地面上的东西,按下'1'键撸掉你旁边所有的方块,树或石头"),
	_("木材","来自森林的木材,可以放置在空地上也能用于制作物品,按下'1'键放置"), 
	_("树苗","树木掉落的树苗,放置在空地上后浇水可以长大,按下'1'键放置"),
	_("苹果","你可以吃掉它,按下'1'键吃掉"), 
	_("石头","来自石堆或地下,你可以用它来合成一些工具"),
	_("木棍","一根很好的棍子,可以用来合成一些工具"), 
	_("石铲","用来铺路的铲子,按下'1'把脚下铲成道路,按下'2'把脚下恢复成空地。用来连接地点。"),
	_("木桶","用木桶搬水让树苗长大,在水边按'1'盛水"), 
	_("盛水的木桶","在树苗旁按'1'泼水")
}; int bkp[th]={ 1 };

struct recipe{
	int done;
	int r1,n1,r2,n2;
};
recipe o(int a,int b,int c,int d,int e){
	recipe m;
	m.done=a;
	m.r1=b;
	m.n1=c;
	m.r2=d;
	m.n2=e;
	return m;
}
const int reth=4;
recipe rs[reth]={
	o(5,1,2,0,0),
	o(6,5,2,4,1),
	o(1,3,3,0,0),
	o(7,1,5,0,0) 
};

int main(){
//■
	CONSOLE_CURSOR_INFO cursor_info={1,0};
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
	system("cls");
	cout<<"                  林场模拟器"<<endl;
	cout<<"                创造和开发游戏"<<endl<<endl;
	cout<<"              》请按任意键开始《" <<endl;
	getch();
	system("cls");
	cout<<"你是否要手动输入种子生成?(如果要请按'1',使用随机种子按其他键)\n";
	int ll=getch();
	if(ll=='1'){
		cout<<"请输入一个小于 100000000(10^8) 的数:";
		int hn;cin>>hn;
		srand(hn); 
	}else{
		srand(time(0));
	}
	cout<<"世界正在生成....."<<endl;
	for(int i=0;i<100;i++){
		for(int j=0;j<100;j++){
			mapp[i][j]="  "; 
		}
	}
	for(int i=0;i<150;i++){
		mapp[rand()%100][rand()%100]="树"; 
	}
	for(int i=0;i<20;i++){
	int chix=rand()%100,chiy=rand()%100;
	if(min(chix,chiy)<3) continue;
	mapp[chix][chiy]="水";
		int chir=(rand()*rand())%4;
		if(chir==1){
			mapp[chix-1][chiy]="水"; 
		}else if(chir==2){
			mapp[chix][chiy-1]="水"; 
			mapp[chix-1][chiy-1]="水";
		}else if(chir==3){
			mapp[chix-1][chiy-1]="水";
			mapp[chix-1][chiy]="水";
			mapp[chix][chiy-1]="水"; 
		} 
	}
	for(int i=0;i<20;i++){
	int chix=rand()%100,chiy=rand()%100;
	if(min(chix,chiy)<3) continue;
	mapp[chix][chiy]="石";
		int chir=(rand()*rand())%4;
		if(chir==1){
			mapp[chix-1][chiy]="石"; 
		}else if(chir==2){
			mapp[chix][chiy-1]="石"; 
			mapp[chix-1][chiy-1]="石";
		}else if(chir==3){
			mapp[chix-1][chiy-1]="石";
			mapp[chix-1][chiy]="石";
			mapp[chix][chiy-1]="石"; 
		} 
	}
	int chux,chuy;
	while(true){
		chux=rand()%100;
		chuy=rand()%100;
		if(mapp[chux][chuy]=="  "){
			break;
		} 
	}
	int mx=chux,my=chuy;
	Sleep(2000);
	system("cls");
	cout<<"你生活在一个很缺木头的地方。\n";
	Sleep(1000);
	cout<<"今天村长委托你来到一片森林里。\n";
	Sleep(1000);
	cout<<"他说你需要在森林里建造一个可持续的林场,\n";
	Sleep(1000);
	cout<<"但森林里没有人,你也没有任何工具\n";
	Sleep(1000);
	cout<<"看来只能从0开始了\n";
	Sleep(1000);
	system("pause"); 
	system("cls");
	int nowt=0,nown=1;
	while(true){
		Setpos(0,0);
		int lx=mx,ly=my;
		cout<<"+------------------------------------------+"<<endl;
		for(int i=-10;i<=10;i++){cout<<"|";
			for(int j=-10;j<=10;j++){
				if(i==0&&j==0) cout<<"我";
				else if(mx+i<0||mx+i>99||my+j<0||my+j>99) cout<<"■"; 
				else cout<<mapp[mx+i][my+j];
			}
			cout<<"|";
			if(i==-9) cout<<"      按下'e'键查看背包";
			if(i==-8) cout<<"      按下'Esc'暂停游戏";
			if(i==-7) cout<<"      使用'w','a','s','d'移动";
			if(i==-6) cout<<"      按下'r'键进入合成区"; 
	 if(i==-5&&ftree) cout<<"      达成成就:伐木工";
	 if(i==-4&&fwood) cout<<"      达成成就:储存资源";
	if(i==-3&&fcraft) cout<<"      达成成就:合成工具";
	 if(i==-2&&froad) cout<<"      达成成就:铺设道路 冷知识:走在道路上速度很快";
  if(i==-1&&fsapling) cout<<"      达成成就:栽种树苗";
   	   if(i==0&&fwtr) cout<<"      达成成就:木桶取水";
  	  if(i==1&&fgoal) cout<<"      达成最终成就:植树造林    养大10棵树苗即可通关";
	  if(i==2&&fgoal) cout<<"      目前已养大"<<fgoals<<"棵树";
 if(i==3&&fgoals>=10) cout<<"      任务已完成,按下'z'键结束游戏";  
			cout<<endl;  
		}
		cout<<"+------------------------------------------+"<<endl;
		cout<<"你现在正在使用:"<<its[nowt].name<<"  "<<its[nowt].use<<"  按下'↓'切换正在使用的物品                                                                                           "<<endl;
		char k=getch();
		if(k=='w'||k=='W') mx--;
		else if(k=='a'||k=='A') my--;
		else if(k=='s'||k=='S') mx++;
		else if(k=='d'||k=='D') my++;
		if(k=='1'||k=='!'){
			if(nowt==0){
				if(mx!=0&&mapp[mx-1][my]=="树"){ftree=1;bkp[1]++;bkp[2]++;mapp[mx-1][my]="  ";if(rand()%3==0) bkp[3]++;}; 
				if(mx!=99&&mapp[mx+1][my]=="树"){ftree=1;bkp[1]++;bkp[2]++;mapp[mx+1][my]="  ";if(rand()%3==0) bkp[3]++;};
				if(my!=0&&mapp[mx][my-1]=="树"){ftree=1;bkp[1]++;bkp[2]++;mapp[mx][my-1]="  ";if(rand()%3==0) bkp[3]++;};
				if(my!=99&&mapp[mx][my+1]=="树"){ftree=1;bkp[1]++;bkp[2]++;mapp[mx][my+1]="  ";if(rand()%3==0) bkp[3]++;};
				if(mx!=0&&mapp[mx-1][my]=="石"){bkp[4]++;mapp[mx-1][my]="  ";}; 
				if(mx!=99&&mapp[mx+1][my]=="石"){bkp[4]++;mapp[mx+1][my]="  ";};
				if(my!=0&&mapp[mx][my-1]=="石"){bkp[4]++;mapp[mx][my-1]="  ";};
				if(my!=99&&mapp[mx][my+1]=="石"){bkp[4]++;mapp[mx][my+1]="  ";};
				if(mx!=0&&mapp[mx-1][my]=="木"){bkp[1]++;mapp[mx-1][my]="  ";}; 
				if(mx!=99&&mapp[mx+1][my]=="木"){bkp[1]++;mapp[mx+1][my]="  ";};
				if(my!=0&&mapp[mx][my-1]=="木"){bkp[1]++;mapp[mx][my-1]="  ";};
				if(my!=99&&mapp[mx][my+1]=="木"){bkp[1]++;mapp[mx][my+1]="  ";};
			}else if(nowt==3){
				nown--;
				bkp[3]--;
				if(nown==0) nowt=0;
			}else if(nowt==1){
				cout<<"你要在哪里放置木头?(i上 j左 k下 L右)";
				char tt=getch();
				if(mx!=0&&(tt=='i'||tt=='I')&&mapp[mx-1][my]=="  "){fwood=1;bkp[1]--;nown--;mapp[mx-1][my]="木";};
				if(my!=0&&(tt=='j'||tt=='J')&&mapp[mx][my-1]=="  "){fwood=1;bkp[1]--;nown--;mapp[mx][my-1]="木";};
				if(mx!=99&&(tt=='k'||tt=='K')&&mapp[mx+1][my]=="  "){fwood=1;bkp[1]--;nown--;mapp[mx+1][my]="木";};
				if(my!=99&&(tt=='l'||tt=='L')&&mapp[mx][my+1]=="  "){fwood=1;bkp[1]--;nown--;mapp[mx][my+1]="木";}; 
				if(nown==0){
					nowt=0;
				} 
				system("cls"); 
			}else if(nowt==2){
				cout<<"你要在哪里放置树苗?(i上 j左 k下 L右)";
				char tt=getch();
				if(mx!=0&&(tt=='i'||tt=='I')&&mapp[mx-1][my]=="  "){bkp[2]--;nown--;mapp[mx-1][my]="苗";fsapling=1;};
				if(my!=0&&(tt=='j'||tt=='J')&&mapp[mx][my-1]=="  "){bkp[2]--;nown--;mapp[mx][my-1]="苗";fsapling=1;};
				if(mx!=99&&(tt=='k'||tt=='K')&&mapp[mx+1][my]=="  "){bkp[2]--;nown--;mapp[mx+1][my]="苗";fsapling=1;};
				if(my!=99&&(tt=='l'||tt=='L')&&mapp[mx][my+1]=="  "){bkp[2]--;nown--;mapp[mx][my+1]="苗";fsapling=1;}; 
				if(nown==0){
					nowt=0;
				} 
				system("cls"); 
			}else if(nowt==6){
				mapp[mx][my]="□"; froad=1;
			}else if(nowt==7){
				if(mx!=0&&mapp[mx-1][my]=="水"||mx!=99&&mapp[mx+1][my]=="水"||my!=0&&mapp[mx][my-1]=="水"||my!=99&&mapp[mx][my+1]=="水"){bkp[7]--;bkp[8]++;nowt=8;fwtr=1;}; 
			}else if(nowt==8){
				bool f=false; 
				if(mx!=0&&mapp[mx-1][my]=="苗"){f=true;mapp[mx-1][my]="树";fgoal=1;fgoals++;}; 
				if(mx!=99&&mapp[mx+1][my]=="苗"){f=true;mapp[mx+1][my]="树";fgoal=1;fgoals++;};
				if(my!=0&&mapp[mx][my-1]=="苗"){f=true;mapp[mx][my-1]="树";fgoal=1;fgoals++;};
				if(my!=99&&mapp[mx][my+1]=="苗"){f=true;mapp[mx][my+1]="树";fgoal=1;fgoals++;};
				if(f){
					bkp[7]++;bkp[8]--;nowt=7;
				}
			}
		} 
		if(k=='2'){
			if(nowt==6){
				mapp[mx][my]="  "; 
			}
		} 
		if(k=='e'||k=='E'){
			system("cls");
			cout<<"背包\n\n"; 
			for(int i=1;i<th;i++){
				if(bkp[i]!=0){
					cout<<its[i].name<<" "<<bkp[i]<<"个   "<<its[i].use<<endl;
				}
			} 
			cout<<"\n\n请按任意键退出";
			getch();
			system("cls");
		} 
		if((k=='z'||k=='Z')&&fgoals>=10){
			break;
		}
		if(k==80){int y;for(int i=(nowt+1)%th;i<2*th;i++){if(bkp[i%th]!=0){y=i%th;break;}}nowt=y;nown=bkp[y];};
		if(k==27){system("cls");cout<<"游戏已暂停\n\n按下空格键继续游戏\n按下'q'键结束游戏";while(true){char tt=getch();if(tt==' '){break;}else if(tt=='q'||tt=='Q'){return 0;}}};
		if(k=='r'||k=='R'){
			system("cls");
			cout<<"合成区\n\n";
			for(int i=0;i<reth;i++){
				cout<<i+1<<":"<<its[rs[i].done].name<<"="<<its[rs[i].r1].name<<rs[i].n1<<"个";
				if(rs[i].r2!=0){
					cout<<"+"<<its[rs[i].r2].name<<rs[i].n2<<"个";
				} 
				cout<<endl;
			} 
			cout<<"\n输入合成编号合成物品,按下'Esc'键退出合成区";
			while(true){
				char tt=getch();
				if(tt==27){
					break;
				}else if(isdigit(tt)&&tt!=0&&tt-'0'<=reth){
					if(bkp[rs[tt-'0'-1].r1]>=rs[tt-'0'-1].n1&&bkp[rs[tt-'0'-1].r2]>=rs[tt-'0'-1].n2){
						cout<<"\n合成成功!";
						bkp[rs[tt-'0'-1].r1]-=rs[tt-'0'-1].n1; 
						bkp[rs[tt-'0'-1].r2]-=rs[tt-'0'-1].n2;
						bkp[rs[tt-'0'-1].done]++;
						fcraft=1;
						Sleep(1000);
						break; 
					}else{
						cout<<"\n材料不足,合成失败";
						Sleep(1000);
						break;
					}
				}
			}
		}
		if(mx<0||mx>99||my<0||my>99){
			mx=lx;my=ly;
		}
		if(mapp[mx][my]!="  "&&mapp[mx][my]!="□"){
			mx=lx;my=ly;
		}
		if(mapp[mx][my]=="  ") Sleep(30);
	}
	system("cls");
	cout<<"你带着好消息回到了村庄,\n";
	Sleep(1000);
	cout<<"村长听见了很开心。\n";
	Sleep(1000);
	cout<<"所以他送给你了1000道绿题以示感谢\n";
	Sleep(1000);
	cout<<"你开心的抱着绿题走了\n\n\n";
	Sleep(1000);
	cout<<"感谢游玩\n制作:yangyang826\n---------------\n\nFSOI\n10月20日"; 
	return 0;
}

回复

21 条回复,欢迎继续交流。

正在加载回复...