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

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
题目:五子棋对弈 对弈规则如下: 主要功能是实现两人之间的对弈,在画好的棋盘上,两个玩家轮流选择自己的落子坐标,然后由五子棋系统自动识别判断游戏的进展,知道一方的五子连成一条线或者棋盘已经无法落子时游戏结束。 选定五子棋的棋盘大小为19*19,玩家可以在这个棋盘上选择落子坐标位置,通过在棋盘上显示不同的符号来代替不同玩家所下的棋子,“o”代表A玩家,“*”代表B玩家。玩家每次落子之后游戏系统都会对落子位置进行检查,如果落子坐标输入有错应提示错误,并要求玩家继续输入。 当出现同一玩家五子连成一线时,无论是行、列或是对角线的五子连线,都表示玩家游戏胜利,退出游戏 任务:编程实现以下功能 1. 欢迎主界面 提示玩家选择游戏开始,结束,设置悔棋次数等。 2. 绘制棋盘 该模块要求的功能是实现棋盘的显示及棋子的显示,,“o”代表A玩家,“*”代表B玩家。在每次下棋后要对棋盘进行刷新,将棋盘的状态变化为当前最新状态,然后等待另一个玩家下棋。 3. 玩家交替下棋 玩家能在棋盘上下棋,玩家每次选择好下棋的行和列坐标,并在该位置落子。 要求:a.提示当前玩家输入落子坐标 b.能判断用户输入的坐标是否正确(坐标超出范围或该处已有棋子) 4. 悔棋功能 玩家选择悔棋后刷新棋盘,删除前一次的落子,悔棋次数有限制。 5. 输赢判断 判断输赢模块的作用是每次玩家落子后判断是否已分出胜负,如果是,则返回胜利者相关信息。 6. 设计丰富的用户界面,方便用户操作 设计要求: ① 根据以上功能需求,自己定义合适的数据结构,并说明原因; ② 每个功能能提供友好的用户界面,方便用户操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值