【_Charloe原创】 2019年4月5日

[前言]:
突发奇想,想写一个基于EGE简易五子棋的小程序。预期先写单机上的玩家对战,然后进一步写玩家联机对战,最后看看能不能写出人机大战。因为五子棋有黑棋必胜策略,所以想写一个在无禁手情况下的不可战胜机器。这是也是突然想写这个程序的初心,也是最终目的。
但基于目前的能力,只能一步一步实现。在写中学,在学中写。

[实现]:
先利用画矩形,画线等方法,打印棋盘。
考虑黑白棋子:这里没有用简单的画小圆作为一个棋子(太丑),而是想用打印图片的方法。但在网上没有找到合适的图片(那种没有背景,只有一个裸棋子图片才合适),所以选择自己用PS画一个(也是第一次用PS画图)。但又遇到问题:即使用PS选择透明画布,然后将棋子打印到EGE上,惊奇的发现画布竟然依然被打印出来了!然而,不管用什么图片软件打开棋子图都是没有背景的。查了很多资料,想了很多方法,都没有成功解决。最后,采用了一种小聪明方法:将棋子图背景颜色设为和棋盘颜色一样,这样打印出的效果与没有棋子图背景干扰一致。(事实上,在程序被写完时发现了,一个函数可以忽略背景:putimage_transparent(); 但可能因为我第一次用PS,画出的图有些瑕疵,之前的那种方法反而更完美,所以没有改动。)
游戏胜利时,打印的图片是从王者荣耀里面扣出来的。(侵删)
这里说的都是在EGE图形化方面遇到的问题,至于算法方面,目前五子棋程序还不算很复杂,实现过程中也没有遇到很大的困难,也就不一样叙述。
最后,又遇到一些问题,如:如何将程序发布出来,在其他机器上也能运行。搞清楚怎么弄花费了很长的时间。因为按照网上的方法,设为运行库:MT,release模式,编译的时候我的VS直接报错,在MD模式又正常,我就很奇怪。又想打包成安装程序发布,又查了很多资料。结果在安装VS installer project 的时候出现安装错误,VS直接暴毙。打开VS的时候,提示缺失组件,请重新安装。(我头都要掉了)。最后修复了,决定再试一次安装VS installer project,竟然就成功了。(我也不知道为啥之前错误这次成功,可能和项目路径有关)。结果又经历了重重困难(也解决了MT release 模式的问题),终于成功了。(因为我的程序要用到一些图片,所以打包成安装程序)

[代码]:
因为我是分文件写的,把所以代码放上来不太方便,那就放算法的那一部分。(羞,因为感觉放上来没啥用,大家都会。)
至于最终程序见最下面的链接。
【注意】:这段代码是不能直接运行的。

