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

📄 babysnake.m

📁 又一个用matlab的GUI编写的贪吃蛇程序。
💻 M
字号:
function varargout = babysnake(varargin)
% Babysnake is a mini game programmed by Chen Guangling.
% 'w' for "up";'s' for "down";'a' for "left";'d' for "right"
% Last Modified by GUIDE v2.5 02-Dec-2005 11:30:45
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @babysnake_OpeningFcn, ...
                   'gui_OutputFcn',  @babysnake_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end

function babysnake_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;

guidata(hObject, handles);

SnakeHandles = handles.snakepart;
setappdata(handles.snakepart, 'SnakeHandles', SnakeHandles);
setappdata(handles.snakepart, 'Direction', 'right');

function varargout = babysnake_OutputFcn(hObject, eventdata, handles) 

varargout{1} = handles.output;

function Start_Callback(hObject, eventdata, handles)
Value = get(handles.Level, 'Value');
PauseTime = 1/(2*Value);
Direction = getappdata(handles.snakepart, 'Direction');
if strcmp(get(handles.Egg, 'Visible'), 'off')
    RandP = randint(1,2,[1,300]);
    EggP = [RandP, 5, 5];
    set(handles.Egg, 'Position', EggP, 'Visible', 'on');
end
if get(handles.Start, 'Value') == 0
    set(handles.Start, 'String', 'Pause');
    Flag = 1;
else
    set(handles.Start, 'String', 'Start');
    Flag = 0;
end
while Flag
    P = get(handles.snakepart, 'Position');
    PFence = get(handles.Fence, 'Position');
    if strcmp(get(handles.Start, 'String'), 'Start')
        return
    end
    if (P(1)+P(3)>=PFence(3)) | P(1)<=0 | P(2)<=0 | (P(2)+P(4)>=PFence(4))
        pause(0.0001);
        SnakeHandles = getappdata(handles.snakepart, 'SnakeHandles');
        message = ['Your score is: ', num2str(length(SnakeHandles)*10), '.', blanks(5),'Try again?'];
        button = questdlg(message, 'ContinueOperation', 'Yes', 'No', 'Yes');
        if strcmp(button, 'Yes')
            Reset(hObject, eventdata, handles);
            Start_Callback(hObject, eventdata, handles);
            return
        else
            return
        end
    else
        EatFlag = Eatting(hObject, eventdata, handles);
        if EatFlag
            OldPos = get(handles.snakepart, 'Position');
            copysnake(hObject, eventdata, handles);    
            RandP = randint(1,2,[1,300]);
            EggP = [RandP, 5, 5];
            set(handles.Egg, 'Position', EggP);
        end
        PSnake = get(handles.snakepart, 'Position');
        OldPos = PSnake;
        switch getappdata(handles.snakepart, 'Direction')
            case 'left'
                PSnake(1) = PSnake(1) - 5;
            case 'right'
                PSnake(1) = PSnake(1) + 5;
            case 'up'
                PSnake(2) = PSnake(2) + 5;
            case 'down'
                PSnake(2) = PSnake(2) - 5;
        end
        set(handles.snakepart, 'Position', PSnake);
        Replace(hObject, eventdata, handles, OldPos);  %--Replaced one by one--%
        pause(PauseTime);
    end
end

function EatFlag = Eatting(hObject, eventdata, handles)
PSnake = get(handles.snakepart, 'Position');
PEgg = get(handles.Egg, 'Position');
if (abs(PEgg(1)-PSnake(1)) < 5) & (abs(PEgg(2)-PSnake(2)) < 5)
    EatFlag = 1;
else
    EatFlag = 0;
end

function copysnake(hObject, eventdata, handles);
SnakeHandles = getappdata(handles.snakepart, 'SnakeHandles');
Length = length(SnakeHandles);
PSnake = get(SnakeHandles(Length), 'Position');
SnakeAdd = uicontrol(handles.Fence, 'Style', 'text', 'Position', PSnake,...
    'Tag', num2str(Length+1), 'BackgroundColor', [0 1 0]);
SnakeHandles(Length+1) = SnakeAdd;
setappdata(handles.snakepart, 'SnakeHandles', SnakeHandles);

function Replace(hObject, eventdata, handles, OldPos)
SnakeHandles = getappdata(handles.snakepart, 'SnakeHandles');
Length = length(SnakeHandles);
if Length == 1
    return
end

for i = 2:Length
    NewPos = OldPos;
    OldPos = get(SnakeHandles(i), 'Position');
    set(SnakeHandles(i), 'Position', NewPos);
