资源描述:
《matlab游戏编程实例《华容道》》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、MATLAB游戏编程实例《华容道》华容道是著名的中国游戏,通过移动棋子,帮助曹操移到下方中间的出口处。本程序用MATLAB实现,局势可通过编辑矩阵A得到,1代表曹操,占四个方格,2代表黄忠,占两个竖格,3代表张飞,占两个竖格,4代表马超,占两个竖格,5代表赵云,占两个竖格,6代表关羽,占两个横格,7代表小卒,占一个方格。本游戏用鼠标玩,点击方格移动棋子,如果有多种可能的移动方式,会跳出一个对话框让游戏者选择(这个比较麻烦)。本游戏没有版权,可以以任何方式传播,可以用于商用,家用,民用,军用,当然,本人只是用来娱乐而已。如有问题,可以与slqinyi@1
2、63联系。另附游戏效果图:functionhuarongdao()A=[2113;2113;4665;4775;7007];drawmap(A)while1ifA(5,2)==1&A(5,3)==1ch=menu('曹操成功逃出华容道!如果要继续玩,按“是”,否则按“否”','是','否');switchchcase1huarongdao();case2returnendend[xpos,ypos]=ginput(1);col=ceil(xpos);row=5-ceil(ypos)+1;juese=A(row,col);switchjuesecase1
3、%点击了曹操[I,J]=find(A==1);rm=max(I);rn=min(I);lm=max(J);ln=min(J);%判断是否能向左移ifln>1&isequalm(A([rn,rm],ln-1),[0;0])A([rn,rm],ln-1)=[1;1];A([rn,rm],lm)=[0;0];drawmap(A)end%判断是否能向右移iflm<4&isequalm(A([rn,rm],lm+1),[0;0])A([rn,rm],lm+1)=[1;1];A([rn,rm],ln)=[0;0];drawmap(A)end%判断是否能向下移ifr
4、n>1&isequalm(A(rn-1,[ln,lm]),[0,0])A(rn-1,[ln,lm])=[1,1];A(rn+1,[ln,lm])=[0,0];drawmap(A)end%判断是否能向上移ifrm<5&isequalm(A(rm+1,[ln,lm]),[0,0])A(rm+1,[ln,lm])=[1,1];A(rm-1,[ln,lm])=[0,0];drawmap(A)endcase2%点击了黄忠[I,J]=find(A==2);rm=max(I);rn=min(I);lm=max(J);ln=min(J);%判断是否能向左移ifln>1
5、&isequalm(A([rn,rm],ln-1),[0;0])A([rn,rm],ln-1)=[2;2];A([rn,rm],lm)=[0;0];drawmap(A)end%判断是否能向右移iflm<4&isequalm(A([rn,rm],lm+1),[0;0])A([rn,rm],lm+1)=[2;2];A([rn,rm],ln)=[0;0];drawmap(A)endifrn>1&A(rn-1,ln)==0ifrm<5&A(rm+1,ln)==0%如果又能上移又能下移,则要点击的部位ch=menu('请选择移到的方向:','上','下')swi
6、tchchcase1%上移A(rn-1,ln)=2;A(rn+1,ln)=0;drawmap(A)case2%下移A(rm+1,ln)=2;A(rm-1,ln)=0;drawmap(A)endelse%只能上移A(rn-1,ln)=2;A(rn+1,ln)=0;drawmap(A)endelseifrm<5&A(rm+1,ln)==0A(rm+1,ln)=2;A(rm-1,ln)=0;drawmap(A)endcase3%张飞[I,J]=find(A==3);rm=max(I);rn=min(I);lm=max(J);ln=min(J);%判断是否能向
7、左移ifln>1&isequalm(A([rn,rm],ln-1),[0;0])A([rn,rm],ln-1)=[3;3];A([rn,rm],lm)=[0;0];drawmap(A)end%判断是否能向右移iflm<4&isequalm(A([rn,rm],lm+1),[0;0])A([rn,rm],lm+1)=[3;3];A([rn,rm],ln)=[0;0];drawmap(A)endifrn>1&A(rn-1,ln)==0ifrm<5&A(rm+1,ln)==0%如果又能上移又能下移,则要点击的部位ch=menu('请选择移到的方向:','上'
8、,'下')switchchcase1%上移A(rn-1,ln)=3;A(rn+1,ln)=0;