谢谢了!请各位大佬看看,我哪里错了

2301_80044544 2024-02-07 11:43:21
#include<bits/stdc++.h>
#include<windows.h>
#include<bitset>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0) 
#include<fstream>
using namespace std; 
int tx[16][16],xz,pfxz=0,pfjs[5]={1,0,0,0,0},zxz=3;//图像显示 
string pf[5]={"士","土","王","丰","查"};
class stringint{//Tip:这个类是下次4.0更新(本地储存)用的 
		public:
		int strlong(string a){
			for(int i=0;;i++){
				if(a[i]=='\0'){
					return i;
				}
			} 
		}
		int cf(int a,int b){
			int c=1;
			for(int i=0;i<b;i++){
				c*=a;
			}
			return c;
		}
		int charint(char a){
			return int(a)-48;
		}
		int strint(string a){
			int b=0;
			for(int i=1;i<strlong(a)+1;i++){
				b+=charint(a[strlong(a)-i])*cf(10,i-1);
			}
			return b;
		}
};
class yddy{
	protected:
		int x1(int x){
			switch(drld){
				case 2:
				case 6:
					return x;
				case 7:
					return x-1;
				case 8:
					return x+1;
			}
		}
		int y1(int y){
			switch(drld){
				case 6:
					return y+2;
				default:
					return y+1;
			}
		}
	public:
		int drld;
		void yd(int i,int j){
			switch(tx[y1(i)][x1(j)]){
				case 1:
					tx[y1(i)][x1(j)]=4;//如果前面是人物,人物噶
					break;
				case 3:
					tx[y1(i)][x1(j)]=5;//如果前面是炮弹,敌人噶
					break;
				case 5:
					tx[y1(i)][x1(j)]=0;//如果爆过,恢复原样
					break;
				default:
					tx[y1(i)][x1(j)]=drld;//否则前进 
					break;
			}
			tx[i][j]=0;
		}
};
bool an(char a){
	if(KEY_DOWN(a)){//用于简化KEY_DOWN() 
		return true;
	}else{
		return false;
	}
}
int game(){
	srand((unsigned)time(NULL));
	yddy a;
	int x=7,y=13,fzdr[4]={0,0,0,0},drwz[4]={0,0,0,0},fj=0,sw=0;//x,y代表战机的x,y坐标;fzdr用于控制敌人出现的时间;drwz用于控制敌人出现的位置;fj用于控制炮弹发射的频率 
	while(1){
		tx[y][x]=0;//清除痕迹 
		fj++;
		if(an('A')&&x!=0){
			if(tx[y][x-1]==2||tx[y][x-1]>5){
				tx[y][x-1]=4;//如果即将碰到敌人,则死 
				tx[y][x]=0;
				sw++;
			}else{
				x--;
			}
		}
		if(an('D')&&x!=14){
			if(tx[y][x+1]==2||tx[y][x+1]>5){
				tx[y][x+1]=4;
				tx[y][x]=0;
				sw++;
			}else{
				x++;
			}
		}
		if(an('S')&&y!=14){
			if(tx[y+1][x]==2||tx[y+1][x]>5){
				tx[y+1][x]=4;
				tx[y][x]=0;
				sw++;
			}else{
				y++;
			}
		}
		if(an('W')&&y!=0){
			if(tx[y-1][x]==2||tx[y-1][x]>5){
				tx[y-1][x]=4;
				tx[y][x]=0;
				sw++;
			}else{
				y--;
			}
		}
		if(an('K')&&fj>5){//如果等待超过0.5s,符合条件可开火 
			tx[y-1][x]=3;
			fj=0;
		} 
		tx[y][x]=1;//定位人物
		for(int i=0;i<4;i++){
			if(fzdr[i]==0){//当是20的倍数时(间隔2s),出现敌人 
				drwz[i]=rand()%15+0;
				fzdr[i]=rand()%15+10;
				if(i==0){
					tx[0][drwz[i]]=2;
				}
				if(i==1){
					tx[0][drwz[i]]=6;
				}
				if(i==2){
					tx[0][drwz[i]]=7;
				}
				if(i==3){
					tx[0][drwz[i]]=8;
				}
			}
			fzdr[i]--;
		}
		for(int i=14;i>-1;i--){
			for(int j=14;j>-1;j--){
				if(tx[i][j]==2||tx[i][j]>5){
					if(tx[i][j]==7&&j==0){
						tx[i][j]=8;
					}
					if(tx[i][j]==8&&j==14){
						tx[i][j]=7;
					}
					a.drld=tx[i][j];
					a.yd(i,j);
				}
			}
		}
		for(int i=0;i<15;i++){
			for(int j=0;j<15;j++){
				if(tx[i][j]==3){//炮弹前进 
					tx[i-1][j]=3;
					tx[i][j]=0;
				}
			}
		}
		for(int i=0;i<15;i++){
			for(int j=0;j<15;j++){
				switch(tx[i][j]){//显示模块 
					case 0:
						cout<<"  ";//空格 
						break;
					case 1:
						if(sw==0){
							cout<<pf[pfxz];//飞机 
						}
						break;
					case 2:
						cout<<"平";//敌人 
						break;
					case 6:
						cout<<"丅";//敌人 
						break;
					case 7:
					case 8:
						cout<<"甲";//敌人 
						break;
					case 3:
						cout<<"||";//炮弹 
						break;
					case 4:
						cout<<"米";//被击毁 
						Sleep(1000);
						system("cls");
						cout<<"你噶了";
						Sleep(1000);
						zxz=3;
						return 0;
					case 5:
						cout<<"米";//击毁敌人 
						break;       
				}
			}
			cout<<endl;
		}
		Sleep(100);
		system("cls");
	}	
} 
int hpf(){
	int xz=0;
	while(1){
		if(an('W')){
			if(xz==0){
				xz=4;
			}else{
				xz--;
			}
		}
		if(an('S')){
			if(xz==4){
				xz=0;
			}else{
				xz++;
			}
		}
		if(an('K')){
			pfxz=xz;
			zxz=3;
			return 0;
		}
		cout<<"换装"<<endl;
		for(int i=0;i<5;i++){
			cout<<pf[i];
			if(i==xz){
				cout<<"      <";
			}
			cout<<endl;
		}
		Sleep(100);
		system("cls");
	}
}
int jm(){
	int xz=0;
	string a[3]=("游戏","换装","退出");
	while(1){
		if(an('W')){
			if(xz==0){
				xz=2;
			}else{
				xz--;
			}
		}
		if(an('S')){
			if(xz==2){
				xz=0;
			}else{
				xz++;
			}
		}
		if(an('K')){
			switch(xz){
				case 0:
					zxz=0;
					break;
				case 1:
					zxz=1;
					break;
				case 2:
					zxz=2;
					break;
			}
			return 0;
		}
		cout<<"飞机大战"<<endl;
		for(int i=0;i<3;i++){
			cout<<a[i];
			if(i==xz){
				cout<<"      <";
			}
			cout<<endl;
		}
		Sleep(100);
		system("cls");
	}
}
int main(){
	while(1){
		switch(zxz){
			case 0:
				game();
				break;
			case 1:
				hpf();
				break;
			case 2:
				return 0;
			case 3:
				jm();
				break;
		}
	}
}
//本游戏由阿泽制作,制作不易,请勿抄袭 

开始界面上三个都显示退出,游戏玩着玩着(或打开皮肤界面时)就return value 3221225477。

大佬们帮我指正一下错误吧,谢谢。

...全文
193 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 1

程序有问题是因为hpf()函数中的

if(an('K')){
              pfxz=xz;
            zxz=3;
            return 0;
}
cout<<"换装"<<endl;

“K”可以改成“L”

69,283

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