matlab大富翁程序

时间: 2023-11-02 21:59:54 浏览: 54
以下是一个简单的 MATLAB 大富翁游戏程序,你可以根据自己的需求进行修改和扩展。 ```matlab %% 大富翁游戏程序 % 游戏版图(10x10) board = zeros(10); board(1,:) = 1:10; board(end,:) = fliplr(91:100); board(:,1) = board(:,1) + 10; board(:,end) = fliplr(board(:,end) + 20); % 玩家信息 player1 = struct('name', '玩家1', 'position', 1, 'money', 1000); player2 = struct('name', '玩家2', 'position', 1, 'money', 1000); % 游戏循环 while true % 玩家1轮流掷骰子 fprintf('%s掷骰子...\n', player1.name); pause(1); dice = randi(6); fprintf('%s掷出了%d点\n', player1.name, dice); player1.position = player1.position + dice; % 玩家1到达终点,游戏结束 if player1.position > 100 fprintf('%s赢得了胜利!\n', player1.name); break; end % 玩家1移动到新位置 player1.position = min(player1.position, 100); fprintf('%s移动到了%s\n', player1.name, get_position_name(player1.position)); % 处理玩家1新位置的事件 event = get_position_event(player1.position); switch event case '空地' % do nothing case '地产' % 如果该地产没有所有者,则可以购买 % 如果有所有者,则需要支付过路费 [owner, price, toll] = get_property_info(player1.position); if isempty(owner) if player1.money >= price player1.money = player1.money - price; set_property_owner(player1.position, player1.name); fprintf('%s购买了%s,花费了%d元\n', player1.name, get_position_name(player1.position), price); else fprintf('%s的现金不足,无法购买%s\n', player1.name, get_position_name(player1.position)); end else if owner == player1.name % do nothing else if player1.money >= toll player1.money = player1.money - toll; set_property_owner(player1.position, player1.name); fprintf('%s支付了%d元过路费给%s\n', player1.name, toll, owner); else fprintf('%s的现金不足,无法支付过路费给%s\n', player1.name, owner); end end end case '命运' % 随机触发命运事件 fate = randi(3); switch fate case 1 bonus = randi(500); player1.money = player1.money + bonus; fprintf('%s获得了%d元奖金\n', player1.name, bonus); case 2 punishment = randi(500); player1.money = player1.money - punishment; fprintf('%s受到了%d元罚款\n', player1.name, punishment); case 3 % do nothing end case '监狱' player1.position = 11; fprintf('%s被送进了监狱,停留三个回合\n', player1.name); end % 显示玩家1的状态 fprintf('%s现在的位置是%s,现金余额是%d元\n', player1.name, get_position_name(player1.position), player1.money); % 玩家2轮流掷骰子(同上) fprintf('%s掷骰子...\n', player2.name); pause(1); dice = randi(6); fprintf('%s掷出了%d点\n', player2.name, dice); player2.position = player2.position + dice; if player2.position > 100 fprintf('%s赢得了胜利!\n', player2.name); break; end player2.position = min(player2.position, 100); fprintf('%s移动到了%s\n', player2.name, get_position_name(player2.position)); event = get_position_event(player2.position); switch event case '空地' % do nothing case '地产' [owner, price, toll] = get_property_info(player2.position); if isempty(owner) if player2.money >= price player2.money = player2.money - price; set_property_owner(player2.position, player2.name); fprintf('%s购买了%s,花费了%d元\n', player2.name, get_position_name(player2.position), price); else fprintf('%s的现金不足,无法购买%s\n', player2.name, get_position_name(player2.position)); end else if owner == player2.name % do nothing else if player2.money >= toll player2.money = player2.money - toll; set_property_owner(player2.position, player2.name); fprintf('%s支付了%d元过路费给%s\n', player2.name, toll, owner); else fprintf('%s的现金不足,无法支付过路费给%s\n', player2.name, owner); end end end case '命运' fate = randi(3); switch fate case 1 bonus = randi(500); player2.money = player2.money + bonus; fprintf('%s获得了%d元奖金\n', player2.name, bonus); case 2 punishment = randi(500); player2.money = player2.money - punishment; fprintf('%s受到了%d元罚款\n', player2.name, punishment); case 3 % do nothing end case '监狱' player2.position = 11; fprintf('%s被送进了监狱,停留三个回合\n', player2.name); end fprintf('%s现在的位置是%s,现金余额是%d元\n', player2.name, get_position_name(player2.position), player2.money); end %% 辅助函数 % 获取位置名称 function name = get_position_name(position) board = get_board(); [r, c] = find(board == position); name = sprintf('%c%d', char('A'+r-1), c); end % 获取位置事件类型 function event = get_position_event(position) board = get_board(); [r, c] = find(board == position); if r == 1 || r == 10 || c == 1 || c == 10 event = '空地'; elseif r == 2 || r == 9 || c == 2 || c == 9 event = '命运'; elseif r == 5 && c == 5 event = '监狱'; else event = '地产'; end end % 获取地产信息(所有者、价格、过路费) function [owner, price, toll] = get_property_info(position) properties = getappdata(gcf, 'properties'); property = properties(position); owner = property.owner; price = property.price; toll = property.toll; end % 设置地产所有者 function set_property_owner(position, owner) properties = getappdata(gcf, 'properties'); property = properties(position); property.owner = owner; properties(position) = property; setappdata(gcf, 'properties', properties); end % 获取游戏版图 function board = get_board() board = getappdata(gcf, 'board'); end % 初始化游戏版图和地产信息 board = zeros(10); board(1,:) = 1:10; board(end,:) = fliplr(91:100); board(:,1) = board(:,1) + 10; board(:,end) = fliplr(board(:,end) + 20); setappdata(gcf, 'board', board); for i = 1:100 properties(i).owner = ''; if i <= 20 properties(i).price = 300 + 20*i; properties(i).toll = properties(i).price * 0.1; elseif i <= 40 properties(i).price = 900 - 20*(i-20); properties(i).toll = properties(i).price * 0.2; elseif i <= 60 properties(i).price = 300 + 20*(i-40); properties(i).toll = properties(i).price * 0.3; else properties(i).price = 900 - 20*(i-60); properties(i).toll = properties(i).price * 0.4; end end setappdata(gcf, 'properties', properties); ``` 使用方法:将上述程序保存为一个 `.m` 文件,在 MATLAB 命令窗口中运行即可。程序会自动创建一个 10x10 的游戏版图和 100 个地产,两名玩家轮流掷骰子并按照游戏规则移动,直到有一名玩家到达终点(100号位置),游戏结束。

相关推荐

最新推荐

recommend-type

copula极大似然估计matlab

利用matlab计算copula极大似然估计,包括运行程序,适用于金融行业、经济领域等进行计算和使用。
recommend-type

matlab求最大李雅普诺夫Lyapunov指数程序

完整的Matlab计算程序,可以使用。李雅普诺夫指数是指在相空间中相互靠近的两条轨线随着时间的推移,按指数分离或聚合的平均变化速率。
recommend-type

Matlab寻峰程序.doc

matlab针对找峰值有自带函数,可以试试findpeaks。这样把那些随机的峰值滤除。max和min函数可以返回最大值,最小值的在矩阵中位置和值
recommend-type

均匀线阵方向图Matlab程序.docx

由许多相同的单个天线(如对称天线)按一定规律排列组成的天线系统,也称天线阵。俗称天线阵的独立单元称为阵元或天线单元。如果阵元排列在一直线或一平面上,则成为直线阵列或平面阵
recommend-type

一维均值聚类matlab程序

k-means 算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似 度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

spring添加xml配置文件

1. 创建一个新的Spring配置文件,例如"applicationContext.xml"。 2. 在文件头部添加XML命名空间和schema定义,如下所示: ``` <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。