网站首页 > 易语言相关 > 易语言游戏开发 正文
资源介绍:
如何绘制棋盘和棋子?
====================
棋盘是使用画板的“画直线”方法绘制的,使用了一个计次循环。棋盘上的小圆点是通过“画椭圆”方法绘制的。详细代码请参见“画棋盘”和“画小点”子程序。其中通过换算将棋盘坐标转换成了像素坐标。
棋子的图片存在程序的资源中,是ico格式的。使用ico格式的好处是可以直接使用画板的“画图片”方法画到棋盘上而不用额外的代码来处理棋子周围的透明,很方便!相关代码请参见“画棋子”子程序。
棋盘的底图是我用Photoshop生成的,棋子的图标是我在3ds max软件中制作的。
跟随光标的红色块是如何制作的?
==============================
那实际是个外形框控件。当光标在画板上移动的时候,通过计算将其移至相应的位置即可。详细代码请参见“移动鼠标外形框”子程序。 其中通过数学计算将棋盘坐标换算成像素坐标。
计算机是如何思考的?
=====================
首先要判断单向棋型和得分。所谓单向棋型就是指当前棋子落下后在某一方向上所形成的棋型。一颗棋子落下后会与棋盘上周围的棋子构成某种棋型,一共有四个方向:横、竖、左斜、右斜。如果能够判断一个方向,其他方向就好办了。下面我们只以横向来讲解。假定当前棋子落在棋盘上的坐标是(x,y),这里x和y是棋盘坐标,其值介于1-15之间。我们首先往左看,如果(x-1,y)位置的棋子与本棋子相同,则将“棋个数”变量加1;如果不同,则将“左堵”设为真,表示左边已被对方堵住,同时跳出循环,再往右看;如果为空,则继续往左看(x-2,y)棋位上的棋子,如果为对方棋子,则将“左堵”设为假;如果为己方棋子,则将“空个数”加一,表示其中有一个空棋位。如此循环,直到循环次数到达5、或者到达棋盘的左边沿、或者遇到左堵或左空而跳出循环。如果计数值未到达5,则从落子的位置继续往右观察,根据(x+1,y)、(x+2,y)……等处的棋子来修改“棋个数”、“空个数”、“右堵”等参数。 判断完毕后就给该单向棋型打分,这样便于以后根据分值排序。打分的原则是这样的:因为相同的棋越多,则得分越高,而且近似于呈指数关系(当棋个数为5时,得分应为无限大),所以先求一个幂,底数我选择8,指数为棋个数;因为如果相同的棋中间有空棋位的话,得分要打折扣,所以接下来减去一个底数为8,指数为“空个数”的幂值;如果有一端被对方棋子堵住了,则得分要大打折扣,我将得分除以2;如果两端都被堵住了,且棋个数小于5,则得分规定为1。这样我们就得到了单向棋型和得分。其源代码请参见子程序“计算单向棋型和得分”。该子程序最后有两个参数用来控制方向:左=1,顶=0 则计算横向;左=0,顶=1则用来计算纵向;左=1,顶=1用来计算右斜向;左=-1,顶=1用来计算左斜向。
通过四次调用“计算单向棋型和得分”可以分别得到该位置的四个方向的棋型和得分。接下来根据得分进行排序,这样就挑出得分最高的两个方向。根据其棋个数、空个数、左堵、右堵等信息来计算综合棋型。这样很容易就得到了“活四”、“双活三”、“死四活三”等棋型。这些代码请参见子程序“计算综合棋型和得分”。
然后计算机模拟己方落子和对方落子来计算综合棋型。首先计算己方(计算机方)能否获胜,如果能,就将棋子落在获胜的棋位上;如果不能,则判断对方能否有获胜的棋位,如果有,则将棋子落在该棋位上;接下来根据优先级分别判断一些最重要的棋步,比如“活四活四 活四死四 死四死四 活四活三 死四活三”等。这种棋型都是必胜棋型,计算机要抓住时机,同时要防止对方形成这些棋型。这些代码请参见子程序“计算当前最重要棋步”。 如果双方都没有这些重要棋型,则比较双方的最高得分,因为计算机后行棋,将计算机的最高得分乘以一个常数(“进攻指数”)再进行比较,如果计算机得分高,则落在计算机的棋位,如果对方(人)得分高,则落在对方的棋位。当然如果有相交棋步(对于计算机和人来说,该棋位都是重要棋位),则直接下在该棋位而不用比较得分了。详细代码请见“计算当前最佳落子位置”子程序。
如何判断是否为禁手?
=====================
有了“计算综合棋型和得分”子程序,判断禁手就简单了。详见“禁手判断”子程序。
悔棋是如何实现的?
===================
在行棋的过程中,计算机维护了一个棋步历史数组,同时维护了一个历史图片数组,用来保存被棋子遮住的棋盘位置的图片(为了在落子时获取该图片,我利用了一个隐藏的画板,该画板为“画板空棋盘”,仅仅用来画一个空棋盘,在落子的时候,我将该空棋盘上相应位置的图片块存入历史图片数组中)。当悔棋的时候,将相应的历史图片绘制到它原来的地方盖住棋子即可。同时修改全局的棋型数组。相关代码请参见“悔棋”子程序。
资源作者:
易语言源码做软件
资源界面:
资源下载:
- 上一篇: 碰碰球游戏源码(易语言2003年大赛三等奖)
- 下一篇: 利用数据库实现词库功能源码(机器人对话)
猜你喜欢
- 2021-07-04 易语言编写贪吃蛇源码
- 2021-07-04 大漠练手的云顶自动拿牌只做了龙族和丧尸
- 2021-04-19 穿越火线语音播报工具源码
- 2021-02-04 新易扑克牌游戏源代码
- 2020-08-02 易语言编写的文字游戏源码
- 2020-04-02 联网猜拳源码
- 2020-01-21 神兽转盘(公网版本)
- 2020-01-10 手柄控制电脑-支持双摇杆
- 2019-11-15 易语言写的劲舞团GM工具源码
- 2019-10-25 TGP饥荒一键指令工具源码
你 发表评论:
欢迎- 百度站内搜索
- 关注微信公众号
- 网站分类
-
- 网站公告
- 电子书书籍
- 程序员工具箱
- 编程工具
- 易语言相关
- 网络相关源码
- 图形图像源码
- 系统工具源码
- 易语言模块源码
- 易语言支持库
- 数据库类源码
- 易语言例程
- 易语言游戏开发
- 易语言模块
- 多媒体类源码
- 易语言资源网
- 易语言视频教程
- JS分析教程
- 易语言图文教程
- 易语言常见问题及笔记
- 工具源码
- 易语言版本
- 网络编程
- javascript
- PHP编程
- html
- 正则表达式
- 面试题
- nodejs
- 其它综合
- 脚本专栏
- python
- 按键精灵相关
- 按键精灵图文教程
- 按键精灵视频教程
- 按键精灵Q语言
- 按键精灵安卓版
- golang
- 游戏安全
- 火山相关
- 火山安卓软件
- 火山常见问题及笔记
- 火山安卓源码
- 火山视频教程
- 火山PC版本下载
- 火山PC视窗例程
- 互联网那些事
- 引流推广
- 项目揭秘
- 网络营销
- 营销软件
- QQ营销软件
- 娱乐软件
- 机器人插件
- 培训教程
- 技术教程
- 活动线报
- 数据库
- Redis
- Access
- MongoDB
- Mysql
- 问答
- 其它
- 易语言
- 需求
- 在线教程
- 多线程培训班
- 觅风易语言教程
- 模拟系列教程
- 集中营易语言教程
- 历史数据
- 随机tag
已有2位网友发表了看法:
自学易语言 评论于 [2018-10-18 23:23:31] 回复
易语言计次循环为无限
易语言TV 评论于 [2019-09-17 15:40:33] 回复
易语言五子棋