当前位置: 首页 > news >正文

C++EasyX之井字棋

视频链接

井字棋

用EasyX和C++实现井字棋小游戏

源码及注释

#include<graphics.h>char board_data[3][3] =
{{'-','-','-'},{'-','-','-'},{'-','-','-'},
};char current_piece = 'O';//检测指定棋子的玩家是否获胜
bool CheckWin(char c)
{// 检查每一行for (int i = 0; i < 3; i++){if (board_data[i][0] == c && board_data[i][1] == c && board_data[i][2] == c)return true;}// 检查每一列for (int j = 0; j < 3; j++){if (board_data[0][j] == c && board_data[1][j] == c && board_data[2][j] == 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;// 如果没有匹配,则返回 falsereturn 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;default: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;BeginBatchDraw();while (running){DWORD start_time = GetTickCount();//自系统启动以来经历的毫秒数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';}}}cleardevice();DrawBoard();DrawPiece();DrawTipText();FlushBatchDraw();if (CheckWin('X')){MessageBox(GetHWnd(), _T("X 玩家获胜"), _T("游戏结束"), MB_OK);running = false;}else if (CheckWin('O')){MessageBox(GetHWnd(), _T("Y 玩家获胜"), _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) // 为了确保60hz刷新{Sleep(1000 / 60 - delta_time);//控制每次循环的时间消耗,而进行线程休眠}}EndBatchDraw();return 0;
}

相关文章:

C++EasyX之井字棋

视频链接 井字棋 用EasyX和C实现井字棋小游戏 源码及注释 #include<graphics.h>char board_data[3][3] {{-,-,-},{-,-,-},{-,-,-}, };char current_piece O;//检测指定棋子的玩家是否获胜 bool CheckWin(char c) {// 检查每一行for (int i 0; i < 3; i){if (bo…...

12.5_黑马数据结构与算法Java

目录 001 二分查找 算法描述 002 二分查找 算法实现 003 二分查找 问题1 循环条件 004 二分查找 问题2 中间索引 thinking&#xff1a;反码补码原码&#xff1f; thinking&#xff1a;二进制转十进制&#xff1f; thinking&#xff1a;无符号右移&#xff1f; 005 二分…...

【PID学习笔记 5 】控制系统的性能指标之一

写在前面 PID在实际工程中最重要的工作就是调参&#xff0c;那么首先就要了解控制系统的性能指标。上文最后简要介绍了控制系统的基本要求&#xff0c;本文开始将系统学习控制系统的性能指标&#xff0c;内容比较多&#xff0c;初步计划是分三节来讲解。本文重点介绍性能指标的…...

HarmonyOS学习--TypeScript语言学习(三)

本章目录如下 一、条件语句 二、迭代器 三、循环 四、函数 五、类 一、条件语句 条件语句用于基于不同的条件来执行不同的动作。TypeScript 条件语句是通过一条或多条语句的执行结果&#xff08;True 或 False&#xff09;来决定执行的代码块。 在 TypeScript 中&#x…...

Matlab 镜像变换(2D)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 镜像变换是一个非常有趣的过程,它有着一个通用的套路(以2D为例):一个点围绕一个给定对称轴的镜像可以通过平移对称轴上一点,然后旋转它,使对称轴与x轴对齐,之后我们将旋转后的点的y坐标置为负,最后再将对称…...

SpringBoot3-快速体验

1、pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…...

计数问题(数位DP)

题目大意&#xff1a;给定一个区间&#xff0c;求该区间内0 ~ 9出现的次数&#xff0c;多次询问&#xff0c;以0 0结束询问 测试用例&#xff1a; 输入&#xff1a; 1 10 44 497 346 542 1199 1748 1496 1403 1004 503 1714 190 1317 854 1976 494 1001 1960 0 0 输出&#xff…...

SQL Server事务(Transaction)

5. 事务(Transaction) 5.1. 事务概念 事务是关系库中不可分割的一系列数据库操作,这些操作必须要么整体成功,要么整体失败。事务维护数据完整性,保证数据库总是处于一致性状态。虽然,各关系库中事务实现和操作的具体细节有所不同,但基本概念和功能完全相同,而具体操作…...

Python语言基础学习大纲(由某大模型生成)

自从上次经丙察察游了一次滇藏线&#xff0c;已有3个没写一篇了。今天利用由某大模型生成的上面这张思维导图&#xff0c;配合这个大模型生成的6000多字拼凑出一篇博文聊以交差。 Python语言概述 一、语言特点 1.语法简单明了 Python的语法简洁易懂&#xff0c;使得编写代码…...

nodejs+vue+微信小程序+python+PHP天天网站书城管理系统的设计与实现-计算机毕业设计推荐

本项目主要分为前台模块与后台模块2个部分&#xff0c;详细描述如下&#xff1a;   &#xff08;1&#xff09;前台模块 首页: 首页可以起到导航的作用&#xff0c;用户想要了解网站 &#xff0c;网站首页为用户可以深入了解网站提供了一个平台&#xff0c;它就向一个“导游”…...

工业机器视觉megauging(向光有光)使用说明书(十二,轻量级的visionpro)

