⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 拿matlab的gui来扫个雷.txt

📁 用matlab 实现的扫雷程序
💻 TXT
📖 第 1 页 / 共 4 页
字号:
function  varargout = Game_ClearMine( varargin )

if nargin == 0
    OldHandle = findobj( 'Type', 'figure', 'Tag', 'ClearMine' ) ;
    if ishandle( OldHandle )
        close( OldHandle ) ;
    end
    FigureHandle = figure('Visible', 'off') ;
    
    init_FigureContent( FigureHandle ) ; 
    
elseif ischar( varargin{1} )
    if nargout > 0
        [varargout{1:nargout}] = feval(varargin{:}) ;
    else
        feval(varargin{:}) ;
    end
end


% ------------------------------------------------------------------------
function generate_FigureContent( FigureHandle, ButtonNumber ) ;

TabSpace = 10 ;

MidSpace = 1 ;

ButtonColNumber = ButtonNumber(2) ;
ButtonRowNumber = ButtonNumber(1) ;

TextHeight = 25 ;


FigureWidth = ButtonColNumber * (21 + MidSpace) + TabSpace * 4 ;
FigureHeight = ButtonRowNumber * (21 + MidSpace) + TabSpace * 5 + TextHeight ;

set( FigureHandle, 'Position', [100, 100, FigureWidth, FigureHeight], 'Menubar', 'none',...
    'Visible', 'off', 'Name', '扫雷',  'Tag', 'ClearMine', 'NumberTitle', 'off',...
    'DoubleBuffer', 'on', 'Units', 'pixel', 'Color', [0.85 0.85 0.85], 'Resize', 'off',...
    'KeyPressFcn', 'Game_ClearMine(''Keypress_fcn'', gcbf)' ) ;

AxesHandle = axes( 'Position', [0, 0, 1, 1], 'Units', 'pixel',...
    'XLim', [0, FigureWidth], 'YLim', [0, FigureHeight], 'Visible', 'off' ) ;

LineXArray = [TabSpace, FigureWidth-TabSpace, FigureWidth-TabSpace, TabSpace, TabSpace] ;
LineYArray = [TabSpace, TabSpace, FigureHeight-TabSpace, FigureHeight-TabSpace, TabSpace] ;
line( LineXArray, LineYArray, 'Color', 'k' ) ;

MenuHandle = uimenu( FigureHandle, 'Label', '游戏', 'Tag', 'MainMenu' ) ;
SubMenuTag = {'Begin', 'Easy', 'Normal', 'Hard', 'Custom', 'Exit' } ;
SubMenuString = {'开始(&B)', '低级(&E)', '中级(&N)', '高级(&H)', '自定义(&C)', '退出(&Q)'};
SubMenuCallback = {'Game_ClearMine( ''BeginMenu_Callback'', gcbo)',...
        'Game_ClearMine( ''EasyMenu_Callback'', gcbo)',...
        'Game_ClearMine( ''NormalMenu_Callback'', gcbo)',...
        'Game_ClearMine( ''HardMenu_Callback'', gcbo)' ,...
        'Game_ClearMine( ''CustomMenu_Callback'', gcbo)',...
        'close(gcf)'} ;
SubMenuSeparator = {'off', 'on', 'off','off','off','on'} ;

for num = 1: length( SubMenuTag )
    SubMenuHandle(num) = uimenu( MenuHandle ) ;
    set( SubMenuHandle(num), 'Tag', SubMenuTag{num},...
        'Label', SubMenuString{num},...
        'Separator', SubMenuSeparator{num},...
        'Callback', SubMenuCallback{num} ) ;
end

MenuHandle = uimenu( FigureHandle, 'Label', '帮助', 'Tag', 'MenuHelp' ) ;
uimenu( MenuHandle, 'Label', '帮助', 'Tag', 'Help',...
    'Callback', 'helpdlg(''游戏开始(至少点开一个格子)后,按Ctrl+Enter可以直接过关。'', ''最终秘技'')' ) ;


