matlab各种游戏编程大全俄罗斯方块贪吃蛇拼图五子棋黑白棋华容道等.docx
- 文档编号:3635428
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:118
- 大小:242.51KB
matlab各种游戏编程大全俄罗斯方块贪吃蛇拼图五子棋黑白棋华容道等.docx
《matlab各种游戏编程大全俄罗斯方块贪吃蛇拼图五子棋黑白棋华容道等.docx》由会员分享,可在线阅读,更多相关《matlab各种游戏编程大全俄罗斯方块贪吃蛇拼图五子棋黑白棋华容道等.docx(118页珍藏版)》请在冰豆网上搜索。
matlab各种游戏编程大全俄罗斯方块贪吃蛇拼图五子棋黑白棋华容道等
用matlab编写的俄罗斯方块小游戏
∙functionRussiaBlock(varargin)
ifnargin==0
OldHandle=findobj('Type','figure','Tag','RussiaBlock');
ifishandle(OldHandle)
delete(OldHandle);
end
FigureHandle=figure('Name','俄罗斯方块MATLAB版','Tag','RussiaBlock','NumberTitle','off',...
'Menubar','none','DoubleBuffer','on','Resize','off','visible','on',...
'KeyPressFcn','RussiaBlock(''KeyPress_Callback'',gcbo)',...
'HelpFcn','helpdlg(''帮不了你--!
'',''不好意思'')',...
'CloseRequestFcn','RussiaBlock(''CloseFigure_Callback'',gcbo)');
generate_FigureContent(FigureHandle);
init_FigureContent(FigureHandle);
set(FigureHandle,'Visible','on');
elseifischar(varargin{1})
feval(varargin{:
});
end
%-------------------------------------------------------------------------
functiongenerate_FigureContent(FigureHandle)
TabSpace=30;
BlockWidth=20;
BlockHeight=20;
FigureWidth=BlockWidth*(12+1)+TabSpace*7;
FigureHeight=500;
set(FigureHandle,'Position',[00FigureWidthFigureHeight]);
movegui(FigureHandle,'center');
%创建菜单
BeginMenu=uimenu(FigureHandle,'Label','开始');
StartMenu=uimenu(BeginMenu,'Label','开始新游戏','Accelerator','N',...
'Callback','RussiaBlock(''StartNewGame_Callback'',gcbo)');
SaveMenu=uimenu(BeginMenu,'Label','保存','Accelerator','S','Enable','off',...
'Separator','on','Cal','RussiaBlock(''SaveGame_Callback'',gcbo)');
LoadMenu=uimenu(BeginMenu,'Label','读取','Accelerator','L','Enable','off',...
'Cal','RussiaBlock(''LoadGame_Callback'',gcbo)');
QuitMenu=uimenu(BeginMenu,'Label','退出','Accelerator','Q','Separator','on','Cal','close(gcf)');
OperationMenu=uimenu(FigureHandle,'Label','功能');
BoardConfigMenu=uimenu(OperationMenu,'label','键盘设置','Enable','off',...
'Cal','RussiaBlock(''BoardConfig_Callback'',gcbo)');
FigureConfigMenu=uimenu(OperationMenu,'label','界面设置','Enable','off',...
'Cal','RussiaBlock(''FigureConfig_Callback'',gcbo)');
HighScoreMenu=uimenu(OperationMenu,'label','最高记录','Separator','on',...
'Cal','RussiaBlock(''HighScore_Callback'',gcbo)','Enable','off');
GameLevelMenu=uimenu(OperationMenu,'Label','游戏难度',...
'Cal','RussiaBlock(''GameLevel_Callback'',gcbo)');
HelpMenu=uimenu(FigureHandle,'Label','帮助');
AboutMenu=uimenu(HelpMenu,'Label','关于此软件','Cal','helpdlg(''俄罗斯方块MATLAB版'',''关于此软件…………'')');
HelpDlgMenu=uimenu(HelpMenu,'Label','游戏帮助','Separator','on','Cal','helpdlg(''帮不了你--!
'',''不好意思'')');
%创建工具条,图标可以用imread从图片读取,但图片不要太大
BeginTool=uipushtool('ToolTipString','开始','CData',rand(16,16,3),'Tag','BeginTool',...
'ClickedCallback','RussiaBlock(''StartNewGame_Callback'',gcbo)');
PauseTool=uitoggletool('ToolTipString','暂停','Tag','PauseTool','Tag','PauseTool',...
'CData',reshape(repmat([110],16,16),[16,16,3]),...
'ClickedCallback','RussiaBlock(''PauseGame_Callback'',gcbo)');
%创建游戏窗口
MainWindowXPos=TabSpace;
MainWindowYPos=TabSpace;
MainWindowWidth=BlockWidth*12;
MainWindowHeight=BlockHeight*22;
MainWindowPosition=[MainWindowXPosMainWindowYPosMainWindowWidthMainWindowHeight];
%定义游戏窗口的右键菜单
AxesContextMenu=uicontextmenu('Tag','uicontextmenu');
uimenu(AxesContextMenu,'Label','设置窗口颜色','Cal','RussiaBlock(''WindowColor_Callback'',gcbo)')
uimenu(AxesContextMenu,'Label','设置背景图片','Cal','RussiaBlock(''WindowPicture_Callback'',gcbo)')
uimenu(AxesContextMenu,'Label','设置方块颜色','Cal','RussiaBlock(''BlockColor_Callback'',gcbo)')
uimenu(AxesContextMenu,'Label','恢复默认','Cal','RussiaBlock(''Default_Callback'',gcbo)')
MainAxes=axes('Units','pixels','Pos',MainWindowPosition,'XTick',[],'YTick',[],'XTickLabel',[],...
'YTickLabel',[],'Box','on','Tag','MainAxes','UicontextMenu',AxesContextMenu,...
'XLim',[0MainWindowWidth],'YLim',[0MainWindowHeight]);
holdon;
%创建一个窗口用于显示下一个方块的图形
NextBlockWndXPos=MainWindowXPos+MainWindowWidth+TabSpace;
NextBlockWndHeight=4*TabSpace+BlockHeight;
NextBlockWndYPos=MainWindowYPos+MainWindowHeight-NextBlockWndHeight;
NextBlockWndWidth=TabSpace*4+BlockWidth;
NextBlockWndPosition=[NextBlockWndXPosNextBlockWndYPosNextBlockWndWidthNextBlockWndHeight];
NextBlockAxes=axes('Units','pixels','Pos',NextBlockWndPosition,'XTick',[],'YTick',[],...
'XTickLabel',[],'YTickLabel',[],'XLim',[0NextBlockWndWidth],...
'YLim',[0NextBlockWndHeight],...
'Box','on','Tag','NextBlockAxes','Color',[0.850.850.85]);
%创建一组控件,包括(两个文本框用于显示当前方块数和成绩,两个按钮用于暂停和退出)
ButtonTag={'QuitButton','PauseButton','BlockNumText','ScoreText'};
ButtonStyle={'pushbutton','togglebutton','text','text'};
FontColor={[000],[100],[001],[101]};
ButtonColor={[0.70.80.9],[0.310.3],[0.511],[0.511]};
ButtonString={'退出','暂停','方块数','积分'};
ButtonCallback={'close(gcf)','RussiaBlock(''ButtonPauseGame_Callback'',gcbo)','',''};
ButtonNumber=length(ButtonTag);
ButtonWidth=NextBlockWndWidth;
ButtonHeight=50;
ButtonXPos=NextBlockWndXPos;
ButtonYPos=MainWindowYPos+TabSpace;
ButtonPosition=[ButtonXPosButtonYPosButtonWidthButtonHeight];
ButtonTabSpace=(NextBlockWndYPos-2*TabSpace-ButtonHeight*ButtonNumber)/ButtonNumber;
fornum=1:
ButtonNumber
TempButtonPosition=ButtonPosition;
TempButtonPosition
(2)=ButtonPosition
(2)+(num-1)*(ButtonTabSpace+ButtonHeight);
iffindstr(ButtonStyle{num},'button')
TempButtonPosition
(1)=TempButtonPosition
(1)+10;
TempButtonPosition
(2)=TempButtonPosition
(2)+5;
TempButtonPosition(3)=TempButtonPosition(3)-10*2;
TempButtonPosition(4)=TempButtonPosition(4)-5*2;
else
TempButtonPosition
(1)=TempButtonPosition
(1)-10;
TempButtonPosition
(2)=TempButtonPosition
(2)-5;
TempButtonPosition(3)=TempButtonPosition(3)+10*2;
TempButtonPosition(4)=TempButtonPosition(4)+5*2;
end
ButtonHandle=uicontrol('Tag',ButtonTag{num},'Style',ButtonStyle{num},'Pos',TempButtonPosition,...
'Foregroundcolor',FontColor{num},'Backgroundcolor',ButtonColor{num},...
'Fontsize',16,'String',ButtonString{num},'Cal',ButtonCallback{num});
iffindstr(ButtonStyle{num},'text')
set(ButtonHandle,'Max',2);
end
iffindstr(ButtonTag{num},'PauseButton')
set(ButtonHandle,'Enable','inactive','ButtonDownFcn',ButtonCallback{num},'Cal','');
end
end
MainBlockAxes=axes('Units','pixels','Pos',MainWindowPosition,'XTick',[],'YTick',[],'XTickLabel',[],...
'YTickLabel',[],'Box','on','Tag','MainBlockAxes','Hittest','off',...
'XLim',[0MainWindowWidth],'YLim',[0MainWindowHeight],'Color','none');
line('Visible','on','Tag','BlockHandle','Markersize',18,'Parent',MainBlockAxes,'HitTest','off',...
'Marker','s','MarkerEdgeColor','k','XData',nan,'YData',nan,'LineStyle','none');
line('Visible','off','Tag','TempBlock','Markersize',18,'Parent',MainBlockAxes,'HitTest','off',...
'Marker','s','MarkerEdgeColor','k','XData',130,'YData',30,'LineStyle','none');
line('Visible','off','Tag','NextBlock','Markersize',18,'Parent',NextBlockAxes,'HitTest','off',...
'Marker','s','MarkerEdgeColor','k','XData',30,'YData',30,'LineStyle','none');
setappdata(FigureHandle,'XLim',[0MainWindowWidth])
setappdata(FigureHandle,'YLim',[0MainWindowHeight])
handles=guihandles(FigureHandle);
guidata(FigureHandle,handles);
%-------------------------------------------------------------------------
functioninit_FigureContent(FigureHandle)
handles=guidata(FigureHandle);
ColorInfo=[];
try
ColorInfo=load('ColorInfo.mat');
catch
end
ifisempty(ColorInfo)
ColorInfo.BlockColor=GetDefaultBlockColor;
ColorInfo.MainAxesColor=GetDefaultMainAxesColor;
ColorInfo.MainAxesImage.ImageData=[];
end
set(handles.MainAxes,'Color',ColorInfo.MainAxesColor);
if~isempty(ColorInfo.MainAxesImage.ImageData)
ImageHandle=image(ColorInfo.MainAxesImage.ImageData,'Parent',handles.MainAxes);
set(ImageHandle,ColorInfo.MainAxesImage.Property);
setappdata(FigureHandle,'ImageData',ColorInfo.MainAxesImage.ImageData);
end
set(handles.BlockHandle,'MarkerFaceColor',ColorInfo.BlockColor);
set(handles.TempBlock,'MarkerFaceColor',ColorInfo.BlockColor);
set(handles.NextBlock,'MarkerFaceColor',ColorInfo.BlockColor);
setappdata(FigureHandle,'BlockColor',ColorInfo.BlockColor);
%------------------------------------------------------------
functionStartNewGame_Callback(h,StartType)
handles=guidata(h);
globalPauseTime
ifnargin==1
StartType='NewStart';
setappdata(handles.RussiaBlock,'BlockNumber',0);
set(handles.BlockNumText,'String',{'方块数','0'});
setappdata(handles.RussiaBlock,'CurrentScore',0);
set(handles.ScoreText,'String',{'积分','0'});
set(handles.BlockHandle,'XData',nan,'YData',nan);
set(handles.TempBlock,'XData',nan,'YData',nan);
TextHandle=findobj('Parent',handles.MainBlockAxes,'Type','text');
delete(TextHandle);
else
end
set(handles.NextBlock,'Visible','on');
set(handles.TempBlock,'Visible','on');
set(handles.PauseTool,'State','off');
set(handles.PauseButton,'Value',0);
YLim=get(handles.MainAxes,'YLim');
while(ishandle(h))
TotalYData=get(handles.BlockHandle,'YData');
ifany(TotalYData>=YLim
(2))
%Gameover
text(20,200,'GameOver','Parent',handles.MainBlockAxes,...
'FontSize',30,'Color','r','FontAngle','ita
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 各种 游戏 编程 大全 俄罗斯方块 贪吃 拼图 五子棋 白棋 华容道