ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:51.63KB ,
资源ID:4431285      下载积分:12 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4431285.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(MATLAB课程设计.docx)为本站上传会员【快乐****生活】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

MATLAB课程设计.docx

1、 MATLAB课程设计 28 2020年4月19日 文档仅供参考 课 程 设 计(论 文) 题目:用MATLAB语言程序开发凑五子棋游戏 专 业: 信息与计算科学 指导教师: 张大海 学生姓名: 谢艳涛 班级-学号: 信计131-30 学生姓名: 黄元福 班级-学号: 信计131-26 学生姓名: 辛 安 班级-学号: 信计131-22 11月 摘 要 凑五子棋是

2、一种两人对弈的纯策略型棋类游戏,应用MATLAB语言编写程序能够在计算机上实现二人对弈凑五子棋功能。二人对弈凑五子棋程序由欢迎界面显示、游戏界面生成、光标移动与落子、判断胜负、悔棋功能、提供音效等子程序构成;程序中应用了结构体、数组、全局变量、按键处理和图形编程等元素和语句。程序经过棋盘和棋子图像生成、二人移子与落子和判断胜负等功能的实现,在计算机上实现了二人凑五子棋对弈。 目 录 摘 要 2 第1章:需求分析 3 1.1凑五子棋背景 3 1.2 凑五子棋需求分析和流程设计 4 第2章:概要设计 7 2.1 各类头文件和

3、全局变量 7 2.2 画面显示模块 8 第3章:详细设计 11 3.1 玩家操作模块 11 3.2音效提供模块 11 3.3 胜负判断模块 12 第4章:调试分析 13 4.1 图形模块 13 4.2 玩家操作模块 13 4.3 胜负判断模块 14 第5章:用户手册 14 第6章:小组分工 15 第7章:结论与心得 16 第8章 :源程序代码 16 第1章:需求分析 1.1凑五子棋背景 传统凑五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为18×18,棋子放置于棋盘线交叉点上。两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个或5个以上同色棋子

4、连成不间断的一排者为胜。 因为传统凑五子棋在落子后不能移动或拿掉,因此也能够用纸和笔来进行游戏。 1.2 凑五子棋需求分析和流程设计 本程序设计为人与人对弈,一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己的棋子五子相连,首先实现五子相连的一方获胜。程序执行过程中,要求棋盘、棋子时时可见,游戏界面有提示信息轮到何方下棋,人能够经过按键盘按键移动光标,再点击enter键摆放棋子,而且每落一子都有系统声音,创新之处是能够提供悔棋功能。 1.2.1 程序需求分析 根据功能需求,将程序分为画面显示、玩家操作、音效提供、胜负判断五个模块,以下分析各模块的需求。

5、 画面显示模块:程序开始运行时,显示制作者和给出欢迎及退出界面;游戏开始后要求生成18×18的棋盘图像,并在棋盘上方显示欢迎信息“欢迎play our凑五子棋”,棋盘下方游戏显示应该轮到甲方或者乙方落子,棋盘左右显示双方操作方式,进行过程中,要求实时显示棋盘上已落下的棋子,甲方为白球,乙方为白圈;分出胜负后,要求给出游戏结束画面,而且询问用户是否需要继续游戏。 玩家操作模块:程序开始时,需玩家确定选择“人人对战”后开始游戏;游戏过程中,两个玩家经过不同的按键移动光标,选择落子;游戏进行过程中,当前玩家下棋后,另一位玩家下棋前,当前玩家能够悔棋。悔棋提示在棋盘右下方,为按键“b”。游戏结

6、束时,有玩家选择是否开始新游戏。 音效提供模块:玩家每落一子,系统提供音效一声,增加下棋的趣味性。 胜负判断模块:实时监测棋盘上棋子,一旦某一色棋子出现五子连线,终止游戏程序,并着色连成一线的五子,棋盘下方弹出该色玩家胜出信息。 1.2.2程序流程设计 根据程序需求分析结果,能够得出程序的总体结构图如图1,程序总体流程图如图2。 五子棋游戏 凑五子棋 模块二: 玩家操作 模块三: 音效提供 模块四: 胜负判断 模块一: 画面显示 图1 凑五子棋总体结构图

7、 开始 制作者展示 进入菜单界面 N 人人对战? 退出游戏 Y 是否继续新游戏 ? 开始游戏 ESMATLAB Y 确认退出? b 悔棋 甲方判断 N Enter 甲方获胜? 退出游戏 显示甲方获胜消息 Y 确认退出? N 乙方判断 ESMATLAB b 悔棋 Y Enter N 显示乙方获胜消息 乙方获胜? Y

