这是一篇手把手教你用matlab制作五子棋小游戏的推送。
我将这个程序的制作分为如下几个步骤:
第一步:界面设置
第二步:绘制棋盘
第三步:基础设置(棋子设置和绘图函数)
第四步:按键设置
第五步:主函数(刷新棋盘和弹出提示)
第六步:判断输赢的核心算法
第七步:将各部分连接在一起
第八步:些许改进
![8d3044962516d5cc68b5f59a608fb0f0.png](https://img-blog.csdnimg.cn/img_convert/8d3044962516d5cc68b5f59a608fb0f0.png)
**第一步:界面设置**
axis equal%让横竖坐标比例相等
axis([-10,10,-10,10])%坐标轴范围设置为X,Y轴都是-10到10
set(gca,'xtick',[],'ytick',[],...
'xcolor','w','ycolor','w')
%用xtick,ytick删除掉坐标轴刻度,并将坐标轴颜色设置为'w'即white
set(gca,'color',[0.8392,0.7216,0.3804])
%将背景的颜色设置为棕色,这里的三个数字表示的是红蓝绿的比例
hold on%保持界面不关闭
![8d3044962516d5cc68b5f59a608fb0f0.png](https://img-blog.csdnimg.cn/img_convert/8d3044962516d5cc68b5f59a608fb0f0.png)
**第二步:绘制棋盘**
这里直接用散点图scatter和折线图plot 进行绘制,直接暴力取点绘制
x1=[-9,-9,-8,-8,-7,-7,-6,-6,-5,-5,...
-4,-4,-3,-3,-2,-2,-1,-1,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9];
y1=[-9,9,9,-9,-9,9,9,-9,-9,9,9,-9,...
-9,9,9,-9,-9,9,9,-9,-9,9,9,-9,-9,9,9,-9,-9,9,9,-9,-9,9,9,-9,-9,9];
x2=[-9,9,9,-9,-9];
y2=[9,9,-9,-9,9];
x3=[-9.2,9.2,9.2,-9.2,-9.2];
y3=[9.2,9.2,-9.2,-9.2,9.2];
x4=[-6,-6,-6,0,0,0,6,6,6];
y4=[6,0,-6,6,0,-6,6,0,-6];
plot(x1,y1,'k')
plot(y1,x1,'k')
plot(x2,y2,'k','LineWidth',2)
plot(x3,y3,'k')
scatter(gca,x4,y4,30,'k','filled')
绘制的效果是长这样的:
![b67354336b71ade280db930e18e49f07.png](https://img-blog.csdnimg.cn/img_convert/b67354336b71ade280db930e18e49f07.png)
![8d3044962516d5cc68b5f59a608fb0f0.png](https://img-blog.csdnimg.cn/img_convert/8d3044962516d5cc68b5f59a608fb0f0.png)
**第三步:基础设置**
row=19;col=19;%棋盘矩阵大小为19x19这里的矩阵大小画图时是使用不到的,但是后期运算可以用到
win=0;%这是判断输赢的一个参数
control=1;%这是判断下子颜色的一个参数,1为黑子,0为白子
postion=[0 0];%这是那个红叉的坐标就是下棋位置,这里的下棋方法为上下左右加空格键下棋
black=[20,20];white=[-20,-20];%随便取两个棋子的初始坐标
black(1,:)=[];white(1,:)=[];%把那两个初始坐标删掉
%这里取初始坐标又删掉是为了使这两个点集是两列的空矩阵
plotblack=
scatter(gca,black(:,1),black(:,2),150,'k','filled');
plotwhite=
scatter(gca,white(:,1),white(:,2),150,'w','filled');
plotpostion=
scatter(gca,postion(1,1),postion(1,2),150,'rx');
设置绘图函数的初始数据
![8d3044962516d5cc68b5f59a608fb0f0.png](https://img-blog.csdnimg.cn/img_convert/8d3044962516d5cc68b5f59a608fb0f0.png)
**第四步:按键设置**
set(gcf, 'KeyPressFcn', @key) %设置有任何按键动作时,调用key这个函数
function key(~,event)%定义函数key,其中event是按键动作
switch event.Key%将按键动作转换
case 'uparrow'%上下左右这四个都是一样的这里只挑一个进行解释
%将按键 uparrow即上箭头,转化为将postion坐标上移
postion=postion+[0,1];
case 'downarrow'
postion=postion+[0,-1];
case 'leftarrow'
postion=postion+[-1,0];
case 'rightarrow'
posti