-
个人简介
(′д`σ)σ SAJ
BU XING A我再也再也再也再也再也再也再也再也再也再也不诈骗了<(_ _)>.
(虽然说自己被骗不要赖在别人头上╮(╯▽╰)╭)好了,正文;
#include<algorithm> #include<cmath> #include<vector> #include<stdio.h> #include<iostream> #include<string> #include<cstring> #include<windows.h> #include<conio.h> #include<cstdlib> #include<ctime> #include<fstream> #define /*白色*/white SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); #define /*初始色*/original SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); #define /*红色*/red SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED); #define /*绿色*/green SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN); #define /*蓝色*/blue SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_BLUE); #define /*黄色*/yellow SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED |FOREGROUND_GREEN); #define /*粉色*/pink SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_RED |FOREGROUND_BLUE); #define /*淡蓝*/lightblue SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN |FOREGROUND_BLUE); #define /*灰色*/gray SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY); using namespace std; void gotoxy(int y,int x) { COORD coord; coord.X=x; coord.Y=y; HANDLE a=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(a,coord); } void coutwhat(int a,int b,int c,int d,string n) { int i,j; for(i=a;i<=c;i++) for(j=b;j<=d;j++) { gotoxy(i,j); cout<<n; } } void color(int x) { switch(x) { case 0:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN);break; case 1:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_GREEN);break; case 2:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_BLUE |FOREGROUND_GREEN);break; case 3:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_BLUE |FOREGROUND_GREEN);break; case 4:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_BLUE);break; case 5:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_BLUE |FOREGROUND_RED);break; case 7:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_RED);break; case 8:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_RED|FOREGROUND_GREEN);break; case 9:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_RED|FOREGROUND_BLUE);break; case 10:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);break; default:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE);break; } } int random(int n,int m) { int s; s=rand()%(m-n+1); s+=n; return s; } void cls() { system("cls"); } struct Player { string name; int hp; int HP; int attack; int defence; int fw;//0,1,2,3 int energy; int kill; int x; int y; int sc; int zl; int cs; }; Player player[5]; void printfssbh(int n) { int i,j,k; for(i=1;i<=4;i++) { gotoxy(0,i*25); cout<<player[i].energy<<"("<<player[i].energy/10.0<<"%)"<<player[i].kill<<"kill "; } //计算生命百分比 float a[5]; int b[5]; for(i=1;i<=n;i++) a[i]=(player[i].hp*1.0)/(player[i].HP*1.0); for(i=1;i<=n;i++) b[i]=a[i]*100; for(i=1;i<=n;i++) if (b[i]>10000) b[i]=0;//死者 else if (b[i]>100) b[i]=100;//血量溢出但还没死 //输出 for(i=1;i<=n;i++) { gotoxy(35+i,0); cout<<"|"; coutwhat(35+i,1,35+i,b[i],"#"); coutwhat(35+i,b[i]+1,35+i,100," "); gotoxy(35+i,101); cout<<"|"; cout<<a[i]*100.0<<'%'; cout<<" "<<player[i].hp; } } bool save[5]={1,1,1,1,1}; void printfplayer(string ml,int n) { int i; if (ml=="clear") { for(i=1;i<=n;i++) { gotoxy(player[i].x,player[i].y); cout<<" "; } } if (ml=="printf") { for(i=1;i<=n;i++) { if (save[i]==0) continue; color(i*3); gotoxy(player[i].x,player[i].y); cout<<"♀"; } } } void hidden() { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO CursorInfo;GetConsoleCursorInfo(handle, &CursorInfo); CursorInfo.bVisible = false; SetConsoleCursorInfo(handle, &CursorInfo); } /* 攻击方式: player 1 十字架攻击 player 2 小范围攻击 player 3 全战场攻击 (随机攻击一人) player 4 三角形攻击 */ int PVP(int n) { int r=n,m,i,j,k,sh; coutwhat(1,0,1,100,"="); coutwhat(2,0,32,0,"|"); coutwhat(33,0,33,100,"="); coutwhat(2,101,32,101,"|"); while(r>1) { for(i=1;i<=n;i++) if (save[i]==0) player[i].hp=21474836; int GJ[5]={0,0,0,0,0}; int qx=0,qy=0,zx=0,zy=0; hidden(); printfssbh(n); char l='/'; if (kbhit()) l=getch(); m=0; //已死亡玩家判断 if ((l=='w'||l=='a'||l=='s'||l=='d'||l=='x'||l=='q'||l=='e'||l=='z'||l=='c')&&save[1]==0) l='/'; if ((l=='u'||l=='i'||l=='o'||l=='j'||l=='k'||l=='l'||l=='m'||l==','||l=='.')&&save[2]==0) l='/'; if ((l>='1'&&l<='9')&&save[3]==0) l='/'; printfplayer("clear",n); switch(l) { //Player 1 case 'w':if (player[1].x-1>=4)player[1].x--;break; case 'a':if (player[1].y-1>=2)player[1].y--;break; case 's':if (player[1].x+1<=32)player[1].x++;break; case 'd':if (player[1].y+1<=100)player[1].y++;break; case 'x': { coutwhat(player[1].x,2,player[1].x,99,"-"); coutwhat(2,player[1].y,31,player[1].y,"|"); for(i=2;i<=4;i++) if (player[i].x==player[1].x||player[i].y==player[1].y) GJ[++m]=i; for(i=1;i<=m;i++) { if (save[GJ[i]]==0) continue; player[1].energy+=random(10,30); player[GJ[i]].energy+random(5,15); sh=player[1].attack-player[GJ[i]].defence; player[1].sc+=sh; player[GJ[i]].cs+=sh; player[GJ[i]].hp-=sh; gotoxy(player[GJ[i]].x,player[GJ[i]].y); cout<<'-'<<sh; if (player[GJ[i]].hp<=0) save[GJ[i]]=0,player[1].kill++,player[1].energy+=350,r--; } for(i=1;i<=m;i++) gotoxy(player[GJ[i]].x,player[GJ[i]].y); cout<<" "; coutwhat(player[1].x,2,player[1].x,100," "); coutwhat(2,player[1].y,31,player[1].y," "); break; } case 'q': { if (player[1].energy<1000) break; player[1].energy-=1000; m=random(367,763); player[2].energy-=m; if (n>=3) player[3].energy-=1000-m; sh=player[1].attack*3; for(i=2;i<=n;i++) { if (save[i]==0) continue; gotoxy(player[i].x-2,player[i].y); cout<<'-'<<sh-player[i].defence; player[i].hp-=sh-player[i].defence; player[1].sc+=sh-player[i].defence; player[i].cs+=sh-player[i].defence; if (player[i].hp<=0) player[1].kill++,player[1].energy+=350,save[i]=0; } break; } case 'e': { if (player[1].energy<500) break; player[1].energy-=500; m=random(player[1].attack*3,player[1].attack*5); player[1].zl+=m; player[1].hp+=m; gotoxy(player[1].x-1,player[1].y); cout<<"+"<<m; break; } //Player 2 case 'i':if (player[2].x-1>=1)player[2].x--;break; case 'j':if (player[2].y-1>=1)player[2].y--;break; case 'k':if (player[2].x+1<=32)player[2].x++;break; case 'l':if (player[2].y+1<=100)player[2].y++;break; case ',': { qx=player[2].x-5; qy=player[2].y-5; zx=player[2].x+5; zy=player[2].y+5; if (qx<=2) qx=2; if (qx>=32) qx=32; if (qy<=2) qy=2; if (qy>=100) qy=100; if (zx<=2) zx=2; if (zx>=32) zx=32; if (zy<=2) zy=2; if (zy>=100) zy=100; coutwhat(qx,qy,zx,zy,"#"); if (player[1].x>=qx&&player[1].x<=zx&&player[1].y>=qy&&player[1].y<=zy&&save[1]==1) GJ[++m]=1; for(i=3;i<=n;i++) if (player[i].x>=qx&&player[i].x<=zx&&player[i].y>=qy&&player[i].y<=zy&&save[i]==1) GJ[++m]=i; for(i=1;i<=m;i++) { player[2].energy+=random(10,30); player[GJ[i]].energy+random(5,15); sh=player[2].attack-player[GJ[i]].defence; player[2].sc+=sh; gotoxy(player[GJ[i]].x,player[GJ[i]].y); cout<<'-'<<sh; player[GJ[i]].cs+=sh; player[GJ[i]].hp-=sh; if (player[GJ[i]].hp<=0) save[GJ[i]]=0,player[2].kill++,player[2].energy+=350,r--; } for(i=1;i<=m;i++) gotoxy(player[GJ[i]].x,player[GJ[i]].y); cout<<" "; coutwhat(qx,qy,zx,zy," "); break; } case 'u': { if (player[2].energy<1000) break; player[2].energy-=1000; sh=player[2].attack*3.5; gotoxy(player[1].x-2,player[1].y); cout<<'-'<<sh-player[1].defence; player[1].hp-=sh-player[1].defence; player[1].cs+=sh-player[1].defence; player[2].sc+=sh-player[1].defence; for(i=3;i<=n;i++) { gotoxy(player[i].x-2,player[i].y); cout<<'-'<<sh-player[i].defence; player[i].hp-=sh-player[i].defence; player[i].cs+=sh-player[i].defence; player[2].sc+=sh-player[i].defence; } sh*=(n-1); gotoxy(player[2].x-1,player[2].y); cout<<'+'<<sh; player[2].hp+=sh; player[2].zl+=sh; break; } case 'o': { if (player[2].energy<500) break; player[2].energy-=500; m=random(player[2].attack*3,player[2].attack*5); player[2].zl+=m; player[2].hp+=m; gotoxy(player[2].x-1,player[2].y); cout<<"+"<<m; break; } //Player 3 case '1':if (player[3].x-1>=1)player[3].x--;break; case '2':if (player[3].y-1>=1)player[3].y--;break; case '3':if (player[3].x+1<=32)player[3].x++;break; case '4':if (player[3].y+1<=100)player[3].y++;break; case '5': { do m=random(1,n); while(m==3||save[m]==0); player[3].energy+=random(10,30); player[m].energy+random(5,15); sh=player[3].attack-player[m].defence; player[3].sc+=sh; gotoxy(player[m].x-2,player[m].y); cout<<'-'<<sh; player[m].cs+=sh; player[m].hp-=sh; if (player[m].hp<=0) save[m]=0,player[3].kill++,player[3].energy+=350,r--; gotoxy(player[m].x-2,player[m].y); cout<<" "; break; } case '6': { if (player[3].energy<1000) break; player[3].energy-=1000; m=0; for(i=1;i<=n;i++) if (i==3) continue; else if (player[i].hp*100/player[i].HP<=24) { GJ[++m]=i; } if (m==0) { do m=random(1,n); while(m==3); sh=player[3].attack*5.6; player[m].hp-=sh; player[m].cs+=sh; player[3].sc+=sh; break; } else { m=GJ[random(1,m)]; player[3].sc+=player[m].hp; player[m].cs+=player[m].hp; player[m].hp=0; save[m]=0; player[3].kill++,player[3].energy+=350,r--; break; } break; } case '7': { if (player[3].energy<500) break; player[3].energy-=500; m=random(player[3].attack*3,player[3].attack*5); player[3].zl+=m; player[3].hp+=m; gotoxy(player[3].x-1,player[3].y); cout<<"+"<<m; break; } } printfplayer("printf",n); } for(i=1;i<=n;i++) if (save[i]) break; return i; } int main() { srand(time(0)); hidden(); int n,i,win; blue cout<<"\t\t\t\t多人射击游戏"<<endl; red cout<<"请用全屏玩"<<endl; original printf("请选择游戏人数:\n"); green cout<<"1."; white cout<<"2人"<<endl; green cout<<"2."; white cout<<"3人"<<endl; char m; do m=_getch(); while(!(m>='1'&&m<='2')); n=m-'0'+1; system("cls"); player[1].x=1*random(6,8),player[1].y=1*random(6,8),player[1].HP=random(450000,678901),player[1].hp=player[1].HP,player[1].attack=random(3500,5500),player[1].defence=random(600,800); player[2].x=2*random(6,8),player[2].y=2*random(6,8),player[2].HP=random(670000,1000000),player[2].hp=player[2].HP,player[2].attack=random(2700,4600),player[2].defence=random(750,900); player[3].x=3*random(6,8),player[3].y=3*random(6,8),player[3].HP=random(389000,630000),player[3].hp=player[3].HP,player[3].attack=random(4800,6700),player[3].defence=random(540,700); player[4].x=4*random(6,8),player[4].y=4*random(6,8); cout<<"操作方式:\n"; cout<<"Player 1\n"; cout<<"上移:W\n"; cout<<"左移:A\n"; cout<<"下移:S\n"; cout<<"右移:D\n"; cout<<"攻击:X\n"; cout<<"技能:Q、E\n"; cout<<"技能描述\n"; cout<<"Q湮灭枷锁:对其他1~2名敌人造成300%attack伤害,并令第一个目标失去367~763点能量,如果还有其它玩家则令其中一人失去与之前一人总和1000点能量\n"; cout<<"E自疗:立刻恢复350%~550%攻击的血量\n"; cout<<"攻击范围:十字架攻击(同一行或同一列上的敌人受伤)\n"; cout<<"特点:血量较高,攻击一般,防御一般,攻击范围较广,适合远战\n"; cout<<"---------------------------------------------------------------------------\n"; cout<<"Player 2\n"; cout<<"上移:I\n"; cout<<"左移:J\n"; cout<<"下移:K\n"; cout<<"右移:L\n"; cout<<"攻击:<,\n"; cout<<"技能:U、O\n"; cout<<"技能描述\n"; cout<<"U魔法炮弹:对其它所有敌人造成350%attack伤害,并恢复伤害总量100%的生命\n"; cout<<"O自疗:立刻恢复350%~550%攻击的血量\n"; cout<<"攻击范围:周围10*10的小范围攻击\n"; cout<<"特点:血量极高,攻击较低,防御较低,适合近战\n"; cout<<"---------------------------------------------------------------------------\n"; cout<<"Player 3\n"; cout<<"上移:1\n"; cout<<"左移:2\n"; cout<<"下移:3\n"; cout<<"右移:4\n"; cout<<"攻击:5\n"; cout<<"技能:6、7\n"; cout<<"技能描述\n"; cout<<"6斩杀:秒杀随机一名生命低于24%的敌人,如果没有,则对随机一名敌人造成560%attack真实伤害\n"; cout<<"7自疗:立刻恢复350%~550%攻击的血量\n"; cout<<"攻击范围:随机攻击场上任意一人\n"; cout<<"特点:血量较低,防御较低,攻击极高,单挑无敌\n"; cout<<"---------------------------------------------------------------------------\n"; Sleep(2000); _getch(); system("cls"); win=PVP(n); printf("%d win!",win); Sleep(5000); system("cls"); for(i=1;i<=n;i++) { printf("Player %d\n",i); if (i==win) printf("\b( WIN )\n"); printf("输出:%d\n",player[i].sc); printf("治疗:%d\n",player[i].zl); printf("承伤:%d\n",player[i].cs); printf("---------------------------\n"); } Sleep(5000); return 0; }
-
通过的题目
- NOIPJ2018A
- NOIPJ2018B
- CCFPB02D10
- CCFPB07D02
- CCFPS08D08
- P10
- P100
- P102
- P103
- P104
- P105
- P106
- P107
- P108
- P109
- P11
- P110
- P111
- P112
- P113
- P114
- P115
- P116
- P117
- P118
- P119
- P12
- P120
- P121
- P122
- P123
- P124
- P125
- P126
- P127
- P128
- P129
- P13
- P130
- P131
- P132
- P133
- P134
- P135
- P136
- P137
- P138
- P139
- P14
- P140
- P141
- P142
- P143
- P144
- P145
- P146
-
最近活动
题目标签
- 一本通编程启蒙
- 210
- 来源
- 9
- 基础算法
- 4
- 一本通在线测评
- 4
- C++语法高级
- 3
- 字符串
- 3
- 2018
- 2
- 时间
- 2
- NOIP普级组
- 2
- noip复赛
- 2
- CCF中学生计算机程序设计(基础篇)
- 2
- T1
- 1
- 一维数组
- 1
- 枚举
- 1
- T2
- 1
- 高精度
- 1
- CCF中学生计算机程序设计(提高篇)
- 1
- 其他
- 1
- 分治
- 1
- 二分
- 1