服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - 使用Matlab制作大富翁小游戏的过程详解

使用Matlab制作大富翁小游戏的过程详解

2022-10-07 16:15slandarer C/C++

大富翁大家都玩过,走到建筑的位置可以买地,第二圈走到买过的地可以升级,别人经过后需要付过路费,每次经过起点都会获得一定资金,玩到最后还没破产的就是胜者,本文将制作一个Matlab版的大富翁小游戏,需要的可以参考

大富翁大家都玩过,走到建筑的位置可以买地,第二圈走到买过的地可以升级,别人经过后需要付过路费,每次经过起点都会获得一定资金,玩到最后还没破产的就是胜者,这里我用MATLAB制作了一款MATLAB版的大富翁小游戏:

使用Matlab制作大富翁小游戏的过程详解

 

1.自定义头像及名称

点击方框内加号可换头像,点击文本区域可改昵称:

使用Matlab制作大富翁小游戏的过程详解

当然即使不换头像点击开始后,也会自动分配头像和名称:

使用Matlab制作大富翁小游戏的过程详解

使用Matlab制作大富翁小游戏的过程详解

 

2.买地、收费、破产

第一次走过地可以买地:

B:收购价,T:过路费,最后一位数值是地产等级

使用Matlab制作大富翁小游戏的过程详解

使用Matlab制作大富翁小游戏的过程详解

再次走过地可以升级:

使用Matlab制作大富翁小游戏的过程详解

他人走过已被购买地产需要交过路费:

使用Matlab制作大富翁小游戏的过程详解

使用Matlab制作大富翁小游戏的过程详解

当有玩家负债时,会清空资产并显示负债退出游戏:

使用Matlab制作大富翁小游戏的过程详解

 

3.部分代码展示

主要文件共10个m文件,其中monopoly_main.m是函数入口,运行该程序开始游戏!:

使用Matlab制作大富翁小游戏的过程详解

monopoly.mlappinstall文件是APP安装包,点击如下安装APP按钮并选中该文件,可以将其安装在APP栏:

使用Matlab制作大富翁小游戏的过程详解

使用Matlab制作大富翁小游戏的过程详解

值得一提的是,本程序的头像预设也是用MATLAB绘制的:

使用Matlab制作大富翁小游戏的过程详解

部分代码展示:

gui_init.m

function [monFig,monAx,diceAx,diceTool,selfTool,monMenuS]=gui_init
monFig=uifigure;
monFig.Position=[10 50 1000 620];
monFig.NumberTitle='off';
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='';
selfPl.Position=[10 10 370 600];

diceAx=uiaxes(selfPl);
diceAx.Position=[0 450 145 145];

diceAx.XLim=[0 10];
diceAx.YLim=[0 10];
diceAx.Color=[0.98 0.98 0.98];
diceAx.XColor=[0.95,0.95,0.95];
diceAx.YColor=[0.95,0.95,0.95];
diceAx.Toolbar.Visible='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='';
selfPl.Position=[10 10 370 600];

diceAx=uiaxes(monFig);
diceAx.Position=[15 460 145 145];

改为:

selfPl=uipanel(monFig);
selfPl.Title='';
selfPl.Position=[10 10 370 600];

diceAx=uiaxes(selfPl);
diceAx.Position=[0 450 145 145];

3.由网友 [m0_57054690] 指出,打包后程序第一次生成随机数问题,为程序增添根据时间变化的随机数种子即可,该部分代码为:

tempTime=clock();
second=round(tempTime(6)+60*tempTime(5)+24*60*tempTime(4));
rng(second)
diceNum=randi(6);

 

5.下载地址

完整文件及素材

到此这篇关于使用Matlab制作大富翁小游戏的过程详解的文章就介绍到这了,更多相关Matlab制作大富翁游戏内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://mp.weixin.qq.com/s/AcaetdtkwYeYv-nJJLsaCA

延伸 · 阅读

精彩推荐
  • C/C++Windows程序内部运行机制实例详解

    Windows程序内部运行机制实例详解

    这篇文章主要介绍了Windows程序内部运行机制实例详解,对于学习Windows程序设计来说是非常重要的一课,需要的朋友可以参考下...

    C语言程序设计8942021-01-27
  • C/C++C++ 实现静态单链表的实例

    C++ 实现静态单链表的实例

    这篇文章主要介绍了C++ 实现静态单链表的实例的相关资料,需要的朋友可以参考下...

    C++教程网10842021-05-19
  • C/C++如何获取C++类成员虚函数地址的示例代码

    如何获取C++类成员虚函数地址的示例代码

    这篇文章主要给大家介绍了关于C++如何获取类成员虚函数地址的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习...

    Dablelv7492021-05-28
  • C/C++C语言结构体占用内存深入讲解

    C语言结构体占用内存深入讲解

    这篇文章主要给大家介绍了关于C语言结构体占用内存的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需...

    Y_peak7282021-10-08
  • C/C++C++计算圆形、矩形和三角形的面积

    C++计算圆形、矩形和三角形的面积

    这篇文章介绍了C++计算圆形、矩形和三角形面积的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可...

    一条自私的鱼4852022-08-04
  • C/C++C++类中六个默认的成员函数详解

    C++类中六个默认的成员函数详解

    这篇文章主要给大家介绍了关于C++类中六个默认的成员函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价...

    _Camille3702021-10-29
  • C/C++static全局变量与普通的全局变量的区别详细解析

    static全局变量与普通的全局变量的区别详细解析

    以下是对static全局变量与普通的全局变量的区别进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助...

    C语言教程网7062021-01-03
  • C/C++浅谈C++11中的几种锁

    浅谈C++11中的几种锁

    本文主要介绍了C++11中的几种锁,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    fzzjoy3852022-09-05