CODICE
;tris by Misterx
#include <GuiConstants.au3>
#include <GdiPlus.au3>
$gdi = _GDIPlus_Startup()
Global $title = "Tris", $turno = "x", $a = 1
Dim $datap[9][4]
$gui = GUICreate($title,300,400)
$menu = GUICtrlCreateMenu("Menu")
$new = GUICtrlCreateMenuItem("Nuova partita F2",$menu)
$datap[0][0] = GUICtrlCreatePic("",0,0,100,100)
$datap[0][1] = False
$datap[0][3] = ""
$datap[1][0] = GUICtrlCreatePic("",100,0,100,100)
$datap[1][1] = False
$datap[1][3] = ""
$datap[2][0] = GUICtrlCreatePic("",200,0,100,100)
$datap[2][1] = False
$datap[2][3] = ""
$datap[3][0] = GUICtrlCreatePic("",0,100,100,100)
$datap[3][1] = False
$datap[3][3] = ""
$datap[4][0] = GUICtrlCreatePic("",100,100,100,100)
$datap[4][1] = False
$datap[4][3] = ""
$datap[5][0] = GUICtrlCreatePic("",200,100,100,100)
$datap[5][1] = False
$datap[5][3] = ""
$datap[6][0] = GUICtrlCreatePic("",0,200,100,100)
$datap[6][1] = False
$datap[6][3] = ""
$datap[7][0] = GUICtrlCreatePic("",100,200,100,100)
$datap[7][1] = False
$datap[7][3] = ""
$datap[8][0] = GUICtrlCreatePic("",200,200,100,100)
$datap[8][1] = False
$datap[8][3] = ""
$stat = GUICtrlCreateLabel("E' il turno di X",70,320,400,400)
GUICtrlSetFont($stat,20,"","Terminal")
GUISetState()
$hwnd = _GDIPlus_GraphicsCreateFromHWND($gui)
$pen = _GDIPlus_PenCreate(0xFF000000,2)
$bit = _GDIPlus_BitmapCreateFromGraphics(300,400,$hwnd)
$buffer = _GDIPlus_ImageGetGraphicsContext($bit)
redraw()
AdlibRegister("redraw",500)
While 1
Switch $turno
Case "x"
If $a = 1 Then
GUICtrlSetData($stat,"E' il turno di X")
$a = 0
EndIf
Case "o"
If $a = 0 Then
GUICtrlSetData($stat,"E' il turno di O")
$a = 1
EndIf
EndSwitch
Switch GUIGetMsg()
Case $gui_event_close
Exit
Case $datap[0][0]
If $datap[0][1] = False Then
If $turno = "x" Then
drawx(0,0)
$datap[0][3] = "x"
$turno = "o"
Else
drawo(0,0)
$datap[0][3] = "o"
$turno = "x"
EndIf
$datap[0][1] = True
check()
EndIf
Case $datap[1][0]
If $datap[1][1] = False Then
If $turno = "x" Then
drawx(100,0)
$datap[1][3] = "x"
$turno = "o"
Else
drawo(100,0)
$datap[1][3] = "o"
$turno = "x"
EndIf
$datap[1][1] = True
check()
EndIf
Case $datap[2][0]
If $datap[2][1] = False Then
If $turno = "x" Then
drawx(200,0)
$datap[2][3] = "x"
$turno = "o"
Else
drawo(200,0)
$datap[2][3] = "o"
$turno = "x"
EndIf
$datap[2][1] = True
check()
EndIf
Case $datap[3][0]
If $datap[3][1] = False Then
If $turno = "x" Then
drawx(0,100)
$datap[3][3] = "x"
$turno = "o"
Else
drawo(0,100)
$datap[3][3] = "o"
$turno = "x"
EndIf
$datap[3][1] = True
check()
EndIf
Case $datap[4][0]
If $datap[4][1] = False Then
If $turno = "x" Then
drawx(100,100)
$datap[4][3] = "x"
$turno = "o"
Else
drawo(100,100)
$datap[4][3] = "o"
$turno = "x"
EndIf
$datap[4][1] = True
check()
EndIf
Case $datap[5][0]
If $datap[5][1] = False Then
If $turno = "x" Then
drawx(200,100)
$datap[5][3] = "x"
$turno = "o"
Else
drawo(200,100)
$datap[5][3] = "o"
$turno = "x"
EndIf
$datap[5][1] = True
check()
EndIf
Case $datap[6][0]
If $datap[6][1] = False Then
If $turno = "x" Then
drawx(0,200)
$datap[6][3] = "x"
$turno = "o"
Else
drawo(0,200)
$datap[6][3] = "o"
$turno = "x"
EndIf
$datap[6][1] = True
check()
EndIf
Case $datap[7][0]
If $datap[7][1] = False Then
If $turno = "x" Then
drawx(100,200)
$datap[7][3] = "x"
$turno = "o"
Else
drawo(100,200)
$datap[7][3] = "o"
$turno = "x"
EndIf
$datap[7][1] = True
check()
EndIf
Case $datap[8][0]
If $datap[8][1] = False Then
If $turno = "x" Then
drawx(200,200)
$datap[8][3] = "x"
$turno = "o"
Else
drawo(200,200)
$datap[8][3] = "o"
$turno = "x"
EndIf
$datap[8][1] = True
check()
EndIf
Case $new
For $i = 0 To 8
$datap[$i][3] = ""
Next
_GDIPlus_GraphicsDispose($buffer)
EndSwitch
WEnd
Func redraw()
For $i = 1 To 3
_GDIPlus_GraphicsDrawLine($hwnd,100*$i,0,100*$i,300,$pen)
Next
For $i = 1 To 3
_GDIPlus_GraphicsDrawLine($hwnd,0,100*$i,300,100*$i,$pen)
Next
If $datap[0][3] = "x" Then
drawx(0,0)
ElseIf $datap[0][3] = "o" Then
drawo(0,0)
EndIf
If $datap[1][3] = "x" Then
drawx(100,0)
ElseIf $datap[1][3] = "o" Then
drawo(100,0)
EndIf
If $datap[2][3] = "x" Then
drawx(200,0)
ElseIf $datap[2][3] = "o" Then
drawo(200,0)
EndIf
If $datap[3][3] = "x" Then
drawx(0,100)
ElseIf $datap[3][3] = "o" Then
drawo(0,100)
EndIf
If $datap[4][3] = "x" Then
drawx(100,100)
ElseIf $datap[4][3] = "o" Then
drawo(100,100)
EndIf
If $datap[5][3] = "x" Then
drawx(200,100)
ElseIf $datap[5][3] = "o" Then
drawo(200,100)
EndIf
If $datap[6][3] = "x" Then
drawx(0,200)
ElseIf $datap[6][3] = "o" Then
drawo(0,200)
EndIf
If $datap[7][3] = "x" Then
drawx(100,200)
ElseIf $datap[7][3] = "o" Then
drawo(100,200)
EndIf
If $datap[8][3] = "x" Then
drawx(200,200)
ElseIf $datap[8][3] = "o" Then
drawo(200,200)
EndIf
EndFunc
Func drawx($x,$y)
$x_pen = _GDIPlus_PenCreate("",5)
_GDIPlus_GraphicsDrawLine($hwnd,$x+10,$y+10,$x+90,$y+90,$pen)
Sleep(100)
_GDIPlus_GraphicsDrawLine($hwnd,$x+10,$y+90,$x+90,$y+10,$pen)
EndFunc
Func drawo($x,$y)
$o_pen = _GDIPlus_PenCreate("",5)
_GDIPlus_GraphicsDrawEllipse($hwnd,$x+20,$y+20,60,60,$pen)
EndFunc
#cs
Tabella:
\ 1 2 3 /
---------
A | 0 1 2
B | 3 4 5
C | 6 7 8
Totale 8 casi per X e O
#ce
Func check()
;caso O
If BitAND($datap[0][3] = "x",$datap[1][3] = "x",$datap[2][3] = "x") Then ;A123
MsgBox(64,"Vittoria!!!","Vince X!!!",10)
ElseIf BitAND($datap[3][3] = "x",$datap[4][3] = "x",$datap[5][3] = "x") Then ;B123
MsgBox(64,"Vittoria!!!","Vince X!!!",10)
ElseIf BitAND($datap[6][3] = "x",$datap[7][3] = "x",$datap[8][3] = "x") Then ;C123
MsgBox(64,"Vittoria!!!","Vince X!!!",10)
ElseIf BitAND($datap[0][3] = "x",$datap[3][3] = "x",$datap[6][3] = "x") Then ;1ABC
MsgBox(64,"Vittoria!!!","Vince X!!!",10)
ElseIf BitAND($datap[1][3] = "x",$datap[4][3] = "x",$datap[7][3] = "x") Then ;2ABC
MsgBox(64,"Vittoria!!!","Vince X!!!",10)
ElseIf BitAND($datap[2][3] = "x",$datap[5][3] = "x",$datap[8][3] = "x") Then ;3ABC
MsgBox(64,"Vittoria!!!","Vince X!!!",10)
ElseIf BitAND($datap[0][3] = "x",$datap[4][3] = "x",$datap[8][3] = "x") Then ;\
MsgBox(64,"Vittoria!!!","Vince X!!!",10)
ElseIf BitAND($datap[2][3] = "x",$datap[4][3] = "x",$datap[6][3] = "x") Then ;/
MsgBox(64,"Vittoria!!!","Vince X!!!",10)
EndIf
;caso O
If BitAND($datap[0][3] = "o",$datap[1][3] = "o",$datap[2][3] = "o") Then ;A123
MsgBox(64,"Vittoria!!!","Vince O!!!",10)
ElseIf BitAND($datap[3][3] = "o",$datap[4][3] = "o",$datap[5][3] = "o") Then ;B123
MsgBox(64,"Vittoria!!!","Vince O!!!",10)
ElseIf BitAND($datap[6][3] = "o",$datap[7][3] = "o",$datap[8][3] = "o") Then ;C123
MsgBox(64,"Vittoria!!!","Vince O!!!",10)
ElseIf BitAND($datap[0][3] = "o",$datap[3][3] = "o",$datap[6][3] = "o") Then ;1ABC
MsgBox(64,"Vittoria!!!","Vince O!!!",10)
ElseIf BitAND($datap[1][3] = "o",$datap[4][3] = "o",$datap[7][3] = "o") Then ;2ABC
MsgBox(64,"Vittoria!!!","Vince O!!!",10)
ElseIf BitAND($datap[2][3] = "o",$datap[5][3] = "o",$datap[8][3] = "o") Then ;3ABC
MsgBox(64,"Vittoria!!!","Vince O!!!",10)
ElseIf BitAND($datap[0][3] = "o",$datap[4][3] = "o",$datap[8][3] = "o") Then ;\
MsgBox(64,"Vittoria!!!","Vince O!!!",10)
ElseIf BitAND($datap[2][3] = "o",$datap[4][3] = "o",$datap[6][3] = "o") Then ;/
MsgBox(64,"Vittoria!!!","Vince O!!!",10)
EndIf
$s = False
For $statusp = 0 To 8
If $datap[$statusp][3] = "" Then
$s = True
EndIf
Next
If $s = False Then
MsgBox(64,"Patta","La partita non è stata vinta da nessuno.")
EndIf
EndFunc