0,ÆPYö…m¥e™Æ™u¥ÆÀ?ıßİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİÿßİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİıßİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİıßİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİÿÿİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ 333 ĞĞİİİİ 30 ĞĞİİİİ 00330 ĞĞİİİİ 03 ĞĞİİİİ 00 ĞĞİİİİ 00 Ğ33Ğİİİİ  Ğ0030Ğİİİİ 00 ĞĞİİİİ 0000 03Ğ0000Ğİİİİ 0000 Ğ03Ğİİİİ 0000 Ğ03Ğİİİİ 0000 Ğ03Ğİİİİ 0000 03Ğ0000Ğİİİİ 00 ĞĞİİİİ  Ğ0030Ğİİİİ 00 Ğ33Ğİİİİ 00 ĞĞİİİİ 03 ĞĞİİİİ 00330 ĞĞİİİİ 30 ĞĞİİİİ 333 ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİĞİİİİ ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ  0333ĞĞİİİİ  03ĞĞİİİİ  33ĞĞİİİİ  0300ĞĞİİİİ  00ĞĞİİİİ 033 00ĞĞİİİİ 3 0000ĞĞİİİİ 0000 00ĞĞİİİİ  ĞĞİİİİ 30 ĞĞİİİİ 30 ĞĞİİİİ 30 ĞĞİİİİ  ĞĞİİİİ 0000 00ĞĞİİİİ 3 0000ĞĞİİİİ 033 00ĞĞİİİİ  00ĞĞİİİİ  0300ĞĞİİİİ  33ĞĞİİİİ  03ĞĞİİİİ  0333ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİĞİİİİ ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ 3 ĞĞİİİİ 00 ĞĞİİİİ 00 ĞĞİİİİ 00 ĞĞİİİİ 3 ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ ĞĞİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİ Ğİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİí -- title: Batchan's Game -- author: diuguh -- desc: Tic Tac Toe variation -- site: github.com/rodigu -- license: GNU -- version: 0.1 -- script: lua -- consts BASE_R=10 CLR0=1 CLR1=3 RATS={1,.5,.25} PAD=10 WID=240 HEI=136 SQ=2*BASE_R+PAD/1.5 CURP=0 SPAD=1.8*BASE_R*RATS[1] ID=1 CRCS={} DOM={ {{},{},{}}, {{},{},{}}, {{},{},{}} } for j,y in ipairs(DOM) do for i,x in ipairs(y) do DOM[j][i].pn=0 DOM[j][i].r=-1 end end STRT_POS={ {x=SPAD,y=SPAD}, {x=WID-SPAD,y=SPAD} } holding=-1 function grid() local sq=SQ local cX=WID/2 local cY=HEI/2 -- vertical lines rect(cX-sq/2,cY-sq*1.5,1,3*sq,13) rect(cX+sq/2,cY-sq*1.5,1,3*sq,13) -- horizontal lines rect(cX-sq*1.5,cY-sq/2,3*sq,1,13) rect(cX-sq*1.5,cY+sq/2,3*sq,1,13) end function genCirc(r,pos,clr,pn) local crc={} crc.pn=pn crc.id=ID CRCS[ID]=crc ID=ID+1 crc.x,crc.y=pos.x,pos.y crc.lockx=pos.x crc.locky=pos.y crc.clickable=true crc.r=r crc.clr=clr crc.stt=0 crc.ani=0 crc.draw=function() local rad=crc.r if crc.ani~=0 then rad=rad+math.sin((time()-crc.ani)*.01)*2 end circb(crc.x,crc.y,rad,crc.clr+crc.stt) circb(crc.x,crc.y,rad*.8,crc.clr+crc.stt) if CURP+1==crc.pn then handleMouse(crc) end end return crc end function collideCirc(x,y,this) if (x-this.x)^2+(y-this.y)^2<=this.r^2 then return true end return false end function handleMouse(this) local x,y,l = mouse() if holding~=this.id and holding~=-1 then return end local didLock=lockCrc() if didLock then CURP=((CURP+1)%2) end if this.isClicked and not didLock and this.clickable then this.x=x this.y=y else holding=-1 this.stt=0 this.ani=0 this.x=this.lockx this.y=this.locky if not this.clickable then return end end if collideCirc(x,y,this) then this.isClicked=l if l then holding=this.id end if this.ani==0 and holding==this.id then this.ani=time() this.stt=1 end end end function getHold() for i,v in ipairs(CRCS) do if CRCS[i].id==holding then return CRCS[i] end end return false end function lockCrc() local _,_,l=mouse() local crc=getHold() local ps=rectSelect() if not l and holding~=-1 and ps then local dp=DOM[2+ps.b][2+ps.a] if dp.pn~=crc.pn and crc.r>dp.r then DOM[2+ps.b][2+ps.a]={pn=crc.pn,r=crc.r} crc.lockx=ps.x crc.locky=ps.y crc.clickable=false return true end end return false end function genPlayer(num) local x=STRT_POS[num].x local y=STRT_POS[num].y local p={} p.n=num local cy=y p.crcs={} if num==1 then p.c=1 else p.c=3 end for _,R in ipairs(RATS) do local r=R*BASE_R p.crcs[#p.crcs+1]=genCirc(r,{x=x,y=cy},p.c,p.n) cy=cy+r*2.5 p.crcs[#p.crcs+1]=genCirc(r,{x=x,y=cy},p.c,p.n) cy=cy+r*RATS[1]*2.4 end p.draw=function() for _,crc in ipairs(p.crcs) do crc.draw() end end return p end local tst1=genPlayer(1) local tst2=genPlayer(2) -- return pos of which rect the mouse is in function rectSelect() local x,y,l=mouse() for a=-1,1 do for b=-1,1 do local cx=WID/2+SQ*a local cy=HEI/2+SQ*b if x>cx-SQ/2 and xcy-SQ/2 and y