(作业)
#include "stdio.h"
#include "windows.h"
#include "conio.h"
//black 1
//white 2
#define empty 0
#define maxsize 19
//toward==1->水平方向检查;
//toward==2->竖直方向检查;
//toward==3->左对角线检查;
//toward==4-> 右对角线检查;
typedef struct DOT{
int x;
int y;
int tag;
}Dot;
typedef struct score{
int black;
int white;
}Score;
void goto_xy(int x,int y){
HANDLE hOut;
hOut=GetStdHandle(STD_OUTPUT_HANDLE) ;
COORD pos={x,y};
SetConsoleCursorPosition(hOut,pos);
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(hOut,&CursorInfo);
CursorInfo.bVisible=0;
SetConsoleCursorInfo(hOut,&CursorInfo);
}
void Init(int model){
char c;
if(!model) c='+';
else c=' ';
goto_xy(0,0);
for(int i=0;i<maxsize;i++){
for(int j=0;j<maxsize;j++){
printf("%c",c);
printf(" ");
}
printf("\n");
}
}
void get_mouse(Dot *dot){
POINT ptB = {0,0};
LPPOINT xy=&ptB;
if(GetAsyncKeyState(VK_RBUTTON)){
GetCursorPos(xy);
if(xy->x<3||xy->x>459||xy->y<49||xy->y>485){
return;
}
dot->x=(xy->x-3)/24*2;
dot->y=(xy->y-49)/23;
}
}
int check(int array[][maxsize],Dot dot,int toward){
int check=1;
int result=0;
int x;
int y;
int gap_x,gap_y;
switch(toward){
case 1:
gap_x=1;
gap_y=0;
break;
case 2:
gap_x=0;
gap_y=1;
break;
case 3:
gap_x=1;
gap_y=1;
break;
case 4:
gap_x=-1;
gap_y=1;
break;
}
x=dot.y;
y=dot.x/2;
while(check<=5&&x+gap_x<=18&&x+gap_x>=0&&y+gap_y>=0&&y+gap_y<=18&&array[x+=gap_x][y+=gap_y]==dot.tag){
check++;
}
if(check==5){
result=1;
goto out;
}
x=dot.y;
y=dot.x/2;
while(check<=5&&x-gap_x<=18&&x-gap_x>=0&&y-gap_y>=0&&y-gap_y<=18&&array[x-=gap_x][y-=gap_y]==dot.tag){
check++;
}
if(check==5){
result=1;
}
out:
return result;
}
bool Win_or_Not(int array[][maxsize],Dot dot){
for(int i=1;i<=4;i++){
int judge=check(array,dot,i);
if(judge){
return true;
}
}
return false;
}
void New(Dot dot){
static int stand=0;
while(!GetAsyncKeyState(VK_RBUTTON)){
if(GetAsyncKeyState(VK_RBUTTON)){
break;
}
goto_xy(dot.x,dot.y);
printf("%d",dot.tag);
if(GetAsyncKeyState(VK_RBUTTON)){
break;
}
Sleep(250);
goto_xy(dot.x,dot.y);
printf(" ");
if(GetAsyncKeyState(VK_RBUTTON)){
break;
}
Sleep(250);
}
goto_xy(dot.x,dot.y);
printf("%d",dot.tag);
}
void The_End(int winner,int model,int array[][maxsize],Score score){
int choice=0;
Init(1);
goto_xy(38,0);
printf(" ");
goto_xy(15,9);
printf("The winner is %d",winner);
goto_xy(15,10);
printf("Black:%d White:%d",score.black,score.white);
goto_xy(9,11);
printf("结束请按:1 查看棋路请按:2");
scanf("%d",&choice);
if(choice==1){
Init(1);
goto_xy(19,9);
printf("菜就多练!!!");
goto_xy(0,19);
}else if(choice==2){
goto_xy(0,0);
for(int i=0;i<maxsize;i++){
for(int j=0;j<maxsize;j++){
printf("%d ",array[i][j]);
}
printf("\n");
}
}
}
void Start(void){
goto_xy(15,9);
printf("请全屏游玩");
goto_xy(13,10) ;
printf("按任意键开始游戏");
if(_kbhit()) {
return;
}
}
int main(void){
int start;
goto_xy(15,9);
printf("请全屏游玩");
goto_xy(13,10) ;
printf("按任意键开始游戏");
scanf("%d",&start);
int times_black=0;
int times_white=0;
int array[maxsize][maxsize]={0};
Dot dot;
Score score;
score.black=0;
score.white=0;
Init(0);
int result=0;
while(1){
if(GetAsyncKeyState(VK_RBUTTON)){
get_mouse(&dot);
Sleep(250);
if((score.black+score.white)%2==0){
dot.tag=2;
score.white++;
}else{
dot.tag=1;
score.black++;
}
array[dot.y][dot.x/2]=dot.tag;
}
goto_xy(38,0);
printf("Black:%03d White:%03d",score.black,score.white);
if(score.black+score.white>=9&&Win_or_Not(array,dot)){
result=dot.tag;
break;
}
New(dot);
}
The_End(result,1,array,score);
return 0;
}