趣味程序,求调
  • 板块灌水区
  • 楼主mu_yun_luogu
  • 当前回复10
  • 已保存回复10
  • 发布时间2025/1/18 15:32
  • 上次更新2025/1/18 17:37:15
查看原帖
趣味程序,求调
1600365
mu_yun_luogu楼主2025/1/18 15:32

我已经疯了qwq,有没有大佬帮忙解决一下freopen存档的问题,就是读取dt(地图)数组后不显示,游戏界面+存档

#include<bits/stdc++.h>
#include<conio.h>
#include<windows.h>

using namespace std;

int dt[150][500];
int pmx1,pmx2,pmy1,pmy2,mx,my;//屏幕xy和角色xy
int dmgd;//地面高度
string bb[12];int bbs[12]={0};char id[12];//背包与物品ID
int zzx,zzy;//游戏指针坐标(zzx,zzy)
char jw[20];int zz_jw;//键位和键位指针
int tick=10;//游戏刻(10tick/s)
int kscd_zz=0;//主菜单指针

void bc(){
	system("cls");
	cout<<"要等一下存档有点慢,\n看到有存档文件就可以关掉程序了";
	Sleep(10000);
	freopen("sj.json","w",stdout);
	for(int i=0;i<150;i++){
		for(int j=0;j<500;j++){
			cout<<dt[i][j]<<endl;
		}
		cout<<endl;
	}
	cout<<pmx1<<endl<<pmx2<<endl<<mx<<endl<<my<<endl;
	cout<<endl;
	for(int i=0;i<=10;i++){
		cout<<bbs[i]<<endl;
	}
	return;
}
		
void jw_ui(){
	string sc_pm;//单缓冲存储
	sc_pm+="按键:\n上";sc_pm+=jw[1];if(zz_jw==1){sc_pm+="√\n";}else{sc_pm+="\n";};
	sc_pm+="下";sc_pm+=jw[2];if(zz_jw==2){sc_pm+="√\n";}else{sc_pm+="\n";};
	sc_pm+="左";sc_pm+=jw[3];if(zz_jw==3){sc_pm+="√\n";}else{sc_pm+="\n";};
	sc_pm+="右";sc_pm+=jw[4];if(zz_jw==4){sc_pm+="√\n";}else{sc_pm+="\n";};
	sc_pm+="背包";sc_pm+=jw[5];if(zz_jw==5){sc_pm+="√\n";}else{sc_pm+="\n";};
	sc_pm+="摧毁";sc_pm+=jw[6];if(zz_jw==6){sc_pm+="√\n";}else{sc_pm+="\n";};
	sc_pm+="放置";sc_pm+=jw[7];if(zz_jw==7){sc_pm+="√\n";}else{sc_pm+="\n";};
	sc_pm+="放置确定";sc_pm+=jw[8];if(zz_jw==8){sc_pm+="√\n";}else{sc_pm+="\n";};
	sc_pm+="切换指针模式";sc_pm+=jw[9];if(zz_jw==9){sc_pm+="√\n";}else{sc_pm+="\n";};
	sc_pm+="改按键";sc_pm+=jw[10];if(zz_jw==10){sc_pm+="√\n";}else{sc_pm+="\n";};
	sc_pm+="按键查看";sc_pm+=jw[11];if(zz_jw==11){sc_pm+="√\n";}else{sc_pm+="\n";};
	
	system("cls");
	cout<<sc_pm;//输出缓冲
}

