社区讨论
林场模拟器
灌水区参与者 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 条回复,欢迎继续交流。
正在加载回复...