8、 N 图2 程序总体流程图 第2章:概要设计 2.1 各类头文件和全局变量 #inmatlablude #inmatlablude #inmatlablude #inmatlablude //使用getmatlabh()函数 int startmatlabhoimatlabe; // int winner; // int player; // Q[200][200]= {0}; //

9、Q数组记录旗子 matlabhar button; //读入键盘输入的指令,如→ 2.2 画面显示模块 画面显示模块由欢迎界面,游戏棋盘界面,确认是否退出对话框界面,以及感谢使用界面组成。 画面显示模块函数如下: void Welmatlabome() //欢迎界面 void Draw() //绘画游戏棋盘界面 void MATLABlean() //清除—→运动的轨迹 void menu_matlabhoose(matlabhar press) //选择是否退出游戏对话框 void PutDown() //显

10、示落子函数 void goto_xy(int x, int y) //光标移动函数 画面效果图如图 第3章:详细设计 3.1 玩家操作模块 棋子的移动与落子有键盘上按键控制,本程序选取甲乙双方按键都为W、S、↑、↓、←、→和回车键,“b”,“ESMATLAB”,分别代表上移、下移、左移、右移光标和落子,悔棋,退出。在光标移动的过程中,光标按照玩家按键移动;在玩家按下落子按键后,程序自动调用棋子显示子程序和判断胜负子程序。当前玩家下棋后,另一位玩家下棋前,当前玩家能够悔棋。悔棋提示在棋盘右下方,为按键“b”。甲乙的落子后,程序会为落子

11、处的数组元素赋一个特定值(玩家甲的棋子赋为1,玩家乙的棋子赋为2),用于判定胜负和悔棋。 玩家操作模块主要由以下函数构成: void Rematlabord() //记录棋子的情况 void go_bamatlabk(int x1,int y1) //悔棋函数 void Play(matlabhar matlabh) //读取键盘的操作 移动光标 下棋和悔棋操作 3.2音效提供模块 为了提高游戏的趣味性,我们为本游戏提供了简单系统音效。程序语句很简单 printf("\a"); //'\a'表示蜂鸣声 3.3 胜负判断

12、模块 胜负判断模块是程序的关键,该模块的设计直接关系到程序的运行速率和运行结果的正确与否。本函数根据每次落子的位置,分别向上、下、左、右、左上、左下、右上、右下八个方向判断是否有相同颜色的棋子连成五子,如果成立,游戏就结束,并显示提示信息,否则继续落子。 以下简析本程序流程:,由获胜条件能够知,经过判断行、列、斜边、反斜边方向上是否有连续的5个子即可得出是否获胜结果。在游戏开始时,将棋盘初始化,即将棋盘抽象为一个18*18的数组,数组中每个元素数值设为0。甲方落子时,将数组内相应坐标处元素赋值为2;乙方落子时,将数组内相应坐标处元素赋值为1。经过循环扫描棋盘数组,经扫描后,如发现在行、列、

13、斜边、反斜边方向上有五个连续的2,甲方获胜;如发现在行、列、斜边、反斜边方向上有五个连续的1,乙方获胜。 胜负判断模块主要由一个函数构成: int Judge() //判断胜负函数 第4章:调试分析 4.1 图形模块 1.在图形模块中,因为是第一次使用,因此刚开始时对于棋盘创立的位置把握有些欠缺。 解决方案:参考书本以及google,找出最合适的位置坐标。 2. 在构建棋子时候,发现MATLAB语言中似乎对颜色的处理有些错误,当棋谱线的颜色为白色时,无法构建黑色棋子,只能画出白色棋子。 解决方案:用白圈区别于白球,类似白子和黑子。 4.2

14、玩家操作模块 1. 在玩家操作模块中,出现的最大问题之一就是棋盘已经有棋子的地方还能够覆盖另一个棋子。 解决方案:经过在PutDown()函数中添加if条件语句,判定如果所在位置对应的数组值不等于0时,不能落子。 2. 另一个问题就是之前提到的,操作定位框的时候会将定位框移到棋盘之外造成溢出。 解决方案: 经过if语句判定,如果操作框超出范围则移动到对应相反位置,例如移动棋盘最上端,若继续向上移动,则移动至棋盘最下端对应位置。 3. 还有一个就是悔棋模块中,经过将现有棋子覆盖与棋盘底色相同的颜色来覆盖后,棋谱线条部分也会被覆盖。 解决方案:在go_bamatlabk();即悔棋函

