So, hier ein Text-only Counterstrike Game, aus Spaß an der Freude.
KI noch nicht vorhanden --> Gegner bewegt sich nicht.
Kommandos:
Jetzt mit (Nicht-) KI: einfach zufällige Aktion aus Go, Turn, Shoot
Spoiler anzeigen
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <ScrollBarConstants.au3>
#Region VAR
Global $IAmNr=0
Dim $players[2][4]=[[0,0,"s",100],[9,9,"n",100]];x,y,blick(nswo),leben,
Dim $board[10][10];[x][Y]; werte: ""=nix,"M"=Mauer","1/2"=player
_clearBoard()
#EndRegion VAR
#Region GUI
$Form1 = GUICreate("txtCS", 635, 448, 192, 119)
$Input = GUICtrlCreateInput("", 0, 424, 633, 21)
$Output = GUICtrlCreateEdit("Willkommen bei Text-only Counterstrike" & @CRLF, 0, 0, 633, 425)
$Enter = GUICtrlCreateDummy()
GUICtrlSetData(-1, "Edit1")
GUISetState(@SW_SHOW)
Dim $accelerators[1][2]=[["{ENTER}",$Enter]]
GUISetAccelerators($accelerators)
#EndRegion GUI
;besetze Felder:
_setHumansToBoard()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Enter
_input(GUICtrlRead($Input))
GUICtrlSetData($Input,"")
_opponentMoves()
EndSwitch
WEnd
Func _output($what)
_GUICtrlEdit_AppendText($Output,$what & @CRLF)
_GUICtrlEdit_Scroll($Output,$SB_LINEDOWN)
EndFunc
Func _input($what)
;~ commands: go, shoot, turn, jump, cheat, help
If _beginsWith($what,"go ") Then
_tryGo(StringTrimLeft($what,3))
ElseIf _beginsWith($what,"shoot") Then
_tryShoot()
ElseIf _beginsWith($what,"turn ") Then
_tryTurn(StringTrimLeft($what,5))
ElseIf _beginsWith($what,"jump ") Then
_tryJump(StringTrimLeft($what,5))
ElseIf $what = "help" Then
_help()
ElseIf _beginsWith($what,"cheat") Then
$players[$IAmNr][0]=InputBox("X-Position","")
$players[$IAmNr][1]=InputBox("Y-Position","")
_clearBoard()
_setHumansToBoard()
Else
_output("Befehl falsch geschrieben oder nicht vorhanden.")
EndIf
EndFunc
Func _beginsWith($hay,$needle)
If StringInStr($hay,$needle) = 1 Then return True
return False
EndFunc
Func _tryGo($where,$who=$IAmNr)
$xpos=$players[$who][0]
$ypos=$players[$who][1]
Switch $where
Case "north"
If $ypos=0 Then return _output("Kann nicht nach Norden gehen, Kartenrand erreicht.")
If $board[$xpos][$ypos-1]<>"" Then return _output("Kann nicht nach Norden gehen, Mensch steht gegenüber.")
$board[$xpos][$ypos-1]="M"
$board[$xpos][$ypos]=""
$players[$who][1]=$ypos-1
_output("Gehe ein Feld nach Norden...")
_output("Bin jetzt auf " & $players[$who][0] & ":" & $players[$who][1])
Case "south"
If $ypos=9 Then return _output("Kann nicht nach Süden gehen, Kartenrand erreicht.")
If $board[$xpos][$ypos+1]<>"" Then return _output("Kann nicht nach Süden gehen, Mensch steht gegenüber.")
$board[$xpos][$ypos+1]="M"
$board[$xpos][$ypos]=""
$players[$who][1]=$ypos+1
_output("Gehe ein Feld nach Süden...")
_output("Bin jetzt auf " & $players[$who][0] & ":" & $players[$who][1])
Case "east"
If $xpos=9 Then return _output("Kann nicht nach Osten gehen, Kartenrand erreicht.")
If $board[$xpos+1][$ypos]<>"" Then return _output("Kann nicht nach Osten gehen, Mensch steht gegenüber.")
$board[$xpos+1][$ypos]="M"
$board[$xpos][$ypos]=""
$players[$who][0]=$xpos+1
_output("Gehe ein Feld nach Osten...")
_output("Bin jetzt auf " & $players[$who][0] & ":" & $players[$who][1])
Case "west"
If $xpos=0 Then return _output("Kann nicht nach Westen gehen, Kartenrand erreicht.")
If $board[$xpos-1][$ypos]<>"" Then return _output("Kann nicht nach Westen gehen, Mensch steht gegenüber.")
$board[$xpos-1][$ypos]="M"
$board[$xpos][$ypos]=""
$players[$who][0]=$xpos-1
_output("Gehe ein Feld nach Westen...")
_output("Bin jetzt auf " & $players[$who][0] & ":" & $players[$who][1])
Case Else
_output("falsche Eingabe. go [north|south|east|west]")
EndSwitch
_look()
EndFunc
Func _tryJump($where)
$xpos=$players[$IAmNr][0]
$ypos=$players[$IAmNr][1]
Switch $where
Case "north"
If $ypos<=1 Then return _output("Kann nicht nach Norden springen, Kartenrand erreicht.")
If $board[$xpos][$ypos-2]<>"" Then return _output("Kann nicht nach Norden springen, Mensch steht auf dem Zielfeld")
$board[$xpos][$ypos-2]="M"
$board[$xpos][$ypos]=""
$players[$IAmNr][1]=$ypos-2
_output("Springe zwei Felder nach Norden...")
_output("Bin jetzt auf " & $players[$IAmNr][0] & ":" & $players[$IAmNr][1])
Case "south"
If $ypos>=8 Then return _output("Kann nicht nach Süden springen, Kartenrand erreicht.")
If $board[$xpos][$ypos+2]<>"" Then return _output("Kann nicht nach Süden springen, Mensch steht gegenüber.")
$board[$xpos][$ypos+2]="M"
$board[$xpos][$ypos]=""
$players[$IAmNr][1]=$ypos+2
_output("Springe zwei Felder nach Süden...")
_output("Bin jetzt auf " & $players[$IAmNr][0] & ":" & $players[$IAmNr][1])
Case "east"
If $xpos>=8 Then return _output("Kann nicht nach Osten springen, Kartenrand erreicht.")
If $board[$xpos+2][$ypos]<>"" Then return _output("Kann nicht nach Osten springen, Mensch steht gegenüber.")
$board[$xpos+2][$ypos]="M"
$board[$xpos][$ypos]=""
$players[$IAmNr][0]=$xpos+2
_output("Springe zwei Felder nach Osten...")
_output("Bin jetzt auf " & $players[$IAmNr][0] & ":" & $players[$IAmNr][1])
Case "west"
If $xpos<=1 Then return _output("Kann nicht nach Westen springen, Kartenrand erreicht.")
If $board[$xpos-2][$ypos]<>"" Then return _output("Kann nicht nach Westen springen, Mensch steht gegenüber.")
$board[$xpos-2][$ypos]="M"
$board[$xpos][$ypos]=""
$players[$IAmNr][0]=$xpos-2
_output("Springe zwei Felder nach Westen...")
_output("Bin jetzt auf " & $players[$IAmNr][0] & ":" & $players[$IAmNr][1])
Case Else
_output("falsche Eingabe. go [north|south|east|west]")
EndSwitch
_look()
EndFunc
Func _tryShoot($who=$IAmNr)
$dir=$players[$who][2]
$xpos=$players[$who][0]
$ypos=$players[$who][1]
Switch $dir
Case "n"
For $i=0 To UBound($players,1)-1
If $i=$who Then ContinueLoop
If $players[$i][0]=$xpos And $players[$i][1] < $ypos Then
$damage=20- ($ypos - $players[$i][1]); 20 could be the weapon
$players[$i][3] -= $damage
If $players[$i][3] > 0 Then
_output("Spieler " & $who & ": Spieler getroffen und ihm " & $damage & " Schadenspunkte zugefügt. (Noch " & $players[$i][3] & " Lebenspunkte)")
Else
If $who=$IAmNr Then
_output("Spieler getötet. Spiel gewonnen.")
_Win()
Else
_loose()
EndIf
EndIf
EndIf
Next
Case "s"
For $i=0 To UBound($players,1)-1
If $i=$IAmNr Then ContinueLoop
If $players[$i][0]=$xpos And $players[$i][1] > $ypos Then
$damage=20- ($players[$i][1] - $ypos)
$players[$i][3] -= $damage
If $players[$i][3] > 0 Then
_output("Spieler getroffen und ihm " & $damage & " Schadenspunkte zugefügt. (Noch " & $players[$i][3] & " Lebenspunkte)")
Else
If $who=$IAmNr Then
_output("Spieler getötet. Spiel gewonnen.")
_Win()
Else
_loose()
EndIf
EndIf
EndIf
Next
Case "w"
For $i=0 To UBound($players,1)-1
If $i=$IAmNr Then ContinueLoop
If $players[$i][1]=$ypos And $players[$i][0] < $ypos Then
$damage=20- ($xpos - $players[$i][0])
$players[$i][3] -= $damage
If $players[$i][3] > 0 Then
_output("Spieler getroffen und ihm " & $damage & " Schadenspunkte zugefügt. (Noch " & $players[$i][3] & " Lebenspunkte)")
Else
If $who=$IAmNr Then
_output("Spieler getötet. Spiel gewonnen.")
_Win()
Else
_loose()
EndIf
EndIf
EndIf
Next
Case "e"
For $i=0 To UBound($players,1)-1
If $i=$IAmNr Then ContinueLoop
If $players[$i][1]=$ypos And $players[$i][0] > $ypos Then
$damage=20- ($players[$i][0] - $ypos)
$players[$i][3] -= $damage
If $players[$i][3] > 0 Then
_output("Spieler getroffen und ihm " & $damage & " Schadenspunkte zugefügt. (Noch " & $players[$i][3] & " Lebenspunkte)")
Else
If $who=$IAmNr Then
_output("Spieler getötet. Spiel gewonnen.")
_Win()
Else
_loose()
EndIf
EndIf
EndIf
Next
EndSwitch
EndFunc
Func _tryTurn($where,$who=$IAmNr)
local $dir=""
Switch $where
Case "north"
$dir="n"
Case "south"
$dir="s"
Case "east"
$dir="e"
Case "west"
$dir="w"
Case Else
Return _output("Keine gültige Himmelsrichtung. turn [norht|south|east|west]")
EndSwitch
$players[$who][2]=$dir
_look()
EndFunc
Func _setHumansToBoard()
For $i=0 To UBound($players,1)-1
$board[$players[$i][0]][$players[$i][1]]="M"
Next
EndFunc
Func _look()
$dir=$players[$IAmNr][2]
$xpos=$players[$IAmNr][0]
$ypos=$players[$IAmNr][1]
Switch $dir
Case "n"
If $ypos = 0 Then Return
If $board[$xpos][$ypos-1]<>"M" Then return
case "s"
If $ypos = 9 Then Return
If $board[$xpos][$ypos+1]<>"M" Then return
Case "e"
If $xpos = 9 Then Return
If $board[$xpos+1][$ypos]<>"M" Then return
Case "w"
If $xpos = 0 Then Return
If $board[$xpos-1][$ypos]<>"M" Then return
EndSwitch
_output("Ein Mensch steht dir gegenüber.")
EndFunc
Func _Win()
MsgBox(64,"Super","Du hast gewonnen")
EndFunc
Func _clearBoard()
For $i=0 To 9
For $j=0 To 9
$board[$i][$j]=""
Next
Next
EndFunc
Func _help()
_output("Mögliche Befehle: go, shoot, turn, jump, help")
_output("go|turn|jump [himmelsrichtung englisch]: Läuft/Dreht/Springt in die Richtung")
_output("shoot: Schießt")
EndFunc
Func _opponentMoves()
Dim $directions[4]=["north","south","east","west"]
Switch Random(1,3,1)
Case 1
_tryShoot($IAmNr+1)
Case 2
_tryTurn($directions[Random(0,3,1)],$IAmNr+1)
Case 3
_tryGo($directions[Random(0,3,1)],$IAmNr+1)
EndSwitch
EndFunc
func _loose()
MsgBox(0,"","You loose")
EndFunc
Inspiriert von:
[Blockierte Grafik: http://imgs.xkcd.com/comics/pwned.png]