天天看点

数字华容道lua

数字华容道lua
数字华容道lua

--益智数字华容道

--韩永旗制作

--bug及建议

--待完善

--关闭,刷新,关卡,数字1-100,关卡,步数,时间

--211,212,214,(2*i,2*i+1),203,205,207,

local ui={"7106878631137095586","7106878631137095586_"}

local mid={10948,10946,10947,10379}

local A={[1]={{},{},{},"0xE040FB"},

         [2]={{},{},{},"0x3D5AFE"},

         [3]={{720,240},{65,20,150,200},{},"0xFFE57F"},

         [4]={{720,180},{45,0,100,160},{20,20,140,125},"0xFFFF00"},

         [5]={{720,144},{35,0,100,140},{10,20,120,100},"0xFF6E40"},

         [6]={{720,120},{30,0,90,120},{10,10,100,85},"0xFF1744"},

         [7]={{721,103},{30,0,90,100},{10,10,90,75},"0x76FF03"},

         [8]={{720,90},{25,0,60,80},{10,10,75,65},"0xD500F9"},

         [9]={{720,80},{25,5,50,65},{10,10,70,55},"0x64DD17"},

         [10]={{720,72},{15,5,60,60},{10,10,60,50},"0xF50057"},   

         [11]={{},{},{},"0xF57F17"},

         }   

       --[[

          {"0xFFEFD7",40,10,120,2},

          {"0xFFE57F",40,10,120,4},

          {"0xFFFF00",40,10,120,8},

          {"0xFF6E40",20,20,100,16},

          {"0xF57F17",20,20,100,32},

          {"0xFF1744",20,20,100,64},

          {"0xD500F9",10,25,80,128},

          {"0x3D5AFE",10,25,80,256},

          {"0x00E5FF",10,25,80,512},

          {"0x76FF03",10,35,60,1024},

          {"0xE77B17",10,35,60,2048},

          {"0xE040FB",10,35,60,4096},

          {"0xF50057",10,35,60,8192},

          {"0x64DD17",10,45,45,16384},

          {"0xF57F17",10,45,45,32768},

          {"0x3D5AFE",10,45,45,65536},

    ]]   

local Pds={}

local n=0

local A0={}

local num={}

local Pd={}

local nl=0

local n=0

local s0=0

local time=0

local c0=0

--界面显示

--界面排版

local function addui(p)

  num=Pd[p][2]

  n=Pd[p][1][7]

 -- print(table.concat(num))

    --设置玩家的元件的大小

    Coustomui:setSize(p, ui[1],ui[2]..(1), A[n][1][1], A[n][1][1])

    local strt=n.."×"..n

 Trigger.UI:setText(p, ui[1],ui[2]..203,strt)

 Trigger.UI:setText(p, ui[1],ui[2]..205,Pd[p][1][5])

 Trigger.UI:setText(p, ui[1],ui[2]..207,Pd[p][1][4])

  for i=1,100 do

     if i<=n*n then

     Trigger.UI:showElement(p, ui[1],ui[2]..(2*i))

     if num[i]==0 then Trigger.UI:hideElement(p, ui[1],ui[2]..(2*i)) 

     elseif num[i]>0 then

     Coustomui:setSize(p, ui[1],ui[2]..(2*i), A[n][1][2], A[n][1][2])  

     local x0,y0=A[n][1][2]*((i-1)%n),A[n][1][2]*(math.floor((i-1)/n)) 

     Trigger.UI:setPosition(p, ui[1],ui[2]..(2*i),x0,y0)

     Trigger.UI:setText(p, ui[1],ui[2]..(2*i+1),num[i])

      local c0=math.floor((num[i]-1)/n)+1

      Trigger.UI:setColor(p, ui[1],ui[2]..(2*i+1),A[c0][4])

     if num[i]<10 then

     Trigger.UI:setPosition(p, ui[1],ui[2]..(2*i+1),A[n][2][1],A[n][2][2])

     Coustomui:setSize(p, ui[1],ui[2]..(2*i+1), A[n][2][3], A[n][2][3])

     Trigger.UI:setFontSize(p, ui[1],ui[2]..(2*i+1),A[n][2][4])

     else    

     Trigger.UI:setPosition(p, ui[1],ui[2]..(2*i+1),A[n][3][1],A[n][3][2])

     Coustomui:setSize(p, ui[1],ui[2]..(2*i+1), A[n][3][3], A[n][3][3])

     Trigger.UI:setFontSize(p, ui[1],ui[2]..(2*i+1),A[n][3][4])

     end

     end    

    else  

   Trigger.UI:hideElement(p, ui[1],ui[2]..(2*i))

    end

  end

end

--获胜条件判断检测

