利用Matlab复刻羊了个羊小游戏
作者:slandarer 发布时间:2021-10-10 17:13:05
标签:Matlab,羊了个羊,游戏
今天就是国赛的第一天
直接开摆
打国赛不如玩羊了个羊
玩羊了个羊不如玩MATLAB版
写作不易留个赞叭(比赛之余放松一下也行,反正MATLAB版我设置的是可以无限刷新。。。早晚能赢)
效果
完整代码
看效果就知道肯定用来相关素材包,因此只有代码无法运行,需要m文件所在文件夹存在羊了个羊素材包material.mat
,素材包放在文末:
function sheeeppp
% @author : slandarer
% gzh : slandarer随笔
clc;clear
material=load('material.mat');
typeNum=length(material.card);
cardNum=typeNum*3*7;
% 获取随机数表
numList=repmat(1:typeNum,[3*7,1]);
[~,index]=sort(rand(1,cardNum));
numList=numList(:);numList=numList(index);
cardNumList=1:cardNum;
% 卡槽和卡池列表
storeList=[];
cardList=[];
cardMat=zeros(cardNum,7);
cardMat(:,1)=1:cardNum;
% =========================================================================
% figure及axes创建及修饰
fig=figure('units','pixels','position',[500 50 1.5*1080/3 1.5*1500/3],...
'Numbertitle','off','menubar','none','resize','on','name','羊了个羊');
ax=axes('Parent',fig,'Position',[0,0,1,1],'XLim',[0,1080],'YLim',[0,1500],...
'XColor','none','YColor','none','XTick',[],'YTick',[],'Color',[195,254,138]./255);
hold on
% image(ax,[0,1080],[0,1500],flipud(material.bkg));
image(ax,[0,1080],[0,295],flipud(material.store));
% 创建卡牌
n=1;
for k=1:5
for i=1:3
for j=1:3
tn=numList(n);
image(ax,[-130,130]./2+540+(j-2).*130+rand(1).*5,[-145,145]./2+1000-(i-2).*145+rand(1).*5,...
flipud(material.card(tn).C.*.8),'AlphaData',flipud(material.card(tn).A),...
'UserData',[n,tn],'ButtonDownFcn',@clickImg)
cardMat(n,2)=n+9;
if k==5
cardMat(n,3)=n+9+3;
end
n=n+1;
end
end
end
for k=1:3
for i=1:4
for j=1:3
tn=numList(n);
image(ax,[-130,130]./2+540+(j-2).*130+rand(1).*5,[-145,145]./2+1000-(i-2).*145+145/2+rand(1).*5,...
flipud(material.card(tn).C.*.8),'AlphaData',flipud(material.card(tn).A),...
'UserData',[n,tn],'ButtonDownFcn',@clickImg)
if k==3
cardMat(n,2)=n+12+i-1;
cardMat(n,3)=n+12+1+i-1;
else
cardMat(n,2)=n+12;
end
n=n+1;
end
end
end
for k=1:3
for i=1:4
for j=1:4
tn=numList(n);
image(ax,[-130,130]./2+540+(j-2.5).*130+rand(1).*5,[-145,145]./2+1000-(i-2).*145+145/2+rand(1).*5,...
flipud(material.card(tn).C.*.8),'AlphaData',flipud(material.card(tn).A),...
'UserData',[n,tn],'ButtonDownFcn',@clickImg)
if k==3
cardMat(n,2)=n+16+i-1;
cardMat(n,3)=n+16+1+i-1;
else
cardMat(n,2)=n+16;
end
n=n+1;
end
end
end
for k=1:4
for i=1:4
for j=1:5
tn=numList(n);
if k==4
image(ax,[-130,130]./2+540+(j-3).*130+rand(1).*5,[-145,145]./2+1000-(i-2).*145+145/2+rand(1).*5,...
flipud(material.card(tn).C),'AlphaData',flipud(material.card(tn).A),...
'UserData',[n,tn],'ButtonDownFcn',@clickImg)
else
cardMat(n,2)=n+16;
image(ax,[-130,130]./2+540+(j-3).*130+rand(1).*5,[-145,145]./2+1000-(i-2).*145+145/2+rand(1).*5,...
flipud(material.card(tn).C.*.8),'AlphaData',flipud(material.card(tn).A),...
'UserData',[n,tn],'ButtonDownFcn',@clickImg)
cardMat(n,2)=n+20;
end
n=n+1;
end
end
end
for n=210:225
tn=numList(n);
if n==225
image(ax,[-130,130]./2+540-400+(n-210)*15,[-145,145]./2+600,...
flipud(material.card(tn).C),'AlphaData',flipud(material.card(tn).A),...
'UserData',[n,tn],'ButtonDownFcn',@clickImg)
else
image(ax,[-130,130]./2+540-400+(n-210)*15,[-145,145]./2+600,...
flipud(material.card(tn).C.*.8),'AlphaData',flipud(material.card(tn).A),...
'UserData',[n,tn],'ButtonDownFcn',@clickImg)
cardMat(n,2)=n+1;
end
end
for n=226:241
tn=numList(n);
if n==241
image(ax,[-130,130]./2+540-400+(n-226)*15,[-145,145]./2+400,...
flipud(material.card(tn).C),'AlphaData',flipud(material.card(tn).A),...
'UserData',[n,tn],'ButtonDownFcn',@clickImg)
else
image(ax,[-130,130]./2+540-400+(n-226)*15,[-145,145]./2+400,...
flipud(material.card(tn).C.*.8),'AlphaData',flipud(material.card(tn).A),...
'UserData',[n,tn],'ButtonDownFcn',@clickImg)
cardMat(n,2)=n+1;
end
end
for n=242:257
tn=numList(n);
if n==257
image(ax,[-130,130]./2+540+400-(n-242)*15,[-145,145]./2+600,...
flipud(material.card(tn).C),'AlphaData',flipud(material.card(tn).A),...
'UserData',[n,tn],'ButtonDownFcn',@clickImg)
else
image(ax,[-130,130]./2+540+400-(n-242)*15,[-145,145]./2+600,...
flipud(material.card(tn).C.*.8),'AlphaData',flipud(material.card(tn).A),...
'UserData',[n,tn],'ButtonDownFcn',@clickImg)
cardMat(n,2)=n+1;
end
end
disp(material.author);
disp(material.gzh);
for n=258:273
tn=numList(n);
if n==273
image(ax,[-130,130]./2+540+400-(n-258)*15,[-145,145]./2+400,...
flipud(material.card(tn).C),'AlphaData',flipud(material.card(tn).A),...
'UserData',[n,tn],'ButtonDownFcn',@clickImg)
else
image(ax,[-130,130]./2+540+400-(n-258)*15,[-145,145]./2+400,...
flipud(material.card(tn).C.*.8),'AlphaData',flipud(material.card(tn).A),...
'UserData',[n,tn],'ButtonDownFcn',@clickImg)
cardMat(n,2)=n+1;
end
end
% =========================================================================
% 点击卡片的回调
function clickImg(obj,~)
objNum=obj.UserData;
if ~any(cardMat(objNum(1),2:end))
cardNumList(cardNumList==objNum(1))=[];
% 取消阴影
[rows,cols]=find(cardMat(:,2:end)==objNum(1));
for d=1:length(rows)
cardMat(rows(d),cols(d)+1)=0;
if ~any(cardMat(rows(d),2:end))
picObj=findobj('UserData',[rows(d),numList(rows(d))]);
picObj.CData=flipud(material.card(numList(rows(d))).C);
end
end
% 更新卡槽
obj.ButtonDownFcn=[];
cardList=[cardList,objNum(1)];
storeList=[storeList,objNum(2)];
[storeList,tindex]=sort(storeList);
cardList=cardList(tindex);
% 消除卡牌
d2=diff(diff(storeList).*(1:(length(storeList)-1)).^4);
if ~isempty(d2)
if any(d2==0)
zpos=find(d2==0,1);
for tk=zpos:(zpos+2)
picObj=findobj('UserData',[cardList(tk),storeList(tk)]);
delete(picObj)
end
storeList(zpos:(zpos+2))=[];
cardList(zpos:(zpos+2))=[];
end
end
% 图像重绘
for tk=1:length(cardList)
picObj=findobj('UserData',[cardList(tk),storeList(tk)]);
picObj.XData=[-130,130]./2+135+(tk-1).*135;
picObj.YData=[-145,145]./2+154;
end
if length(cardList)==7
buttonName1=questdlg('游戏失败','游戏失败','关闭游戏','重新开始','关闭游戏');
if isempty(buttonName1),buttonName1='end';end
if strcmp(buttonName1,'关闭游戏');clf;clc;clear;close all
elseif strcmp(buttonName1,'重新开始');delete(fig);sheeeppp();
end
end
end
end
% =========================================================================
image(ax,[-93,93]./1.5+100,[-81,81]./1.5+1410,flipud(material.re(1).C),...
'AlphaData',flipud(material.re(1).A),'ButtonDownFcn',@restart)
image(ax,[-93,93]./1.5+100+160,[-81,81]./1.5+1410,flipud(material.re(2).C),...
'AlphaData',flipud(material.re(2).A),'ButtonDownFcn',@refresh)
function restart(~,~)
delete(fig);sheeeppp();
end
function refresh(~,~)
tnumList=numList(cardNumList);
[~,tindex]=sort(rand([1,length(tnumList)]));
tnumList=tnumList(tindex);
for tk=1:length(tnumList)
picObj=findobj('UserData',[cardNumList(tk),numList(cardNumList(tk))]);
picObj.UserData=[cardNumList(tk),tnumList(tk)];
picObj.CData=flipud(material.card(tnumList(tk)).C);
end
numList(cardNumList)=tnumList;
end
% @author : slandarer
% gzh : slandarer随笔
end
全部文件获取:
链接:https://pan.baidu.com/s/1NRBkmrTWPu8dM-IZplPOZQ
提取码:zqpf
来源:https://blog.csdn.net/slandarer/article/details/126882165


