MATLAB製作GUI 掃雷遊戲的實現(完整版)

2021-09-14 00:19:21 字數 4358 閱讀 7409

這幾天做實驗好累,今天終於有時間來繼續做自己的掃雷小遊戲了,經過一番除錯,終於完成了自己地掃雷小遊戲。

下面是掃雷小遊戲的最終版:

主函式:

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...