if ButtonColNumber < 8
    TextWidth = (FigureWidth - TabSpace * 2 - TabSpace * 2 - TabSpace * 2 * 2) / 3 ;
else
    TextWidth = (FigureWidth - TabSpace * 2 - TabSpace * 2 - TabSpace * 4 * 2) / 3 ;
end
TextPosition = [TabSpace*2 FigureHeight-2*TabSpace-TextHeight TextWidth TextHeight] ;

if ButtonColNumber < 8
    TextFontSize = 12 ;
else
    TextFontSize = 16 ;
end

TextTag = {'MineNumber', 'Face', 'Time'} ;
TextString = {'', '', '0'} ;
TextStyle = {'text', 'pushbutton', 'text'} ;
TextCallback = {'', 'Game_ClearMine(''BeginMenu_Callback'', gcbo)', ''} ;
for num = 1: length(TextTag)
    TempTextPosition = TextPosition ;
    if ButtonColNumber < 8
        TempTextPosition(1) = TempTextPosition(1) + (num-1) * (TextWidth + 2 * TabSpace) ;
    else
        TempTextPosition(1) = TempTextPosition(1) + (num-1) * (TextWidth + 4 * TabSpace) ;
    end    
    UicontrolHandle = uicontrol( 'Style', TextStyle{num}, 'Position', TempTextPosition, 'Tag', TextTag{num},...
        'BackgroundColor', [0.7 0.7 0.7], 'FontSize', TextFontSize, 'HorizontalAlignment', 'center',...
        'String', TextString{num}, 'Callback', TextCallback{num} ) ; 
    if num == 2
        TempTextPosition(1) = TempTextPosition(1) + (TempTextPosition(3) - 23) / 2 ;
        TempTextPosition(3) = 23 ;
        set( UicontrolHandle, 'Position', TempTextPosition) ;
    end
end

ButtonXPos = TabSpace * 2 ;
ButtonWidth =  21 ;
ButtonHeight = 21 ;
ButtonYPos = TabSpace * 3 + ButtonHeight * ButtonRowNumber ;
ButtonPosition = [ButtonXPos ButtonYPos ButtonWidth ButtonHeight] ;

for j = 1: ButtonColNumber
    for i = 1: ButtonRowNumber
        %         TempButtonTag = sprintf('Button%d%d', i, j ) ;
        TempButtonPosition = ButtonPosition ;
        TempButtonPosition(1) = TempButtonPosition(1) + (j - 1) * (ButtonWidth + MidSpace) ;
        TempButtonPosition(2) = TempButtonPosition(2) - i * (ButtonHeight + MidSpace) ;
        ButtonHandles((j-1)*ButtonRowNumber+i) = uicontrol( 'Style', 'PushButton', 'Position', TempButtonPosition, 'Tag', 'Button',...
            'Enable', 'on', 'BackgroundColor', [0.75 0.75 0.75],  'UserData', (j-1)*ButtonRowNumber+i,...
            'FontSize', 13, 'Callback', 'Game_ClearMine( ''ButtonDown_Callback'', gcbo)',...
            'ButtonDownFcn', 'Game_ClearMine( ''ButtonDownFcn'', gcbo)' ) ;
    end
end

if ButtonColNumber == 16
    x = (0: ButtonColNumber) * (21 + MidSpace) + ButtonXPos - 1 ;
else
    x = (0: ButtonColNumber) * (21 + MidSpace) + ButtonXPos - 2 ;
end
y = (-ButtonRowNumber:0) * (21 + MidSpace) + ButtonYPos - 1 ;

[X, Y] = meshgrid(x, y) ;
line( X, Y, 'Color', 'k') ;
line( X', Y', 'Color', 'k') ;
setappdata( FigureHandle, 'ButtonHandles', ButtonHandles ) ;

% ------------------------------------------------------------------------
function init_FigureContent( FigureHandle ) ;

handles = guidata( FigureHandle ) ;

GameInfo = getappdata( FigureHandle, 'GameInfo' ) ;

