c语言键盘操作的五子棋,c语言写的鼠标操作的五子棋游戏,欢迎观赏!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

#include "string.h"

#include

#include

#include

int seat[20][20];

int usr;

struct GotoXy_xy

{

int GotoXy_temp[100][3];

}GotoXy_xy;

void HideCursor(int n) /*隐藏光标*/

{

CONSOLE_CURSOR_INFO cursor_info={1,n};

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);

}

void GotoXy(int x,int y) /*将光标移到(x,y)*/

{

HANDLE hout;

COORD coord;

coord.X=x;

coord.Y=y;

hout=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorPosition(hout,coord);

}

void init()

{

int i,j;

usr=0;

GotoXy(0,0);

for(i=0;i<20;i++)

{

for(j=0;j<20;j++)

seat[i][j]=0;

}

printf("%2c",' ');

for(i=0;i<20;i++)

printf("%3.2d",i);

printf("\n");

for(i=0;i<20;i++)

{

printf("%3.2d",i);

for(j=0;j<20;j++)

printf("· ");

printf("\n");

}

GotoXy(68,7);

printf("欢迎使用!");

GotoXy(66,9);

printf("五子棋小游戏");

GotoXy(68,11);

printf("by 熊清熹");

GotoXy(68,13);

printf("2015.3.4");

}

int osheng()

{

int i,j;//判断横着的5个是否都相等

for(i=0;i<20;i++)

{

for(j=0;j<16;j++)

if(seat[i][j]==1&&seat[i][j+1]==1&&seat[i][j+2]==1&&seat[i][j+3]==1&&seat[i][j+4]==1)

return 1;

}

for(j=0;j<20;j++)//判断竖着的5个是否都相等

{

for(i=0;i<16;i++)

if(seat[i][j]==1&&seat[i+1][j]==1&&seat[i+2][j]==1&&seat[i+3][j]==1&&seat[i+4][j]==1)

return 1;

}

for(i=0;i<16;i++)//判断左斜5个

{

for(j=0;j<16;j++)

if(seat[i][j]==1&&seat[i+1][j+1]==1&&seat[i+2][j+2]==1&&seat[i+3][j+3]==1&&seat[i+4][j+4]==1)

return 1;

}

for(i=0;i<16;i++)//右斜5个

{

for(j=19;j>3;j--)

if(seat[i][j]==1&&seat[i+1][j-1]==1&&seat[i+2][j-2]==1&&seat[i+3][j-3]==1&&seat[i+4][j-4]==1)

return 1;

}

return 0;

}

int xsheng()

{

int i,j;//判断横着的5个是否都相等

for(i=0;i<20;i++)

{

for(j=0;j<16;j++)

if(seat[i][j]==2&&seat[i][j+1]==2&&seat[i][j+2]==2&&seat[i][j+3]==2&&seat[i][j+4]==2)

return 1;

}

for(j=0;j<20;j++)//判断竖着的5个是否都相等

{

for(i=0;i<16;i++)

if(seat[i][j]==2&&seat[i+1][j]==2&&seat[i+2][j]==2&&seat[i+3][j]==2&&seat[i+4][j]==2)

return 1;

}

for(i=0;i<16;i++)//判断左斜5个

{

for(j=0;j<16;j++)

if(seat[i][j]==2&&seat[i+1][j+1]==2&&seat[i+2][j+2]==2&&seat[i+3][j+3]==2&&seat[i+4][j+4]==2)

return 1;

}

for(i=0;i<16;i++)//右斜5个

{

for(j=19;j>3;j--)

if(seat[i][j]==2&&seat[i+1][j-1]==2&&seat[i+2][j-2]==2&&seat[i+3][j-3]==2&&seat[i+4][j-4]==2)

return 1;

}

return 0;

}

int he()

{

int i,j;

for( i=0;i<20;i++)

for( j=0;j<20;j++)

{

if(seat[i][j]==0)//当棋盘全部子都不是0时才能return 1,即棋盘已下满

return 0;

}

return 1;

}

void clear()

{

int i,j;

GotoXy(0,0);

for(i=0;i<61;i++)

{

for(j=0;j<20;j++)

printf(" ");

}

GotoXy(28,22);

printf(" ");

GotoXy(30,23);

printf(" ");

GotoXy(25,24);

printf(" ");

}

void main()

{

int M_x,M_y,P_x,P_y;

INPUT_RECORD inRec;

DWORD res;

HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE); // 获取标准输入设备句柄

init();

HideCursor(0);

while(1)

{

if(usr==0)

{

GotoXy(28,22);

printf("当前下棋方:黑方");

}

else if(usr==1)

{

GotoXy(28,22);

printf("当前下棋方:白方");

}

else if(usr==2)

{

GotoXy(28,22);

printf("GAME OVER! ");

GotoXy(25,24);

printf("再来一局 退出");

}

ReadConsoleInput(hInput, &inRec, 1, &res);

if(inRec.EventType == MOUSE_EVENT && inRec.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) //鼠标左键

{

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),inRec.Event.MouseEvent.dwMousePosition);

M_x=inRec.Event.MouseEvent.dwMousePosition.X;

M_y=inRec.Event.MouseEvent.dwMousePosition.Y;

if(M_x>=3&&M_x<=60&&M_y>=1&&M_y<=20)

{

if(((M_x-3)%3)==0)

{

P_x=(M_x-3)/3;

P_y=M_y-1;

if(usr==0)

{

if(!seat[P_x][P_y])

{

usr=1;

printf("●");

seat[P_x][P_y]=1;

if(osheng())

{

GotoXy(30,23);

printf("黑棋胜!");

usr=2;

}

}

}

else if(usr==1)

{

if(!seat[P_x][P_y])

{

usr=0;

printf("○");

seat[P_x][P_y]=2;

if(xsheng())

{

GotoXy(30,23);

printf("白棋胜!");

usr=2;

}

}

}

if(he())

printf("平局!");

}

}

else if(M_x>=25&&M_x<=31&&M_y==24&&usr==2)

{

clear();

init();

}

else if(M_x>=37&&M_x<=39&&M_y==24&&usr==2)

{

GotoXy(25,9);

exit(1);

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值