matlab GUI制作拼图小游戏

最近帮同学的忙制作一个拼图贴上代码和效果图,以后再详细说明。之前一般找到的拼图游戏都是“推格子”形式的,由于具体的要求,不能应用这种模板。
本人这次做的拼图是这样的:从左边图点击,选择拼图,拼图位置变空,点击右边格子,相应位置补上刚刚选择的拼图。以下是效果图:




全部代码

function varargout =page_final(varargin)
% PAGE_FINAL MATLAB code for page_final.fig
%      PAGE_FINAL, by itself, creates a new PAGE_FINAL or raises the existing
%      singleton*.
%
%      H = PAGE_FINAL returns the handle to a new PAGE_FINAL or the handle to
%      the existing singleton*.
%
%      PAGE_FINAL('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in PAGE_FINAL.M with the given input arguments.
%
%      PAGE_FINAL('Property','Value',...) creates a new PAGE_FINAL or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before page_final_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to page_final_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help page_final% Last Modified by GUIDE v2.5 31-May-2019 03:54:26% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @page_final_OpeningFcn, ...'gui_OutputFcn',  @page_final_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT% --- Executes just before page_final is made visible.
function page_final_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to page_final (see VARARGIN)% Choose default command line output for page_final
handles.output = hObject;% Update handles structure
guidata(hObject, handles);% UIWAIT makes page_final wait for user response (see UIRESUME)
% uiwait(handles.figure1);
global pic_data;
global rank_Tag;
global blank_pic;
global Tag;
global Tag1_changing;
global Tag2_changing;
global origin;
global redo;
redo=0;
%%tperiod是时间,redo是重做次数;
%pic_data=imread('dog.jpg');%n=get(handles.popupmenu_rank,'value'); % 获取下拉选择框的值rank_Tag=3;% 计算选择的拼图阶数
global h_time;
h_time=timer;   %定时器%将定时器放到全局变量中
%set(handles.he,'ExecutionMode','singleShot');  %定时器只执行一次,定一次时。
set(h_time,'ExecutionMode','fixedRate');   %定时器,循环执行,循环定时。
set(h_time,'Period',1);    %定时器,定时间隔 1秒
set(h_time,'TimerFcn',{@disptime,handles});    %定时器,定时会触发 TimerFcn 函数,定时函数(TimerFcn)触发用户自定义的函数(disptime函数)function disptime(hObject, eventdata, handles)
set(handles.edit2,'String',datestr(now));   % 将edit控件的内容改成当前时间function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% --- Executes during object creation, after setting all properties.
global count;
count=0;
global pic_data;
global rank_Tag;
global blank_pic;
global Tag;
global Tag1_changing;
global Tag2_changing;
global origin;
global redo;
redo=redo+1;
global h_time;
global t1;
global t2;%这里初始化Tag2_changing,下面会初始化Tag和Tag1_changing;
Tag2_changing=zeros(rank_Tag,rank_Tag);%每次点击都重新读图片
file_name=get(handles.edit1,'String');
if exist(file_name,'file')==0%如果没选图pic_data=imread('dog.jpg');%这个或许要改
elsepic_data=imread(file_name);
end
len=min([size(pic_data,1),size(pic_data,2)]);
len_col=round(len/rank_Tag);
len_row=round(len/rank_Tag);% 转换图片为正方形
pic_data=imresize(pic_data,[rank_Tag*len_col rank_Tag*len_row]);%imresize(A,行长,列长)
origin=pic_data;%每次点击都重新读空图片
blank_pic=imread('blank_pic.jpg');%变成和目标图一样大小
blank_pic=imresize(blank_pic,[rank_Tag*len_col rank_Tag*len_row]);
axes(handles.axes2); % 选定坐标轴
image(blank_pic) % 显示拼图y=randperm(rank_Tag^2);
Tag=reshape(y,rank_Tag,rank_Tag);%这是乱序序tag_A
Tag1_changing=Tag;%%%打乱原图
drawmap(Tag,handles.axes1,pic_data,origin,rank_Tag);if(redo==1)start(h_time);%开启定时器 t1=clock;%time_record=datestr(now)
end
%%开始在右侧图点击
set(gcf,'windowButtonDownFcn',{@ButtonDownFcn,handles,rank_Tag}); % 点击鼠标时调用ButtonDownFcn函数,这里是figure监听function ButtonDownFcn(src,event,handles,rank_Tag)
%% 回调函数,鼠标点击事件发生时调用global Tag; % 全局变量声明
global Tag1_changing;
global dTag;
global blank_pic;
global origin;
global pic_data;pt=get(handles.axes1,'CurrentPoint'); % 获取axes1中鼠标点击位置坐标,axes1的坐标大小是图片大小,实现下面col和row计算准确
xpos=pt(1,1); % 鼠标点击处的横坐标实际值
ypos=pt(1,2); % 鼠标点击处的纵坐标实际值len_row=size(pic_data,1)/rank_Tag; % 每块拼图的宽度
len_col=size(pic_data,2)/rank_Tag; % 每块拼图的高度%当前选择的是图片块Tag(row,col)
col = ceil(xpos/len_row); % 将横坐标值转换为列数,朝大方向取整
row = ceil(ypos/len_col); % 将纵坐标值转换为行数%set(gcf, 'WindowButtonDownFcn', ''); %停止监听
if(col<=rank_Tag && col>0)&&(row<=rank_Tag && row>0) set(handles.pushbutton1,'String','点击重来','ForegroundColor','r');dTag=Tag1_changing(row,col);%保留这里选择的块Tag1_changing(row,col)=0;    drawmap(Tag1_changing,handles.axes1,pic_data,origin,rank_Tag)set(gcf,'windowButtonDownFcn',{@ButtonDownFcn2,handles,rank_Tag});
elsemsgbox('点击位置异常,请选择右边拼图!!!'); % 提示完成信息return;
endfunction ButtonDownFcn2(src,event,handles,rank_Tag)
%% 回调函数,鼠标点击事件发生时调用
global Tag; % 全局变量声明
global Tag1_changing;
global Tag2_changing;
global dTag;
global origin;
global count;
global pic_data;
global blank_pic;
global redo;
global time_record;
global h_time;
global t1;
global t2;
global tperiod;pt=get(handles.axes2,'CurrentPoint'); % 获取axes1中鼠标点击位置坐标,axes1的坐标大小是图片大小,实现下面col和row计算准确
xpos=pt(1,1); % 鼠标点击处的横坐标实际值
ypos=pt(1,2); % 鼠标点击处的纵坐标实际值len_row=size(blank_pic,1)/rank_Tag; % 每块拼图的宽度
len_col=size(blank_pic,2)/rank_Tag; % 每块拼图的高度%当前选择的是图片块Tag(row,col)
col1 = ceil(xpos/len_row); % 将横坐标值转换为列数,朝大方向取整
row1= ceil(ypos/len_col); % 将纵坐标值转换为行数% 判断鼠标点击位置是否在有效范围内
if(col1<=rank_Tag && col1>0)&&(row1<=rank_Tag && row1>0)  Tag2_changing(row1,col1)=dTag;blank_pic=drawmap2(row1,col1,dTag,handles.axes2,blank_pic,origin,rank_Tag);count=count+1;if(count<9)set(gcf,'windowButtonDownFcn',{@ButtonDownFcn,handles,rank_Tag});elseorder=[1:1:rank_Tag^2];order=reshape(order,rank_Tag,rank_Tag);order=order';%[1 2 3;4 5 6;7 8 9]zt = abs(Tag2_changing-order); % 比较两个矩阵if sum(zt(:))==0 % 顺序已经完全吻合axes(handles.axes2)% 游戏完成,补全拼图image(origin) % 显示全图axes(handles.axes1)image(origin)stop(h_time);%time_record=datestr(now)t2=clock;tperiod=etime(t2,t1)a=['恭喜完成!!!您做了',num2str(redo),'次游戏'];msgbox(a) % 提示完成信息disp('****保存数据*******');%保存fid=fopen('C:\Users\user\Documents\pin_tu.csv','a+');fprintf(fid,'%s\n','拼图游戏');str=[string('游戏次数'),string('使用时间')];data=[redo,tperiod];for i=1:2fprintf(fid,'%s,%f\n',str(i),data(i));endfprintf(fid,'%s\n',' ');fclose(fid);pause(5);close;elsemsgbox('很遗憾没成功,下次加油!!!') % 提示完成信息pause(3);set(gcf,'windowButtonDownFcn','');%重新游戏set(handles.pushbutton1,'String','点击重来','ForegroundColor','r'); endend
elsemsgbox('点击位置异常,请把拼图放到左边适合的位置!!!');return %return是返回ButtonDownFcn2第一行
end% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global pic_data; % 全局变量声明,flag决定是否能点击拼图
global origin;
global rank_Tag;
% 弹出文件选择框,选择一张图片
[file,path] = uigetfile({'*.jpg;*.jpeg;*.png;*.bmp;*.tif',...'图片文件 (*.jpg,*.jpeg,*.png,*.bmp,*.tif)'},'选择一张图片');if isequal(file,0) % 若文件不存在set(handles.edit1,'String','请选择一张图片');
elsefileName= fullfile(path,file); % 选择的图片绝对路径,fullfile构成地址字符串;set(handles.edit1,'String',fileName); % 显示选择的图片路径pic_data=imread(fileName);% 确定每块拼图长宽len=min([size(pic_data,1),size(pic_data,2)]);len_col=round(len/rank_Tag);len_row=round(len/rank_Tag);% 转换图片为正方形pic_data=imresize(pic_data,[rank_Tag*len_col rank_Tag*len_row]);%imresize(A,行长,列长)origin=pic_data;end% --- Executes on button press in radiobutton1.
function radiobutton1_Callback(hObject, eventdata, handles)
% hObject    handle to radiobutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Hint: get(hObject,'Value') returns toggle state of radiobutton1
% 根据选择情况决定是否显示数字标识
global pic_data;
global rank_Tag;
global origin;file_name=get(handles.edit1,'String');
if exist(file_name,'file')==0%如果没选图pic_data=imread('dog.jpg');%这个或许要改
elsepic_data=imread(file_name);
end
len=min([size(pic_data,1),size(pic_data,2)]);
len_col=round(len/rank_Tag);
len_row=round(len/rank_Tag);% 转换图片为正方形
pic_data=imresize(pic_data,[rank_Tag*len_col rank_Tag*len_row]);%imresize(A,行长,列长)
origin=pic_data;ismask=get(handles.radiobutton1,'Value');%0是不选,不看原图
if(ismask)axes(handles.axes3);image(pic_data);%set(handles.axes3,'handlevisibility','off','visible','off');%坐标会自动调整为图片大小
elsewhole_col=size(pic_data,2);whole_row=size(pic_data,1);x=uint8(255*ones(whole_row,whole_col,3));% 拼图块0矩阵数据axes(handles.axes3);image(x);%set(handles.axes3,'handlevisibility','off','visible','off');
end

matlab GUI制作拼图小游戏相关推荐

  1. python猜数字1001untitled_如何利用Matlab GUI制作猜数字游戏

    第二堂课布置了一个Mission Impossible:如何利用Matlab GUI制作猜数字游戏 这个任务对很多人来说会非常困难,首先要面对的是 Matlab GUI的机制,这是完全未知的机制,在面 ...

  2. python拼图_利用python制作拼图小游戏的全过程

    开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 关注公众号:Python学习指南,回复"拼图"即可获取源码 环境搭建 安装P ...

  3. 利用python制作拼图_利用python制作拼图小游戏的全过程

    开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 关注公众号:Python学习指南,回复"拼图"即可获取源码 环境搭建 安装P ...

  4. 使用Grid布局制作拼图小游戏

    在学习grid布局时突发奇想利用这个布局的特性做一个拼图小游戏 先简单实现了一个demo,后期再优化,效果如下图: 先上一下主要的css样式 .container {display: inline-g ...

  5. HTML+Javascript制作拼图小游戏详解(一)

    本文章将分享一个来自前端菜鸟突发奇想的拼图游戏制作方法以及实现过程. 话不多说,先上图. 首先我们需要写好网页的基本布局(此处涉及简单的HTML和CSS知识). 网页一共分为三个区域,左侧时间显示区, ...

  6. python制作拼图小游戏

    开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪 ...

  7. 利用python制作拼图_python制作拼图小游戏

    开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 原理介绍 游戏简介: ...

  8. c语言拼图小游戏编程,c语言控制台输出制作拼图小游戏

    这就是另外一个小程序了和那个推箱子很像. #include int a[4][4]; void draw_point(int n) { if(n == 15) { printf("| &qu ...

  9. python设计拼图小游戏_教你用Python自制拼图小游戏,轻松搞定熊孩子

    摘要:本文主要为大家详细介绍了python实现拼图小游戏,文中还有示例代码介绍,感兴趣的小伙伴们可以参考一下. 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Pyth ...

最新文章

  1. poj1330Nearest Common Ancestors 1470 Closest Common Ancestors(LCA算法)
  2. I.MX6 bq27441 driver hacking
  3. aspnet_merge.exe”已退出,代码为1的错误的解决方法
  4. Unhandled exception 0xC0000005: Access violation writing location
  5. AI公开课:19.05.29 浣军-百度大数据实验室主任《AutoDL 自动化深度学习建模的算法和应用》课堂笔记以及个人感悟
  6. flask貌似html文件里只能用flask指定的路径格式,css文件里则可用相对路径
  7. java程序的调试过程
  8. Flash AS3.0实例教程:构建简单的声音可视化程序(波型图)
  9. 在Reporting Services (RDL)中自动生成大量列
  10. 有了这些接口测试用例+工具,测试效率想不提升都难
  11. TrueCrypt的原理
  12. CAD导出pdf的正确方法(包括导出黑白pdf)
  13. python snownlp了解_python中snownlp情感分析简易的demo分享
  14. 科学计算机恢复初始化,快速解决Windows 10系统还原一直初始化或卡住的方法!...
  15. Empty DataFrame
  16. Python中Print()函数的用法___实例详解(全,例多)
  17. java计算机毕业设计教师管理系统源码+mysql数据库+系统+lw文档+部署
  18. 【单片机】一文彻底搞懂单片机程序烧录
  19. Django中F对象,Q对象与运算符
  20. 环世界RimWorld for Mac(模拟建造游戏)

热门文章

  1. java hssffont_Java HSSFFont.setColor方法代碼示例
  2. 计算机核心基础、计算机硬件组成原理、计算机硬件组成详解、硬盘接口及操作系统、计算机网络简述、OSI七层协议、子网划分、 VLAN简述
  3. 群晖NAS使用2步身份验证登录技巧
  4. 电脑使用者的眼睛保护
  5. 面对这个缓慢、脆弱、健忘的互联网,IPFS协议势在必行!
  6. 关于客户端下载文件而不是在服务器生成文件
  7. 中兴校招软件测试面试题,中兴软创笔试题_中兴软创软件测试笔试题
  8. 零基础转行大数据可行吗?大数据开发需要什么基础呢?
  9. Away3D4.0入门教程
  10. ps插件摹客iDoc使用技巧