📄 babysnake.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 + -