《北辰游戏盒子》部分源代码公开

源代码展示了一款基于C++的早期游戏设计,包含基础框架、键盘事件处理以及游戏剧情推进。玩家作为小镇勇士,对抗怪物,经历不同章节挑战,通过决策影响战斗与故事发展。代码体现了基本的游戏逻辑、角色属性管理和简单的AI交互。
摘要由CSDN通过智能技术生成

游戏部分源代码

这是早期版本的源代码,只有一部分函数,后面不会再更新了,可以借鉴一部分做成自己的游戏,转载需注明出处。

/*----------头文件----------*/ 
#include<bits/stdc++.h>
#include<iostream>
#include<Windows.h>
#include<conio.h>
#include<time.h>
#include<cstring>
#include<string>
#include<cstdio>
#include <stdio.h>
#include<ctime>
#include"cmath"
#include<map>
#include<algorithm>
#include<vector>
#include<unistd.h>
/*----------全局变量----------*/ 
#define KEY_DOWM 
#define KEY_UP 0xE048
#define KEY_DOWN 0xE050
#define KEY_LEFT 0xE04B
#define KEY_RIGHT 0xE04D
#define KEY_ESC 0x001B
#define KEY_1 '1'
#define KEY_2 '2'
#define KEY_3 '3'
#define GAME_MAX_WIDTH 100
#define GAME_MAX_HEIGHT 100
 
#define STR_GAMETITLE "按方向键移动光标 1:翻开 2:插旗 3:翻开周围"
#define STR_GAMEWIN "祝贺!!! 你赢了!!!!\n谢谢光临!\n\n"
#define STR_GAMEOVER "你输了!!!\n"
#define STR_GAMEEND "按“ESC”继续\n"

#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);

#define UP    1
#define DOWN  2
#define LEFT  3
#define RIGHT 4
#define MAX_LEVEL 8
#define BULLET_NUM 20
#define MAX_LIFE 4
#define IsKeyDown(VK_NAME) ((GetAsyncKeyState(VK_NAME) & 0x8000) ? true:false)
#define mm2 1200
#define mm1 700
#define mm3 1900 
#define ctl 857
#define mop 10000
#define Nor if(B[b].x<5) B[b].x=5;
#define Out1 Bx1-Bvx1<=6||Bx1-Bvx1>=28||By1-Bvy1<=7||By1-Bvy1>=27
#define Out2 Bx2-Bvx2<=6||Bx2-Bvx2>=28||By2-Bvy2<=7||By2-Bvy2>=27
#define Chang1 {Bwhat1=0;Bvx1=Bvy1=0;memset(Bgo1,0,sizeof(Bgo1));}
#define Chang2 {Bwhat2=0;Bvx2=Bvy2=0;memset(Bgo2,0,sizeof(Bgo2));}
#define Chang3 {Bwhat3=0;Bvx3=Bvy3=0;memset(Bgo3,0,sizeof(Bgo3));}

#define VER_STRING	"1.0.0.0"
#define VER_MAJOR	1
#define VER_MINOR	0
#define VER_RELEASE	0
#define VER_BUILD	0
#define COMPANY_NAME	"南京北辰网络科技工作室"
#define FILE_VERSION	"1.4.29.0"
#define FILE_DESCRIPTION	"Developed using the Dev-C++ IDE"
#define INTERNAL_NAME	"南京北辰网络科技工作室"
#define LEGAL_COPYRIGHT	"南京北辰网络科技工作室"
#define LEGAL_TRADEMARKS	"南京北辰网络科技工作室"
#define ORIGINAL_FILENAME	"北辰游戏盒子"
#define PRODUCT_NAME	"北辰游戏盒子"
#define PRODUCT_VERSION	"14.29.0"
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)

#define LIFE 15
#define HUNGRY 100
#define SPEED 1000

//hamburger是汉堡,为迷你世界里的麦包什么的 , hungryl剩余饥饿 , speed玩家移动速度,暂时不使用 
//wood木头物资 , stone石头物资 , metal金属物资 , diamond钻石物资
//und是当前玩家所在高度,便于判断一些稀有矿石出现点
//stoneAX、metalAX、diamondAX和goldAX各类斧头和镐子,需要合成
//undergroundMAP是当前底下矿洞可视区域,一旦移动,如不在map内,则重新随机

using namespace std;

//水粮矿地

