There are a bunch of ways you could approach this problem - here are some possible approaches:
Method 1
The first approach doesn't require you to hold onto any variables or handles. When you create your buttons, you need to set the 'tag' property to something unique for each button. Then you use findobj to grab the button you want.
buttonHandle = findobj(gameFigure, 'tag', 'button_1');
The trick to this approach is being sure you tag the button uicontrols properly. Stick to your naming convention and then you generate a random number and build the 'tag' based on your convention:
randButton = randi(42,1,1);
findobj(gameFigure, 'tag', sprintf('button_%d', randButton) )
Method 2
The other approaches require you to keep track of handles to your uicontrol objects (the buttons).
For this approach, I recommend generating your game board programmatically. Then, as you create the buttons, you save the handle to an array. Something like:
gameFigure = figure;
numButtons = 42;
buttonHandleArray = [];
% Generate all of your buttons and store them in an array of uicontrol
% handles.
for i = 1:numButtons
% You will need to add code to set the 'position' property, of course
buttonHandle = uicontrol(gameFigure, 'Style', 'pushbutton');
buttonHandleArray = vertcat(buttonHandleArray, buttonHandle);
end
% Pick a random button
randomButton = randi(10, 1, 1);
% Access that button from your array of uicontrol handles and set a
% property
buttonHandleArray(randomButton).BackgroundColor = [1 0 0];
Method 3
Similar to above, you can save all your uicontrol handles in a structure. This is similar to the handles structure that GUIDE creates.
You could even name your buttons in GUIDE by setting the 'tag' property. For example, add a button and set its 'tag' to 'button_1'
Then you can access it from callbacks with handles.button_1
One more fun thing: you can access structure fields dynamically with the syntax structure.(fieldNameExpression)
This can be pretty powerful in many contexts, although it might not make sense here. I still think it's fun to share:
hs = struct;
hs.fig = figure;
numButtons = 42;
for i = 1:numButtons
% Generate a field name string
dynamicFieldNameString = sprintf('button_%d',i)
% Assign the uicontrol handle to the field name you just made!
hs.(dynamicFieldNameString) = uicontrol('Style', 'pushbutton');
end
% Pick a random button
randomButton = randi(10, 1, 1);
% Access the button handle through dynamic field names
hs.(sprintf('button_%d', i))