新增小游戏:战略井字棋
This commit is contained in:
@@ -531,6 +531,8 @@ return{
|
|||||||
p15="15 Puzzle",
|
p15="15 Puzzle",
|
||||||
schulte_G="Schulte Grid",
|
schulte_G="Schulte Grid",
|
||||||
pong="Pong",
|
pong="Pong",
|
||||||
|
AtoZ="A to Z",
|
||||||
|
UTTT="Ultimate Tic-Tac-Toe",
|
||||||
},
|
},
|
||||||
p15={
|
p15={
|
||||||
reset="Shuffle",
|
reset="Shuffle",
|
||||||
|
|||||||
@@ -530,6 +530,8 @@ return{
|
|||||||
p15="15 Puzzle",
|
p15="15 Puzzle",
|
||||||
schulte_G="Grille de Schulte",
|
schulte_G="Grille de Schulte",
|
||||||
pong="Pong",
|
pong="Pong",
|
||||||
|
-- AtoZ="A to Z",
|
||||||
|
-- UTTT="Ultimate Tic-Tac-Toe",
|
||||||
},
|
},
|
||||||
p15={
|
p15={
|
||||||
reset="Réinitialiser",
|
reset="Réinitialiser",
|
||||||
|
|||||||
@@ -535,6 +535,8 @@ return{
|
|||||||
p15="Puzzle-15",
|
p15="Puzzle-15",
|
||||||
schulte_G="Grilla Schulte",
|
schulte_G="Grilla Schulte",
|
||||||
pong="Pong",
|
pong="Pong",
|
||||||
|
-- AtoZ="A to Z",
|
||||||
|
-- UTTT="Ultimate Tic-Tac-Toe",
|
||||||
},
|
},
|
||||||
p15={
|
p15={
|
||||||
reset="Mezclar",
|
reset="Mezclar",
|
||||||
|
|||||||
@@ -463,11 +463,6 @@ return{
|
|||||||
b3b="^^",
|
b3b="^^",
|
||||||
pc="#<>#",
|
pc="#<>#",
|
||||||
},
|
},
|
||||||
minigame={
|
|
||||||
p15="15 Puzzle",
|
|
||||||
schulte_G="Schulte Grid",
|
|
||||||
pong="Pong",
|
|
||||||
},
|
|
||||||
p15={
|
p15={
|
||||||
reset="!@#$%",
|
reset="!@#$%",
|
||||||
color="~~~",
|
color="~~~",
|
||||||
|
|||||||
@@ -534,6 +534,7 @@ return{
|
|||||||
schulte_G="舒尔特方格",
|
schulte_G="舒尔特方格",
|
||||||
pong="Pong",
|
pong="Pong",
|
||||||
AtoZ="A to Z",
|
AtoZ="A to Z",
|
||||||
|
UTTT="战略井字棋",
|
||||||
},
|
},
|
||||||
p15={
|
p15={
|
||||||
reset="打乱",
|
reset="打乱",
|
||||||
@@ -558,6 +559,9 @@ return{
|
|||||||
keyboard="键盘",
|
keyboard="键盘",
|
||||||
reset="重置",
|
reset="重置",
|
||||||
},
|
},
|
||||||
|
UTTT={
|
||||||
|
reset="重置",
|
||||||
|
},
|
||||||
savedata={
|
savedata={
|
||||||
exportUnlock="导出地图进度",
|
exportUnlock="导出地图进度",
|
||||||
exportData="导出统计数据",
|
exportData="导出统计数据",
|
||||||
|
|||||||
@@ -121,6 +121,8 @@ return{
|
|||||||
p15="数字华容道",
|
p15="数字华容道",
|
||||||
schulte_G="舒尔特方格",
|
schulte_G="舒尔特方格",
|
||||||
pong="弹球",
|
pong="弹球",
|
||||||
|
AtoZ="打字游戏",
|
||||||
|
UTTT="战略井字棋",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
modes={
|
modes={
|
||||||
|
|||||||
246
parts/scenes/UTTT.lua
Normal file
246
parts/scenes/UTTT.lua
Normal file
@@ -0,0 +1,246 @@
|
|||||||
|
local gc=love.graphics
|
||||||
|
local int=math.floor
|
||||||
|
local Timer=love.timer.getTime
|
||||||
|
|
||||||
|
local lines={
|
||||||
|
{1,2,3},
|
||||||
|
{4,5,6},
|
||||||
|
{7,8,9},
|
||||||
|
{1,4,7},
|
||||||
|
{2,5,8},
|
||||||
|
{3,6,9},
|
||||||
|
{1,5,9},
|
||||||
|
{3,5,7},
|
||||||
|
}
|
||||||
|
|
||||||
|
local board={{},{},{},{},{},{},{},{},{}}
|
||||||
|
local score={}
|
||||||
|
|
||||||
|
local lastX,lastx
|
||||||
|
local curX,curx
|
||||||
|
local round
|
||||||
|
local target
|
||||||
|
local placeTime
|
||||||
|
local gameover
|
||||||
|
|
||||||
|
local function restart()
|
||||||
|
lastX,lastx=false,false
|
||||||
|
curX,curx=nil
|
||||||
|
round=0
|
||||||
|
target=false
|
||||||
|
placeTime=Timer()
|
||||||
|
gameover=false
|
||||||
|
for X=1,9 do
|
||||||
|
score[X]=false
|
||||||
|
for x=1,9 do
|
||||||
|
board[X][x]=false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function checkBoard(b,p)
|
||||||
|
for i=1,8 do
|
||||||
|
for j=1,3 do
|
||||||
|
if b[lines[i][j]]~=p then
|
||||||
|
goto nextLine
|
||||||
|
end
|
||||||
|
end
|
||||||
|
do return true end
|
||||||
|
::nextLine::
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function place(X,x)
|
||||||
|
board[X][x]=round
|
||||||
|
lastX,lastx=X,x
|
||||||
|
curX,curx=nil
|
||||||
|
placeTime=Timer()
|
||||||
|
if checkBoard(board[X],round)then
|
||||||
|
score[X]=round
|
||||||
|
if checkBoard(score,round)then
|
||||||
|
gameover=round
|
||||||
|
return
|
||||||
|
else
|
||||||
|
for i=1,9 do
|
||||||
|
if not score[i]then
|
||||||
|
goto continueGame
|
||||||
|
end
|
||||||
|
end
|
||||||
|
gameover=true
|
||||||
|
do return end
|
||||||
|
::continueGame::
|
||||||
|
end
|
||||||
|
else
|
||||||
|
for i=1,9 do
|
||||||
|
if not board[X][i]then
|
||||||
|
goto continueGame
|
||||||
|
end
|
||||||
|
end
|
||||||
|
score[X]=true
|
||||||
|
::continueGame::
|
||||||
|
end
|
||||||
|
if score[x]then
|
||||||
|
target=false
|
||||||
|
else
|
||||||
|
target=x
|
||||||
|
end
|
||||||
|
round=1-round
|
||||||
|
end
|
||||||
|
|
||||||
|
function sceneInit.UTTT()
|
||||||
|
restart()
|
||||||
|
BG.set("bg2")
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function Pnt.UTTT()
|
||||||
|
gc.push("transform")
|
||||||
|
--origin pos:0,140; scale:4
|
||||||
|
gc.translate(280,0)
|
||||||
|
gc.scale(8)
|
||||||
|
|
||||||
|
--Draw board
|
||||||
|
gc.setColor(0,0,0,.4)
|
||||||
|
gc.rectangle("fill",0,0,90,90)
|
||||||
|
|
||||||
|
--Draw target area
|
||||||
|
gc.setColor(1,1,1,math.sin((Timer()-placeTime)*5)/5+.2)
|
||||||
|
if target then
|
||||||
|
gc.rectangle("fill",(target-1)%3*30,int((target-1)/3)*30,30,30)
|
||||||
|
else
|
||||||
|
gc.rectangle("fill",0,0,90,90)
|
||||||
|
end
|
||||||
|
|
||||||
|
--Draw cursor
|
||||||
|
if curX then
|
||||||
|
gc.setColor(1,1,1,.3)
|
||||||
|
gc.rectangle("fill",(curX-1)%3*30+(curx-1)%3*10-.5,int((curX-1)/3)*30+int((curx-1)/3)*10-.5,11,11)
|
||||||
|
end
|
||||||
|
|
||||||
|
gc.setLineWidth(.8)
|
||||||
|
for X=1,9 do
|
||||||
|
if score[X]then
|
||||||
|
if score[X]==0 then
|
||||||
|
gc.setColor(.5,0,0)
|
||||||
|
elseif score[X]==1 then
|
||||||
|
gc.setColor(0,0,.5)
|
||||||
|
else
|
||||||
|
gc.setColor(.5,.5,.5)
|
||||||
|
end
|
||||||
|
gc.rectangle("fill",(X-1)%3*30,int((X-1)/3)*30,30,30)
|
||||||
|
end
|
||||||
|
for x=1,9 do
|
||||||
|
local c=board[X][x]
|
||||||
|
if c then
|
||||||
|
if c==0 then
|
||||||
|
gc.setColor(1,.2,.2)
|
||||||
|
gc.circle(
|
||||||
|
"line",
|
||||||
|
5+(X-1)%3*30+(x-1)%3*10,
|
||||||
|
5+int((X-1)/3)*30+int((x-1)/3)*10,
|
||||||
|
3.5
|
||||||
|
)
|
||||||
|
else
|
||||||
|
gc.setColor(.3,.3,1)
|
||||||
|
gc.line(
|
||||||
|
2+(X-1)%3*30+(x-1)%3*10,
|
||||||
|
2+int((X-1)/3)*30+int((x-1)/3)*10,
|
||||||
|
8+(X-1)%3*30+(x-1)%3*10,
|
||||||
|
8+int((X-1)/3)*30+int((x-1)/3)*10
|
||||||
|
)
|
||||||
|
gc.line(
|
||||||
|
2+(X-1)%3*30+(x-1)%3*10,
|
||||||
|
8+int((X-1)/3)*30+int((x-1)/3)*10,
|
||||||
|
8+(X-1)%3*30+(x-1)%3*10,
|
||||||
|
2+int((X-1)/3)*30+int((x-1)/3)*10
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--Draw board line
|
||||||
|
gc.setLineWidth(.8)
|
||||||
|
for x=0,9 do
|
||||||
|
gc.setColor(1,1,1,x%3==0 and 1 or .3)
|
||||||
|
gc.line(10*x,0,10*x,90)
|
||||||
|
gc.line(0,10*x,90,10*x)
|
||||||
|
end
|
||||||
|
|
||||||
|
--Draw last pos
|
||||||
|
if lastX then
|
||||||
|
gc.setColor(.5,1,.4,.8)
|
||||||
|
local r=.5+.5*math.sin(Timer()*6.26)
|
||||||
|
gc.rectangle("line",(lastX-1)%3*30+(lastx-1)%3*10-r,int((lastX-1)/3)*30+int((lastx-1)/3)*10-r,10+2*r,10+2*r)
|
||||||
|
end
|
||||||
|
gc.pop()
|
||||||
|
|
||||||
|
if gameover then
|
||||||
|
--Draw result
|
||||||
|
setFont(60)
|
||||||
|
if gameover==0 then
|
||||||
|
gc.setColor(1,.6,.6)
|
||||||
|
mStr("RED\nWON",1140,200)
|
||||||
|
elseif gameover==1 then
|
||||||
|
gc.setColor(.6,.6,1)
|
||||||
|
mStr("BLUE\nWON",1140,200)
|
||||||
|
else
|
||||||
|
gc.setColor(.8,.8,.8)
|
||||||
|
mStr("TIE",1140,240)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
--Draw current round mark
|
||||||
|
gc.setColor(.8,.8,.8,.8)
|
||||||
|
gc.rectangle("fill",80,80,160,160)
|
||||||
|
gc.setColor(1,1,1)
|
||||||
|
gc.setLineWidth(6)
|
||||||
|
gc.rectangle("line",80,80,160,160)
|
||||||
|
|
||||||
|
gc.setLineWidth(10)
|
||||||
|
if round==0 then
|
||||||
|
gc.setColor(1,0,0)
|
||||||
|
gc.circle("line",160,160,50)
|
||||||
|
else
|
||||||
|
gc.setColor(0,0,1)
|
||||||
|
gc.line(160-45,160-45,160+45,160+45)
|
||||||
|
gc.line(160-45,160+45,160+45,160-45)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function touchDown.UTTT(_,x,y)
|
||||||
|
mouseMove.UTTT(x,y)
|
||||||
|
end
|
||||||
|
|
||||||
|
function touchMove.UTTT(_,x,y)
|
||||||
|
mouseMove.UTTT(x,y)
|
||||||
|
end
|
||||||
|
|
||||||
|
function touchUp.UTTT(_,x,y)
|
||||||
|
mouseDown.UTTT(x,y)
|
||||||
|
end
|
||||||
|
|
||||||
|
function mouseMove.UTTT(x,y)
|
||||||
|
x,y=int((x-280)/80),int(y/80)
|
||||||
|
curX,curx=int(x/3)+int(y/3)*3+1,x%3+y%3*3+1
|
||||||
|
if
|
||||||
|
curX<1 or curX>9 or
|
||||||
|
curx<1 or curx>9 or
|
||||||
|
score[curX]or
|
||||||
|
not(target==curX or not target)or
|
||||||
|
board[curX][curx]or
|
||||||
|
gameover
|
||||||
|
then
|
||||||
|
curX,curx=nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function mouseDown.UTTT(x,y)
|
||||||
|
mouseMove.UTTT(x,y)
|
||||||
|
if curX then place(curX,curx)end
|
||||||
|
end
|
||||||
|
|
||||||
|
WIDGET.init("UTTT",{
|
||||||
|
WIDGET.newButton({name="reset",x=1140,y=540,w=170,h=80,font=40,color="lGreen",code=restart}),
|
||||||
|
WIDGET.newButton({name="back",x=1140,y=640,w=170,h=80,font=40,code=WIDGET.lnk_BACK}),
|
||||||
|
})
|
||||||
@@ -7,5 +7,6 @@ WIDGET.init("minigame",{
|
|||||||
WIDGET.newButton({name="schulte_G", x=640, y=250,w=350,h=120,font=40,code=WIDGET.lnk_goScene("schulte_G")}),
|
WIDGET.newButton({name="schulte_G", x=640, y=250,w=350,h=120,font=40,code=WIDGET.lnk_goScene("schulte_G")}),
|
||||||
WIDGET.newButton({name="pong", x=1040, y=250,w=350,h=120,font=40,code=WIDGET.lnk_goScene("pong")}),
|
WIDGET.newButton({name="pong", x=1040, y=250,w=350,h=120,font=40,code=WIDGET.lnk_goScene("pong")}),
|
||||||
WIDGET.newButton({name="AtoZ", x=240, y=400,w=350,h=120,font=40,code=WIDGET.lnk_goScene("AtoZ")}),
|
WIDGET.newButton({name="AtoZ", x=240, y=400,w=350,h=120,font=40,code=WIDGET.lnk_goScene("AtoZ")}),
|
||||||
|
WIDGET.newButton({name="UTTT", x=640, y=400,w=350,h=120,font=30,code=WIDGET.lnk_goScene("UTTT")}),
|
||||||
WIDGET.newButton({name="back", x=1140, y=640,w=170,h=80,font=40,code=WIDGET.lnk_BACK}),
|
WIDGET.newButton({name="back", x=1140, y=640,w=170,h=80,font=40,code=WIDGET.lnk_BACK}),
|
||||||
})
|
})
|
||||||
Reference in New Issue
Block a user