int money=100;
int water=2,food=0,ore=0,land=0;
int zh[4];
int zjs,js=1;
int kd,sj;
int tims=10;
void zb()
{
	int m1=5*(rand()%4+1),f1=m1+5*(rand()%4+1),o1=f1+10*(rand()%4+1),d1=o1+10*(rand()%4+1);
	zh[0]=m1*2;
	zh[1]=m1*2+f1;
	zh[2]=m1*4+f1*2+o1;
	zh[3]=m1*6+f1*4+o1*2+d1;
	kd=10*(rand()%4+1)+10;
	sj=10*(rand()%4+1)+10; 
}

 
//枪神之战
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;
}
 
//五子棋
const int N = 15;//棋盘大小
const char ChessBoardFlag = ' ';
const char flag1 = 'O';
const char flag2 = 'X';
 
typedef struct Coordinate
{
    int x;
    int y;
}ChessCoordi;
 
class FiveChess
{
public:
    FiveChess()
    {
        InitChessBoard();
    }
 
    void Play()
    {
        ChessCoordi Pos1;
        ChessCoordi Pos2;
        while (1){
            int mode = ChoseMode();
            while (1){
                if (mode == 1){//玩家VS电脑
                    static size_t count = 1;
                    PalyerGo(Pos1, 1, flag1);
                    if (count++ >= 9 && GetWiner(Pos1, 1, flag1))
                        break;
                    ComputerGo(Pos2, flag2);
                    if (count++ >= 10 && GetWiner(Pos2, 0, flag2))
                       break;
                }
                else if (mode == 2){//玩家VS玩家
                    static size_t count = 1;
                    PalyerGo(Pos1, 1, flag1);
                    if (count++ >= 9 && GetWiner(Pos1,1, flag1))
                        break;
                    PalyerGo(Pos2,2 ,flag2);
                    if (count++ >= 10 && GetWiner(Pos2,2, flag2))
                        break;
                }
            }
            cout << "再来一局?\n1 - 确定  2 - 取消" << endl;
            char chose = 'y';
            chose=getch();
            if (chose == 'n')
                break;
        }
    }
 
    void PrintChessBoard()
    {
        system("cls");
        for (size_t i = 0; i < N + 1; ++i)
        {
            for (size_t j = 0; j < N + 1; ++j)
            {
                if (i == 0){
                    if (j != 0)
                        printf("%d   ", j);
                    else if (j == 0)
                        printf("  ");
                }
                else if (j == 0){
                    if (i != 0)
                        printf("%2d", i);
                }
                else{
                    printf("%c  |", ChessBoard[i][j]);
                }
 
            }
            cout << endl;
            cout << "  ";
            for (size_t i = 1; i < N + 1; ++i){
                cout << "---+";
            }
            cout << endl;
        }
    }
 
    void InitChessBoard()
    {
        for (size_t i = 0; i < N + 1; ++i){
            for (size_t j = 0; j < N + 1; ++j){
                ChessBoard[i][j] = ChessBoardFlag;
            }
        }
    }
 
protected:
 
    int ChoseMode()
    {
        system("cls");
        InitChessBoard();
        cout << "1 - 玩家VS人机  2 - 玩家VS玩家  3 - 退出游戏" << endl;
        char chose;
        chose=getch();
        while (1){
            if (chose == '1'){
                int chose=1;
                return chose;
            }
            else if (chose == '2'){
                int chose=2;
                return chose;
                } 
            else if (chose == '3')
                system("cls");
			else
                cout << "对不起 您的输入有误。。" << endl;
        }
    }
 
    void PalyerGo(ChessCoordi& Pos, int player, char flag)
    {
        PrintChessBoard();
        int x = 0;
        int y = 0;
        while (1){
            cout << "请玩家" << player << "下一步棋(输入目标的X轴和Y轴,不要加入任何符号,按下ENTRY键确定)" << endl;
            cin >> Pos.x >> Pos.y;
            if (JudgePos(Pos))
                break;
            else
                cout << "玩家输入错误 ! 请重新输入" << endl;
        }
        ChessBoard[Pos.x][Pos.y] = flag;
    }
 
    void ComputerGo(ChessCoordi& Pos, char flag)
    {
        PrintChessBoard();
        int x = 0;
        int y = 0;
        while (1){
            x = rand() % N + 1;
            srand((unsigned int)time(NULL));
            y = rand() % N + 1;
            srand((unsigned int)time(NULL));//这种方式下生成的x,y一定在棋盘上
            if (ChessBoard[x][y] == ChessBoardFlag)
                break;
        }
        Pos.x = x;
        Pos.y = y;
        ChessBoard[Pos.x][Pos.y] = flag;
    }
 
