您当前的位置: 首页 >  游戏

slandarer

暂无认证

  • 1浏览

    0关注

    248博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

slandarer 发布时间:2019-03-24 11:02:12 ,浏览量:1

想把以前写过的小游戏出一款详细教程呀 这两天发现五子棋有个简单的写法 虽然说有点弊端但这个程序真的很简单呀 一共只有70多行 相信大家就算没有基础多查多看也能学会吧嗯哒 第一步:界面设置 axis equal%让横竖坐标比例相等 axis([-10,10,-10,10])%坐标轴范围设置为X,Y轴都是-10到10 set(gca,‘xtick’,[],‘ytick’,[],‘xcolor’,‘w’,‘ycolor’,‘w’) %用xtick,ytick删除掉坐标轴刻度,并将坐标轴颜色设置为white set(gca,‘color’,[0.8392,0.7216,0.3804]) %将背景的颜色设置为棕色,这里的三个数字表示的是红蓝绿的比例 hold on%保持界面不关闭 第二步:绘制棋盘 这里直接用散点图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’) 在这里插入图片描述 第三步:基础设置 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’); 设置绘图的初始数据 第四步:按键设置

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'
                postion=postion+[1,0];   
            case 'c'%将按键c转化为按下按键红叉回到画面最中央
                postion=[0,0];
            case 'space'%空格键
                if sum(ismember([black(:,1:2);white(:,1:2)],postion(1,1:2),'rows'))==0
                %这句话用来判断下棋的点上有没有棋子
                %这里解释一下
                %这个小程序里棋子的坐标储存方法是这样的
                %例如black=[x1,y1;x2,y2]就是指在(x1,y1),(x2,y2)坐标上两个点是黑棋
                %其他的白棋和红叉同理
                %然后解释一下ismember就是判断前面的集合的项在后面的集合中存不存在
                %因为我们每行代表一个点,我们这里加上‘rows'表示判断前面的点在后面存不存在
                %用法ismember(A,B,'rows')
                %当然也可以用效果差不多的intersect来判断
                %这里用sum有一点使懒,算是一种小bug的写法,最好还是用isempty判断
                    if control==1,black=[black;postion];end%如果control=1那么在红叉位置下黑子
                    if control==0,white=[white;postion];end%同上
                    control=mod(control+1,2);%mod是求余函数呀这里就是求control+1除以2的余数
                    %这样的话control就能1 0 1 0 1 0 的周期性变化啦,也就是轮流下黑子白子 
                end
            case 'backspace'
                co=0;
                if control==0&&~isempty(black),black(end,:)=[];co=1;end
                if control==1&&~isempty(white),white(end,:)=[];co=1;end
                if co==1,control=mod(control+1,2);end
        end
        wuziqigame()每次按完键后重新画一遍图,这里wuziqigame负责画图和显示输赢
        end

第五步:不断重新绘制棋盘

    function wuziqigame(~,~)
        postion(postion>9)=-9;%如果红叉坐标太大即超出界面,我们将它坐标减小移回界面内
        postion(postion9)=-9;
        postion(postion            
关注
打赏
1664692598
查看更多评论
0.0418s