這幾天做實驗好累,今天終於有時間來繼續做自己的掃雷小遊戲了,經過一番除錯,終於完成了自己地掃雷小遊戲。
下面是掃雷小遊戲的最終版:
主函式:
function saoleigaming(tmp)
%this is the saolei game,that we used to played in our childhood.
%author:等等登登-ande
%email:[email protected]
global numbutton plusboom hbox data
if nargin==0
tmp = 'inital';
numbutton = 6;
endswitch(tmp)
case 'inital'
fullsizescreen = get(0,'screensize');%獲取螢幕的大小以及右下角座標
h = figure('name','掃雷_zd',...
'position',[fullsizescreen(3)/3,fullsizescreen(4)/3,80+35*numbutton,80+35*numbutton],...
'menubar','none');%建立函式控制代碼h
menu1 = uimenu(h,'text','&game');%在h函式控制代碼上建立選單game
uimenu(menu1,'text','&newgame','accelerator','m',...
'callback',[mfilename,'(''quit'');',mfilename]);%在選單game下建立子選單newgame
uimenu(menu1,'text','&quit','accelerator','q',...
'callback',[mfilename,'(''quit'')']);%在選單game下建立子選單quit
hbox = zeros(numbutton);
for i = 1:numbutton
for j = 1:numbutton
hbox(i,j) = uicontrol(h,'style','pushbutton',...
'fontweight','bold','fontsize',10,...
'position',[40+35*(i-1),40+35*(numbutton-j),35,35],...
'tag',num2str([j,i]),...
'tooltipstring','this is not boom!',...
'buttondownfcn','rightkey',...
'callback','leftkey');%建立numbotton*numbotton個格仔
end
endcase 'quit'
closereq
end%設定炸彈
boom = zeros(numbutton);
%每行隨機設定乙個炸彈
for i = 1:numbutton
boom(randi(numbutton),i)=1;
end
%對資料進行擴充套件
plusboom = zeros(numbutton+2,numbutton+2);
plusboom(2:end-1,2:end-1) = boom;
左鍵觸發函式:
function leftkey
%左鍵觸發函式
global plusboom hbox numbutton cdata
cdata = readdata;
[labelx,labely] = find(plusboom == 1);
pos = get(gco,'tag');
posx = str2double(pos(1))+1;
posy = str2double(pos(4))+1;
all_posx = [posx-1,posx,posx+1];
all_posy = [posy-1,posy,posy+1];
label = [labelx,labely];
length_label = length(label);
pox = [posx,posy];
judge = ismember(label,pox,'row');
judge_one = find(judge==1);
if length(judge_one)==0
all_boom=sum(sum(plusboom(all_posx,all_posy)));%注意這裡的x,y代表的行列,容易搞錯。
if all_boom == 0
[pox1 poy1]=findzeros(posy-1,posx-1);
for j=1:length(pox1-1)
set(hbox(poy1(j),pox1(j)),'string','.','fontsize',15,'foregroundcolor','b');
endelseif all_boom == 1
set(gco,'string',num2str(all_boom),'fontsize',15,'foregroundcolor','r');
elseif all_boom == 2
set(gco,'string',num2str(all_boom),'fontsize',15,'foregroundcolor','b');
elseif all_boom == 3
set(gco,'string',num2str(all_boom),'fontsize',15,'foregroundcolor','k');
else
set(gco,'string',num2str(all_boom),'fontsize',15,'foregroundcolor','g');
endelse
for i = 1:numbutton
set(hbox (labely(i)-1,labelx(i)-1), 'cdata' ,cdata);
endend
右鍵觸發函式:
function rightkey
%右鍵觸發函式
content = get(gco,'string');
if(isempty(content))
set(gco,'string','l');
elseif(isequal(content,'l'))
set(gco,'string','?');
elseif(isequal(content,'?'))
set(gco,'string','');
end
尋零函式:
function [pox poy]=findzeros(x,y)
%當格仔周圍地雷為0時,尋找周圍同樣地雷數為0的格仔
global plusboom
kernel = ones(3);
boom = plusboom(2:end-1,2:end-1);
map = conv2(boom,kernel);
fmap = map(2:end-1,2:end-1);
boundariy = bwboundaries(~fmap,4);
label = 0;
length1 = length(boundariy);
for i=1:length1
tmp = boundariy;
for j=1:length(tmp)
if (tmp(j,1)==y && tmp(j,2)==x)
label = i;
break
endend
endif label~=0
p = boundariy;
pox = p(:,1);
poy = p(:,2);
else
pox = ;
poy = ;
end
資料讀取函式:
function cdata = readdata
%讀取地雷
pic = imread('地雷.jpg');
cdata = imresize(pic,0.03);
希望大家也可以實現自己的掃雷小遊戲~ MATLAB製作GUI(5) 掃雷遊戲的實現
昨天師兄給了我乙個他自己製作的掃雷小遊戲,感覺挺好玩,想嘗試一下自己實現,接下來我將分享自己一步一步辨析的掃雷小遊戲的 上有明確的解釋,幫助大家理解 今天先進行一小步,掃雷遊戲介面的實現 下面是實現的 function saoleigaming varargin this is the saolei...
掃雷小遊戲製作全過程
在練習了幾十個小短句,和其他小專案之後,我開始了第乙個比較大的,也比較經典的小遊戲 掃雷 首先需要分析,製作這個小專案所需要的大致流程 開始遊戲 初始化棋盤 給地圖中增加雷 使用者互動,輸入座標,判斷座標是否有雷 勝利 失敗 我們可以通過switch選擇語句來讓玩家開始遊戲,並通過printf函式來...
小遊戲 掃雷
c語言實現的乙個簡單的掃雷遊戲 介面簡單,功能 首次踩雷的,會換雷。掃雷有九宮格擴撒 環境 vs2015 如下 game.h pragma once ifndef game h define game h define rows 11 define cols 11 define num 9 incl...