Text-only Counterstrike :D

  • So, hier ein Text-only Counterstrike Game, aus Spaß an der Freude.
    KI noch nicht vorhanden --> Gegner bewegt sich nicht.
    Kommandos:

    Code
    go north|south|east|west
    jump north|south|east|west
    turn north|south|east|west
    shoot


    Jetzt mit (Nicht-) KI: einfach zufällige Aktion aus Go, Turn, Shoot

    Spoiler anzeigen
    [autoit]

    #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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit]

    Inspiriert von:
    [Blockierte Grafik: http://imgs.xkcd.com/comics/pwned.png]

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

    2 Mal editiert, zuletzt von L3viathan2142 (14. März 2010 um 18:27)

  • Nette Idee, vllt sollte man noch eine kleine Hilfe einbauen (Command:help)

    MfG. tobi_girst

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »tobi_girst« (Morgen, 25:63)

  • Oh, nun check ich das...(nach dem 2 mal).
    Aja, also zum abreagieren ist es leider noch weng zu langweilig. Aber lustige Idee. :thumbup:

  • tobi_girst: Ja, kann ich gleich mal schnell machen.
    @Faweyr: 1.) KI kommt ja noch, kannst auch gerne mithelfen (vlt. auch LAn-modus, oder 2-Spieler-an-einem-PC). Allerdings weiß ich noch nicht, ob ich das dann runden- oder zeit-basiert machen soll
    2.) Ist ja auch mehr ein Gag als ein ESL-Spiel :D

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Ne kleine minimap wäre lustig, damit man sieht wo der gegner sich dann in etwa befindet....Wenn da noch ne KI zu kommt wäre es ja sonnst als würde ich mit verbundenen augen C-Striken! :D (Lustige Idee BTW) :D

  • Mhm, ich möchte dir ja nicht den Spaß verderben. Aber ihrgentwie fehlt da der Kick...
    Ich bin 2 Minuten rum gelaufen und auf keinen Gegner gestoßen.
    Wäre cool wenn eine Map und eine Tastatursteuerung da wäre, aber dann is ja der Witz an der Sache weg...
    Um das ein wenig lustiger zu gestalten, müsstest du dir was einfallen lassen.
    :)

  • Is wirklich ne lustige Idee^^ Nur 1 Fehler ist mir aufgefallen: Wenn die bei "cheat" eingegebene Position ungültig ist, stürtzt alles ab.

  • Hi,
    erinnert mich an die allerersten Text-Adventures :rofl: aus den 70er Jahren. Hab mal eins für Apples IIe bzw LISA in Basic programmiert. Das waren damals die absoluten Renner bei uns an der Schule...
    Meistens musste man in einem Labyrinth den Weg durch verschiedene Level nach unten finden, die Gegner auf dem Weg dorthin wurden immen schwieriger. allerdings haben die auch schon Waffen und Rüstungen "gedropt" und es gab Erfahrungspunkte EP.

    Btt: wenn ich in eine Richtung laufe, werde ich nach 3-4 Schritten immer auf ein anderes Feld "gebeamt".
    ggf wärs gut, wenn man eine "Warnung" bekäme, dass der "Feind" in der Nähe ist