void mouse_click() {mouse_msg msg = { 0 };int mouse_x=0, mouse_y=0;int mouse_down=0;bool over_flag=0;int temp[2][2] = { {-1,-1},{-1,-1} };//temp[0]:黑棋;temp[1]:白棋putimage(630, 30, img_B);for (; is_run(); delay_fps(60)){while (mousemsg())//获取鼠标消息,这个函数会等待,等待到有消息为止{msg = getmouse();//将鼠标信息存入鼠标结构体}if ((int)msg.is_down() == 1){mouse_x = msg.x;mouse_y = msg.y;msg = { 0 };for(int x=0;x<15;x++) //打印棋子位置;for (int y = 0; y < 15; y++){if (mouse_x > (10+x*40) && mouse_x < (50+x*40) && mouse_y>(10+y*40) && mouse_y < (50+y*40)){if (whoflag == 0 && data[x][y] == -1){putimage(10+x*40, 10+y*40, img_black);putimage(630, 30, img_W);data[x][y] = 0;temp[0][0] = x;temp[0][1] = y;over_flag = whe_over(x, y);if (over_flag == 1){game_over(data[x][y]);return;}whoflag = !whoflag;break;}else if(whoflag == 1 && data[x][y] == -1){putimage(10+x*40, 10+y*40, img_white);putimage(630, 30, img_B);data[x][y] = 1;temp[1][0] = x;temp[1][1] = y;over_flag = whe_over(x, y);if (over_flag == 1){game_over(data[x][y]);return;}whoflag = !whoflag;break;}}}
if (mouse_x > 670 && mouse_x < 770 && mouse_y>290 && mouse_y < 325){for(int m=0;m<2;m++)if(temp[m][0]>=0&&temp[m][0]<=14&&temp[m][1]>=0&&temp[m][1]<=14)//防止越界{data[temp[m][0]][temp[m][1]] = -1;//清除数据bar(10 + temp[m][0] * 40, 10 + temp[m][1] * 40, 50 + temp[m][0] * 40, 50 + temp[m][1] * 40);//清除格子if (temp[m][0] > 0 && temp[m][0] < 14 && temp[m][1] > 0 && temp[m][1] < 14)//内部格子处理{line(30 + temp[m][0] * 40, 10 + temp[m][1] * 40, 30 + temp[m][0] * 40, 50 + temp[m][1] * 40);//画竖line(10 + temp[m][0] * 40, 30 + temp[m][1] * 40, 50 + temp[m][0] * 40, 30 + temp[m][1] * 40);//画横}
else if (temp[m][0] == 0 )//左边
{
if (temp[m][1] > 0 && temp[m][1] < 14)//中部{line(30, 30 + temp[m][1] * 40, 30, 10+temp[m][1]*40);line(30, 30 + temp[m][1] * 40, 50, 30 + temp[m][1]*40);line(30, 30 + temp[m][1] * 40, 30, 50 + temp[m][1] * 40);}else if (temp[m][1] == 0)//左上角{line(30, 30, 50, 30);line(30, 30, 30, 50);}else if (temp[m][1] == 14)//左下角{line(30, 590, 30, 570);line(30, 590, 50, 590);}}
else if (temp[m][0] == 14 )//右边{if (temp[m][1] > 0 && temp[m][1] < 14){line(590, 30 + temp[m][1] * 40, 590, 10 + temp[m][1] * 40);line(590, 30 + temp[m][1] * 40, 570, 30 + temp[m][1] * 40);line(590, 30 + temp[m][1] * 40, 590, 50 + temp[m][1] * 40);}else if (temp[m][1] == 0)//右上角{line(590, 30, 570, 30);line(590, 30, 590, 50);}else if (temp[m][1] == 14)//右下角{line(590, 590, 590, 570);line(590, 590, 570, 590);}}else if (temp[m][1] == 0)//上边 中部{line(30 + temp[m][0] * 40, 30, 10 + temp[m][0] * 40, 30);line(30 + temp[m][0] * 40, 30, 30 + temp[m][0] * 40, 50);line(30 + temp[m][0] * 40, 30, 50 + temp[m][0] * 40, 30);}else if (temp[m][1] == 14)//下边 中部{line(30 + temp[m][0] * 40, 590, 10 + temp[m][0] * 40, 590);line(30 + temp[m][0] * 40, 590, 30 + temp[m][0] * 40, 570);line(30 + temp[m][0] * 40, 590, 50 + temp[m][0] * 40, 590);}temp[m][0] = 0; //复位temp[m][1] = 0;}}}}
}

PS: 复制个代码怎么老是出现异常。整个博客都崩溃了(无反应)。
需要的话联系我(留下联系方式),我把源码发给你。

PS:[2019.4.7] 更好的实现悔棋操作:直接cleardevice(),在根据data数组值打印图片就好了;这样的代码比我之前那个判断要简洁的多。

【安装文件链接】:
注意运行setup.exe。
链接:https://pan.baidu.com/s/1Qb17e98cwM4PYKmCbhrEGQ
提取码:q7qe

【源码链接】
链接:https://pan.baidu.com/s/1ANq61sUk90HqgEwQjvhhNA
提取码:fq2c

2019.7.12
看到有人询问源码了,很抱歉很久没有上CSDN了。现在直接把源码链接放这里吧,有需要的自取。
另外,稍稍的看了一眼自己以前写的这个代码,感觉有很多瑕疵,之后可能会修改一下,然后再分享出来。以下分享的是原代码。
这个五子棋只能在本地运行,之后会分享一个联机的五子棋源码,是基于此代码实现的。
2019.8.5
这次把之前的源码做了一下改动。悔棋操作不再是利用我贴出来的代码实现,而是直接cleardevice(),再根据data数组值打印图片,代码简洁了一些。
上面是修改后的代码,安装文件也做了相应的修改。

【EGE】五子棋小游戏 (鼠标控制)相关推荐

  1. 基于c++EGE图形库编写的五子棋小游戏

    基于c++EGE图形库编写的五子棋小游戏 EGE图形库 新手推荐使用 EGE(Easy Graphics Engine),是windows下的简易绘图库,是一个类似BGI(graphics.h)的面向 ...

  2. JAVA课设单人版五子棋小游戏

    内容介绍:该程序为Java课设的单人版五子棋小游戏,通过eclipse编辑,实现了动作事件的监听与处理,以及JavaSwing的界面编程.  编辑排行榜,包含局数,结果,步数,以及"关于我们 ...

  3. 基于 Blazor 开发五子棋小游戏

    今天是农历五月初五,端午节.在此,祝大家端午安康! 端午节是中华民族古老的传统节日之一.端午也称端五,端阳.此外,端午节还有许多别称,如:午日节.重五节.五月节.浴兰节.女儿节.天中节.地腊.诗人节. ...

  4. C语言---简单五子棋小游戏

    效果图如下: 设计思路: 棋盘设计为15×15格,初始状态光标在棋盘的中央,白棋先走,轮流落子,当一方连成五子或下满棋盘时,游戏结束(连成五子的一方获胜,下满棋盘为和棋).当游戏一方胜利后显示胜利信息 ...

  5. c语言五子棋学年论文,基于c语言五子棋小游戏生本科论文.doc

    基于c语言五子棋小游戏生本科论文 五子棋小游戏 需求分析 现在有越来越多的人使用电脑,而且五子棋的受众广泛但实体棋操作较为繁琐且平时较难实现,所以电脑版的五子棋游戏应运而生.大家对于这个小游戏的需求如 ...

  6. c语言五子棋对局结果存储,基于C语言五子棋小游戏总结.doc

    五子棋小游戏 需求分析 现在有越来越多的人使用电脑,而且五子棋的受众广泛但实体棋操作较为繁琐且平时较难实现,所以电脑版的五子棋游戏应运而生.大家对于这个小游戏的需求如下:首先,设计这个游戏最基本的就是 ...

  7. c语言五子棋毕业设计,基于c语言五子棋小游戏--本科生毕业设计.doc

    五子棋小游戏 需求分析 现在有越来越多的人使用电脑,而且五子棋的受众广泛但实体棋操作较为繁琐且平时较难实现,所以电脑版的五子棋游戏应运而生.大家对于这个小游戏的需求如下:首先,设计这个游戏最基本的就是 ...

  8. java走棋_Java五子棋小游戏(控制台纯Ai算法)

    Java五子棋小游戏(控制台纯Ai算法) 继续之前的那个五子棋程序 修复了一些已知的小Bug 这里是之前的五子棋程序 原文链接 修复了一些算法缺陷 本次增加了AI算法 可以人机对战 也可以Ai对Ai看 ...

  9. QT实现五子棋小游戏

    学习QT的过程中,为了加深自己的一些基础操作,也为了想装x,就自己写了一个五子棋小游戏,目前界面没写完整,游戏主题部分可以玩. 五子棋游戏主要的操作有三个. 第一: void MainWindow:: ...

  10. 五子棋小游戏 java版(代码+详细注释)

    游戏展示         这周闲来无事,再来写个五子棋小游戏.基本功能都实现了,包括人人对战.人机对战.界面布局和功能都写的还行,没做到很优秀,但也不算差.如有需要,做个java初学者的课程设计或者自 ...

最新文章

  1. 令人拍案叫绝的Wasserstein GAN
  2. 前端javascript实现二进制读写操作
  3. C#.net调用Excel出现问题
  4. 【 Grey Hack 】综合工具 shellOs
  5. SQL 养成一个好习惯是一笔财富
  6. TensorFlow实现单隐层神经网络
  7. java string contains indexof,java.lang.String.contains()方法实例
  8. java实例摘要(四)
  9. java b2b2c shop 多用户商城系统源码-common-service 项目构建过程
  10. java 异常_23、Java异常分类
  11. 支付宝小程序跳转基金相关页面
  12. 讨论《蔚蓝(Celeste)》的设计
  13. 微软Surface Pro 3:优秀由内而外
  14. 高射炮打蚊子丨用Visual Studio 2017写最初级的C语言程序
  15. 最详细G1垃圾回收器日志解读
  16. 语音邮件 voice mail 概述
  17. 【Delphi】中使用消息Messages(五)Windows消息
  18. VMware下载及安装(附带下载地址)
  19. 【pytorch】WinError126解决方案
  20. 神经网络控制系统的应用,神经网络控制基本原理

热门文章

  1. next主题搭建相册(无需安装插件,代码即可实现)
  2. txt改成java没反应_为什么我的TXT文档后戳换成java就打不开呢
  3. 【ORM框架】Python ORM框架——peewee(详细)
  4. 【程序人生】全国一二线程序员工资统计新鲜出炉,又涨了!
  5. 主元分析matlab,主元分析不同方法计算结果不一样
  6. 解决ctrl+win+left/right失效问题(windows10桌面切换快捷键)
  7. 浅谈OCR之Onenote 2010
  8. 类似元气骑士的九宫格随机地图实现
  9. Linux 之旅 8:初识 BASH
  10. SCCM部署系统任务序列失败错误代码0x80070002