C语言、Eazy_X——五子棋

devtools/2024/10/8 13:48:12/

//五子棋#include<graphics.h>#define board_size 20
#define pixel 600
int pr = pixel / board_size;
char board_data[board_size][board_size];
char current_piece = 'o';
int count = 0;//检测指定玩家是否获胜
bool CheckWin(char c)
{int i, j;//检查行for (i = 0; i < board_size; i++){for (j = 0; j < board_size - 4; j++){if (board_data[i][j] == c &&board_data[i][j + 1] == c &&board_data[i][j + 2] == c &&board_data[i][j + 3] == c &&board_data[i][j + 4] == c)return true;}}//检查列for (i = 0; i < board_size - 4; i++){for (j = 0; j < board_size; j++){if (board_data[i][j] == c &&board_data[i + 1][j] == c &&board_data[i + 2][j] == c &&board_data[i + 3][j] == c &&board_data[i + 4][j] == c)return true;}}//检查主对角线for (i = 0; i < board_size - 4; i++){for (j = 0; j < board_size - 4; j++){if (board_data[i][j] == c &&board_data[i + 1][j + 1] == c &&board_data[i + 2][j + 2] == c &&board_data[i + 3][j + 3] == c &&board_data[i + 4][j + 4] == c)return true;}}//检查副对角线for (i = 0; i < board_size - 4; i++){for (j = 4; j < board_size; j++){if (board_data[i][j] == c &&board_data[i + 1][j - 1] == c &&board_data[i + 2][j - 2] == c &&board_data[i + 3][j - 3] == c &&board_data[i + 4][j - 4] == c)return true;}}return false;
}//检测是否平局
bool CheckDraw()
{if (count <= board_size * board_size) return false;return true;
}//绘制网格
void DrawBoard()
{setlinestyle(PS_SOLID, 1);setlinecolor(WHITE);for (int i = 1; i <= board_size-1; i++){line(0, pr * i, pixel, pr * i);line(pr * i, 0, pr * i, pixel);}
}//绘制棋子
void DrawPiece()
{setlinestyle(PS_SOLID, 3);for (int i = 0; i < board_size; i++){for (int j = 0; j < board_size; j++){switch (board_data[i][j]){case 'o':setlinecolor(YELLOW);circle(j * pr + (pr / 2), i * pr + (pr / 2), pr / 2 - 4);break;case 'x':setlinecolor(LIGHTRED);line(j * pr + 4, i * pr + 4, (j + 1) * pr - 4, (i + 1) * pr - 4);line((j + 1) * pr - 4, i * pr + 4, j * pr + 4, (i + 1) * pr - 4);break;case '-':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(pixel, pixel);setbkcolor(RGB(0,220,220));ExMessage msg;bool running = true;memset(board_data, '-', sizeof(board_data));BeginBatchDraw();while (running){DWORD start_time = GetTickCount();while (peekmessage(&msg)){if (msg.message == WM_LBUTTONDOWN){count++;int x = msg.x;int y = msg.y;int index_x = x / pr;int index_y = y / pr;if (board_data[index_y][index_x] == '-'){board_data[index_y][index_x] = current_piece;if (current_piece == 'o')current_piece = 'x';elsecurrent_piece = 'o';}}}cleardevice();DrawBoard();DrawPiece();DrawTipText();FlushBatchDraw();if (CheckWin('o')){MessageBox(GetHWnd(), _T("O玩家获胜"), _T("游戏结束"), MB_OK);running = false;}else if (CheckWin('x')){MessageBox(GetHWnd(), _T("X玩家获胜"), _T("游戏结束"), MB_OK);running = false;}else if (CheckDraw()){MessageBox(GetHWnd(), _T("平局!"), _T("游戏结束"), MB_OK);running = false;}DWORD end_time = GetTickCount();DWORD delta_time = end_time - start_time;if (delta_time < 1000 / 60){Sleep(1000 / 60 - delta_time);}}EndBatchDraw();
}


http://www.ppmy.cn/devtools/120400.html

相关文章

FFmpeg源码:avio_skip函数分析

AVIOContext结构体和其相关的函数分析&#xff1a; FFmpeg源码&#xff1a;avio_r8、avio_rl16、avio_rl24、avio_rl32、avio_rl64函数分析 FFmpeg源码&#xff1a;read_packet_wrapper、fill_buffer函数分析 FFmpeg源码&#xff1a;avio_read函数分析 FFmpeg源码&#xff…

数据结构 - 数组

今天我们将开始第一个数据类型-数组的学习。 经常会看到这样的问题&#xff0c;怎么学习数据结构&#xff0c;我的答案是搞清楚具体数据结构对应的抽象数据类型ADT&#xff0c;抛开语言层面自带的数据类型&#xff0c;然后自己从头 实现一遍。 其实数据结构没多复杂&#xff…

L0-Linux-关卡材料提交

SSH全称Secure Shell&#xff0c;中文翻译为安全外壳&#xff0c;它是一种网络安全协议&#xff0c;通过加密和认证机制实现安全的访问和文件传输等业务。SSH 协议通过对网络数据进行加密和验证&#xff0c;在不安全的网络环境中提供了安全的网络服务。 SSH 是&#xff08;C/S…

音视频入门基础:FLV专题(7)——Tag header简介

一、引言 从《音视频入门基础&#xff1a;FLV专题&#xff08;3&#xff09;——FLV header简介》中可以知道&#xff0c; 在FLV header之后&#xff0c;FLV文件剩下的部分应由PreviousTagSize和Tag组成。FLV文件 FLV header PreviousTagSize0 Tag1 PreviousTagSize1 Ta…

netty之基础aio,bio,nio

前言 在Java中&#xff0c;提供了一些关于使用IO的API&#xff0c;可以供开发者来读写外部数据和文件&#xff0c;我们称这些API为Java IO。IO是Java中比较重要知识点&#xff0c;且比较难学习的知识点。并且随着Java的发展为提供更好的数据传输性能&#xff0c;目前有三种IO共…

Metasploit渗透测试之服务端漏洞利用

简介 在之前的文章中&#xff0c;我们学习了目标的IP地址&#xff0c;端口&#xff0c;服务&#xff0c;操作系统等信息的收集。信息收集过程中最大的收获是服务器或系统的操作系统信息。这些信息对后续的渗透目标机器非常有用&#xff0c;因为我们可以快速查找系统上运行的服…

第一弹:C++ 的基本知识概述

文章目录 知识点 1&#xff1a;C 的概述1. C的特征2. C 程序的编辑、编译和执行3. 第一个 C 源程序4. 面向对象程序设计思想4.1 面向对象程序设计思想初始4.2 面向对象程序设计思想的核心 知识点 2&#xff1a;C 对 C 的扩展1. 作用域访问运算符 ::1.1 全局变量和局部变量1.2 作…

前端框架对比与选择:Vue.js、React、Angular及其他

在前端开发的广阔领域中&#xff0c;选择合适的框架是项目成功的关键。本文将详细对比Vue.js、React、Angular以及其他一些流行前端框架&#xff0c;帮助开发者根据项目需求和技术背景做出明智的选择。 1. Vue.js 概述 Vue.js是一个渐进式JavaScript框架&#xff0c;由尤雨溪…