if isempty( GameInfo )
    GameInfo.RowNumber = 9 ;
    GameInfo.ColNumber = 9 ;
    GameInfo.MineNumber = 10 ;    
end

ButtonNumber = [GameInfo.RowNumber GameInfo.ColNumber] ;
close(FigureHandle) ;
FigureHandle = figure('Visible', 'off') ;
generate_FigureContent( FigureHandle, ButtonNumber ) ;

setappdata( FigureHandle, 'GameInfo', GameInfo ) ;

movegui( FigureHandle, 'center' ) ;
set( FigureHandle, 'Visible', 'on' ) ;

handles = guihandles( FigureHandle ) ;
guidata( FigureHandle, handles) ;    

set( handles.MineNumber, 'String', num2str(GameInfo.MineNumber) ) ;

BeginMenu_Callback( FigureHandle ) ;


% -------------------------------------------------------------------------
function BeginMenu_Callback( h )

handles = guidata( h ) ;

setappdata( handles.ClearMine, 'GameIsBegin', 0 ) ;
setappdata( handles.ClearMine, 'GameOver', 1 ) ;
setappdata( handles.ClearMine, 'CountSecond', 1 ) ;
setappdata( handles.ClearMine, 'MineNumberArray', [] ) ;

Matrix = com_GetFaceImage( 'Smile' ) ;
set( handles.Face, 'CData', Matrix/255 ) ;

GameInfo = getappdata( handles.ClearMine, 'GameInfo' ) ;
set( handles.MineNumber, 'String', num2str(GameInfo.MineNumber) ) ;

ButtonHandles = getappdata( handles.ClearMine, 'ButtonHandles' ) ;
set( ButtonHandles, 'Enable', 'on', 'Style', 'pushbutton', 'String', '', 'ForeGroundColor', 'k', 'CData', [], 'BackgroundColor', [0.75 0.75 0.75] ) ;


% ------------------------------------------------------------------------
function  EasyMenu_Callback( h ) 

handles = guidata( h ) ;

GameInfo.RowNumber = 9 ;
GameInfo.ColNumber = 9 ;
GameInfo.MineNumber = 10 ; 
setappdata( handles.ClearMine, 'GameInfo', GameInfo ) ;

init_FigureContent( handles.ClearMine ) ;


% ------------------------------------------------------------------------
function  NormalMenu_Callback( h ) 

handles = guidata( h ) ;

GameInfo.RowNumber = 16 ;
GameInfo.ColNumber = 16 ;
GameInfo.MineNumber = 40 ; 
setappdata( handles.ClearMine, 'GameInfo', GameInfo ) ;

init_FigureContent( handles.ClearMine ) ;


% ------------------------------------------------------------------------
function  HardMenu_Callback( h ) 

handles = guidata( h ) ;

GameInfo.RowNumber = 16 ;
GameInfo.ColNumber = 30 ;
GameInfo.MineNumber = 99 ; 
setappdata( handles.ClearMine, 'GameInfo', GameInfo ) ;

init_FigureContent( handles.ClearMine ) ;


% -------------------------------------------------------------------------
function  ButtonDown_Callback( h )

handles = guidata( h ) ;

ButtonIndex = get( h, 'UserData' ) ;

GameIsBegin = getappdata( handles.ClearMine, 'GameIsBegin' ) ;

if isempty( GameIsBegin )
    GameIsBegin = 0 ;    
end

if GameIsBegin == 0
    setappdata( handles.ClearMine, 'GameOver', 0 ) ;
    GameInfo = getappdata( handles.ClearMine, 'GameInfo' ) ;
    RowNumber = GameInfo.RowNumber ;
    ColNumber = GameInfo.ColNumber ;
    TotalMineNumber = GameInfo.MineNumber ;
    InitMineSetting( h, RowNumber, ColNumber, TotalMineNumber, ButtonIndex ) ;
end

MineNumberArray = getappdata( handles.ClearMine, 'MineNumberArray' ) ;
SolveArray = getappdata( handles.ClearMine, 'SolveArray' ) ;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -