mirror of
https://github.com/LDDestroier/CC/
synced 2024-12-24 17:10:29 +00:00
Create pixeltoast-tron.lua
This commit is contained in:
parent
ec6ee3d166
commit
f97493630c
324
pixeltoast-tron.lua
Normal file
324
pixeltoast-tron.lua
Normal file
@ -0,0 +1,324 @@
|
||||
--[[
|
||||
pastebin get jgyepx3g tron
|
||||
std pb jgyepx3g tron
|
||||
--]]
|
||||
|
||||
local isOpen=false
|
||||
for k,v in pairs({"right","left","top","bottom","front","back"}) do
|
||||
if peripheral.getType(v)=="modem" then
|
||||
rednet.open(v)
|
||||
isOpen=true
|
||||
end
|
||||
end
|
||||
if not isOpen then
|
||||
error("no modem attached")
|
||||
end
|
||||
if not term.isColor() then
|
||||
if _CC_VERSION then
|
||||
colors.orange = colors.lightGray
|
||||
colors.blue = colors.lightGray
|
||||
colors.red = colors.white
|
||||
colors.lightBlue = colors.white
|
||||
else
|
||||
colors.gray = colors.black
|
||||
colors.orange = colors.white
|
||||
colors.blue = colors.white
|
||||
colors.red = colors.white
|
||||
colors.lightBlue = colors.white
|
||||
end
|
||||
end
|
||||
|
||||
local Mx,My=term.getSize()
|
||||
local Cx,Cy=math.floor(Mx/2),math.floor(My/2)
|
||||
function maingame()
|
||||
local lang={"Waiting for player",{[0]="^",">","v","<"},{{"|","/","|","\\"},{"/","-","\\","-"},{"|","\\","|","/"},{"\\","-","/","-"}},"You died.","You won."}
|
||||
local board=setmetatable({},{__index=function(s,n) s[n]={} return s[n] end})
|
||||
for l1=99,-99,-1 do
|
||||
board[l1][-99]={"-",3}
|
||||
end
|
||||
for l1=99,-99,-1 do
|
||||
board[l1][99]={"|",3}
|
||||
end
|
||||
for l1=99,-99,-1 do
|
||||
board[-99][l1]={"-",3}
|
||||
end
|
||||
for l1=99,-99,-1 do
|
||||
board[99][l1]={"|",3}
|
||||
end
|
||||
board[100][100]={"/",3}
|
||||
board[100][-100]={"\\",3}
|
||||
board[-100][100]={"/",3}
|
||||
board[-100][-100]={"\\",3}
|
||||
local modem
|
||||
local initheader="TRON:"
|
||||
local pnid
|
||||
local function send(...)
|
||||
rednet.send(pnid,string.sub(textutils.serialize({...}),2,-2))
|
||||
end
|
||||
local function decode(dat)
|
||||
return textutils.unserialize("{"..dat.."}")
|
||||
end
|
||||
local col
|
||||
term.setCursorPos(math.floor(Cx-(#lang[1])/2),Cy)
|
||||
term.setTextColor(colors.orange)
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.clear()
|
||||
term.write(lang[1])
|
||||
rednet.broadcast(initheader.."pingcon")
|
||||
local p1,p2
|
||||
while true do
|
||||
local p={os.pullEvent()}
|
||||
if p[1]=="rednet_message" and p[2]~=os.getComputerID() then
|
||||
if p[3]==initheader.."pingcon" then
|
||||
rednet.send(p[2],initheader.."pongcon")
|
||||
pnid=p[2]
|
||||
col={colors.blue,colors.red,colors.lightBlue}
|
||||
p1={pos={x=2,y=1},dir=0}
|
||||
p2={pos={x=1,y=1},dir=0}
|
||||
break
|
||||
elseif p[3]==initheader.."pongcon" then
|
||||
pnid=p[2]
|
||||
col={colors.red,colors.blue,colors.lightBlue}
|
||||
p1={pos={x=1,y=1},dir=0}
|
||||
p2={pos={x=2,y=1},dir=0}
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.clear()
|
||||
local frs=0
|
||||
local fps=0 -- frame counter (debugging)
|
||||
local function render()
|
||||
local tsv = term.current().setVisible
|
||||
if tsv then tsv(false) end
|
||||
frs=frs+1
|
||||
term.setTextColor(colors.gray)
|
||||
for l1=1,My do
|
||||
term.setCursorPos(1,l1)
|
||||
local pre=p1.pos.x%3
|
||||
if (l1+p1.pos.y)%3==0 then
|
||||
if pre==1 then
|
||||
pre="--"
|
||||
elseif pre==2 then
|
||||
pre="-"
|
||||
else
|
||||
pre=""
|
||||
end
|
||||
term.write(pre..("+--"):rep(math.ceil(Mx/2)))
|
||||
else
|
||||
if pre==1 then
|
||||
pre=" "
|
||||
elseif pre==2 then
|
||||
pre=" "
|
||||
else
|
||||
pre=""
|
||||
end
|
||||
term.write(pre..("| "):rep(math.ceil(Mx/2)))
|
||||
end
|
||||
end
|
||||
term.setTextColor(colors.blue)
|
||||
local num=0
|
||||
for k,v in pairs(board) do
|
||||
for l,y in pairs(v) do
|
||||
if (k-p1.pos.x)+Cx<=Mx and (k-p1.pos.x)+Cx>=1 and (l-p1.pos.y)+Cy<=My and (l-p1.pos.y)+Cy>=1 then
|
||||
term.setTextColor(col[y[2]] or y[2])
|
||||
term.setCursorPos((k-p1.pos.x)+Cx,(l-p1.pos.y)+Cy)
|
||||
term.write(y[1])
|
||||
num=num+1
|
||||
end
|
||||
end
|
||||
end
|
||||
term.setCursorPos(1,1)
|
||||
if col[1]==colors.blue then
|
||||
term.setTextColor(colors.blue)
|
||||
term.write("BLUE")
|
||||
else
|
||||
term.setTextColor(colors.red)
|
||||
term.write("RED")
|
||||
end
|
||||
if tsv then tsv(true) end
|
||||
end
|
||||
local odr={[p1]=p1.dir,[p2]=p2.dir}
|
||||
local function processmove(u)
|
||||
local ccol
|
||||
if u==p1 then
|
||||
ccol=col[1]
|
||||
else
|
||||
ccol=col[2]
|
||||
end
|
||||
term.setTextColor(ccol)
|
||||
if u==p1 and board[u.pos.x][u.pos.y] then
|
||||
send("DIE")
|
||||
term.setCursorPos(Cx,Cy)
|
||||
term.write("x")
|
||||
sleep(2)
|
||||
term.setCursorPos(Cx-math.floor(#lang[4]/2),Cy)
|
||||
term.setTextColor(colors.orange)
|
||||
term.clear()
|
||||
term.write(lang[4])
|
||||
sleep(5)
|
||||
term.setTextColor(colors.white)
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.setCursorPos(1,1)
|
||||
term.clear()
|
||||
error("",0)
|
||||
end
|
||||
if odr[u]~=u.dir then
|
||||
board[u.pos.x][u.pos.y]={lang[3][odr[u]+1][u.dir+1],ccol}
|
||||
end
|
||||
if not board[u.pos.x][u.pos.y] then
|
||||
if u.dir%2==0 then
|
||||
board[u.pos.x][u.pos.y]={"|",ccol}
|
||||
else
|
||||
board[u.pos.x][u.pos.y]={"-",ccol}
|
||||
end
|
||||
end
|
||||
local chr=board[u.pos.x][u.pos.y][1]
|
||||
local shr={x=u.pos.x,y=u.pos.y}
|
||||
if u.dir==0 then
|
||||
u.pos.y=u.pos.y-1
|
||||
elseif u.dir==1 then
|
||||
u.pos.x=u.pos.x+1
|
||||
elseif u.dir==2 then
|
||||
u.pos.y=u.pos.y+1
|
||||
else
|
||||
u.pos.x=u.pos.x-1
|
||||
end
|
||||
odr[u]=u.dir
|
||||
return chr,shr
|
||||
end
|
||||
local function renderchar(u)
|
||||
local ccol
|
||||
if u==p1 then
|
||||
ccol=col[1]
|
||||
term.setCursorPos(Cx,Cy)
|
||||
else
|
||||
ccol=col[2]
|
||||
term.setCursorPos((p2.pos.x-p1.pos.x)+Cx,(p2.pos.y-p1.pos.y)+Cy)
|
||||
end
|
||||
term.setTextColor(ccol)
|
||||
term.write(lang[2][u.dir])
|
||||
end
|
||||
function processturn(p,u)
|
||||
local dirs={[keys.up]=0,[keys.right]=1,[keys.down]=2,[keys.left]=3}
|
||||
if (odr[u]+2)%4~=dirs[p] then
|
||||
u.dir=dirs[p]
|
||||
renderchar(u)
|
||||
if u==p1 then
|
||||
send("ROT",u.dir)
|
||||
end
|
||||
end
|
||||
end
|
||||
render()
|
||||
local move=os.startTimer(0.1)
|
||||
local fct=os.startTimer(1)
|
||||
while true do
|
||||
local p={os.pullEvent()}
|
||||
if p[1]=="key" then
|
||||
if p[2]==keys.up or p[2]==keys.right or p[2]==keys.down or p[2]==keys.left then
|
||||
processturn(p[2],p1)
|
||||
end
|
||||
elseif p[1]=="timer" then
|
||||
if p[2]==move then
|
||||
local ret,ret2=processmove(p1)
|
||||
move=os.startTimer(0.1)
|
||||
send("MOVE",ret2,ret)
|
||||
elseif p[2]==fct then
|
||||
fps=frs
|
||||
frs=0
|
||||
fct=os.startTimer(1)
|
||||
end
|
||||
elseif p[1]=="rednet_message" and p[2]==pnid then
|
||||
local dat=decode(p[3])
|
||||
if dat[1]=="ROT" then
|
||||
p2.dir=dat[2]
|
||||
renderchar(p2)
|
||||
elseif dat[1]=="DIE" then
|
||||
p1.pos=p2.pos
|
||||
render()
|
||||
term.setTextColor(col[2])
|
||||
term.setCursorPos(Cx,Cy)
|
||||
term.write("x")
|
||||
sleep(2)
|
||||
term.setCursorPos(Cx-math.floor(#lang[5]/2),Cy)
|
||||
term.setTextColor(colors.orange)
|
||||
term.clear()
|
||||
term.write(lang[5])
|
||||
sleep(5)
|
||||
term.setTextColor(colors.white)
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.setCursorPos(1,1)
|
||||
term.clear()
|
||||
return
|
||||
elseif dat[1]=="MOVE" then
|
||||
p2.pos=dat[2]
|
||||
board[p2.pos.x][p2.pos.y]={dat[3],col[2]}
|
||||
render()
|
||||
renderchar(p1)
|
||||
renderchar(p2)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local selected=1
|
||||
local function rmain()
|
||||
term.setBackgroundColor(colors.black)
|
||||
term.clear()
|
||||
term.setCursorPos(1,1)
|
||||
term.setTextColor(colors.blue)
|
||||
local txt=" _ _______________ ________ __ _\n/ \\/ _____________\\ / ____ \\ | \\ / |\n\\_/| / / \\ | / / \\ \\ | \\ __/ |\n | | | |\\ ___/ | | | || \\ |\n | | | | \\ \\ | | | || __\\ |\n | | | | \\ \\ \\ \\____/ / | / \\ |\n \\_/ \\_/ \\_/ \\________/ |_/ \\__|"
|
||||
local cnt=1
|
||||
local cnt2=Cx-23
|
||||
for char in string.gmatch(txt,".") do
|
||||
if char~=" " and char~="\n" then
|
||||
term.setCursorPos(cnt2,cnt)
|
||||
term.write(char)
|
||||
elseif char=="\n" then
|
||||
cnt=cnt+1
|
||||
cnt2=Cx-23
|
||||
end
|
||||
cnt2=cnt2+1
|
||||
end
|
||||
local selections={"Multiplayer","Exit"}
|
||||
selected=((selected-1)%(#selections))+1
|
||||
for k,v in pairs(selections) do
|
||||
if k==selected then
|
||||
term.setTextColor(colors.blue)
|
||||
term.setCursorPos(Cx-(math.floor(#v/2)+1),k+10)
|
||||
term.write(">"..v.."<")
|
||||
term.setTextColor(colors.lightBlue)
|
||||
term.setCursorPos(Cx-math.floor(#v/2),k+10)
|
||||
term.write(v)
|
||||
else
|
||||
term.setTextColor(colors.lightBlue)
|
||||
term.setCursorPos(Cx-math.floor(#v/2),k+10)
|
||||
term.write(v)
|
||||
end
|
||||
end
|
||||
end
|
||||
rmain()
|
||||
while true do
|
||||
p={os.pullEvent()}
|
||||
if p[1]=="key" then
|
||||
if p[2]==keys.up then
|
||||
selected=selected-1
|
||||
rmain()
|
||||
elseif p[2]==keys.down then
|
||||
selected=selected+1
|
||||
rmain()
|
||||
elseif p[2]==keys.enter then
|
||||
if selected==1 then
|
||||
a,b=pcall(maingame)
|
||||
if not a and b~="" then
|
||||
error(b,0)
|
||||
end
|
||||
rmain()
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
term.setCursorPos(1,1)
|
||||
term.clear()
|
Loading…
Reference in New Issue
Block a user