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

目录
  • 1.自定义头像及名称
  • 2.买地、收费、破产
  • 3.部分代码展示
    • gui_init.m
    • self_init.m
  • 4.修改记录
  • 5.下载地址

大富翁大家都玩过,走到建筑的位置可以买地,第二圈走到买过的地可以升级,别人经过后需要付过路费,每次经过起点都会获得一定资金,玩到最后还没破产的就是胜者,这里我用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='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制作大富翁游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MATLAB实现五子棋游戏(双人对战、可悔棋)

    本文实例为大家分享了MATLAB实现五子棋游戏的具体代码,供大家参考,具体内容如下 程序介绍: 1.此游戏只可用于双人对战. 2.棋盘颜色.棋盘格数.棋子颜色等参数均可自由设置 3.鼠标点击非棋盘区域可悔棋. 一.游戏界面 二.主程序及函数 1.主程序 %Author:LeiZhen %Date:2018-03-12 %此程序只下五子棋,并判断胜负关系 clear all; clc %定义颜色 Color_QiPanBack=[135,206,255]; Color_ChessLine=[100

  • Java实现经典大富翁游戏的示例详解

    目录 前言 主要设计 功能截图 代码实现 总结 前言 大富翁,又名地产大亨.是一种多人策略图版游戏.参与者分得游戏金钱,凭运气(掷骰子)及交易策略,买地.建楼以赚取租金.英文原名monopoly意为“垄断”,因为最后只得一个胜利者,其余均破产收场. <大富翁>游戏是用java语言实现,采用了swing技术进行了界面化处理,设计思路用了面向对象思想. 主要需求 可多人参与的大富翁游戏,玩家有初始资金,通过掷骰子,玩家移动指定骰子点数步骤,根据对应格子上的交易策略,来决定是赚钱还是亏钱,其他玩家破

  • 如何利用Matlab制作一款真正的拼图小游戏

    效果: 简单原理介绍: 1构造0,1矩阵作为每片拼图的透明度,可以构造出不规则形状的拼图(image函数有alphaData属性可以设置) jigsawMask=zeros(101*5,101*5); jigsawMask(102:404,102:404)=1; [xMesh,yMesh]=meshgrid(1:101*5,1:101*5); dis1=sqrt((xMesh-51).^2+(yMesh-253).^2); dis2=sqrt((xMesh-505+50).^2+(yMesh-2

  • python版大富翁源代码分享

    本文实例为大家分享了python版大富翁游戏的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- # code by: 物网141 王璞劼Khalil # name: 理工大富翁beta2.0 # describe: 基于python的一个2D大富翁游戏 ''' 1.游戏地图为自己使用各种网络素材制作: 各种按钮和选项,小图标等也是使用PS制作. 2.声音效果主要为背景音乐和几种游戏中音效: 3.游戏设定了两个类:玩家和建筑 玩家的参数和方法都在代码中给出: 具体

  • 基于Three.js实现冬奥主题3D趣味页面

    目录 背景 效果 实现 引入资源 页面DOM结构 场景初始化 添加光源 加载进度管理 创建地面 创建冬奥吉祥物冰墩墩 创建奥运五环 创建旗帜 创建树木 创建雪花 镜头控制.缩放适配.动画 总结 背景 迎冬奥,一起向未来!2022冬奥会马上就要开始了,本文使用 Three.js + React 技术栈,实现冬日和奥运元素,制作了一个充满趣味和纪念意义的冬奥主题 3D 页面.本文涉及到的知识点主要包括:TorusGeometry 圆环面.MeshLambertMaterial 非光泽表面材质.Mes

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

    目录 1.自定义头像及名称 2.买地.收费.破产 3.部分代码展示 gui_init.m self_init.m 4.修改记录 5.下载地址 大富翁大家都玩过,走到建筑的位置可以买地,第二圈走到买过的地可以升级,别人经过后需要付过路费,每次经过起点都会获得一定资金,玩到最后还没破产的就是胜者,这里我用MATLAB制作了一款MATLAB版的大富翁小游戏: 1.自定义头像及名称 点击方框内加号可换头像,点击文本区域可改昵称: 当然即使不换头像点击开始后,也会自动分配头像和名称: 2.买地.收费.破产

  • 基于Python制作炸金花游戏的过程详解

    目录 前言 一.思路 二.解决方案 三.总结 前言 <诈金花>又叫三张牌,是在全国广泛流传的一种民间多人纸牌游戏.比如JJ比赛中的诈金花(赢三张),具有独特的比牌规则.游戏过程中需要考验玩家的胆略和智慧.--<百度百科> 前几天在交流群里边,有个叫[^-^]的粉丝分享了一道扑克牌诈金花的题目,要求用Python实现,题目如下: 自己写一个程序,实现发牌.比大小判断输赢. 游戏规则: 一付扑克牌,去掉大小王,每个玩家发3张牌,最后比大小,看谁赢. 有以下几种牌: 豹子:三张一样的牌,

  • python实现逢七拍腿小游戏的思路详解

    逢七拍腿游戏 几个小朋友在一起玩逢七拍腿的游戏,从1开始数数,当数到7的倍数或者尾号是7时,拍一下腿.现在从1数到99,假设每个人都没有错,计算一下共要拍腿几次? 第一种实现思路:通过在for循环语句中使用continue语句来实现计算拍腿次数.首先假设可拍腿次数为最高次数99,每触发满足的条件的时候就直接跳转到下一次循环当中,最后的total减1则不执行,不满足条件时total则减1.因此实际上total减去的是不满足条件的数字,代码如下: total = 99 #记录拍腿次数的变量 for

  • JQuery手速测试小游戏实现思路详解

    (-1)写在前面 我用的chrome49,jquery3.0,我得到过399分,信不信由你. (1)设计思路 两个p元素放在div里,每个p元素的高度和宽度都和div一样,当鼠标放在div上时,第一个p向上移动(更改marginTop值),当鼠标离开div上时,第一个p向下移动. (2)知识储备 a. :nth-child #lol p:nth-child(1),当前元素p相对于他的父元素的所有子元素,如果第一个元素是p则匹配成功. #lol :nth-child(1) 相当于#lol *:nt

  • 原生js实现贪食蛇小游戏的思路详解

    先不多说先上图 下面是代码部分(这里你可以根据需要改变蛇头和身体还有食物的图片,然后默认的样式是使用纯颜色的如果没有更改我的背景图片的话------改这些图开始是想搞笑一下朋友哈哈哈,请不要在意哈),还有操作键是使用 ↑ ↓ ← → ) <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>贪食蛇</title>

  • Python实战小游戏飞机大战详解

    目录 导语 ​正文 一.环境安装 二.我方飞机 三.敌方飞机 四.控制键盘移动 五.检测子弹碰撞 六.效果图 总结 导语 "看见别人都那么努力,那么勤奋,那么意气风发地走在成功的道路上,你问问自己:难道就不想成为他们的绊脚石吗?" --周一整理好心情好好出发吧! 大家好啊,还在学习的小小伙伴儿慢慢学哈~学完基础的你,今天可以放松下,跟着小编玩会儿游戏再继续哦! 新的一周要努力哦!赶不上别人至少也要慢慢溜上去,晓得吧?乖巧.jpg "晓得晓得,会努力的". ​大家还记

  • Java实现动物换位游戏完整 过程详解

    目录 效果展示 一.效果展示 1.游戏界面 2.测试界面 二.项目介绍 1.总体需求 2.总体设计 三.代码展示 1.图形界面设计(gui包) 2.用户操作设计(data包) ① Animal类 ② LeftAnimal类 ③ RightAnimal类 ④ Point类 ⑤ ViewForAnimal类 3.游戏视图设计(view包) ① AnmialView类 ② GamePanel类 ③ HandleAnimalMove类 ④ HandleRedo类 ⑤ HandleReStart类 四.代

  • Java小程序赛马游戏实现过程详解

    这是当时做的一个小游戏,大概就是程序开始后,会进入用户登录界面,用户输入自己的姓名和密码后,选择登录会进入到赛马比赛的界面,这时可以看见赛马场和马匹的编号,用户可以选择任何一个编号的马进行投注,输入有效的投注金额(因为系统设置了初始金额,所以不得投注的超过初始金额).投注完成后用户可以选择开始比赛,赛马期间用户不得进行任何操作,赛马结束后,用户可以重新进行新一轮的赛马比赛,方法上同. 程序流程图: 一.赛马比赛模块 其中此模块包括对画出马匹和赛道部分,通过使用Draw类来向Jpanel面板中添加

  • JS学习笔记之贪吃蛇小游戏demo实例详解

    本文实例讲述了JS学习笔记之贪吃蛇小游戏demo实例.分享给大家供大家参考,具体如下: 最近跟着视频教程打了一个贪吃蛇, 来记录一下实现思路, 先上代码 静态页 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>贪吃蛇</title> </head> <style> *{ mar

  • C语言实现扫雷小游戏完整算法详解(附完整代码)

    目录 前言 1.算法基本思路 2.算法详解 1.初始化数组与打印数组 2.设置雷 3.排查与标记 4.CountMine函数计算周围雷的个数 5.ExpandMine函数递归展开周围所有安全区域 3.完整代码!!! 总结 前言 扫雷是一个常见小游戏,那么如何用C语言实现扫雷呢?学习了二维数组之后,我们可将扫雷的网格区域存储为二维数组,从而使用C语言实现扫雷. 1.算法基本思路 首先,用一个二维数组存储雷的分布,雷的分布在游戏期间从始至终不变,下文称为mine数组.用另一个二维数组存储排查出的雷的

随机推荐