matlab 手把手教你制作五子棋小游戏(二)

编程入门 行业动态 更新时间:2024-10-18 08:32:19

matlab 手把手教你制作五子棋<a href=https://www.elefans.com/category/jswz/34/1769974.html style=小游戏(二)"/>

matlab 手把手教你制作五子棋小游戏(二)

这是上一篇文章的后续呀
对于上一篇文章的几个小问题的解决
有的人可能更想用鼠标控制下棋
有点人希望赢的时候连起来的子的位置可以被显示出来

优化一:鼠标下棋
改进的方法非常简单呀
只需要做一个关于’WindowButtonDownFcn’ 的调用
只需要加入下面一段代码:

    set(gcf,'WindowButtonDownFcn',@getpoint)function getpoint(~,~)xy=get(gca,'CurrentPoint');xp=xy(1,2);yp=xy(1,1);pos=[yp,xp];postion=round(pos);if strcmp(get(gcf,'SelectionType'),'alt')co=0;if control==0&&~isempty(black),black(end,:)=[];co=1;endif control==1&&~isempty(white),white(end,:)=[];co=1;endif co==1,control=mod(control+1,2);endelseif sum(ismember([black(:,1:2);white(:,1:2)],postion(1,1:2),'rows'))==0if control==1,black=[black;postion];endif control==0,white=[white;postion];endcontrol=mod(control+1,2);endendwuziqigame()end

只是前面得到下棋坐标,后面的东西和上篇文章一模一样,其中
strcmp(get(gcf,‘SelectionType’),‘alt’)是判断鼠标点击是不是右键
左键下棋,右键悔棋

优化二:链式搜索
首先我们知道
连成的五子中必定包含下的最后一个棋子
举个例子:

如图所示红叉处是最后下子的地方
标1的地方是第一轮搜到的棋子(因为近)
标2的地方是第二轮。。。。。
标3的。。。。。。。。。。。

例如搜和白色棋子连成一列的的棋子可以这么实现

white=[1 1;1 2;1 3;1 4;5 6;1 5];
%这里白子随便取了几个点。
A=white(end,:);
B=white;
progress=[A;A+ones(length(A),1)*[0 1];A+ones(length(A),1)*[0 -1]];
%取最近的几个点构成集合
progress=unique(progress,'rows');%删除相同的项
while ~isempty(intersect(progress,B,'rows'))[a,~,b]=intersect(progress,B,'rows');A=[A;a];A=unique(A,'rows');B(b,:)=[];把相同的部分从B中剔除progress=[A;A+ones(length(A),1)*[0 1];A+ones(length(A),1)*[0 -1]];progress=unique(progress,'rows');
end
A

搜索结果
A =

 1     11     21     31     41     5   

其他方向的搜索也和这个类似
这个就不贴出代码啦
大家可以自己写写试试嗯哒
效果:

更多推荐

matlab 手把手教你制作五子棋小游戏(二)

本文发布于:2024-02-24 15:35:05,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1695788.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:小游戏   手把手教你   五子   matlab

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!