#include <dos.h >
#include <conio.h>
#include <graphics.h>
#include <bios.h>
#include<stdio.h>
#include <math.h>
#include <time.h>
#include <string.h>
#define MouseStatusMouseOn 1
#define LButtonClick 1
#define BackColor BLACK
#define LineColor LIGHTGRAY
#define CorcurColor LIGHTRED
#define BlackChess 1
#define WhiteChess 2
#define OffSetX 40
#define OffSetY 20
#define Max(a,b) (a>=b?a:b)
/*===========================全局变量定义============================*/
int arrowMouseDraw[16][10]=
{
/*设计鼠标的形状,其中1:表示鼠标的边界,2:表示鼠标边界所包围的区域,3:表示鼠标以外的区域*/
{1,1,3,3,3,3,3,3,3,3},
{1,2,1,3,3,3,3,3,3,3},
{1,2,2,1,3,3,3,3,3,3},
{1,2,2,2,1,3,3,3,3,3},
{1,2,2,2,2,1,3,3,3,3},
{1,2,2,2,2,2,1,3,3,3},
{1,2,2,2,2,2,2,1,3,3},
{1,2,2,2,2,2,2,2,1,3},
{1,2,2,2,2,2,2,2,2,1},
{1,2,2,2,2,2,2,1,3,3},
{1,2,2,2,2,2,1,3,3,3},
{1,2,1,3,1,2,2,1,3,3},
{1,1,3,3,1,2,2,1,3,3},
{3,3,3,3,3,1,2,2,1,3},
{3,3,3,3,3,1,2,2,1,3},
{3,3,3,3,3,3,1,1,2,3}
};
unsigned int size;
int MouseX=0,MouseY=0; /*存放鼠标的水平方向的值*/
int OldCorcur_x=0,OldCorcur_y=0;
int NewCorcur_x=0,NewCorcur_y=0;
int arrowMousePixSave[16][10];
int AllPoint[15][15];
double Mark[12];
double MaxMark=20000000000000000;
void *BlackBlock;
void *WhiteBlock;
void *CorcurBlock[9];
void *BufBlock[9];
void *BlackCorcur;
void *WhiteCorcur;
/*=========================函数定义===============================*/
void MouseOn(int ,int );
void SetMouseHori(int ,int );
void SetMouseVert(int ,int );
void MouseOff(int ,int );
void SetMouseXY(int ,int );
void GetMouseXY();
void initgr(void );
void InitBlock();
void DrawMap();
void DrawChess(int, int ,int);
void DrawCorcur(int ,int ,int );
void DrawBuf(int ,int ,int );
void GetCorcur(int ,int );
void End(int );
void Begin();
int CheckWin(int ,int ,int);
int IsInChessboard(int ,int );
double GetStatus(int ,int ,int );
void GetMaxScore(int *,int *,int ,double *);
void GetBestPoint(int *,int *,int);
void ShowST(int ,int ,int);
int Choose();
/*======================================主函数实现=========================================*/
void main()
{
int MouseMSG,M,choose;
int OldMouse_x=100,OldMouse_y=100,mouseMsg;
int MouseFlag=0,CorcurFlag=0,TimeFlag=1,gap=0;
int ChessNow=BlackChess,Find_x=1,Find_y=1;
char buf[4];
int nStepBlack=0,nStepWhite=0,nTimeBaseBlack,nTimeBaseWhite;
choose=Choose();
initgr();
InitBlock();
Begin();
GetMouseXY();
DrawMap();
ShowST(0,time(0),BlackChess);
ShowST(0,time(0),WhiteChess);
if(choose==1)
{
AllPoint[7][7]=WhiteChess;
DrawChess(7,7,WhiteChess);
}
nTimeBaseBlack=time(0);
nTimeBaseWhite=time(0);
gap=time(0);
while(!kbhit()) /*主循环,鼠标移动也在循环中*/
{
GetMouseXY();
GetCorcur(MouseX+12,MouseY+5);
if(OldMouse_x!=MouseX || OldMouse_y!=MouseY) /*在棋盘中使用光标,而不是鼠标*/
{
if((NewCorcur_x!=OldCorcur_x)||(NewCorcur_y!=OldCorcur_y))
CorcurFlag=1;
if(IsInChessboard(NewCorcur_x,NewCorcur_y))
{
if(CorcurFlag)
{
CorcurFlag=0;
DrawCorcur(NewCorcur_x,NewCorcur_y,AllPoint[NewCorcur_x][NewCorcur_y]);
DrawBuf(OldCorcur_x,OldCorcur_y,AllPoint[OldCorcur_x][OldCorcur_y]);
OldCorcur_x=NewCorcur_x;
OldCorcur_y=NewCorcur_y;
}
if(0==MouseFlag)
{
MouseOff(OldMouse_x,OldMouse_y);
MouseFlag=1;
}
}
else /*通过隐藏再显示刷新鼠标*/
{
MouseOff(OldMouse_x,OldMouse_y);
MouseOn(MouseX,MouseY);
MouseFlag=0;
}
OldMouse_x=MouseX;
OldMouse_y=MouseY;
}
/*================模拟鼠标消息==================*/
_AX=0x03; /*读取鼠标按钮状态*/
geninterrupt(0x33); /*产生33号鼠标软中断*/
if(_BX&1) /*鼠标左键被按下*/
{
MouseMSG=4;
M=MouseMSG;
}
_AX=0x06; /*读取鼠标按钮释放信息 */
_BX=0x00; /* 指定读取鼠标左键的释放信息 */
geninterrupt(0x33); /* 产生33号鼠标软中断 */
if((_BX==1)&&(M==4)) /* 如果鼠标左键的释放数为1 */
{
MouseMSG=LButtonClick; /* 产生一个单击左键信息 */
M=0;
}
/*==============================================*/
/*====================显示时间和步数======================*/
if(TimeFlag)
{
ShowST(nStepBlack,nTimeBaseBlack,BlackChess);
}
else
{
ShowST(nStepWhite,nTimeBaseWhite,WhiteChess);
}
if(choose==1||choose==2) /*选择人机对战*/
{
if(LButtonClick==MouseMSG)
{
if(BlackChess==ChessNow&&IsInChessboard(NewCorcur_x,NewCorcur_y)&&!AllPoint[NewCorcur_x][NewCorcur_y])
{
DrawChess(NewCorcur_x,NewCorcur_y,ChessNow);
AllPoint[NewCorcur_x][NewCorcur_y]=ChessNow;
nStepBlack++;
ShowST(nStepBlack,nTimeBaseBlack,BlackChess);
nTimeBaseWhite+=time(0)-gap;
gap=time(0);
TimeFlag=0;
if(CheckWin(NewCorcur_x,NewCorcur_y,ChessNow))
{
End(ChessNow);
exit();
}
ChessNow=WhiteChess;
DrawChess(18,2,ChessNow);
gotoxy(58,8);
printf("NEXT:");
DrawCorcur(NewCorcur_x,NewCorcur_y,AllPoint[OldCorcur_x][OldCorcur_y]);
}
MouseMSG=0;
}
if(WhiteChess==ChessNow)
{
GetBestPoint(&Find_x,&Find_y,WhiteChess);
AllPoint[Find_x][Find_y]=WhiteChess;
nStepWhite++;
ShowST(nStepWhite,nTimeBaseWhite,WhiteChess);
nTimeBaseBlack+=time(0)-gap;
gap=time(0);
TimeFlag=1;
DrawChess(Find_x,Find_y,ChessNow);
if(CheckWin(Find_x,Find_y,WhiteChess))
{
End(ChessNow);
exit();
}
ChessNow=BlackChess;
DrawChess(18,2,ChessNow);
gotoxy(58,8);
printf("NEXT:");
}
}
else /*人与人对战*/
{
if(LButtonClick==MouseMSG)
{
if(IsInChessboard(NewCorcur_x,NewCorcur_y)&&!AllPoint[NewCorcur_x][NewCorcur_y])
{
DrawChess(NewCorcur_x,NewCorcur_y,ChessNow);
AllPoint[NewCorcur_x][NewCorcur_y]=ChessNow;
if(ChessNow==BlackChess)
{
nStepBlack++;
ShowST(nStepBlack,nTimeBaseBlack,BlackChess);
nTimeBaseWhite+=time(0)-gap;
gap=time(0);
TimeFlag=0;
}
else
{
nStepWhite++;
ShowST(nStepWhite,nTimeBaseWhite,WhiteChess);
nTimeBaseBlack+=time(0)-gap;
gap=time(0);
TimeFlag=1;
}
if(CheckWin(
unknowed
- 粉丝: 2
- 资源: 7