So ich will dann mal mein 2. Spiel vorstellen.
Es heißt Shanghai Dynasty und ist eine Variante von Mah-Jonng für den Computer und Einzelspieler.
Eine "ausführliche" Beschreibung liegt bei.
Viel Spaß!
Hier noch für alle die denn Quelltext wollen
Spoiler anzeigen
#include <guiconstants.au3>
#include <array.au3>
#include <Misc.au3>
;~---DEKLARATIONEN--------------------------
Dim $f[17][9][6] ; Werte des Spielfeldes
Dim $p[16][9][6] ; BilderID
Dim $t[200] ; Feld in dem die bereits verwendeten Karten gespeichert werden
Dim $w[4] ; Feld in dem eine angeklickte Karte gespeichert wird[0] x - Koord. [1] y - Koord . [2] z - Koord. [3] Wert
;~---DEFINITIONEN---------------------------
Func karteerzeugen(ByRef $t , $pos )
Do
$anz = 0
$z = Random(11,52,1)
For $i = 1 To $pos+1
If $t[$i] = $z Then $anz +=1
Next
Until ($anz = 0 ) Or ( ( $anz < 4 ) And ( $z < 45 ) )
Return $z
EndFunc
Func kartenwerte(ByRef $f , ByRef $t )
$pos = 1
$f[7][4][5] = karteerzeugen($t,$pos)
;~ $f[8][4][5] = $f[7][4][5]
;~ $f[7][5][5] = $f[7][4][5]
;~ $f[8][5][5] = $f[7][4][5]
For $i = 1 To 15
$f[$i][5][1]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][5][1]
$pos +=1
If ( $i > 1 ) And ( $i < 14 ) Then
$f[$i][1][1]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][1][1]
$pos +=1
$f[$i][4][1]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][4][1]
$pos +=1
$f[$i][8][1]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][8][1]
$pos +=1
EndIf
If ( $i > 3 ) And ( $i < 12 ) Then
$f[$i][2][1]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][2][1]
$pos +=1
$f[$i][7][1]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][7][1]
$pos +=1
EndIf
If ( $i > 2 ) And ( $i < 13 ) Then
$f[$i][3][1]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][3][1]
$pos +=1
$f[$i][6][1]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][6][1]
$pos +=1
EndIf
If ( $i > 4 ) And ( $i < 11 ) Then
$f[$i][2][2]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][2][2]
$pos +=1
$f[$i][3][2]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][3][2]
$pos +=1
$f[$i][4][2]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][4][2]
$pos +=1
$f[$i][5][2]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][5][2]
$pos +=1
$f[$i][6][2]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][6][2]
$pos +=1
$f[$i][7][2]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][7][2]
$pos +=1
EndIf
If ( $i > 5 ) And ( $i < 10 ) Then
$f[$i][3][3]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][3][3]
$pos +=1
$f[$i][4][3]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][4][3]
$pos +=1
$f[$i][5][3]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][5][3]
$pos +=1
$f[$i][6][3]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][6][3]
$pos +=1
EndIf
If ( $i > 6 ) And ( $i < 9 ) Then
$f[$i][4][4]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][4][4]
$pos +=1
$f[$i][5][4]= karteerzeugen($t,$pos)
$t[$pos] = $f[$i][5][4]
$pos +=1
EndIf
Next
EndFunc
Func kartenbildererzeugen ( ByRef $p )
For $i = 1 To 15
; 1. Reihe und 8. Reihe malen
If ( $i > 1 ) And ( $i < 14 ) Then
$p[$i][1][1] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\1\" & $f[$i][1][1] &".bmp",$i*48-45,3,48,60)
$p[$i][8][1] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\1\" & $f[$i][8][1] &".bmp",$i*48-45,423,48,60)
EndIf
; 2. Reihe und 7. Reihe malen
if ( $i > 3 ) And ( $i < 12 ) Then
$p[$i][2][1] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\1\" & $f[$i][2][1] &".bmp",$i*48-45,63,48,60)
$p[$i][7][1] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\1\" & $f[$i][7][1] &".bmp",$i*48-45,363,48,60)
EndIf
If ( $i > 4 ) And ( $i < 11 ) Then
$p[$i][2][2] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\2\" & $f[$i][2][2] &".bmp",$i*48-45,63,48,60)
$p[$i][7][2] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\2\" & $f[$i][7][2] &".bmp",$i*48-45,363,48,60)
EndIf
; 3. Reihe und 6. Reihe malen
If ( $i > 2 ) And ( $i < 13 ) Then
$p[$i][3][1] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\1\" & $f[$i][3][1] &".bmp",$i*48-45,123,48,60)
$p[$i][6][1] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\1\" & $f[$i][6][1] &".bmp",$i*48-45,303,48,60)
EndIf
If ( $i > 4 ) And ( $i < 11 ) Then
$p[$i][3][2] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\2\" & $f[$i][3][2] &".bmp",$i*48-45,123,48,60)
$p[$i][6][2] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\2\" & $f[$i][6][2] &".bmp",$i*48-45,303,48,60)
EndIf
If ( $i > 5 ) And ( $i < 10 ) Then
$p[$i][3][3] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\3\" & $f[$i][3][3] &".bmp",$i*48-45,123,48,60)
$p[$i][6][3] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\3\" & $f[$i][6][3] &".bmp",$i*48-45,303,48,60)
EndIf
; 4. Reihe malen
If ( $i > 1 ) And ( $i < 14 ) Then $p[$i][4][1] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\1\" & $f[$i][4][1] &".bmp",$i*48-45,183,48,60)
If ( $i > 4 ) And ( $i < 11 ) Then $p[$i][4][2] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\2\" & $f[$i][4][2] &".bmp",$i*48-45,183,48,60)
If ( $i > 5 ) And ( $i < 10 ) Then $p[$i][4][3] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\3\" & $f[$i][4][3] &".bmp",$i*48-45,183,48,60)
If ( $i > 6 ) And ( $i < 9 ) Then $p[$i][4][4] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\4\" & $f[$i][4][4] &".bmp",$i*48-45,183,48,60)
; 5. Reihe malen
If ( $i > 1 ) And ( $i < 14 ) Then $p[$i][5][1] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\1\" & $f[$i][5][1] &".bmp",$i*48-45,243,48,60)
If ( $i > 4 ) And ( $i < 11 ) Then $p[$i][5][2] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\2\" & $f[$i][5][2] &".bmp",$i*48-45,243,48,60)
If ( $i > 5 ) And ( $i < 10 ) Then $p[$i][5][3] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\3\" & $f[$i][5][3] &".bmp",$i*48-45,243,48,60)
If ( $i > 6 ) And ( $i < 9 ) Then $p[$i][5][4] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\4\" & $f[$i][5][4] &".bmp",$i*48-45,243,48,60)
Next
$p[ 1][5][1] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\1\" & $f[ 1][5][1] &".bmp", 3,213,48,60) ; Mitte links
$p[14][5][1] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\1\" & $f[14][5][1] &".bmp",627,213,48,60) ; Mitte rechts
$p[15][5][1] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\1\" & $f[15][5][1] &".bmp",675,213,48,60) ; Mitte rechts außen
$p[ 7][4][5] = GUICtrlCreatePic(@ScriptDir & "\Images\Karten\5\" & $f[ 7][4][5] &".bmp",315,213,48,60) ; Mitte
EndFunc
Func kartenbilderzerstoeren( ByRef $p )
GUICtrlDelete($p[ 1][5][1])
GUICtrlDelete($p[14][5][1])
GUICtrlDelete($p[15][5][1])
GUICtrlDelete($p[ 7][4][5])
For $i = 1 To 15
If ( $i > 1 ) And ( $i < 14 ) Then
GUICtrlDelete($p[$i][1][1])
GUICtrlDelete($p[$i][8][1])
EndIf
if ( $i > 3 ) And ( $i < 12 ) Then
GUICtrlDelete($p[$i][2][1])
GUICtrlDelete($p[$i][7][1])
EndIf
If ( $i > 4 ) And ( $i < 11 ) Then
GUICtrlDelete($p[$i][2][2])
GUICtrlDelete($p[$i][7][2])
EndIf
If ( $i > 2 ) And ( $i < 13 ) Then
GUICtrlDelete($p[$i][3][1])
GUICtrlDelete($p[$i][6][1])
EndIf
If ( $i > 4 ) And ( $i < 11 ) Then
GUICtrlDelete($p[$i][3][2])
GUICtrlDelete($p[$i][6][2])
EndIf
If ( $i > 5 ) And ( $i < 10 ) Then
GUICtrlDelete($p[$i][3][3])
GUICtrlDelete($p[$i][6][3])
EndIf
If ( $i > 1 ) And ( $i < 14 ) Then GUICtrlDelete($p[$i][4][1])
If ( $i > 4 ) And ( $i < 11 ) Then GUICtrlDelete($p[$i][4][2])
If ( $i > 5 ) And ( $i < 10 ) Then GUICtrlDelete($p[$i][4][3])
If ( $i > 6 ) And ( $i < 9 ) Then GUICtrlDelete($p[$i][4][4])
If ( $i > 1 ) And ( $i < 14 ) Then GUICtrlDelete($p[$i][5][1])
If ( $i > 4 ) And ( $i < 11 ) Then GUICtrlDelete($p[$i][5][2])
If ( $i > 5 ) And ( $i < 10 ) Then GUICtrlDelete($p[$i][5][3])
If ( $i > 6 ) And ( $i < 9 ) Then GUICtrlDelete($p[$i][5][4])
Next
EndFunc
;~---GUI------------------------------------
GUICreate ("Shanghai Dynasty",728,528)
GUICtrlCreatePic(@ScriptDir & "\Images\Rahmen\o_l.bmp",0,0,3,3)
GUICtrlCreatePic(@ScriptDir & "\Images\Rahmen\o_r.bmp",723,0,4,5)
GUICtrlCreatePic(@ScriptDir & "\Images\Rahmen\u_l.bmp",0,484,4,4)
GUICtrlCreatePic(@ScriptDir & "\Images\Rahmen\u_r.bmp",723,483,4,5)
GUICtrlCreatePic(@ScriptDir & "\Images\Rahmen\o.bmp",3,0,720,3)
GUICtrlCreatePic(@ScriptDir & "\Images\Rahmen\r.bmp",724,4,3,479)
GUICtrlCreatePic(@ScriptDir & "\Images\Rahmen\u.bmp",4,485,719,3)
GUICtrlCreatePic(@ScriptDir & "\Images\Rahmen\l.bmp",0,3,3,481)
$Button_spiel = GUICtrlCreateButton("Spielen",11,495,150,30)
$Button_ende = GUICtrlCreateButton("Beenden",565,495,150,30)
;~---INITALISIERUNG----------------------------
[/autoit] [autoit][/autoit] [autoit]For $i = 0 To 16 ; Ganze Feld ist leer
For $j = 0 To 8
For $k= 0 To 5
$f[$i][$j][$k] = 0
Next
Next
Next
kartenwerte($f,$t)
[/autoit] [autoit][/autoit] [autoit];~---KARTEN-BILDER ERZEUGEN--------
kartenbildererzeugen($p)
GUISetState(@SW_SHOW)
While 1
For $i = 0 To 3 ; Nix angeklickt
$w[$i] = 0
Next
While 1
$msg = GUIGetMsg()
$mp = GUIGetCursorInfo()
Select
Case ( $msg = $GUI_EVENT_CLOSE ) Or ( $msg = $Button_ende )
Exit
Case ( $msg = $Button_spiel)
ExitLoop
Case ( _IsPressed(09) = 1 )
Case WinActive("Shanghai Dynasty") = 1
If ( _IsPressed(01) = 1 ) And ($mp[1] < 480 ) Then
;~ KOORDINATEN DES AUSGEWÄHLTEN BILDS BEKOMMEN
$x = Int(($mp[0]+45) / 48)
$y = Int(($mp[1]-3 ) / 60)+1
If ($f[$x][$y][1] <> 0 ) Or ($f[$x][$y][2] <> 0 ) Or ($f[$x][$y][3] <> 0 ) Or ($f[$x][$y][4] <> 0 ) Or ($f[$x][$y][5] <> 0 ) Then
If ( $f[$x][$y][5] <> 0 ) Then
$z = 5
ElseIf ( $f[$x][$y][4] <> 0 ) Then
$z = 4
ElseIf ( $f[$x][$y][3] <> 0 ) Then
$z = 3
ElseIf ( $f[$x][$y][2] <> 0 ) Then
$z = 2
ElseIf ( $f[$x][$y][1] <> 0 ) Then
$z = 1
EndIf
If ( $z = 4 ) And ( $f[7][4][5] <> 0 ) Then
$x = 7
$y = 4
$z = 5
EndIf
;~ ÜBERPRÜFEN OB DAS BILD AM RAND LIEGT
$rand = False ; Erstmal liegt es nicht am Rand
If ( $f[$x-1][$y][$z] = 0 ) Or ( $f[$x+1][$y][$z] = 0 ) Then ; Ob links oder rechts vom Spielsten frei ist
$rand = True
EndIf
; Spezialfälle - wieder...
;Liegt immer am Rand
If $z=5 Then $rand = True
; Linke Karte die die rechts davon Liegenden hindert
If ( $x = 2 ) And ( $y = 4 ) And ( $z = 1) And ( $f[ 1][5][1] <> 0 ) Then $rand = False
; Rechte Karte die die links davon Liegenden hindert
If ( $x = 13 ) And ( $y = 4 ) And ( $z = 1) And ( $f[14][5][1] <> 0 ) Then $rand = False
If $rand = True Then; Jetzt hat der User aber wirklich richtig geklickt
;Kartenpaar getroffen
If ($w[0] <> $x ) Or ( $w[1] <> $y ) Then ; Nicht gleiche Koordinaten
If (($w[3] = $f[$x][$y][$z])) Or ((( $w[3] > 48 ) And ($f[$x][$y][$z] > 48 ))) Or ((( $w[3] > 44 ) And ( $w[3] < 49 )) And (( $f[$x][$y][$z] > 44 ) And ( $f[$x][$y][$z] < 49 ))) Then
$f[$x][$y][$z] = 0
$f[$w[0]][$w[1]][$w[2]] = 0
GUICtrlDelete($p[$w[0]][$w[1]][$w[2]])
GUICtrlDelete($p[$x][$y][$z])
$w[0] = 0
$w[1] = 0
$w[2] = 0
$w[3] = 0
;~ Kartenpaar nicht getroffen bzw. noch nichts ausgewählt
Else
GUICtrlSetImage($p[$w[0]][$w[1]][$w[2]],@ScriptDir & "\Images\Karten\" & $w[2] & "\" & $f[$w[0]][$w[1]][$w[2]] &".bmp")
GUICtrlSetImage($p[7][4][5],@ScriptDir & "\Images\Karten\5\" & $f[7][4][5] &".bmp")
If ( $z = 5 ) Then
$w[0] = 7
$w[1] = 4
$w[2] = 5
$w[3] = $f[7][4][5]
Else
$w[0] = $x
$w[1] = $y
$w[2] = $z
$w[3] = $f[$x][$y][$z]
EndIf
GUICtrlSetImage($p[$x][$y][$z],@ScriptDir & "\Images\Karten\6\" & $f[$x][$y][$z] &".bmp")
EndIf
EndIf
EndIf
EndIf
EndIf
EndSelect
Sleep(10)
WEnd
;~ KARTENBILDER LÖSCHEN
kartenbilderzerstoeren($p)
;~ KARTEN-WERTE ERZEUGEN
kartenwerte($f,$t)
;~ KARTEN-BILDER ERZEUGEN
kartenbildererzeugen($p)
GUISetState(@SW_HIDE)
GUISetState(@SW_SHOW)
WEnd
[/autoit] [autoit][/autoit] [autoit]Exit
[/autoit]mfg Wesloth