• 个人简介

    开始时间:2026/3/1

    结束时间:2026/3/14

    存档指令/save和读档指令/load功能:关闭运行窗口前输入指令/save即可存档,重进后输入指令/load回到上一次保存的所有进度

    #include<iostream>
    #include<windows.h>
    #include<conio.h>
    #include<cmath>
    #include<cstring>
    #include<ctime>
    #include<cstdlib>
    #include<fstream>
    using namespace std;
    bool near_(int P1,int P2){
        if(P1==P2-1||P1==P2+1||P1==P2+120||P1==P2-120)return true;
        return false;
    }
    struct Arrow{
        int pos;
        bool active,direction;
    };
    void saveGame(string game[],int P1,int P2,int P1_blood,int P2_blood,int P1_power,int P2_power,bool P1_cheating,bool P2_cheating,string P1_skin,string P2_skin,int P1_arrow_count,int P2_arrow_count,int P1_blood_first,int P2_blood_first){
        ofstream fout("save.txt");
        fout<<P1<<" "<<P2<<" "<<P1_blood<<" "<<P2_blood<<" "<<P1_power<<" "<<P2_power<<" "<<P1_cheating<<" "<<P2_cheating<<" "<<P1_skin<<" "<<P2_skin<<" "<<P1_arrow_count<<" "<<P2_arrow_count<<" "<<P1_blood_first<<" "<<P2_blood_first<<endl;
        for(int i=0;i<3000;i++)fout<<game[i]<<endl;
        fout.close();
    }
    void loadGame(string game[],int &P1,int &P2,int &P1_blood,int &P2_blood,int &P1_power,int &P2_power,bool &P1_cheating,bool &P2_cheating,string &P1_skin,string &P2_skin,int &P1_arrow_count,int &P2_arrow_count,int &P1_blood_first,int &P2_blood_first){
        ifstream fin("save.txt");
        if(!fin)return;
        fin>>P1>>P2>>P1_blood>>P2_blood>>P1_power>>P2_power>>P1_cheating>>P2_cheating>>P1_skin>>P2_skin>>P1_arrow_count>>P2_arrow_count>>P1_blood_first>>P2_blood_first;
        for(int i=0;i<3000;i++)fin>>game[i];
        fin.close();
    }
    int main(){
        system("title gf25002的双人版PVP(开始时间2026/3/1,结束时间2026/3/14)");
        string game[3000],P1_skin="1",P2_skin="2",command;
        int P1=1500,P2=1530,P1_ender_pearl,P2_ender_pearl,P1_blood,P2_blood,P1_power=1,P2_power=1,P1_arrow_count=0,P2_arrow_count=0,P1_blood_first=20,P2_blood_first=20;
        bool gameover=false,P1_cheating=false,P2_cheating=false,P1_ender_pearl_out=false,P2_ender_pearl_out=false,P1_enderpearling_dir=false,P2_enderpearling_dir=false,need_clear=false;
        Arrow P1_arrows[25],P2_arrows[25];
        for(int i=0;i<=2999;i++){
            if(i%120==0||(i+1)%120==0)game[i]="|";
            else if((i>0&&i<119)||(i>2880&&i<2999))game[i]="-";
            else game[i]=" ";
        }
        while(1){
            cout<<"                                      是否输入玩家初始血量?(不输入默认初始血量为20)\n                                                          (y/n)\n";
            int choose=_getch();
            if(choose=='y'||choose=='Y'){
                cout<<"                                                      === 设置 ===\n                                                      玩家一血量:";
                cin>>P1_blood_first;
                cout<<"                                                      玩家二血量:";
                cin>>P2_blood_first;
                break;
            }else if(choose=='n'||choose=='N')break;
            else cout<<"                                                      无效选择!\n"<<endl;
        }
        cout<<"                                                  (按任意键继续......)";
        P1_blood=P1_blood_first,P2_blood=P2_blood_first;
        while(!gameover){
            if(P1_ender_pearl_out){
                P1_ender_pearl+=(P1_enderpearling_dir?1:-1);
                if(P1_ender_pearl%120==0||(P1_ender_pearl+1)%120==0||P1_ender_pearl<=119||P1_ender_pearl>=2880)P1_ender_pearl_out=false;
                need_clear=true;
            }
            if(P2_ender_pearl_out){
                P2_ender_pearl+=(P2_enderpearling_dir?1:-1);
                if(P2_ender_pearl%120==0||(P2_ender_pearl+1)%120==0||P2_ender_pearl<=119||P2_ender_pearl>=2880)P2_ender_pearl_out=false;
                need_clear=true;
            }
            for(int i=0;i<20;i++){
                if(P1_arrows[i].active){
                    P1_arrows[i].pos+=(P1_arrows[i].direction?1:-1);
                    if(P1_arrows[i].pos%120==0||(P1_arrows[i].pos+1)%120==0||P1_arrows[i].pos<=119||P1_arrows[i].pos>=2880)P1_arrows[i].active=false;
                    else if(P1_arrows[i].pos==P2&&!P2_cheating)P2_blood-=2*P1_power,P1_arrows[i].active=false;
                    need_clear=true;
                }
                if(P2_arrows[i].active){
                    P2_arrows[i].pos+=(P2_arrows[i].direction?1:-1);
                    if(P2_arrows[i].pos%120==0||(P2_arrows[i].pos+1)%120==0||P2_arrows[i].pos<=119||P2_arrows[i].pos>=2880)P2_arrows[i].active=false;
                    else if(P2_arrows[i].pos==P1&&!P1_cheating)P1_blood-=2*P2_power,P2_arrows[i].active=false;
                    need_clear=true;
                }
            }
            if(_kbhit()){
                need_clear=true;
                switch(_getch()){
                    case 'w':if(!(P1>=0&&P1<120))if(P1!=P2+120||P1_cheating==true)P1-=120;break;
                    case 'a':if(!(P1%120==0))if(P1!=P2+1||P1_cheating==true)P1--;if(P1_cheating==false)P1_skin="d";break;
                    case 's':if(!(P1>=2880&&P1<3000))if(P1!=P2-120||P1_cheating==true)P1+=120;break;
                    case 'd':if(!((P1+1)%120==0))if(P1!=P2-1||P1_cheating==true)P1++;if(P1_cheating==false)P1_skin="b";break;
                    case 'W':if(!(P1>=0&&P1<120))if(P1!=P2+120||P1_cheating==true)P1-=120;break;
                    case 'A':if(!(P1%120==0))if(P1!=P2+1||P1_cheating==true)P1--;if(P1_cheating==false)P1_skin="d";break;
                    case 'S':if(!(P1>=2880&&P1<3000))if(P1!=P2-120||P1_cheating==true)P1+=120;break;
                    case 'D':if(!((P1+1)%120==0))if(P1!=P2-1||P1_cheating==true)P1++;if(P1_cheating==false)P1_skin="b";break;
                    case 72:if(!(P2>=0&&P2<120))if(P2!=P1+120||P2_cheating==true)P2-=120;break;
                    case 75:if(!(P2%120==0))if(P2!=P1+1||P2_cheating==true)P2--;if(P2_cheating==false)P2_skin="a";break;
                    case 80:if(!(P2>=2880&&P2<3000))if(P2!=P1-120||P2_cheating==true)P2+=120;break;
                    case 77:if(!((P2+1)%120==0))if(P2!=P1-1||P2_cheating==true)P2++;if(P1_cheating==false)P2_skin="c";break;
                    case 'x':system("pause");break;
                    case 'q':if(near_(P1,P2)==true)P2_blood-=P1_power;break;
                    case 'X':system("pause");break;
                    case 'Q':if(near_(P1,P2)==true)P2_blood-=P1_power;break;
                    case '1':if(near_(P1,P2)==true)P1_blood-=P2_power;break;
                    case '/':cout<<"/";getline(cin,command);if(command=="kill P1"||command=="KILL P1")P1_blood=0,cout<<endl<<"玩家一被\"刻意的游戏设计\"击败了";else if(command=="kill P2"||command=="KILL P2")P2_blood=0,cout<<endl<<"玩家二被\"刻意的游戏设计\"击败了";else if(command=="cheatmode P1"||command=="CHEATMODE P1"){P1_cheating=!P1_cheating,P1_skin=P1_cheating?"p":"?";cout<<endl<<"已给予 玩家一 开挂权限"<<(P1_cheating?"ON":"OFF");}else if(command=="cheatmode P2"||command=="CHEATMODE P2"){P2_cheating=!P2_cheating,P2_skin=P2_cheating?"q":"?";cout<<endl<<"已给予 玩家二 开挂权限"<<(P2_cheating?"ON":"OFF");}else if(command=="reset"||command=="RESET")P1_blood=P2_blood=20,P1_power=P2_power=1,cout<<endl<<"已重置玩家血量与伤害!";else if(command=="help"||command=="HELP")cout<<"\ncommand help:\n1. WIN command format (/win player)\n2.MOREBLOOD command:format (/moreblood player)\n3.CHEATMODE command:format (/cheatmode player)\n4.RESET command:format (/reset)\n5.EFFECT command:format (/effect give player power)\n";else if(command=="effect give P1 power"||command=="EFFECT P1 power"){P1_power++,cout<<"玩家一伤害提升至"<<P1_power<<"!"<<endl;}else if(command=="effect give P2 power"||command=="EFFECT P2 power"){P2_power++,cout<<"玩家二伤害提升至"<<P2_power<<"!"<<endl;}else if(command=="effect give @a power"||command=="EFFECT @a power"){P1_power++,P2_power++,cout<<"所有玩家伤害提升!(P1:"<<P1_power<<" P2:"<<P2_power<<")"<<endl;}else if(command=="save"||command=="SAVE"){saveGame(game,P1,P2,P1_blood,P2_blood,P1_power,P2_power,P1_cheating,P2_cheating,P1_skin,P2_skin,P1_arrow_count,P2_arrow_count,P1_blood_first,P2_blood_first);cout<<"游戏已保存!"<<endl;}else if(command=="load"||command=="LOAD"){loadGame(game,P1,P2,P1_blood,P2_blood,P1_power,P2_power,P1_cheating,P2_cheating,P1_skin,P2_skin,P1_arrow_count,P2_arrow_count,P1_blood_first,P2_blood_first);cout<<"游戏已开启上一次存档!请按任意键开始游玩!(玩完了别忘了用/save哦!)"<<endl;}else if(command=="set"){cout<<"                                                      === 设置 ===\n                                                      玩家一血量:";cin>>P1_blood_first;cout<<"                                                      玩家二血量:";cin>>P2_blood_first;}else if(command=="tp P1 P2"||command=="TP P1 P2")P1=P2;else if(command=="tp P2 P1"||command=="TP P2 P1")P2=P1;else cout<<endl<<"未知指令:"<<command;cout<<endl<<"(按任意键继续......)";_getch();break;
                    case 'e':if(!P1_ender_pearl_out){P1_ender_pearl=(P1_skin=="b"?P1+1:P1-1);P1_ender_pearl_out=true;P1_enderpearling_dir=(P1_skin=="b");}break;
                    case 'r':if(P1_ender_pearl_out==true)P1=P1_ender_pearl,P1_ender_pearl_out=false;break;
                    case 'E':if(!P1_ender_pearl_out){P1_ender_pearl=(P1_skin=="b"?P1+1:P1-1);P1_ender_pearl_out=true;P1_enderpearling_dir=(P1_skin=="b");}break;
                    case 'R':if(P1_ender_pearl_out==true)P1=P1_ender_pearl,P1_ender_pearl_out=false;break;
                    case '2':if(!P2_ender_pearl_out){P2_ender_pearl=(P2_skin=="c"?P2+1:P2-1);P2_ender_pearl_out=true;P2_enderpearling_dir=(P2_skin=="c");}break;
                    case '3':if(P2_ender_pearl_out==true)P2=P2_ender_pearl,P2_ender_pearl_out=false;break;
                    case 'f':case 'F':if(P1_arrow_count<20){P1_arrows[P1_arrow_count].pos=P1+(P1_skin=="b"?1:-1);P1_arrows[P1_arrow_count].active=true;P1_arrows[P1_arrow_count].direction=(P1_skin=="b");P1_arrow_count++;}break;
                    case '4':if(P2_arrow_count<20){P2_arrows[P2_arrow_count].pos=P2+(P2_skin=="c"?1:-1);P2_arrows[P2_arrow_count].active=true;P2_arrows[P2_arrow_count].direction=(P2_skin=="c");P2_arrow_count++;}break;
                }
            }
            if(need_clear){
                system("cls");
                need_clear=false;
                for(int i=0;i<=2999;i++){
                    if(i%120==0||(i+1)%120==0||(i>0&&i<119)||(i>2880&&i<2999))cout<<game[i];
                    else if(i==P1||i==P1+120||i==P1+240||i==P1+360){
                        cout<<"■■■■";
                	}
                    else if(i==P2||i==P2+120||i==P2+240||i==P2+360){
                        cout<<"■■■■";
                	}
                	else if(i==P1+1||i==P1+2||i==P1+3||i==P1+4||i==P1+5||i==P1+6||i==P1+7||i==P1+121||i==P1+122||i==P1+123||i==P1+124||i==P1+125||i==P1+126||i==P1+127||i==P1+241||i==P1+242||i==P1+243||i==P1+244||i==P1+245||i==P1+246||i==P1+247||i==P1+361||i==P1+362||i==P1+363||i==P1+364||i==P1+365||i==P1+366||i==P1+367)cout<<"";
                	else if(i==P2+1||i==P2+2||i==P2+3||i==P2+4||i==P2+5||i==P2+6||i==P2+7||i==P2+121||i==P2+122||i==P2+123||i==P2+124||i==P2+125||i==P2+126||i==P2+127||i==P2+241||i==P2+242||i==P2+243||i==P2+244||i==P2+245||i==P2+246||i==P2+247||i==P2+361||i==P2+362||i==P2+363||i==P2+364||i==P2+365||i==P2+366||i==P2+367)cout<<"";
                    else if(P1_ender_pearl_out&&i==P1_ender_pearl)cout<<"θ";
                    else if(P2_ender_pearl_out&&i==P2_ender_pearl)cout<<"Ω";
                    else{
                        bool is_arrow=false;
                        for(int j=0;j<20;j++){
                            if(P1_arrows[j].active&&i==P1_arrows[j].pos){
                                cout<<(P1_arrows[j].direction?"→":"←");
                                is_arrow=true;
                                break;
                            }
                            if(P2_arrows[j].active&&i==P2_arrows[j].pos){
                                cout<<(P2_arrows[j].direction?"→":"←");
                                is_arrow=true;
                                break;
                            }
                        }
                        if(!is_arrow)cout<<" ";
                    }
                }
                cout<<"\n玩家一信息:血量:"<<P1_blood<<"/"<<P1_blood_first<<",伤害:"<<P1_power<<",箭矢剩余数量:"<<(20-P1_arrow_count)<<"支\n玩家二信息:血量:"<<P2_blood<<"/"<<P2_blood_first<<",伤害:"<<P2_power<<",剩余箭矢数量:"<<(20-P2_arrow_count)<<"支"<<endl;
            }
            if(P1_blood<=0&&!P1_cheating){
                cout<<"\n玩家二胜利!\n(按任意键结束游戏......)";
                _getch();
                Sleep(500);
                gameover=true;
            }
            if(P2_blood<=0&&!P2_cheating){
                cout<<"\n玩家一胜利!\n(按任意键结束游戏......)";
                _getch();
                Sleep(500);
                gameover=true;
            }
            Sleep(30);
        }
    }
    
  • 最近活动