有禁手五子棋,黑棋下在这里,形成横四竖三局势,符合规定吗?

由于文章较长,↑↑↑点击目录快速移动到想看的部分↑↑↑(好像只有电脑版csdn才能快速定位)

用一个框架写了不少棋类小游戏(其中包含一个我自创的四子棋小游戏),初学者可以学习体会一下各个程序之间相似的结构和其中的不同,写了新的棋类游戏的话我也会在这里收录。


游戏支持键盘下棋和鼠标下棋两种下棋方式

  1. 左右键同时按下重新开始

围棋吃子的判定较为复杂,故需要三个m文件组成完整函数,目前还没写判定胜负和禁手模块,有待更新。

%按键函数初始化设置: %初始化前清除原有图像: %棋子棋盘数值初始化:

我自创的一种棋,在特殊格子内下棋,先连成四子为胜,开局黑棋先手且有禁手限制。

目前游戏只支持键盘下棋:

%按键函数初始化设置: global turn; %下棋方,值为1时黑方下,值为0时白方下 %每次初始化前删除之前图像: %棋子棋盘数值初始化: %用来绘制棋子红叉的函数初始化: case '游戏规则',msgbox({'游戏规则:';'  在棋盘内落子,当横竖或斜着连成四子即为胜利 ';... '';'禁手规则:';'  第一步棋不能下在棋盘颜色较暗的格子内'}); %使红叉不超出棋盘范围: %删除第一步的禁手限制:

走四棋在乡下是一种全民性游戏,简单易行,老少皆宜。

玩法:在地上画一棋盘,纵横线各四条,每人执四个棋子(多用石块、砖块、木块等代替)对阵摆布。

走子时,纵横进退,但每次只许走一步。若一方两棋子相邻,且与对方的一棋子在同一条直线上,且线上再无别的棋子时,则“吃”掉对方一棋子。若一方只剩下一个棋子,无法对阵时为输。

只支持鼠标操作,鼠标点击棋子,会出现可走的位置,再点击可走位置即可移动棋子。

注:绿圈的位置即为可行位置。

%按键函数初始化设置:
2.4 五子棋(含禁手)

游戏支持键盘下棋和鼠标下棋两种下棋方式

  1. 左右键同时按下重新开始
%按键函数初始化设置: %初始化前清除原有图像: %棋子棋盘数值初始化:

围棋和五子棋的结合,被围住的棋子会改变颜色,连成五子胜利。

游戏支持键盘下棋和鼠标下棋两种下棋方式

  1. 左右键同时按下重新开始
%按键函数初始化设置: %初始化前清除原有图像: %棋子棋盘数值初始化:

与五子棋不同的是,六子棋黑方先手第一步可下一子,之后双方轮流下棋每次可下两子

%按键函数初始化设置: %初始化前清除原有图像: %棋子棋盘数值初始化:

对弈双方各有九个棋子,轮流下到特殊棋盘的空位上。

当有己方三子连成一线时,可吃掉对方未连成一线的棋子。

当所有棋子被摆放到棋盘上时,双方轮流移动棋子(向棋子相邻方向),并通过移动棋子将三子连成一线来吃对方棋子。

当一方只剩三颗棋子时,移动方向可以是棋盘上的任意空位。

当将对手的棋子吃到只剩两颗即为获胜。

