Tria

« Older   Newer »
  Share  
xdmisterx
CAT_IMG Posted on 28/4/2010, 09:33     +1   -1




E' molto semplice come grafica, ma era giusto per usare un po' le gdi:

SPOILER (click to view)
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)

$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)
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
       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
EndFunc

Func lol()
       MsgBox(0,"","")
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[5][3] = "x",$datap[6][3] = "x",$datap[7][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[5][3] = "o",$datap[6][3] = "o",$datap[7][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
EndFunc


Prossimo passo, che è il motivo per cui ho fatto questo giochino, è l'implementazione dell'IA...non sono sicuro di riuscirci, però non sarebbe male xD.
Qualsiasi consiglio è ben accetto.
Ciao :)
 
Top
ACIDBURN16
CAT_IMG Posted on 28/4/2010, 13:03     +1   -1




Bellissimo, sarebbe bello a farlo locale xD
 
Top
Gianlu-thebest
CAT_IMG Posted on 28/4/2010, 13:11     +1   -1




Bravissimo! Ora ne faccio uno anch'io!
 
Top
ACIDBURN16
CAT_IMG Posted on 28/4/2010, 13:21     +1   -1




CITAZIONE (Gianlu-thebest @ 28/4/2010, 14:11)
Bravissimo! Ora ne faccio uno anch'io!

cerco di farlo locale io!
 
Top
xdmisterx
CAT_IMG Posted on 28/4/2010, 13:34     +1   -1




In che senso locale?
 
Top
MHack
CAT_IMG Posted on 28/4/2010, 13:37     +1   -1




CITAZIONE (xdmisterx @ 28/4/2010, 14:34)
In che senso locale?

Che lo puoi usare solo a casa XD
 
Top
Th3_F0x
CAT_IMG Posted on 28/4/2010, 13:45     +1   -1




:| a quel punto funzionerebbe anche in " non locoale " lato server e lato client ci fai un super multiplayer di tria xD
 
Top
Lahace
CAT_IMG Posted on 28/4/2010, 17:08     +1   -1




lol io mi devo mettere a fare pacman *.*
 
Top
ACIDBURN16
CAT_IMG Posted on 28/4/2010, 17:44     +1   -1




xD cerco di farlo remoto allora
 
Top
Dragon[ITA]
CAT_IMG Posted on 5/5/2010, 13:55     +1   -1




c'è un piccolo bug quando con il cerchio fai:
X X -
X - O
O O -
 
Top
xdmisterx
CAT_IMG Posted on 5/5/2010, 14:14     +1   -1




hahahahaha è vero xD
Mi sono confuso su una riga xD
Eccolo corretto, grazie ;):
SPOILER (click to view)
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
 
Top
Kurt_Black_hat 2.0
CAT_IMG Posted on 5/5/2010, 19:44     +1   -1




CITAZIONE (xdmisterx @ 5/5/2010, 15:14)
riga

Giuro che avevo letto un'altra cosa ._.
 
Top
11 replies since 28/4/2010, 09:33   184 views
  Share