69,639
社区成员
发帖
与我相关
我的任务
分享
#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。
大佬们帮我指正一下错误吧,谢谢。
程序有问题是因为hpf()函数中的
if(an('K')){
pfxz=xz;
zxz=3;
return 0;
}
cout<<"换装"<<endl;
“K”可以改成“L”