    int GetVictory(ChessCoordi Pos, char flag)//判断是否有赢家
    {
        int begin = 0;//在检查对角线时 作为行坐标的开始 结束
        int end = 0;
        //检查行是否连续5个子
        int beginl = 0;//在检查对角线时 作为列坐标的开始 结束
        int endl = 0;
        (Pos.y - 4) > 0 ? begin = Pos.y - 4 : begin = 1;
        (Pos.y + 4) < N ? end = Pos.y + 4 : end = N;
        for (size_t i = Pos.x, j = begin; j + 4 <= end; ++j)
        {
            if (flag == ChessBoard[i][j] && flag == ChessBoard[i][j + 1] && \
                flag == ChessBoard[i][j + 2] && flag == ChessBoard[i][j + 3] && \
                flag == ChessBoard[i][j + 4])
                return 1;
        }
        //检查列是否连续5个子
        (Pos.x - 4) > 0 ? begin = Pos.x - 4 : begin = 1;
        (Pos.x + 4) > N ? end = Pos.x + 4 : end = N;
        for (size_t j = Pos.y, i = begin; i + 4 <= end; ++i)
        {
            if (flag == ChessBoard[i][j] && flag == ChessBoard[i + 1][j] && \
                flag == ChessBoard[i + 2][j] && flag == ChessBoard[i + 3][j] && \
                flag == ChessBoard[i + 4][j])
                return 1;
        }
 
        int len = 0;
        //检查主对角线是否满五个子
        (Pos.x > Pos.y) ? len = Pos.y - 1 : len = Pos.x - 1;
        if (len > 4)//找落子点到上 左两边的垂直距离较短的地方 如果其大于4 取4 不大于4 取其本身
            len = 4;
        begin = Pos.x - len;//向上 左移动适当距离找可能的五连子的起始位置
        beginl = Pos.y - len;
        (Pos.x > Pos.y) ? len = N - Pos.x : len = N - Pos.y;
        if (len > 4)
            len = 4;
        end = Pos.x + len;//向下 右移动适当距离找可能的五连子的终止位置
        endl = Pos.y + len;
        for (size_t i = begin, j = beginl; i + 4 <= end && j + 4 <= endl; ++i, ++j)
        {
            if (flag == ChessBoard[i][j] && flag == ChessBoard[i + 1][j + 1] && \
                flag == ChessBoard[i + 2][j + 2] && flag == ChessBoard[i + 3][j + 3] && \
                flag == ChessBoard[i + 4][j + 4])
                return 1;
        }
        //检查副对角线是否满五个子
        (Pos.x - 1 > N - Pos.y) ? len = N - Pos.y : Pos.x - 1;
        if (len > 4)//找落子点到右 下两边的垂直距离较短的地方 如果其大于4 取4 不大于4 取其本身
            len = 4;
        begin = Pos.x - len;//向上 右移动适当距离找可能的五连子的起始位置
        beginl = Pos.y + len;
        (N - Pos.x > Pos.y - 1) ? len = Pos.y - 1 : len = N - Pos.x;
        end = Pos.x + len;//向下 左移动适当距离找可能的五连子的最终位置
        endl = Pos.y - len;
        for (size_t i = begin, j = beginl; i + 4 <= end && j - 4 >= endl; ++i, ++j)
        {
            if (flag == ChessBoard[i][j] && flag == ChessBoard[i + 1][j - 1] && \
                flag == ChessBoard[i + 2][j - 2] && flag == ChessBoard[i + 3][j - 3] && \
                flag == ChessBoard[i + 4][j - 4])
                return 1;
        }
        //检查棋盘是否已满
        for (size_t i = 1; i < N + 1; ++i){
            for (size_t j = 1; j < N + 1; ++j){
                if (ChessBoard[i][j] == ChessBoardFlag)
                    return 0;//表示棋盘没满
            }
        }
        //和棋
        return -1;
    }
 
