129 lines
2.9 KiB
Text
129 lines
2.9 KiB
Text
Load "guilib.ring"
|
|
|
|
#Provide a list to save each button status in numeric readable format
|
|
#0=nothing 1=X 2=O
|
|
lst=[]
|
|
|
|
#Provide onScreen button status and style
|
|
btns=[]
|
|
|
|
#Define who has the turn
|
|
isXTurn=true
|
|
|
|
|
|
app=new qApp
|
|
{
|
|
|
|
frmMain=new qMainWindow()
|
|
{
|
|
setWindowTitle("TicTacToe!")
|
|
resize(300,320)
|
|
move(200,200)
|
|
//buttons
|
|
pos=0
|
|
for y=0 to 2
|
|
for x=0 to 2
|
|
//Creating Buttons on the screen
|
|
pos++
|
|
Add(lst,0)
|
|
Add(btns,new qPushButton(frmMain)
|
|
{
|
|
setGeometry(x*100,y*100,100,100)
|
|
setText("-")
|
|
setclickevent("Disp(" + pos +")")
|
|
setstylesheet("font-size:24pt ; font: bold ; color:yellow ; background-color: green")
|
|
})
|
|
next
|
|
next
|
|
//StatusBar
|
|
status=new qStatusBar(frmMain)
|
|
{
|
|
showMessage("Ready",0)
|
|
}
|
|
setwindowflags(Qt_dialog)
|
|
setStatusbar(status)
|
|
show()
|
|
}
|
|
exec()
|
|
}
|
|
|
|
//Restart the game by re init buttons status
|
|
func reStart
|
|
for i=1 to 9
|
|
lst[i]=0
|
|
btns[i].setText("-")
|
|
next
|
|
isXTurn=true
|
|
|
|
func Disp x
|
|
if isXTurn=true and lst[x]=0
|
|
btns[x].setText("X")
|
|
lst[x]=1
|
|
isXTurn=false
|
|
but isXTurn=false and lst[x]=0
|
|
btns[x].setText("O")
|
|
lst[x]=2
|
|
isXTurn=true
|
|
ok
|
|
|
|
winner = CheckWinner()
|
|
#if there is no Winner and still there is ability to winner
|
|
#continue playing.
|
|
if winner<1 return ok
|
|
|
|
//Who is the winner!
|
|
switch winner
|
|
on 1
|
|
new qMessagebox(frmMain)
|
|
{
|
|
SetWindowTitle("We have a winner!")
|
|
SetText("Good job X you won!")
|
|
show()
|
|
}
|
|
on 2
|
|
new qMessagebox(frmMain)
|
|
{
|
|
SetWindowTitle("We have a winner!")
|
|
SetText("Good job O you won!")
|
|
show()
|
|
}
|
|
on 3
|
|
new qMessagebox(frmMain)
|
|
{
|
|
SetWindowTitle("Oh no it's a tie")
|
|
SetText("Oh no it's a tie!")
|
|
show()
|
|
}
|
|
off
|
|
reStart()
|
|
|
|
func CheckWinner
|
|
//vertical check
|
|
for v=1 to 9 step 3
|
|
if lst[v]!=0 and lst[v+1]!=0 and lst[v+2]!=0
|
|
if lst[v]=lst[v+1] and lst[v+1]=lst[v+2]
|
|
return lst[v]
|
|
ok
|
|
ok
|
|
next
|
|
//horzintal
|
|
for h=1 to 3
|
|
if lst[h]!=0 and lst[h+3]!=0 and lst[h+6]!=0
|
|
if lst[h]=lst[h+3] and lst[h+3]=lst[h+6]
|
|
return lst[h]
|
|
ok
|
|
ok
|
|
next
|
|
//Cross
|
|
if lst[1]!=0 and lst[5]!=0 and lst[9]!=0
|
|
if lst[1]=lst[5] and lst[5]=lst[9] return lst[1] ok
|
|
ok
|
|
if lst[3]!=0 and lst[5]!=0 and lst[7]!=0
|
|
if lst[3]=lst[5] and lst[5]=lst[7] return lst[3] ok
|
|
ok
|
|
//tie
|
|
tie=true
|
|
for i=1 to 9
|
|
if lst[i]=0 tie=false exit ok
|
|
next
|
|
if tie=true return 3 ok return 0
|