大富翁大家都玩过,走到建筑的位置可以买地,第二圈走到买过的地可以升级,别人经过后需要付过路费,每次经过起点都会获得一定资金,玩到最后还没破产的就是胜者,本文将制作一个Matlab版的大富翁小游戏,需要的可以参考一下
大富翁大家都玩过,走到建筑的位置可以买地,第二圈走到买过的地可以升级,别人经过后需要付过路费,每次经过起点都会获得一定资金,玩到最后还没破产的就是胜者,这里我用MATLAB制作了一款MATLAB版的大富翁小游戏:
1.自定义头像及名称
点击方框内加号可换头像,点击文本区域可改昵称:
当然即使不换头像点击开始后,也会自动分配头像和名称:
2.买地、收费、破产
第一次走过地可以买地:
B:收购价,T:过路费,最后一位数值是地产等级
再次走过地可以升级:
他人走过已被购买地产需要交过路费:
当有玩家负债时,会清空资产并显示负债退出游戏:
3.部分代码展示
主要文件共10个m文件,其中 monopoly_main.m 是函数入口,运行该程序开始游戏!:
monopoly.mlappinstall 文件是APP安装包,点击如下安装APP按钮并选中该文件,可以将其安装在APP栏:
值得一提的是,本程序的头像预设也是用MATLAB绘制的:
部分代码展示:
gui_init.m
function [monFig,monAx,diceAx,diceTool,selfTool,monMenuS]=gui_init
monFig=uifigure;
monFig.Position=[10 50 1000 620];
monFig.NumberTitle="b2Zm";
monFig.MenuBar='none';
monFig.Resize='off';
monFig.Name='monopoly';
monAx=uiaxes(monFig);
monAx.PlotBoxAspectRatio=[1 1 1];
monAx.Position=[380 10 600 600];
%monAx.Box='on';
monAx.XLim=[0 100];
monAx.YLim=[0 100];
%monAx.Color=[0.9 0.9 0.9];
monAx.XColor=[0.95,0.95,0.95];
monAx.YColor=[0.95,0.95,0.95];
monAx.Toolbar.Visible='off';
selfPl=uipanel(monFig);
selfPl.Title="JzsNCnNlbGZQbC5Qb3NpdGlvbj1bMTAgMTAgMzcwIDYwMF07DQoNCmRpY2VBeD11aWF4ZXMoc2VsZlBsKTsNCmRpY2VBeC5Qb3NpdGlvbj1bMCA0NTAgMTQ1IDE0NV07DQoNCmRpY2VBeC5YTGltPVswIDEwXTsNCmRpY2VBeC5ZTGltPVswIDEwXTsNCmRpY2VBeC5Db2xvcj1bMC45OCAwLjk4IDAuOThdOw0KZGljZUF4LlhDb2xvcj1bMC45NSwwLjk1LDAuOTVdOw0KZGljZUF4LllDb2xvcj1bMC45NSwwLjk1LDAuOTVdOw0KZGljZUF4LlRvb2xiYXIuVmlzaWJsZT0="off';
hold(diceAx,'on')
plot(diceAx,[2,8],[1,1],'k','LineWidth',2)
plot(diceAx,[2,8],[9,9],'k','LineWidth',2)
plot(diceAx,[1,1],[2,8],'k','LineWidth',2)
plot(diceAx,[9,9],[2,8],'k','LineWidth',2)
plot(diceAx,8+cos(0+(0:pi/(2*10):pi/2)),8+sin(0+(0:pi/(2*10):pi/2)),'k','LineWidth',2)
plot(diceAx,2+cos(pi/2+(0:pi/(2*10):pi/2)),8+sin(pi/2+(0:pi/(2*10):pi/2)),'k','LineWidth',2)
plot(diceAx,2+cos(pi+(0:pi/(2*10):pi/2)),2+sin(pi+(0:pi/(2*10):pi/2)),'k','LineWidth',2)
plot(diceAx,8+cos(-pi/2+(0:pi/(2*10):pi/2)),2+sin(-pi/2+(0:pi/(2*10):pi/2)),'k','LineWidth',2)
hold(diceAx,'off')
diceTool.Btn=uibutton(monFig);
diceTool.Btn.Text='摇 骰 子';
diceTool.Btn.BackgroundColor=[0.31 0.58 0.80];
diceTool.Btn.FontColor=[1 1 1];
diceTool.Btn.FontWeight='bold';
diceTool.Btn.Position=[180 480 180 40];
diceTool.Btn.FontSize=18;
diceTool.Lbl1=uilabel(monFig);
diceTool.Lbl1.Text='剩余玩家:';
diceTool.Lbl1.FontSize=18;
diceTool.Lbl1.FontColor=[185 184 150]./500;
diceTool.Lbl1.FontWeight='bold';
diceTool.Lbl1.Position=[180 560 180 40];
diceTool.Lbl2=uilabel(monFig);
diceTool.Lbl2.Text='当前轮次:';
diceTool.Lbl2.FontSize=18;
diceTool.Lbl2.FontColor=[185 184 150]./500;
diceTool.Lbl2.FontWeight='bold';
diceTool.Lbl2.Position=[180 530 180 40];
for i=1:4
selfTool.(['player',num2str(i)]).Img=uiimage(monFig);
selfTool.(['player',num2str(i)]).Img.Position=[30 400-(i-1)*110 60 60];
selfTool.(['player',num2str(i)]).Img.ImageSource='图片\player0.png';
selfTool.(['player',num2str(i)]).Img.UserData=i;
selfTool.(['player',num2str(i)]).Ta=uitextarea(monFig);
selfTool.(['player',num2str(i)]).Ta.Position=[100 402-(i-1)*110 70 23];
selfTool.(['player',num2str(i)]).Ta.Value='请输入昵称';
selfTool.(['player',num2str(i)]).Ta.UserData=i;
selfTool.(['player',num2str(i)]).Ta2=uitextarea(monFig);
selfTool.(['player',num2str(i)]).Ta2.Position=[180 433-(i-1)*110 180 25];
selfTool.(['player',num2str(i)]).Ta2.Value='';
selfTool.(['player',num2str(i)]).Ta2.Enable='off';
selfTool.(['player',num2str(i)]).Btn=uibutton(monFig);
selfTool.(['player',num2str(i)]).Btn.Position=[100 435-(i-1)*110 70 23];
selfTool.(['player',num2str(i)]).Btn.Text=' 购买地产 ';
selfTool.(['player',num2str(i)]).Btn.BackgroundColor=[0.31 0.58 0.80];
selfTool.(['player',num2str(i)]).Btn.FontColor=[1 1 1];
selfTool.(['player',num2str(i)]).Btn.FontWeight='bold';
selfTool.(['player',num2str(i)]).Btn.UserData=i;
selfTool.(['player',num2str(i)]).Lb=uilistbox(monFig);
selfTool.(['player',num2str(i)]).Lb.Position=[180 355-(i-1)*110 180 78];
selfTool.(['player',num2str(i)]).Lb.Items={'地产一(空)','地产二(空)','地产三(空)','... ...'};
selfTool.(['player',num2str(i)]).Txt=uilabel(monFig);
selfTool.(['player',num2str(i)]).Txt.Position=[30 370-(i-1)*110 140 30];
selfTool.(['player',num2str(i)]).Txt.Text='资金 :0 ';
selfTool.(['player',num2str(i)]).Txt.FontColor=[185 184 150]./500;
selfTool.(['player',num2str(i)]).Txt.FontWeight='bold';
selfTool.(['player',num2str(i)]).Txt.FontSize=14;
end
monMenu=uimenu(monFig);
monMenu.Text='开始游戏';
monMenuS.m2=uimenu(monMenu);
monMenuS.m2.Text='二人游戏';
monMenuS.m3=uimenu(monMenu);
monMenuS.m3.Text='三人游戏';
monMenuS.m4=uimenu(monMenu);
monMenuS.m4.Text='四人游戏';
end
self_init.m
function self=self_init(n)
for i=1:4
self.(['player',num2str(i)]).property=5000;
self.(['player',num2str(i)]).pos=0;
self.(['player',num2str(i)]).real_estate={};
self.(['player',num2str(i)]).estateNum=0;
if i>n
self.(['player',num2str(i)]).gameOver=1;
else
self.(['player',num2str(i)]).gameOver=0;
end
self.(['player',num2str(i)]).name=['玩家',num2str(i)];
end
end
4.修改记录
1.关于已购买多个地产升级某地产时左右矩阵大小不匹配问题,
解决方法:将monopoly_main函数113行附近 owenerPos=owenerList(:,2)==n;
更改为:owenerPos=owenerList(:,1)==self.([‘player’,num2str(n)]).pos;
2.由网友 [不知道叫什么] 指出若版本为2021a,则uiaxes会自动显示在uipanel下方导致骰子无法显示,所做更改为将该uiaxes的父类由uifigure更换为uipanel,并更改Position属性使其显示在相应的位置,详细更改如下:
将gui_init.m文件20-25行附近代码:
selfPl=uipanel(monFig);
selfPl.Title="JzsNCnNlbGZQbC5Qb3NpdGlvbj1bMTAgMTAgMzcwIDYwMF07DQoNCmRpY2VBeD11aWF4ZXMobW9uRmlnKTsNCmRpY2VBeC5Qb3NpdGlvbj1bMTUgNDYwIDE0NSAxNDVdOzwvY29kZT48L3ByZT48L2Rpdj4NCjxwPuaUueS4uu+8mjwvcD4NCjxkaXYgY2xhc3M9"topstudy">selfPl=uipanel(monFig);
selfPl.Title="JzsNCnNlbGZQbC5Qb3NpdGlvbj1bMTAgMTAgMzcwIDYwMF07DQoNCmRpY2VBeD11aWF4ZXMoc2VsZlBsKTsNCmRpY2VBeC5Qb3NpdGlvbj1bMCA0NTAgMTQ1IDE0NV07PC9jb2RlPjwvcHJlPjwvZGl2Pg0KPHA+My7nlLHnvZHlj4sgW20wXzU3MDU0NjkwXSDmjIflh7rvvIzmiZPljIXlkI7nqIvluo/nrKzkuIDmrKHnlJ/miJDpmo/mnLrmlbDpl67popjvvIzkuLrnqIvluo/lop7mt7vmoLnmja7ml7bpl7Tlj5jljJbnmoTpmo/mnLrmlbDnp43lrZDljbPlj6/vvIzor6Xpg6jliIbku6PnoIHkuLrvvJo8L3A+DQo8ZGl2IGNsYXNzPQ=="topstudy">tempTime=clock();
second=round(tempTime(6)+60*tempTime(5)+24*60*tempTime(4));
rng(second)
diceNum=randi(6);
5.下载地址
完整文件及素材
到此这篇关于使用Matlab制作大富翁小游戏的过程详解的文章就介绍到这了,更多相关Matlab制作大富翁游戏内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:使用Matlab制作大富翁小游戏的过程详解


- C语言详解float类型在内存中的存储方式 2023-03-27
- C语言qsort()函数的使用方法详解 2023-04-26
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- C++ 数据结构超详细讲解顺序表 2023-03-25
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- Easyx实现扫雷游戏 2023-02-06
- Qt计时器使用方法详解 2023-05-30
- ubuntu下C/C++获取剩余内存 2023-09-18