• 个人简介

    (′д`σ)σ 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;
    }
    
  • 通过的题目

  • 最近活动

题目标签

一本通编程启蒙
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