15、数。用棋谱线来覆盖棋子(例如:┌ └ ├等)。 4.3 胜负判断模块 1. 在胜负判断中一直没能想到好的办法来数据化判断哪方玩家获得胜利。 解决方案:经过参考书籍并加以优化,得出将棋谱做成数组,定义甲方落下为1,乙方落下为2,初始为0,这样即不会造成冲突,也很好的解决了判断问题。 2. 另一个问题在于一直不能优化代码做到不每次都扫描整个棋盘来判断胜负。 解决方案:至今尚未解决,尝试过局部扫描,但失败了。 第5章:用户手册 1.进入演示程序后,即显示欢迎界面,几秒后,按任何键进入菜单界面,再选择人人对战能够进入主界面开始游戏或者选择退出键。 2.棋子的移动与落子有键盘上按键控制,

16、本程序选取甲乙方都为↑、↓、←、→和回车键,分别代表上移、下移、左移、右移光标和落子。在光标移动的过程中,光标按照玩家按键移动;在玩家按下落子按键后,程序自动调用棋子显示子程序和判断胜负子程序。 3. 在当前玩家按下落子按键后,程序自动调用棋子显示子程序和判断胜负子程序。当前玩家下棋后,另一位玩家下棋前,当前玩家能够悔棋。悔棋提示在棋盘右下方,为按键“b”(即bamatlabkspamatlabe)。 4.游戏中Esmatlab键能够直接退出游戏。 5.游戏过程中,如果玩家1或者玩家2有一方获得胜利后,程序自动将提示哪一方获得了胜利,并能够选择是否继续新游戏。 6.游戏结束且玩家选择不

17、再继续后,显示谢谢使用界面,再按任意键退出游戏。 第6章:小组分工 组长:谢艳涛 组员:黄元福,辛安 具体分工: 组员 任务分工 谢艳涛 报告书写 程序调试 展示成果 黄元福 胜负判断设计 主函数设计 辛安 界面制作 程序调试 第7章:结论与心得 经过对各子程序的设计与优化,本程序完成了凑五子棋软件的主体的设计与制作,基本达到了使用凑五子棋软件的核心要求。然而程序还有一些不足之处,首先,程序的界面过于简陋,其次,判断胜后没有显示连成一线的棋子是哪些,用户使用不便。最后就是程序法实现人机对战,缺乏可玩性。 第8章 :源程序代

18、码 //凑五子棋小游戏 function [ ] = five() global a h m1 n1 m2 n2 t h1 h2 h3 color score hsc ha ss hf=figure('resize','off','name','five',... 'position',[360 280 560 420],'numbertitle','off'); ha=axes; set(gcf,'menubar','none','color',[0.3 0.3 0.3]) set(gca,'pos

19、ition',[0.2300 0.1100 0.7750 0.8150]) set(gca,'xlim',[0,9],'ylim',[0,9]) set(ha,'xtick',[],'ytick',[],'box','on') set(ha,'color',[0.7 0.6,0.6]) set(ha,'DataAspectRatio',[1 1 1],'PlotBoxAspectRatio',[1 1 1]) x=repmat([0;9],1,9); y=[1:9;1:9]; line(x,y,'color','k') line(y,x,'color','k'

