-
个人简介
开始时间: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); } } -
最近活动