在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例C/C++游戏开发 → 井字游戏

井字游戏

C/C++游戏开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:3.61KB
  • 下载次数:0
  • 浏览次数:14
  • 发布时间:2024-04-27
  • 实例类别:C/C++游戏开发
  • 发 布 人:徐科
  • 文件格式:.cpp
  • 所需积分:2
 相关标签: 井字棋游戏

实例介绍

【实例简介】双方玩家在3X3的网格上轮番通过鼠标以o和x落子,任意三个相同标志的棋子连城一条直线时,玩家获胜。
【实例截图】from clipboard
【核心代码】#include<graphics.h>


char board_data[3][3] =   //定义棋盘数据结构
{
{'-','-','-'},
{'-','-','-'},
{'-','-','-'},
};

char current_piece = 'o';  //标识当前落子类型



bool CheckWin(char c)      //检测指定棋子的玩家是否获胜,共8种情况
{
if (board_data[0][0] == c && board_data[0][1] == c && board_data[0][2] == c)
return true;
if (board_data[1][0] == c && board_data[1][1] == c && board_data[1][2] == c)
return true;
if (board_data[2][0] == c && board_data[2][1] == c && board_data[2][2] == c)
return true;
if (board_data[0][0] == c && board_data[1][0] == c && board_data[2][0] == c)
return true;
if (board_data[0][1] == c && board_data[1][1] == c && board_data[2][1] == c)
return true;
if (board_data[0][2] == c && board_data[1][2] == c && board_data[2][2] == c)
return true;
if (board_data[0][0] == c && board_data[1][1] == c && board_data[2][2] == c)
return true;
if (board_data[0][2] == c && board_data[1][1] == c && board_data[2][0] == c)
return true;

return false;
}


bool CheckDraw()           //检测当前是否出现平局,用双重循环遍历每个元素
{
for (size_t i=0;i<3;i )
{
for (size_t j = 0; j < 3; j )
{
if (board_data[i][j]=='-')
{
return false;
}
}
}
return true;
}



void DrawBoard()             //绘制棋盘网格
{
line(0, 200, 600, 200);
line(0, 400, 600, 400);
line(200, 0, 200, 600);
line(400, 0, 400, 600);
}



void DrawPiece()             //绘制棋子
{
for (size_t i = 0; i < 3; i )
{
for (size_t j = 0; j < 3; j )
{
switch (board_data[i][j])
{
case 'o':
circle(200 * j 100, 200 * i 100, 100);
break;
case'x':
line(200 * j, 200 * i, 200 * (j 1), 200 * (i 1));
line(200 * (j 1), 200 * i, 200 * j, 200 * (i 1));
break;
case'-':
break;
defalt:
break;
}
}
}
}



void DrawTipText()           //绘制提示信息
{
static TCHAR str[64];
_stprintf_s(str, _T("当前棋子类型:%c"), current_piece);
settextcolor(RGB(225, 175, 45));
outtextxy(0,0,str);
}


int main()
{
initgraph(600, 600);    //初始化游戏窗口

bool running = true;    //用条件变量控制程序是否继续

ExMessage msg;          //消息处理,ExMessage是EasyX中,存储消息的结构体。 

BeginBatchDraw();       //开启游戏批量绘图

while (running)
{
while (peekmessage(&msg))   //事件处理,仅对按下鼠标左键
{
//此游戏仅对检查鼠标左键按下消息,进行处理
if (msg.message== WM_LBUTTONDOWN) //把鼠标点击的位置映射到数组的索引中
{
//计算点击位置
int x = msg.x;
int y = msg.y;
int index_x = x / 200;  //二维数组的索引
int index_y = y / 200;  //二维数组的索引


//尝试落子,其本质就是修改指定索引位置的二维数组元素的值。
if (board_data[index_y][index_x] == '-') //如果可以落子
{
board_data[index_y][index_x] = current_piece;//落子

//切换棋子类型
if (current_piece == 'o')
current_piece = 'x';
else
current_piece = 'o';
}

}

}

//创建、显示并操作一个消息对话框,使用GetHWnd()函数获取句柄。
if (CheckWin('x'))
{
MessageBox(GetHWnd(), _T("X 玩家获胜"),_T("游戏结束"),MB_OK);
running = false;
}
else if (CheckWin('o'))
{
MessageBox(GetHWnd(), _T("O 玩家获胜"), _T("游戏结束"), MB_OK);
running = false;
}
else if (CheckDraw())
{
MessageBox(GetHWnd(), _T("平局!"), _T("游戏结束"), MB_OK);
running = false;
}

cleardevice();//清空绘图设备

DrawBoard(); //绘制棋盘网格
DrawPiece(); //绘制棋子
DrawTipText(); //绘制提示信息

FlushBatchDraw();//消除闪烁
}

EndBatchDraw();//刷新批量绘图的缓冲区

return 0;
}

标签: 井字棋游戏

实例下载地址

井字游戏

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警