数字华容道lua

cb4cd4c676d34ba0979427e48341cf7f.jpg

8b2f04e2ae34459180ce538f07040d7f.jpg 

 

--益智数字华容道
--韩永旗制作
--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)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值