游戏部分源代码
这是早期版本的源代码,只有一部分函数,后面不会再更新了,可以借鉴一部分做成自己的游戏,转载需注明出处。
/*----------头文件----------*/
#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