void dthz_1(){
	
	string sc_pm;//单缓冲存储
	for(int i=pmy1;i<pmy2;i++){
		for(int j=pmx1;j<pmx2;j++){
			if(i==my&&j==mx){sc_pm+="@";}
			else if(dt[i][j]==0){sc_pm+=" ";}
			else if(dt[i][j]==1){sc_pm+=id[1];}
			else if(dt[i][j]==2){sc_pm+=id[2];}
			else if(dt[i][j]==3){sc_pm+=id[3];}
			else if(dt[i][j]==4){sc_pm+=id[4];}
			else if(dt[i][j]==5){sc_pm+=id[5];}
			else if(dt[i][j]==6){sc_pm+=id[6];}
			else if(dt[i][j]==7){sc_pm+=id[7];}
			else if(dt[i][j]==8){sc_pm+=id[8];}
			else if(dt[i][j]==9){sc_pm+=id[9];}
			else if(dt[i][j]==10){sc_pm+=id[10];}
		}sc_pm+="\n";
	}system("cls");cout<<sc_pm;//输出缓冲
	cout<<"屏幕最左x:"<<pmx1<<"\n屏幕最右x:"<<pmx2<<"\n屏幕最上"<<150-pmy1<<"\n屏幕最下"<<150-pmy2<<"\n我的坐标"<<"("<<mx<<","<<150-my<<")";
	
}
void dthz_2(){
	
	string sc_pm;//单缓冲存储
	for(int i=pmy1;i<pmy2;i++){
		for(int j=pmx1;j<pmx2;j++){
			if(i==zzy&&j==zzx){sc_pm+=".";}
			else if(i==my&&j==mx){sc_pm+="@";}
			else if(dt[i][j]==0){sc_pm+=" ";}
			else if(dt[i][j]==1){sc_pm+=id[1];}
			else if(dt[i][j]==2){sc_pm+=id[2];}
			else if(dt[i][j]==3){sc_pm+=id[3];}
			else if(dt[i][j]==4){sc_pm+=id[4];}
			else if(dt[i][j]==5){sc_pm+=id[5];}
			else if(dt[i][j]==6){sc_pm+=id[6];}
			else if(dt[i][j]==7){sc_pm+=id[7];}
			else if(dt[i][j]==8){sc_pm+=id[8];}
			else if(dt[i][j]==9){sc_pm+=id[9];}
			else if(dt[i][j]==10){sc_pm+=id[10];}
		}sc_pm+="\n";
	}system("cls");cout<<sc_pm;//输出缓冲
	cout<<"屏幕最左x:"<<pmx1<<"\n屏幕最右x:"<<pmx2<<"\n屏幕最上"<<150-pmy1<<"\n屏幕最下"<<150-pmy2<<"\n我的坐标"<<"("<<mx<<","<<150-my<<")";
}

void zl(){
	if(dt[my+2][mx]==0&&dt[my+1][mx]==0){
		my++;
		if(pmy2-my<=3){
			pmy1++;
			pmy2=pmy1+9;
		}
		dthz_1();
	}
}