    bool GetWiner(ChessCoordi& Pos, int player, char flag)//判断是谁赢了
    {
        int n = 0;
        n = GetVictory(Pos, flag);
        PrintChessBoard();
        if (1 == n){
            if (0 == player)
                cout << "玩家1获胜" << endl;
            else if (1 == player)
                cout << "玩家1获胜" << endl;
            else
                cout << "电脑获胜"<<endl;
            return true;
        }
        else if (-1 == n){
            cout << "和棋" << endl;
            return true;
        }
        else{
            //还未分出胜负
            return false;
        }
 
 
    }
 
    bool JudgePos(const ChessCoordi& Pos)
    {
        if (Pos.x < N + 1 && Pos.x > 0 && Pos.y < N + 1 && Pos.x > 0\
            && ChessBoard[Pos.x][Pos.y] == ChessBoardFlag)
            return true;
 
        return false;
    }
 
private:
    char ChessBoard[N + 1][N + 1];
};
 
//#include"FiveChess.cpp"

 
//伪造版迷你世界
unsigned long long hamburger=10000, hungryl=100, speed=100;
unsigned long long wood=1000, stone=1000, metal=1000, diamond=1000;
long long und=-6;
bool stoneAX=true, metalAX=false, diamondAX=false, goldAX=false;
int undergroundMAP[10][10]= {0,0,0,0,0,0,0,0,0,0,
                             0,0,0,0,0,0,0,0,0,0,
                             0,0,0,0,0,0,0,0,0,0,
                             0,0,0,0,0,0,0,0,0,0,
                             0,0,0,0,0,0,0,0,0,0,
                             0,0,0,0,0,0,0,0,0,0,
                             0,0,0,0,0,0,0,0,0,0,
                             0,0,0,0,0,0,0,0,0,0,
                             0,0,0,0,0,0,0,0,0,0,
                             0,0,0,0,0,0,0,0,0,0
                            };
int nowp;//判断当前位置,更利于底下矿洞探索
unsigned long long x, y;//位置判断,便于输出
 
void HIDE() {
	CONSOLE_CURSOR_INFO cursor_info= {1,0};
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}
void SetPos(int x,int y) {
	COORD pos;
	pos.X=y*2-1,pos.Y=x+1;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void stoDIG() {
	if(stoneAX==true&&metalAX==false) Sleep(50);
	else;
}
void metDIG() {
	if(stoneAX==true&&metalAX==false) Sleep(111);
	else if(metalAX=true&&diamondAX==false) Sleep(65);
	else;
}
void diaDIG() {
	if(metalAX==true&&diamondAX==false) Sleep(210);
	else if(diamondAX==true&&goldAX==false) Sleep(80);
	else;
}
void golAX() {
	for(int i=0; i<10; i++) {
		for(int j=0; j<10; j++) {
			switch(undergroundMAP[i][j]) {
				case 1:
					wood++;
					break;
				case 2:
					stone++;
					break;
				case 3:
					metal++;
					break;
				case 4:
					diamond++;
					break;
			}
			undergroundMAP[i][j]=0;
		}
	}
}
void diaAX() {
	for(int i=x-2; i<=x+2; i++) {
		for(int j=y-2; j<=y+2; j++) {
			switch(undergroundMAP[i][j]) {
				case 1:
					wood++;
					break;
				case 2:
					stone++;
					stoDIG();
					break;
				case 3:
					metal++;
					metDIG();
					break;
				case 4:
					diamond++;
					diaDIG();
					break;
			}
			undergroundMAP[i][j]=0;
		}
	}
}
void metAX() {
	for(int i=x-1; i<=x+1; i++) {
		for(int j=y; j<=y+1; j++) {
			switch(undergroundMAP[i][j]) {
				case 1:
					wood++;
					break;
				case 2:
					stone++;
					stoDIG();
					break;
				case 3:
					metal++;
					metDIG();
					break;
				case 4:
					diamond++;
					diaDIG();
					break;
			}
			undergroundMAP[i][j]=0;
		}
	}
}
bool canGO(bool a1,bool a2,bool a3,bool a4,int pla) {
	if(pla<=3) {
		return 1;
	} else if(pla==4&&a2==true) {
		return 1;
	} else {
		return 0;
	}
}
void make() {
	system("cls");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
	cout<<" __________________________________________________________________ "<<endl;
	cout<<"|                       合                 成                      |"<<endl;
	cout<<"|                                                                  |"<<endl;
	cout<<"|                              1. 铁斧                             |"<<endl;
	cout<<"|                             2. 钻石斧                            |"<<endl;
	cout<<"|                            3. 荒芜神斧                           |"<<endl;
	c
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值