end

function Reset(hObject, eventdata, handles)
SnakeHandles = getappdata(handles.snakepart, 'SnakeHandles');
Length = length(SnakeHandles);
for i = 1:Length
    set(SnakeHandles(i), 'Visible', 'off');
end
SnakeHandles = handles.snakepart;
setappdata(handles.snakepart, 'SnakeHandles', SnakeHandles);
setappdata(handles.snakepart, 'Direction', 'right');
set(handles.snakepart, 'Position', [20 20 5 5], 'Visible', 'on');
set(handles.Egg, 'Visible', 'off');

function Quit_Callback(hObject, eventdata, handles)
close;

function Up_Callback(hObject, eventdata, handles)
DirecBefore = getappdata(handles.snakepart, 'Direction');
switch DirecBefore
    case 'up'
        return
    case 'down'
        return
    case 'left'
        setappdata(handles.snakepart, 'Direction', 'up');
    case 'right'
        setappdata(handles.snakepart, 'Direction', 'up');
end

function Left_Callback(hObject, eventdata, handles)
DirecBefore = getappdata(handles.snakepart, 'Direction');
switch DirecBefore
    case 'up'
        setappdata(handles.snakepart, 'Direction', 'left');
    case 'down'
        setappdata(handles.snakepart, 'Direction', 'left');
    case 'left'
        return
    case 'right'
        return
end

function Right_Callback(hObject, eventdata, handles)
DirecBefore = getappdata(handles.snakepart, 'Direction');
switch DirecBefore
    case 'up'
        setappdata(handles.snakepart, 'Direction', 'right');
    case 'down'
        setappdata(handles.snakepart, 'Direction', 'right');
    case 'left'
        return
    case 'right'
        return
end

function Down_Callback(hObject, eventdata, handles)
DirecBefore = getappdata(handles.snakepart, 'Direction');
switch DirecBefore
    case 'up'
        return
    case 'down'
        return
    case 'left'
        setappdata(handles.snakepart, 'Direction', 'down');
    case 'right'
        setappdata(handles.snakepart, 'Direction', 'down');
end

function Level_Callback(hObject, eventdata, handles)

function Level_CreateFcn(hObject, eventdata, handles)

if ispc
    set(hObject,'BackgroundColor','white');
else
    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

function Reset_Callback(hObject, eventdata, handles)
Reset(hObject, eventdata, handles);
set(handles.Start, 'Value', 1, 'String', 'Start');

function figure1_KeyPressFcn(hObject, eventdata, handles)

function Start_KeyPressFcn(hObject, eventdata, handles)
CurrentCharacter = get(handles.figure1, 'CurrentCharacter');
switch CurrentCharacter
    case 'w'
        Up_Callback(hObject, eventdata, handles)        
    case 's'
        Down_Callback(hObject, eventdata, handles)
    case 'a'
        Left_Callback(hObject, eventdata, handles)
    case 'd'
        Right_Callback(hObject, eventdata, handles)
end

function Control_Callback(hObject, eventdata, handles)
set([handles.Text, handles.List], 'visible', 'off')
PC = get(handles.Control, 'Position');
PI = get(handles.Intro, 'Position');
set(handles.Control, 'Position', [PC(1)-1 PC(2) PC(3) PC(4)+2], 'Enable', 'inactive');
set(handles.Intro, 'Position', [PI(1)+1 PI(2) PI(3) PI(4)-2], 'Enable', 'on');
set(handles.MiniControl, 'Visible', 'on');
set(handles.MiniIntro, 'Visible', 'off');

function Intro_Callback(hObject, eventdata, handles)
set([handles.Text, handles.List], 'visible', 'on');
PC = get(handles.Control, 'Position');
PI = get(handles.Intro, 'Position');
set(handles.Intro, 'Position', [PI(1)-1 PI(2) PI(3) PI(4)+2], 'Enable', 'inactive');
set(handles.Control, 'Position', [PC(1)+1 PC(2) PC(3) PC(4)-2], 'Enable', 'on');
set(handles.MiniControl, 'Visible', 'off');
set(handles.MiniIntro, 'Visible', 'on');

function pushbutton9_Callback(hObject, eventdata, handles)

function List_Callback(hObject, eventdata, handles)

function List_CreateFcn(hObject, eventdata, handles)

if ispc
    set(hObject,'BackgroundColor','white');
else
    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end


⌨️ 快捷键说明

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