void aj_jc(){
	if(kbhit()){
		char ch1=getch();
		if(ch1==jw[12]){
			bc();
			return;
		}
		if(ch1==jw[3]){
			mx--;
			if((mx-pmx1)<10){
				pmx1--;
				pmx2=pmx1+31;
			}
			if(mx==0||dt[my][mx]!=0){
				mx++;
			}
			else{
				if(pmx1==0){
					pmx1++;
					pmx2=pmx1+31;
				}
				dthz_1();
			}
		}
		if(ch1==jw[4]){
			mx++;
			if((pmx2-mx)<10){
				pmx1++;
				pmx2=pmx1+31;
			}
			if(mx==500||dt[my][mx]!=0){
				mx--;
			}
			else{
				if(pmx2==501){
					pmx1--;
					pmx2=pmx1+31;
				}
				dthz_1();
			}
		}
		if(ch1==jw[1]){
			if(my!=1){
				if(my-pmy1==3){
					pmy1--;
					pmy2=pmy1+9;
				}
				if(dt[my+1][mx]!=0&&dt[my-1][mx]==0){
					my--;
					dthz_1();
				}
			}
		}
		if(ch1==jw[2]){
			if(my!=149){
				if(pmy2-my==3){
					pmy1++;
					pmy2=pmy1+9;
				}
				if(dt[my+1][mx]==0){
					my++;
					dthz_1();
				}
			}
		}
		if(ch1==jw[5]){
			system("cls");
			cout<<"背包:\n";
			for(int i=1;i<=10;i++){
				cout<<bb[i]<<"有:"<<bbs[i]<<"个\n";
			}
			while(1){
				if(kbhit()){
					char ch2=getch();
					if(ch2!=jw[5]){
						system("cls");
						cout<<"背包:\n";
						for(int i=1;i<=10;i++){
							cout<<bb[i]<<"有:"<<bbs[i]<<"个\n";
						}
					}
					else if(ch2==' '){
						system("cls");
						cout<<"背包:\n";
						for(int i=1;i<=10;i++){
							cout<<bb[i]<<"有:"<<bbs[i]<<"个\n";
						}
					}
					else{
						dthz_1();
						break;
					}
				}
			}
		}
		if(ch1==jw[9]){		
			zzx=mx;zzy=my;
			dthz_2();
			while(1){
				if(kbhit()){
					char ch2=getch();
					if(ch2==jw[9]){
						dthz_1();
						break;
					}
					if(ch2==jw[3]){
						if(mx-1!=zzx&&zzx!=1){
						zzx--;
							dthz_2();
						}
					}
					if(ch2==jw[4]){
						if(mx+1!=zzx&&zzx!=500){
							zzx++;
							dthz_2();
						}
					}
					if(ch2==jw[1]){
						if(my-1!=zzy&&zzy!=0){
							zzy--;
							dthz_2();
						}
					}
					if(ch2==jw[2]){
						if(my+1!=zzy&&zzy!=149){
							zzy++;
							dthz_2();
						}
					}
					if(ch2==jw[6]){
						if(zzx!=mx||zzy!=my){
							if(dt[zzy][zzx]!=0){
								bbs[dt[zzy][zzx]]+=1;
								dt[zzy][zzx]=0;
								dthz_2();
							}
						}
					}
					if(ch2==jw[7]){
						if(zzx!=mx||zzy!=my){
							if(dt[zzy][zzx]==0){
								int bbzz=1;
								system("cls");
								cout<<"背包:\n";
								for(int i=1;i<=10;i++){
									cout<<bb[i]<<"有:"<<bbs[i]<<"个";
									if(i==bbzz){
										cout<<"√\n";
									}
									else{
										cout<<"\n";
									}
								}
								while(1){
									if(kbhit()){
										char ch2=getch();
										if(ch2==jw[4]||ch2==jw[2]){
											bbzz++;
											if(bbzz>10){
												bbzz=1;
											}
											system("cls");
											cout<<"背包:\n";
											for(int i=1;i<=10;i++){
												cout<<bb[i]<<"有:"<<bbs[i]<<"个";
												if(i==bbzz){
													cout<<"√\n";
												}
												else{
													cout<<"\n";
												}
											}
										}
										if(ch2==jw[1]||ch2==jw[3]){
											bbzz--;
											if(bbzz<1){
												bbzz=10;
											}
											system("cls");
											cout<<"背包:\n";
											for(int i=1;i<=10;i++){
												cout<<bb[i]<<"有:"<<bbs[i]<<"个";
												if(i==bbzz){
													cout<<"√\n";
												}
												else{
													cout<<"\n";
												}
											}
										}
										if(ch2==jw[8]){
											if(bbs[bbzz]-1>=0){
												bbs[bbzz]--;
												dt[zzy][zzx]=bbzz;
												dthz_2();
												break;
											}
										}
										if(ch2==jw[7]){
											dthz_2();
											break;
										}
									}
								}
							}
						}
					}
				}
			Sleep(1000/tick);
			}
		}
		if(ch1==jw[11]){
			system("cls");
			cout<<"按键说明:\n正常模式:"<<jw[1]<<"上 "<<jw[2]<<"下 "<<jw[3]<<"左 "<<jw[4]<<"右 "<<jw[9]<<"切换指针模式 "<<jw[11]<<"按键说明 "<<jw[5]<<"背包 "<<jw[10]<<"修改键位\n\n指针模式:"<<jw[1]<<"上 "<<jw[2]<<"下 "<<jw[3]<<"左 "<<jw[4]<<"右 "<<jw[9]<<"切换正常模式 "<<jw[6]<<"挖掘 "<<jw[7]<<"防置(空格确认)(用wsad选择)\n按"<<jw[11]<<"即可退出哦~~~";
			while(1){
				if(kbhit()){
					char ch2=getch();
					if(ch2==jw[11]){
						dthz_1();
						break;
					}
				}
			}
		}
		if(ch1==jw[10]){
			zz_jw=1;
			jw_ui();
			while(1){
				if(_kbhit()){
					char ch2=getch();
					if(ch2==jw[3]||ch2==jw[1]){					
						if(zz_jw!=1){
							zz_jw--;
							jw_ui();
						}
					}
					if(ch2==jw[4]||ch2==jw[2]){
						if(zz_jw!=11){
							zz_jw++;
							jw_ui();
						}						
					}
					if(ch2==jw[8]){
						system("cls");
						cout<<"改成?";
						while(1){
							if(_kbhit()){
							char ch3=getch();
								jw[zz_jw]=ch3;
								jw_ui();
								break;
							}
						}
					}
					if(ch2==jw[10]){
						dthz_1();
						break;
					}		
				}
			}
		}
	}
}
/*开始菜单*/
void kscd_hz(){
	system("cls");
	cout<<"1.新游戏";if(kscd_zz==0){cout<<"√";}cout<<endl;
	cout<<"2.我要读档!!!";if(kscd_zz==1){cout<<"√";}cout<<endl;
	cout<<"空格确定"<<endl;
	}
