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