MATLAB版2048
来源:互联网 发布:怎么删除软件 编辑:程序博客网 时间:2024/05/16 17:38
思路:
界面,通过按钮组合实现4*4单元格
数据合并,定义一个通用函数处理,原数组进行翻转或旋转处理
操作:
上、下、左、右,移动
Esc,重新开始
function game2048()% figure句柄h = figure('Name', '2048',... 'NumberTitle', 'off',... 'Menubar', 'none',... 'Position', [450 200 400 440],... 'KeyPressFcn', @keyevent);% 4*4格子,用按钮表示for m =1: 4 for n = 1: 4 uicontrol('Style', 'pushbutton',... 'String', '',... 'FontSize', 20,... 'Position', [(m-1)*80+40 (n-1)*80+40 80 80]); endendhb = findall(gcf, 'Style', 'pushbutton');pbcolor = get(hb(1), 'BackgroundColor');numcolor = [0.11 0.23 0.57];% 分数texthscoretext = uicontrol('Style', 'text',... 'BackgroundColor', get(h, 'Color'),... 'String', '0',... 'FontSize', 20,... 'Position', [100 385 200 30]);% 初始化[mymatrix, score] = gameini();%% 初始化% 格子数据初始化,除随机两数外,其余为0(不显示)% 分数初始化 function [mymatrix, score] = gameini() set(hb, 'String', '') set(hb, 'BackgroundColor', pbcolor) mymatrix = zeros(4, 4); inxrandi = randi(16); mymatrix(inxrandi) = randi(2) * 2; set(hb(inxrandi), 'String', mymatrix(inxrandi)); set(hb(inxrandi), 'BackgroundColor', mod(log2(mymatrix(inxrandi))*numcolor,1)); score = 0; set(hscoretext, 'String', '0') end%% 向右滑动,进行数据合并操作 function moveevent() for i = 1: 4 myarray = mymatrix(i, :); myarray(myarray==0) = []; for j = 1: (length(myarray)-1) if myarray(j) == myarray(j+1) myarray(j) = myarray(j) + myarray(j+1); myarray(j+1) = 0; score = score + myarray(j); end end myarray(myarray==0) = []; myarray((length(myarray)+1): 4) = 0; mymatrix(i, :) = myarray; end end%% 按键检测% 判断按键,并进行相应操作(数据合并,分数更新),注意矩阵变化% 随机初始化一个新的数据% 判断游戏是否结束 function keyevent(~, event) mymatrixtemp = mymatrix; switch event.Key case 'uparrow' mymatrix = mymatrix'; moveevent(); mymatrix = mymatrix'; case 'leftarrow' mymatrix = mymatrix(:, end:-1:1); moveevent(); mymatrix = mymatrix(:, end:-1:1); case 'downarrow' mymatrix = mymatrix'; mymatrix = mymatrix(:, end:-1:1); moveevent(); mymatrix = mymatrix(:, end:-1:1); mymatrix = mymatrix'; case 'rightarrow' moveevent(); case 'escape' [mymatrix, score] = gameini(); return otherwise return end if isempty(find(mymatrixtemp ~= mymatrix, 1)) return end set(hscoretext, 'String', score) inx = find(mymatrix == 0); inxrandi = randi(length(inx)); mymatrix(inx(inxrandi)) = randi(2) * 2; for i = 1: 16 if mymatrix(i) == 0 set(hb(i), 'String', ''); set(hb(i), 'BackgroundColor', pbcolor) else set(hb(i), 'String', mymatrix(i)); set(hb(i), 'BackgroundColor', mod(log2(mymatrix(i))*numcolor,1)); end end if isempty(find(mymatrix == 0, 1)) mymatrixtemp = [ones(1,6); ones(4,1) mymatrix ones(4,1); ones(1,6)]; for i = 2: 5 for j = 2: 5 if mymatrixtemp(i,j)==mymatrixtemp(i+1,j)... || mymatrixtemp(i,j)==mymatrixtemp(i-1,j)... || mymatrixtemp(i,j)==mymatrixtemp(i,j+1)... || mymatrixtemp(i,j)==mymatrixtemp(i,j-1) return end end end set(hscoretext, 'String', 'GAME OVER') end endend
0 0
- MATLAB版2048
- 【matlab编程】Matlab版扫雷
- Matlab版《卡农》《最炫名族风》
- 双线性插值matlab版
- adabost matlab 版
- MATLAB版贪吃蛇
- MATLAB版成都
- matlab
- Matlab
- MATLAB
- matlab
- matlab
- matlab
- matlab
- MATLAB
- matlab
- Matlab
- MATLAB
- 几句代码实现轻量级可拖动button
- mysql查询成绩排名显示-两种排名方式
- android之LinearLayout
- 误写zlib带来的问题
- Unity 打包模型的方法
- MATLAB版2048
- Android 系列 3.12保持你的应用程序snappy与StrictMode
- [UIDeviceRGBColor length]: unrecognized selector sent to instance
- mac中程序死机/关闭程序方法(含terminal)
- Toolbar动态隐藏右侧按钮
- Unity 中的坐标系
- 名企笔试:腾讯2016研发工程师笔试题(赛车问题)
- mms8916 lk阶段ADC
- 用友uap nc65开发 二次登陆节点打开控制校验