/*梦开始的地方*/
int main(){
	/*窗口设置*/
	system("mode con cols=36 lines=20");
	system("color 3F");
	
	cout<<"按w,s来选择吧!"<<endl;kscd_hz();
	while(1){
		if(_kbhit()){
			char kscd_ch;
			kscd_ch=getch();
			if(kscd_ch=='w'){
				kscd_zz--;
				if(kscd_zz==-1){
					kscd_zz++;
				}
				kscd_hz();
			}
			if(kscd_ch=='s'){
				kscd_zz++;
				if(kscd_zz==2){
					kscd_zz--;
				}
				kscd_hz();
			}
			if(kscd_ch==' '){
				break;
			}
		}
	}
	
	id[0]='@';
	bb[1]="泥土";id[1]='^';//^
	bb[2]="石头";id[2]='#';//#
	bb[3]="原木";id[3]='$';//$
	bb[4]="树叶";id[4]='%';//%
	bb[5]="树苗";id[5]='*';//*
	bb[6]="未知";id[6]=' ';//
	bb[7]="未知";id[7]=' ';//
	bb[8]="未知";id[8]=' ';//
	bb[9]="未知";id[9]=' ';//
	bb[10]="未知";id[10]=' ';//

	jw[1]='w';
	jw[2]='s';
	jw[3]='a';
	jw[4]='d';
	jw[5]='b';
	jw[6]='j';
	jw[7]='k';
	jw[8]=' ';
	jw[9]='~';
	jw[10]='?';
	jw[11]='p';
	jw[12]='+';
	
	if(kscd_zz==0){
		cout<<"设置*屏幕最左x(0~469):";
		cin>>pmx1;pmx2=pmx1+31;
		while(pmx1<=-1||pmx2>=501){
			cout<<"重输入(0~469):";
			cin>>pmx1;
			pmx2=pmx1+31;
		}
		cout<<"设置*地面高度(145~5):";
		cin>>dmgd;
		while(dmgd<5||dmgd>145){
			cout<<"设置*地面高度(145~5):";
			cin>>dmgd;
		}
		dmgd=150-dmgd;
		mx=pmx1+16;
		my=dmgd-1;
		pmy1=my-4;
		pmy2=pmy1+9;
	
		for(int i=0;i<150;i++){//生成地形与树苗
			for(int j=0;j<500;j++){
				if(i==dmgd){
					dt[i][j]=1;
				}
				else if(i>dmgd){
					dt[i][j]=2;
				}
				else{
					int sj_tree;
					sj_tree=rand()%10;
					if(sj_tree==0){
						dt[i][j]=5;
					}
					else{
						dt[i][j]=0;
					}
				}
			}
		}
		for(int i=1;i<150;i++){//移除浮空树苗
			for(int j=0;j<500;j++){
				if(dt[i][j]==5){
					if(dt[i+1][j]!=1){
						dt[i][j]=0;
					}
				}
			}
		}
	
		for(int i=3;i<150;i++){//树苗拓展生成树
			for(int j=2;j<498;j++){
				if(dt[i][j]==5){
					dt[i][j]=3;dt[i-1][j]=3;dt[i-2][j]=3;
					dt[i-1][j+1]=4;dt[i-1][j-1]=4;dt[i-1][j+2]=4;dt[i-1][j-2]=4;dt[i-2][j+1]=4;dt[i-2][j-1]=4;dt[i-2][j+2]=4;dt[i-2][j-2]=4;dt[i-3][j+1]=4;dt[i-3][j-1]=4;dt[i-3][j]=4;
					j+=3;//防止连续生成树,但又不破坏树苗
				}
		 	}
		}	
	}
	else if(kscd_zz==1){
    **freopen("sj.json","r",stdin);
		for(int i=0;i<150;i++){
			for(int j=0;j<500;j++){
				cin>>dt[i][j];
			}
		}
		cin>>pmx1>>pmx2>>mx>>my;
		for(int i=0;i<=10;i++){
			cin>>bbs[i];**
		}
	}
	
	dthz_1();
	cout<<"\n@是你哦~\n如果你是新手得话,记得按p查看操作哦~"; 
	while(1){
		aj_jc();//检测按键
		zl();//游戏重力检测
		Sleep(1000/tick);//游戏刻
	}
	return 0;
}

求求了,帮帮忙。 保存部分在void bc(){ * } 存档部分在代码加粗部分 谢谢了

2025/1/18 15:32
加载中...