20、) hst=uicontrol('style','text','string','Score','fontsize',30,... 'units','normal','position',[0.02,0.55,0.26,0.14],'parent',hf,... 'ForegroundColor','w','backgroundcolor',[0.3 0.3 0.3],... 'fontweight','bold'); hsc=uicontrol('style','text','string','0','fontsize',24,... 'units

21、','normal','position',[0.02,0.4,0.26,0.14],'parent',hf,... 'ForegroundColor','w','backgroundcolor',[0.3 0.3 0.3],... 'fontweight','bold'); hbt=uicontrol('style','pushbutton','string','Restart','fontsize',18,... 'units','normal','position',[0.02,0.16,0.26,0.14],'parent',hf,... 'f

22、ontweight','bold','callback',@restart); color=[... 1 1 0; 1 0 1; 0 1 1; 1 0 0; 0 1 0; 0 0 1; 0.7 0.3 0; ]; h1=annotation('ellipse',[0.04,0.84,0.06,0.08],'facecolor','k'); h2=annotation('ellipse',[0.12,0.84,0.06,0.08],'facecolor','k'); h3=annotation('ellips

23、e',[0.2,0.84,0.06,0.08],'facecolor','k'); set(ha,'buttondownfcn',@select2) initialize function initialize() global a h m1 n1 m2 n2 t h1 h2 h3 color score hsc ss 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] = i

24、nd2sub([9,9],k); y=9.5-m; x=n-0.5; for p=1:5 h(k(p))=line(x(p),y(p),'marker','o','markersize',24,... 'markerfacecolor',color(t(p),:),'markeredgecolor','none',... 'buttondownfcn',@select1); end t=ceil(rand(1,3)*7); set(h1,'facecolor',color(t(1),:)) set(h2,'facecolor',col

25、or(t(2),:)) set(h3,'facecolor',color(t(3),:)) function [k]=rs(s,n); for m=1:n t=ceil(rand*length(s)); k(m)=s(t); s(t)=[]; end function select1(src,eventdata) global a h m1 n1 n1=ceil(get(src,'xdata')); m1=ceil(9-get(src,'ydata')); set(h(~isnan(h)),'markeredgecolor','none') s

26、et(src,'markeredgecolor','w') function select2(src,eventdata) global a h m1 n1 m2 n2 t h1 h2 h3 color score hsc ha ss if isempty(m1) || isempty(n1) return end cp=get(src,'currentpoint'); n2=ceil(cp(1,1)); m2=ceil(9-cp(1,2)); if a(m2,n2) return end b=~a; b(m1,n1)=1; b=bwlabel(b,

27、4); if b(m1,n1)~=b(m2,n2) return end a(m2,n2)=a(m1,n1); a(m1,n1)=0; h(m2,n2)=h(m1,n1); h(m1,n1)=NaN; set(h(m2,n2),'xdata',n2-0.5,'ydata',9.5-m2,'markeredgecolor','none') m1=[]; n1=[]; judgement; if sum(sum(~a))<3 hgo=text(1,4.5,'Game Over','fontsize',36,'fontweight',...

28、 'bold','parent',src); pause(3) delete(hgo); delete(h(~isnan(h))) set(hsc,'string','0') initialize; return end if ~ss new; end function judgement global a h m1 n1 m2 n2 t h1 h2 h3 color score hsc ha ss b=logical(zeros(9,9)); ss=0; left=0; right=0; up=0;

29、down=0; lu=0; rd=0; ld=0; ru=0; while n2-left-1>0 && a(m2,n2-left-1)==a(m2,n2) left=left+1; end while n2+right+1<10 && a(m2,n2+right+1)==a(m2,n2) right=right+1; end while m2-up-1>0 && a(m2-up-1,n2)==a(m2,n2) up=up+1; end while m2+down+1<10 && a(m2+down+1,n2)==a(m2,n2)

30、down=down+1; end while n2-lu-1>0 && m2-lu-1>0 && a(m2-lu-1,n2-lu-1)==a(m2,n2) lu=lu+1; end while n2+rd+1<10 && m2+rd+1<10 && a(m2+rd+1,n2+rd+1)==a(m2,n2) rd=rd+1; end while n2-ld-1>0 && m2+ld+1<10 && a(m2+ld+1,n2-ld-1)==a(m2,n2) ld=ld+1; end while n2+ru+1<10 && m2-ru-1>0 && a(

31、m2-ru-1,n2+ru+1)==a(m2,n2) ru=ru+1; end if left+right+1>=5 b(m2,n2-left:n2+right)=1; end if up+down+1>=5 b(m2-up:m2+down,n2)=1; end if lu+rd+1>=5 ind=sub2ind([9,9],m2-lu:m2+rd,n2-lu:n2+rd); b(ind)=1; end if ld+ru+1>=5 ind=sub2ind([9,9],m2+ld:-1:m2-ru,n2-ld:n2+ru

32、); b(ind)=1; end if sum(sum(b)) a(b)=0; delete(h(b)); h(b)=NaN; score=score+sum(sum(b)); set(hsc,'string',num2str(score)) ss=1; end function new global a h m1 n1 m2 n2 t h1 h2 h3 color score hsc ha k=rs(find(~a),3); a(k)=t; [mt,nt] = ind2sub([9,9],k); y=9.

33、5-mt; x=nt-0.5; for p=1:3 h(k(p))=line(x(p),y(p),'marker','o','markersize',24,... 'markerfacecolor',color(t(p),:),'markeredgecolor','none',... 'buttondownfcn',@select1); end for p=1:3 m2=mt(p); n2=nt(p); judgement; end if sum(sum(~a))==0 hgo=text(1,4.

34、5,'Game Over','fontsize',36,'fontweight',... 'bold','parent',ha); pause(3) delete(hgo); delete(h(~isnan(h))) set(hsc,'string','0') initialize; return end t=ceil(rand(1,3)*7); set(h1,'facecolor',color(t(1),:)) set(h2,'facecolor',color(t(2),:)) set(h3,'facecolor',color(t(3),:)) function restart(src,eventdata) global a h m1 n1 m2 n2 t h1 h2 h3 color score hsc ha ss delete(h(~isnan(h))) set(hsc,'string','0') initialize;

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服