猜你喜欢
- 具体详细介绍请看下文:在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择。本文使用Apache Jakarta Common
- 在日常开发中经常遇到控件不能随着父容器大小的改变而且自动改变控件的所在位置和大小。以下是实现的代码 /// <summary>
- java读取word文档时,虽然网上介绍了很多插件poi、java2Word、jacob、itext等等,poi无法读取格式(新的API估计
- Cookie和Session都是为了保持用户的访问状态,一方面为了方便业务实现,另一方面为了简化服务端的程序设计,提高访问性能。Cookie
- Spring Boot中可以在配置文件中直接进行数据库配置,spring.datasource.username= rootspring.d
- Android开发中,难免会遇到需要加解密一些数据内容存到本地文件、或者通过网络传输到其他服务器和设备的问题,但并不是使用了加密就绝对安全了
- 本文实例讲述了Android开发使用HttpURLConnection进行网络编程。分享给大家供大家参考,具体如下:——HttpURLCon
- Android setButtonDrawable()的兼容问题解决办法setButtonDrawable()的兼容问题API1
- 前言上一篇通过clusterservice对cluster做了一个简单的概述, 应该能够给大家一个初步认识。本篇将对cluster的代码组成
- 此例子,用于说明如何在Java中对“注解 Annotation”的定义、使用和解析的操作。注解一般用于自定义开发框架中,至于为什么使用,此处
- 题目一 解法/** * Definition for a binary tree node. * public class Tre
- 一、下载rocketmq对应版本源码修改消息存储路径需要修改rocketmq源码,因为rocketmq取的默认路径是user.home路径,
- 前言这篇文章主要介绍Spring Boot的统一功能处理模块,也是AOP的实战环节。1.用户登录权限效验在学习Spring AOP之前,用户
- public static IPAddress GetHostIP(){ &nbs
- 一、对AOP的初印象首先先给出一段比较专业的术语(来自百度):在软件业,AOP为Aspect Oriented Programming的缩写
- 注意:要保证已经有Node类和单链表的初始化,这样才能调用反转方法并显示结果。方法如下://Node<T>指泛型结
- 今天在APP中增加一个添加项目的功能,项目的主键为整数,要让它自增长。既然要自增长,那么在代码里面就不用给id字段赋值。但是调试的时候发现不
- 本文描述了TCP协议,首先简单介绍了TCP完成了一些什么功能;介绍了TCP报文格式,以及典型报文的数据格式;接着从链路控制和数据传输两个方面
- Control.Invoke 方法 (Delegate) :在拥有此控件的基础窗口句柄的线程上执行指定的委托。Control.BeginIn
- 由于Android课程项目需要,特地查阅了okHttp的使用,发现网上找的大多和自己的需求不一样。所以就着团队项目需要,自己简单封装了一个o