关于最后一个工具的介绍&#xff1a;就是这个“相机图像” 我们可以鼠标双击点进去看一看&#xff1a; 在图像上点击&#xff0c;就可以截取一块图像&#xff0c;是可以放大缩小的&#xff0c;这个放大很low&#xff0c;是我以前研究缩放入门时的版本&#xff0c;本想删除&…...

HarmonyOS学习--了解基本工程目录

1.工程级目录 工程的目录结构如下&#xff1a; 其中详细如下&#xff1a; AppScope中存放应用全局所需要的资源文件。entry是应用的主模块&#xff0c;存放HarmonyOS应用的代码、资源等。oh_modules是工程的依赖包&#xff0c;存放工程依赖的源文件。build-profile.json5是工…...

JRT导出协议实现

之前实现了JRT的打印客户端实现&#xff0c;这次实现JRT的导出Excel的客户端实现&#xff0c;这样这套框架就成为完全体了。还是一样的设计&#xff0c;不面向具体业务编程&#xff0c;我喜欢面向协议编程&#xff0c;导出一样定义了一套协议。 协议约定&#xff1a; 然后就是…...

Unity中动态合批

文章目录 前言一、动态合批的规则1、材质相同是合批的前提&#xff0c;但是如果是材质实例的话&#xff0c;则一样无法合批。2、支持不同网格的合批3、动态合批需要网格支持的顶点条件二、我们导入一个模型并且制作一个Shader&#xff0c;来测试动态合批1、我们选择模型的 Mesh…...

逆水行舟!浅谈24届双非本科秋招

逆水行舟&#xff01;浅谈24届双非本科的秋招 逆水行舟&#xff01;浅谈24届双非本科的秋招0、背景 -- 写下本文的初衷1、实习 -- 秋招的预备战役1.1 科大讯飞1.2 三七互娱 2、秋招 -- 一场没有硝烟的战争3、总结 -- 做好自己想做的事情 0、背景 – 写下本文的初衷 如题&#…...

vue3请求代理proxy中pathRewrite失效

问题引入 在vue3配置请求代理proxy的时候pathRewrite失效。 有这样一个例子&#xff0c;作用是为了把所有以/api开头的请求代理到后端的路径和端口上&#xff0c;在vue.config.js配置文件中 设置了代理跨域和默认端口。但是重新运行之后发现端口是改了&#xff0c;但是路径仍然…...

练习题——-【学习补档】日期差值

问题描述 描述 有两个日期&#xff0c;求两个日期之间的天数&#xff0c;如果两个日期是连续的我们规定他们之间的天数为两天。 输入描述&#xff1a; 有多组数据&#xff0c;每组数据有两行&#xff0c;分别表示两个日期&#xff0c;形式为YYYYMMDD 输出描述&#xff1a; 每组…...

面试问题 --文件描述符和流

文件描述符概述 文件描述符是计算机操作系统中用于标识和访问文件或输入/输出设备的抽象概念。在Unix和类Unix系统中&#xff0c;文件描述符是一个非负整数&#xff0c;用于唯一标识打开的文件或I/O设备。本文将介绍文件描述符的基本概念和在Unix环境中的应用。 基本概念 文…...

离线安装Zabbix的MariaDB报Error: Package: 1:mariadb-server-5.5.68-1.el7.x86 64异常解决方法

离线安装Zabbix&#xff0c;结果在安装MariaDB时候&#xff0c;报出以下异常 Error: Package: 1:mariadb-server-5.5.68-1.el7.x86 64(New) Requires: per(File::Path) Error: Package: perl-IO-Compress-2.061-2.el7.noarch (New) Requires: perl(I0: :Seekable) Error: Pack…...

【go语言开发】go项目打包成Docker镜像,包括Dockerfile命令介绍、goctl工具生成

本文主要介绍如何将go项目打包成镜像&#xff0c;首先介绍Dockerfile常用命令介绍&#xff0c;然后介绍使用工具goctl用于生成Dockerfile&#xff0c;还可以根据需求自定义指令内容&#xff0c;最后讲解如何将go-blog项目打包成镜像&#xff0c;以及如何运行等 文章目录 前言Do…...

Python:可以做什么?

简介 Python是一种高级编程语言&#xff0c;因其简单易学、代码可读性强和拥有丰富的标准库而广受欢迎。Python可以用于许多不同领域&#xff0c;主要包括&#xff1a; 数据分析与数据科学&#xff1a;Python有强大的数据处理和分析库&#xff0c;如Pandas、NumPy和SciPy&…...

Lookup Argument简史

1. 引言 主要参考Ingonyama团队2023年4月文章《A Brief History of Lookup Arguments》。 近年来zk-SNARKs的研究热点有&#xff1a; 让ZKP proof更succinct降低Prover time和Verifier time 但&#xff0c;大多数SNARKs仍受限于&#xff0c;易于转换为多项式的算术运算。通…...

【unity3D】Transform组件(如何访问和获取Transform组件)

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是unity的Transform组件 Transform组件 基础知识介绍三个成员变量常用属性扩展 Transform的相关查找方法静态方法 基础知识 介绍 在Unit…...

单实例应用程序

