我开发了一个用于跟踪投注基金的GUI。它会告诉您相对于您的基金规模下注多少。它的基础是它有2个按钮,无论输赢。每次按下它都会更新基金规模并告诉您下注(10%)哪里的赢/输率是双倍或没有。
下面是一个例子。如果初始基金是1000英镑,我们让胜利= 1,亏损= 0
按下按钮时,它仅显示新的基金规模和下注大小。我正在寻找一种方法来绘制结果,以便它将所有newFundSize(y轴)与计数(x轴)进行绘制,以便它显示您的基金规模如何随时间变化(投注数量)。
它目前将x轴更改为正确的长度, x1 = linspace(1:currentCount)。 对于Y值,我只记得以前的基金规模和新的基金规模。
是否有可能以某种方式绘制所有新的基金规模数据?或者存储以前的所有基金规模值?
还有一种方法可以存储按下输赢按钮的顺序和次数吗?
例如,赢,胜,输,赢,输,赢将存储为[1 1 0 1 0 1]?感谢。
答案 0 :(得分:1)
是的,可以在MATLAB中存储所有这些信息。有几种方法可以做到这一点,但最好的方法是将数据存储在图中。您可以使用guidata,setappdata and getappdata或图中的UserData
属性执行此操作。
下面我有一个使用setappdata
方法的示例,其中我将信息存储在数据结构中,该数据结构是具有以下形式的结构数组
data =
win: true % Logical indicating whether it was a winning bet
fund: 1000 % Amount of money in the fund
count: 0 % The number of bets placed so far (optional)
每次用户下注时,我都会将上述格式的另一个结构附加到数据结构中。
以下是完整的示例。
function data = bet(initialFund, betPercentage)
if ~exist('initialBet', 'var')
initialFund = 1000;
end
if ~exist('betPercentage', 'var')
betPercentage = 10;
end
% The data structure that we will use to keep track of the bets
data = struct('win', NaN, 'fund', initialFund, 'count', 0);
% Now create the figure and the plot that you want
fig = figure();
hax = axes(...
'Parent', fig, ...
'Units', 'normalized', ...
'Position', [0.15 0.35 0.7 0.6]);
% Plot to display current fund data
plt = plot(NaN, NaN, 'Parent', hax);
xlabel(hax, 'Bet', 'FontWeight', 'bold', 'FontSize', 18)
ylabel(hax, 'Fund ($)', 'FontWeight', 'bold', 'FontSize', 18)
set(hax, 'FontWeight', 'bold')
% Create a button to place a winning and losing bet
uicontrol(fig, ...
'String', 'Place Winning Bet', ...
'Units', 'normalized', ...
'Position', [0.01 0.01 0.45 0.2], ...
'Callback', @(s,e)place_bet(true, betPercentage/100));
uicontrol(fig, ...
'String', 'Place Losing Bet', ...
'Units', 'normalized', ...
'Position', [0.5 0.01 0.45 0.2], ...
'Callback', @(s,e)place_bet(false, betPercentage/100));
% Store the data within the handle
setappdata(fig, 'BetData', data)
% Plot the initial bet data
refreshPlot(data);
function place_bet(win_lose, percentage)
% Determine whether we win or lose
data = getappdata(fig, 'BetData');
% Now add the new data
lastbet = data(end);
% Compute the new fund based on the bet amount
newfund = (1 - ((-1)^win_lose) * percentage) * lastbet.fund;
newdata = struct(...
'win', win_lose, ...
'fund', newfund, ...
'count', lastbet.count + 1);
data = cat(1, data, newdata);
% Store the updated data
setappdata(fig, 'BetData', data)
% Now update the plot
refreshPlot(data);
end
function refreshPlot(data)
set(plt, 'XData', [data.count], 'YData', [data.fund])
set(hax, 'XLim', [data(1).count, max(data(end).count, 10)])
end
end