%按键函数初始化设置: %初始化前清除原有图像:
% 找到找到黑子或者白子可以下棋的位置并输出为outcome % board :棋盘数组,没有棋子处为0,黑棋为1,白棋为-1 % 我们若是下一步要下黑棋,就要先找到所有黑棋位置 % 再找到每一个黑棋旁边紧挨着白棋,再顺着该方向[黑棋->白棋]一直找, % 直到找到紧挨着白棋的空白,该空白是一个黑棋可下子处,所有可下子处的集合 % 但是为了方便代码编写,我们对流程稍加改进(以黑子为例): % [1] 找到每一个黑子的位置 % [2] j=1:8分八个方向找到该棋子该方向上所有位置的情况 % 例如某黑色棋子(星号)左右情况为:○*○○囗●○○ % 则其右侧方向棋子情况为:○○囗●○○ % [3] 判断某方向棋子第一个是白子,上面例子第一个就是白子 % [4] 如果某防线棋子第一个是白子,删除该方向所有白子 % 上面的例子删除后长这样:囗● % [5] 如果删除后,第一个位置为空,则该位置为可行位置,上例第一个就是囗, % [6] 找到所有可行位置,并删除重复项 % 首先找到棋盘中(黑/白)子位置 % 找到某方向全部棋子,由于棋盘每个方向都最多有八个棋子,所以,以 % 要检测棋子为中心,向某方向取七个位置就能取到全部位置,超出棋盘 if ~isempty(temp_set)% 如果该棋子某方向还有位置(棋子由可能贴着边,那么那个方向就没有检测的必要) % 获取棋子某方向所有位置情况(黑/白/空) % 如果紧挨着的是棋子且为相反颜色 % 删除该方向全部相反颜色的棋子 if temp_value(1)==0% 在紧挨为反色的前提下如果第一个不是反色的是空位置 % 将该位置并入结果集合 % 下面这个矩阵用来放配色的,并没啥实际用途 %按键函数初始化设置: global postion; %选择的位置(选择位置为可达位置才能落子) %初始化前清除原有图像: %棋子棋盘数值初始化: pos=round(pos);%取整点,确定点击位置应在棋盘第几行第几列 redraw()%落完子(为各个数组添加或改变元素后)重新绘制期盼 %为黑子或白子集合添加元素 %检测被“同化”的棋子并转变颜色 %从下子位置检测八个方向,更换所有该更换颜色的棋子 %与检测可达集合类似操作: %如果离位置最近为反色棋子,找到该集合第一个不是反色棋子的位置 %如果该位置为同色,便将两同色棋子之间的反色棋子全部替换 % 如果无可落子点,直接转到对手回合并重新检测可达点 % 重新绘制和黑子,白子,可达点,当前选择位置 % 如果棋盘下满,结束游戏,棋子数量较多的为胜者

能看到这里也是辛苦了,毕竟这么长一个文章,大家可以将文中的代码复制下来运行一下,看看其中相似的结构部分,和为了迎合不同功能做出的改变。

欢迎大家指出程序中的问题,之后可能会尝试写一些国际象棋,跳棋之类的棋类游戏,敬请期待。

}

五子棋禁手,指对局中禁止先行一方(黑方)使用的战术,具体包括黑方一子落下时同时形成双活三、双四或长连等三种棋形。禁手只对黑方有效,白方无禁手。黑方禁手的位置称为禁手点。

禁手分为三三禁手、四四禁手、长连禁手:

三三禁手:黑棋一子落下同时形成两个活三,此子必须为两个活三共同的构成子;

四四禁手:黑棋一子落下同时形成两个或两个以上的冲四或活四;

长连禁手:黑棋一子落下形成一个或一个以上的长连。

对黑方的行棋加以限制,从对局的实际棋力的发挥来看,对双方是比较公平的。五子棋是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。

通常双方分别使用黑白两色的棋子,轮流下在棋盘竖线与横线的交叉点上,先形成五子连线者获胜。在专业五子棋竞赛规则中,另有交换、禁手等规定,用于限制先行方优势。起源于东亚地区,主要流行于华人和汉字文化圈的国家。

棋盘可用木料、硬纸、塑料、布料、石料或环保材料等制成。棋盘由横纵各15条等距离,垂直交叉的平行线构成,在棋盘上,横纵线交叉形成了225个交叉点为对弈时的落子点。邻近两个交叉点的距离要略大于棋子的直径。

}

我要回帖

更多关于 五子棋44禁手 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信