2023年12月6日&#xff0c;周三凌晨 什么是单实例应用程序 单实例应用程序可以确保在同一时间只有一个应用程序实例在运行。 通常情况下&#xff0c;当用户尝试再次启动一个已经启动过的应用程序时&#xff0c;操作系统会打开一个新的实例。但有些情况下&#xff0c;我们可能…...

Qlik 成为网络犯罪的焦点

研究人员警告说&#xff0c;Cactus 勒索软件组织正在利用 Qlik Sense 数据可视化、探索和监控解决方案中的关键漏洞来获得对企业网络的初始访问权限。 今年八月下旬&#xff0c;Qlik Sense 开发人员 针对影响 Windows 版本平台的两个关键漏洞发布了补丁 。 其中一个漏洞 CVE-…...

1+X Web 前端开发职业技能等级证书模拟题(中级)理论知识

1X Web 前端开发职业技能等级证书模拟题&#xff08;中级&#xff09;理论知识 一、单项选择题 在 Bootstrap 中&#xff0c;可以使用 navbar-header 类的情况是&#xff08;&#xff09; A 为整个页面添加一个标题 B 为导航栏添加一个标题 C 为导航栏 添加头部 D 为整个页面添…...

2023.12.4 关于 Spring Boot 统一异常处理

目录 引言 统一异常处理 异常全部监测 引言 将异常处理逻辑集中到一个地方&#xff0c;可以避免在每个控制器或业务逻辑中都编写相似的异常处理代码&#xff0c;这降低了代码的冗余&#xff0c;提高了代码的可维护性统一的异常处理使得调试和维护变得更加容易&#xff0c;通…...

企业网络安全守护者:EventLog Analyzer日志审计系统

在当今数字时代&#xff0c;企业网络不仅仅是业务运营的核心&#xff0c;也成为各种潜在威胁的目标。为了保障企业的网络安全&#xff0c;日志审计系统成为了不可或缺的一环。其中&#xff0c;ManageEngine的EventLog Analyzer作为一款强大而全面的日志管理与审计解决方案&…...

剪映最新版的4.9,主要更新的功能(于2023年12月2日发布)

新增“多轨道音频”功能&#xff1a;用户可以将多个音频轨道叠加在一起&#xff0c;并对每个音频轨道进行单独的编辑。这使得用户可以更灵活地控制视频的音频效果。新增“音频调音”功能&#xff1a;用户可以使用音频调音功能对视频的音频进行调节&#xff0c;包括音量、音调、…...

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Mybatis核心配置详解

第一章 Mybatis核心配置详解【mybatis-config.xml】 1.1 核心配置文件概述 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 1.2 核心配置文件根标签 没有实际语义&#xff0c;主要作用&#xff1a;所有子标签均需要设置在跟标签内部 1.3 核心配置文件…...

微网站怎么样做线下活动吸粉/海外网站推广的公司

这天天气明朗&#xff0c;万里无云&#xff0c;是个放风筝的好日子。小红、小明和他们的好朋友小亮到草坪上放风筝。 他们来到目的地&#xff0c;发现草坪上有很多人都在放风筝。天空中&#xff0c;已经有勇猛的“老鹰”、有可爱的“金鱼”、还有长着无数只脚的“蜈蚣”……可…...

福州做商城网站公司/建站企业网站

最近公司的项目很多&#xff0c;研发那里需要的测试环境很多&#xff0c;而且基本都是lnmp的测试环境&#xff08;也有apache与tomcat,但非常少&#xff09;&#xff0c;测试没有问题之后还需要上线&#xff0c;所以最近我很忙&#xff0c;而且都是重复性的工作&#xff0c;本来…...

百度网页下载/简阳seo排名优化培训

概述 1. 什么是 Docker&#xff1f; Docker 是一个应用容器平台&#xff0c;管理项目中用到的所有环境&#xff08;MySQL、Redis…&#xff09; 2. Docker 和虚拟机的区别 虚拟机是携带操作系统的&#xff0c;本身很小的应用程序因为携带了操作系统而变得十分笨重&#xff0…...

珠海政府网站大湾区建设/济南网站seo哪家公司好

import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;public class ConditionCommunication {/*** 这一个示例的学习应该和传统的线程通信相互对比&#xff0c;Condition的通信优点查看文…...

网站开发专业培训/百度推广怎么联系

发布时间&#xff1a;2016-06-28注意:乐谱触发有先后顺序,两个乐谱事件不能同时触发.满足触发条件后,在出自家门时会发生寻找乐谱事件. 1 音階の基礎条件:一年春17日 位置:ダンヒル家床边. 效果:树林区域跳跃蘑菇使用可能.(从小镇北部进入 ...标签&#xff1a;牧场物语攻…...

wordpress创建企业邮箱/网页优化方案

Geospatial 地理位置 朋友的定位&#xff0c;附近的人&#xff0c;打车距离计算&#xff1f; Redis 的 Geo 在Redis3.2 版本就推出了&#xff01; 这个功能可以推算地理位置的信息&#xff0c;两地之间的距离&#xff0c;方圆 几里的人&#xff01; 可以查询一些测试数据&…...