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
原创粉丝点击