MATLAB课程设计Word下载.docx
- 文档编号:18809959
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:14
- 大小:129.82KB
MATLAB课程设计Word下载.docx
《MATLAB课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《MATLAB课程设计Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
悔棋提示在棋盘右下方,为按键“b”。
游戏结束时,有玩家选择是否开始新游戏。
音效提供模块:
玩家每落一子,系统提供音效一声,增加下棋的趣味性。
胜负判断模块:
实时监测棋盘上棋子,一旦某一色棋子出现五子连线,终止游戏程序,并着色连成一线的五子,棋盘下方弹出该色玩家胜出信息。
根据程序需求分析结果,可以得出程序的总体结构图如图1,程序总体流程图如图2。
凑五子棋
图1凑五子棋总体结构图
Y
图2程序总体流程图
第2章:
概要设计
2.1各类头文件和全局变量
#inmatlablude<
stdio.h>
#inmatlablude<
windows.h>
stdlib.h>
matlabonio.h>
//使用getmatlabh()函数
intstartmatlabhoimatlabe;
//
intwinner;
intplayer;
Q[200][200]={0};
//Q数组记录旗子
matlabharbutton;
//读入键盘输入的指令,如→
2.2画面显示模块
画面显示模块由欢迎界面,游戏棋盘界面,确认是否退出对话框界面,以及感谢使用界面组成。
画面显示模块函数如下:
voidWelmatlabome()//欢迎界面
voidDraw()//绘画游戏棋盘界面
voidMATLABlean()//清除—→运动的轨迹
voidmenu_matlabhoose(matlabharpress)//选择是否退出游戏对话框
voidPutDown()//显示落子函数
voidgoto_xy(intx,inty)//光标移动函数
画面效果图如图
第3章:
详细设计
3.1玩家操作模块
棋子的移动与落子有键盘上按键控制,本程序选取甲乙双方按键都为W、S、↑、↓、←、→和回车键,“b”,“ESMATLAB”,分别代表上移、下移、左移、右移光标和落子,悔棋,退出。
在光标移动的过程中,光标按照玩家按键移动;
在玩家按下落子按键后,程序自动调用棋子显示子程序和判断胜负子程序。
当前玩家下棋后,另一位玩家下棋前,当前玩家可以悔棋。
甲乙的落子后,程序会为落子处的数组元素赋一个特定值(玩家甲的棋子赋为1,玩家乙的棋子赋为2),用于判定胜负和悔棋。
玩家操作模块主要由以下函数构成:
voidRematlabord()//记录棋子的情况
voidgo_bamatlabk(intx1,inty1)//悔棋函数
voidPlay(matlabharmatlabh)//读取键盘的操作移动光标下棋和悔棋操作
3.2音效提供模块
为了提高游戏的趣味性,我们为本游戏提供了简单系统音效。
程序语句很简单printf("
\a"
);
//'
\a'
表示蜂鸣声
3.3胜负判断模块
胜负判断模块是程序的关键,该模块的设计直接关系到程序的运行速率和运行结果的正确与否。
本函数根据每次落子的位置,分别向上、下、左、右、左上、左下、右上、右下八个方向判断是否有相同颜色的棋子连成五子,如果成立,游戏就结束,并显示提示信息,否则继续落子。
以下简析本程序流程:
由获胜条件可以知,通过判断行、列、斜边、反斜边方向上是否有连续的5个子即可得出是否获胜结果。
在游戏开始时,将棋盘初始化,即将棋盘抽象为一个18*18的数组,数组中每个元素数值设为0。
甲方落子时,将数组内相应坐标处元素赋值为2;
乙方落子时,将数组内相应坐标处元素赋值为1。
通过循环扫描棋盘数组,经扫描后,如发现在行、列、斜边、反斜边方向上有五个连续的2,甲方获胜;
如发现在行、列、斜边、反斜边方向上有五个连续的1,乙方获胜。
胜负判断模块主要由一个函数构成:
intJudge()//判断胜负函数
第4章:
调试分析
4.1图形模块
1.在图形模块中,因为是第一次使用,所以刚开始时对于棋盘创建的位置把握有些欠缺。
解决方案:
参考书本以及google,找出最合适的位置坐标。
2.在构建棋子时候,发现MATLAB语言中似乎对颜色的处理有些错误,当棋谱线的颜色为白色时,无法构建黑色棋子,只能画出白色棋子。
用白圈区别于白球,类似白子和黑子。
4.2玩家操作模块
1.在玩家操作模块中,出现的最大问题之一就是棋盘已经有棋子的地方还可以覆盖另一个棋子。
通过在PutDown()函数中添加if条件语句,判定如果所在位置对应的数组值不等于0时,不能落子。
2.另一个问题就是之前提到的,操作定位框的时候会将定位框移到棋盘之外造成溢出。
通过if语句判定,如果操作框超出范围则移动到对应相反位置,例如移动棋盘最上端,若继续向上移动,则移动至棋盘最下端对应位置。
3.还有一个就是悔棋模块中,通过将现有棋子覆盖与棋盘底色相同的颜色来覆盖后,棋谱线条部分也会被覆盖。
在go_bamatlabk();
即悔棋函数。
用棋谱线来覆盖棋子(例如:
┌└├等)。
4.3胜负判断模块
1.在胜负判断中一直没能想到好的办法来数据化判断哪方玩家获得胜利。
通过参考书籍并加以优化,得出将棋谱做成数组,定义甲方落下为1,乙方落下为2,初始为0,这样即不会造成冲突,也很好的解决了判断问题。
2.另一个问题在于一直不能优化代码做到不每次都扫描整个棋盘来判断胜负。
至今尚未解决,尝试过局部扫描,但失败了。
第5章:
用户手册
1.进入演示程序后,即显示欢迎界面,几秒后,按任何键进入菜单界面,再选择人人对战可以进入主界面开始游戏或者选择退出键。
2.棋子的移动与落子有键盘上按键控制,本程序选取甲乙方都为↑、↓、←、→和回车键,分别代表上移、下移、左移、右移光标和落子。
3.在当前玩家按下落子按键后,程序自动调用棋子显示子程序和判断胜负子程序。
悔棋提示在棋盘右下方,为按键“b”(即bamatlabkspamatlabe)。
4.游戏中Esmatlab键可以直接退出游戏。
5.游戏过程中,如果玩家1或者玩家2有一方获得胜利后,程序自动将提示哪一方获得了胜利,并可以选择是否继续新游戏。
6.游戏结束且玩家选择不再继续后,显示谢谢使用界面,再按任意键退出游戏。
第6章:
小组分工
组长:
谢艳涛
组员:
黄元福,辛安
具体分工:
组员
任务分工
报告书写程序调试展示成果
黄元福
胜负判断设计主函数设计
辛安
界面制作程序调试
第7章:
结论与心得
通过对各子程序的设计与优化,本程序完成了凑五子棋软件的主体的设计与制作,基本达到了使用凑五子棋软件的核心要求。
然而程序还有一些不足之处,首先,程序的界面过于简陋,其次,判断胜后没有显示连成一线的棋子是哪些,用户使用不便。
最后就是程序法实现人机对战,缺乏可玩性。
第8章:
源程序代码
//凑五子棋小游戏
function[]=five()
globalahm1n1m2n2th1h2h3colorscorehschass
hf=figure('
resize'
'
off'
name'
five'
...
'
position'
[360280560420],'
numbertitle'
ha=axes;
set(gcf,'
menubar'
none'
color'
[0.30.30.3])
set(gca,'
[0.23000.11000.77500.8150])
xlim'
[0,9],'
ylim'
[0,9])
set(ha,'
xtick'
[],'
ytick'
box'
on'
)
[0.70.6,0.6])
DataAspectRatio'
[111],'
PlotBoxAspectRatio'
[111])
x=repmat([0;
9],1,9);
y=[1:
9;
1:
9];
line(x,y,'
k'
line(y,x,'
hst=uicontrol('
style'
text'
string'
Score'
fontsize'
30,...
units'
normal'
[0.02,0.55,0.26,0.14],'
parent'
hf,...
ForegroundColor'
w'
backgroundcolor'
[0.30.30.3],...
fontweight'
bold'
hsc=uicontrol('
0'
24,...
[0.02,0.4,0.26,0.14],'
hbt=uicontrol('
pushbutton'
Restart'
18,...
[0.02,0.16,0.26,0.14],'
callback'
@restart);
color=[...
110;
101;
011;
100;
010;
001;
0.70.30;
];
h1=annotation('
ellipse'
[0.04,0.84,0.06,0.08],'
facecolor'
h2=annotation('
[0.12,0.84,0.06,0.08],'
h3=annotation('
[0.2,0.84,0.06,0.08],'
buttondownfcn'
@select2)
initialize
functioninitialize()
globalahm1n1m2n2th1h2h3colorscorehscss
a=zeros(9);
h=zeros(9)*NaN;
m1=[];
n1=[];
m2=[];
n2=[];
score=0;
ss=0;
k=rs(1:
81,5);
t=ceil(rand(1,5)*7);
a(k)=t;
[m,n]=ind2sub([9,9],k);
y=9.5-m;
x=n-0.5;
forp=1:
5
h(k(p))=line(x(p),y(p),'
marker'
o'
markersize'
markerfacecolor'
color(t(p),:
),'
markeredgecolor'
@select1);
end
t=ceil(rand(1,3)*7);
set(h1,'
color(t
(1),:
))
set(h2,'
color(t
(2),:
set(h3,'
color(t(3),:
function[k]=rs(s,n);
form=1:
n
t=ceil(rand*length(s));
k(m)=s(t);
s(t)=[];
functionselect1(src,eventdata)
globalahm1n1
n1=ceil(get(src,'
xdata'
));
m1=ceil(9-get(src,'
ydata'
set(h(~isnan(h)),'
set(src,'
functionselect2(src,eventdata)
ifisempty(m1)||isempty(n1)
return
cp=get(src,'
currentpoint'
n2=ceil(cp(1,1));
m2=ceil(9-cp(1,2));
ifa(m2,n2)
b=~a;
b(m1,n1)=1;
b=bwlabel(b,4);
ifb(m1,n1)~=b(m2,n2)
a(m2,n2)=a(m1,n1);
a(m1,n1)=0;
h(m2,n2)=h(m1,n1);
h(m1,n1)=NaN;
set(h(m2,n2),'
n2-0.5,'
9.5-m2,'
judgement;
ifsum(sum(~a))<
3
hgo=text(1,4.5,'
GameOver'
36,'
src);
pause(3)
delete(hgo);
delete(h(~isnan(h)))
set(hsc,'
initialize;
if~ss
new;
functionjudgement
b=logical(zeros(9,9));
left=0;
right=0;
up=0;
down=0;
lu=0;
rd=0;
ld=0;
ru=0;
whilen2-left-1>
0&
&
a(m2,n2-left-1)==a(m2,n2)
left=left+1;
whilen2+right+1<
10&
a(m2,n2+right+1)==a(m2,n2)
right=right+1;
whilem2-up-1>
a(m2-up-1,n2)==a(m2,n2)
up=up+1;
whilem2+down+1<
a(m2+down+1,n2)==a(m2,n2)
down=down+1;
whilen2-lu-1>
m2-lu-1>
a(m2-lu-1,n2-lu-1)==a(m2,n2)
lu=lu+1;
whilen2+rd+1<
m2+rd+1<
a(m2+rd+1,n2+rd+1)==a(m2,n2)
rd=rd+1;
whilen2-ld-1>
m2+ld+1<
a(m2+ld+1,n2-ld-1)==a(m2,n2)
ld=ld+1;
whilen2+ru+1<
m2-ru-1>
a(m2-ru-1,n2+ru+1)==a(m2,n2)
ru=ru+1;
ifleft+right+1>
=5
b(m2,n2-left:
n2+right)=1;
ifup+down+1>
b(m2-up:
m2+down,n2)=1;
iflu+rd+1>
ind=sub2ind([9,9],m2-lu:
m2+rd,n2-lu:
n2+rd);
b(ind)=1;
ifld+ru+1>
ind=sub2ind([9,9],m2+ld:
-1:
m2-ru,n2-ld:
n2+ru);
ifsum(sum(b))
a(b)=0;
delete(h(b));
h(b)=NaN;
score=score+sum(sum(b));
num2str(score))
ss=1;
functionnew
globalahm1n1m2n2th1h2h3colorscorehscha
k=rs(find(~a),3);
[mt,nt]=ind2sub([9,9],k);
y=9.5-mt;
x=nt-0.5;
m2=mt(p);
n2=nt(p);
judgement;
ifsum(sum(~a))==0
ha);
functionrestart(src,eventdata)
delete(h(~isnan(h)))
set(hsc,'
initialize;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 课程设计