local function chackwin(p)

  num=Pd[p][2]

  nl=Pd[p][1][6] 

   name=Pd[p][1][2]

  num=Pd[p][2]

  n=Pd[p][1][7]

  s0=Pd[p][1][5]

  time=Pd[p][1][4]

 local m=0

  if num[#num]~=0 then return 0

    else

   for k,v in ipairs(num) do

    if (k~=v)and(k<#num) then return 0  else m=m+1  end

   end

  end

   if m==#num then 

      Player:playMusic(mid[4],100,1,false)

   Chat:sendSystemMsg("玩家"..name.."拼图"..n.."*"..n.."已完成!\n步数:"..s0.."\n用时:"..time)

    print("已完成挑战")

    return 1

  end   

 end

--删除随机获胜出题

local function add3(n,A0)

 local m=0

 for k,v in ipairs(A0)  do if k~=v then return 1 else m=m+1   end  end

   if m==#A0 then return 0 end   

 end

--检测有无解法

local function add2(n,A0)

  local n0=0

  for k,v in ipairs(A0) do

    for i=1,k do 

      if v<A0[i] then n0=n0+1 end

    end

  end

  return (n*(n+1)+n0-1)%2  

end

--打乱

local function add1(n)

local n=n

  A0={}

  for i=1,n*n-1 do A0[i]=i end

   -- math.randomseed(os.time())

    for i = 1, #A0 do

        local j = math.random(i,#A0)

        if j > i then

            A0[i],A0[j] = A0[j],A0[i]

        end

    end

  if add2(n,A0)~=1 then  add1(n) else if add3(n,A0)==0 then add1(n) else A0[#A0+1]=0 return A0  end end

 end

 --拷贝表格

 function tableCopy(tb)

    local copy = {}

    for k, v in ipairs(tb) do

        copy[k] = v

    end

    return copy

  end

--生成随机题目

local function add(p)  

  n=Pd[p][1][7]

  local v0= add1(n)

 -- print(type(v0))

if type(v0)==nil or v0==nil or v0=={}  then add(p) return end

 Pd[p][2] = {}  

 for k, v in ipairs(v0) do

      Pd[p][2][k] = v

 end

 Pd[p][1][6]=n*n

 Pd[p][1][5]=0

 --print(Pd)

 addui(p)    

   Chat:sendSystemMsg("已重新生成",p)

   Player:playMusic(p,mid[1],100,1,false)

end

--触屏,上下左右,重置 难度选择2*2.-10*10

local function clickmove(p,uistr)

  num=Pd[p][2]

  nl=Pd[p][1][6] 

   name=Pd[p][1][2]

  num=Pd[p][2]

  n=Pd[p][1][7]

  s0=Pd[p][1][5]

  time=Pd[p][1][4]

  if math.abs(uistr-nl)==n or (math.abs(uistr-nl)==1 and math.floor((uistr-1)/n)==math.floor((nl-1)/n)) then

  num[uistr],num[nl],nl=num[nl],num[uistr],uistr

  Pd[p][2],Pd[p][1][6]=num,uistr

    Pd[p][1][5]=Pd[p][1][5]+1

    addui(p)    

   if chackwin(p) ==1 then  threadpool:wait(1) add(p) return end

    Player:playMusic(p,mid[2],100,1,false)  

  else

  Player:playMusic(p,mid[3],100,1,false)

 -- print("当前无法移动")

   return

  end

end

local function strad1(str)  for j=1,#str do  if string.sub(str,j,j) =="_"  then  return  (tonumber(string.sub(str,j+1,#str))/2)  end  end end

local function funcevent(event)

  local p,uid,uiid=event.eventobjid,event.CustomUI,event.btnelenemt

  num,nl,n=Pd[p][2],Pd[p][1][6],Pd[p][1][7]

--print(uiid)

  if uid==ui[1] then     

    local uistr=strad1(uiid)

  --  print(uistr)

    if uiid==ui[2]..212 then    add(p)

    elseif uiid==ui[2]..211 then 

    Trigger.UI:hideElement(p, ui[1],ui[2]..202) 

    Trigger.UI:hideElement(p, ui[1],ui[2]..1) 

    Trigger.UI:showElement(p, ui[1],ui[2]..214)

   elseif uiid==ui[2]..214 then 

   Trigger.UI:hideElement(p, ui[1],ui[2]..214) 

  -- Trigger.UI:showElement(p, ui[1],ui[2]..1)

   Trigger.UI:showElement(p, ui[1],ui[2]..216)

    elseif uistr<=100 then clickmove(p,uistr) 

    elseif uistr+0.5>108 and uistr+0.5<=117 then 

  --Player:playMusic(p,mid[1],100,1,false)

     if uistr+0.5==117 then

       Chat:sendSystemMsg("1.打开数字华容道,点击数字华容道。\n2.选择想挑战的玩法。\n3.看清目标图案,上下左右移动数字。\n4.使其变成按顺序排列的即可。",p)

     else 

     Pd[p][1][7]=uistr+0.5-106

     Trigger.UI:hideElement(p, ui[1],ui[2]..216) 

     Trigger.UI:showElement(p, ui[1],ui[2]..1)

     Trigger.UI:showElement(p, ui[1],ui[2]..202)  

     add(p)

     end

    end

  end

end

  --点击按钮

ScriptSupportEvent:registerEvent([=[UI.Button.Click]=],funcevent)

local function EnterGame(param)

    local p=param.eventobjid 

    local result,name=Player:getNickname(p)

    local result,iconid = Customui:getRoleIcon(p)

   Pd[p]={{p,name,iconid,0,0,0,0},{}}

    Player:notifyGameInfo2Self(p,"欢迎玩家"..name.."来到2048游戏房间")  

    Player:openUIView(p,ui[1])

    Trigger.UI:hideElement(p, ui[1],ui[2]..202) 

    Trigger.UI:hideElement(p, ui[1],ui[2]..1) 

    Trigger.UI:hideElement(p, ui[1],ui[2]..214)   

    Trigger.UI:showElement(p, ui[1],ui[2]..216)   

  end

   --玩家进入游戏

ScriptSupportEvent:registerEvent_NoError([=[Game.AnyPlayer.EnterGame]=], EnterGame)

local function LeaveGame(param)

    local p=param.eventobjid       

   -- setstr(p)   

    --maxscorenum(p)  

 end  

--玩家离开游戏

ScriptSupportEvent:registerEvent_NoError([=[Game.AnyPlayer.LeaveGame]=], LeaveGame)

继续阅读