Metainformationen zur Seite
  •  

viergewinnt

#!/usr/bin/env python3
# _*_ coding: utf-8 _*_
 
"""
Programmbeschreibung
"""
 
def printGamePad(spielfeld):
    # Spielfeld per print ausgeben
    y = 1
    for zeilen in spielfeld:
        # Zeilen nummerieren
        print("Y"+str(y)+": ", end="")
        y += 1
        # Alle Felde einzeln auslesen
        for feld in zeilen:
            print("|" + feld + "|",end="")
        print()
        print("    _____________________")
    # Spalten nummerienen
    print("     x1 x2 x3 x4 x5 x6 x7")
 
def setValue(x, spielfeld, player):
    if player == 1:
        stone = "x"
    if player == 2:
        stone = "o"
    j = 5
    check = True
    while check:
        if spielfeld[j][x-1] == " ":
            spielfeld[j][x-1] = stone
            check = False
            return True
        else:
            if j > 0 : 
                j -= 1
            else:
                return False
 
def checkGame(spielfeld, player):
    if player == 1:
        stone = "x"
    if player == 2:
        stone = "o"
 
    # Horizontal prüfen
    for zeile in spielfeld:
        for x in range(0,4):
            if (zeile[x] == stone) and (zeile[x+1]  == stone) and (zeile[x+2]
                    == stone) and (zeile[x+3] == stone):
                print("Horizontal")
                return True
 
    # Vertikal prüfen
    for y in range(0, 3):  # Zeile
        for x in range(0, 7):  # Spalte
            if (spielfeld[y][x] == stone) and (spielfeld[y+1][x] == stone) and (spielfeld[y+2][x] == stone) and (spielfeld[y+3][x] == stone):
                print("vertikal")
                return True
    return False
 
 
def main():
    spielfeld=""
    print("Willkommen bei 4 Gewinnt!")
    print("Befehle: exit, start")
    eingabe = input("Geben Sie einen Befehl ein:")
    while eingabe != "exit":  # Programmschleife
        neuerunde = input("Runde starten? (ja/nein)")
        if neuerunde == "ja":
            spielende = False
            spielfeld = [[" ", " ", " ", " ", " ", " ", " "],
                     [" ", " ", " ", " ", " ", " ", " "],
                     [" ", " ", " ", " ", " ", " ", " "],
                     [" ", " ", " ", " ", " ", " ", " "],
                     [" ", " ", " ", " ", " ", " ", " "],
                     [" ", " ", " ", " ", " ", " ", " "]]
            counter = 1
            printGamePad(spielfeld)
            while not spielende:
                player = (counter % 2) + 1
                print("Spieler " + str(player) + ": Feld angben:")
                empty = False
                while not empty:
                    eingabe = input("Player {}: ?".format(player))
                    empty = setValue(int(eingabe), spielfeld, player)
                    print("empty:" + str(empty))
                    win = checkGame(spielfeld, player)
                    if win:
                        spielende = True
                counter += 1
                printGamePad(spielfeld)
        else:
            print("auf wiedersehen")
            break
 
if __name__ == "__main__":
    main()
forwins.py
#!/usr/bin/env python3
 
import sys
from os import system
 
# TODO
# Help and restart cmd
 
'''
python3 four wins game
 
choice a name and play
'''
 
'''
- Interaktive Konsole 
    - Kommandos
    - Spielrunde starten
    - Spielrunde beenden
    - Programm beenden
    - Hilfe (Anzeigen aller Kommandos)
    - Nach dem Start des Programms, müssen die Namen der Spieler angeben werden.
    - Spieler sind abwechselnd an der Reihe.
    - Nach jedem Spielzug wird das Spielbrett angezeigt.
    - Das Spiel hat der Spieler gewonnen, der 4 Steine in einer Reihe hat. (Vertikal,
        horizontal, diagonal
'''
 
 
def play(gamefield, stone, pos):
    '''
    get the gamefield, play and geturn the new gamefield
    '''
    for row in reversed(gamefield):
        if row[pos]  == "-":
            row[pos] = stone
            break
    return gamefield
 
def checkfree(gamefield, pos):
    if gamefield[0][pos] == "-":
        return True
    else:
        return False
 
 
def checkwin(gamefield):
    rows = len(gamefield)
    cols = len(gamefield[0])
 
    # check horizontal -
    for row in gamefield:
        for i in range(cols-4):
            if row[i:i+4] == 4*["x"]:
                return "x",  True
            if row[i:i+4] == 4*["o"]:
                return "0",  True
 
    # check vertical |
    for i in range(rows-4):
        for j in range(cols):
            a = gamefield[i][j]
            b = gamefield[i+1][j]
            c = gamefield[i+2][j]
            d = gamefield[i+3][j]
            if [a, b, c, d] == 4 * ["x"]:
                return "x",  True
            if [a, b, c, d] == 4 * ["o"]:
                return "o",  True
 
    # check diagonal /
    for i in range(rows-4):
        for j in range(cols-4):
            a = gamefield[5][j]
            b = gamefield[rows-i-1][j+1]
            c = gamefield[rows-i-2][j+2]
            d = gamefield[rows-i-3][j+3]
            if [a, b, c, d] == 4 * ["x"]:
                return "x",  True
            if [a, b, c, d] == 4 * ["o"]:
                return "o",  True
 
    # check diagonal \
    for i in range(rows-4):
        for j in range(cols-4):
            a = gamefield[i][j]
            b = gamefield[i+1][j+1]
            c = gamefield[i+2][j+2]
            d = gamefield[i+3][j+3]
            if [a, b, c, d] == 4 * ["x"]:
                return "x",  True
            if [a, b, c, d] == 4 * ["o"]:
                return "o",  True
    else:
        return "-", False
 
def creategame():
    # Spielfeldgrösse 6x7 (6 Zeilen, 7 Spalten)
    # rows, cols = (6, 7)
    gamefield = [
    ["-",  "-",  "-",  "-",  "-",  "-",  "-" ],
    ["-",  "-",  "-",  "-",  "-",  "-",  "-" ], 
    ["-",  "-",  "-",  "-",  "-",  "-",  "-" ], 
    ["-",  "-",  "-",  "-",  "-",  "-",  "-" ], 
    ["-",  "-",  "-",  "-",  "-",  "-",  "-" ], 
    ["-",  "-",  "-",  "-",  "-",  "-",  "-" ], 
    ]
    return gamefield
 
 
def showgamefield(gamefield):
 
    system('clear')
 
    no = 70 # print A-G on left side ascii code
    for rows in gamefield:
        print(chr(no), rows)
        no -= 1
    print("+", ["0", "1", "2", "3", "4", "5", "6"])  # print rows-numbers
 
 
def main():
    exitflag = False
 
    # start message
    while not exitflag:
        system("clear")
        startmsg = "Welcome to forwins:\ntype in the x,o or 'exit' to exit"
        print(startmsg)
 
        # type your name or exit
        inp = input("Player: x,o or exit?: ").lower()
        if inp == "exit":
            print("bye bye ...")
            sys.exit()
        else:
            if inp == "x":
                player = True
            else:
                player = False
 
        gameoverflag = False
        winner = "-"
        game = creategame()
 
        while not gameoverflag:
            if player:
                stone = "x"
            if not player:
                stone = "o"
 
            pos = input(stone + ": which field (e.g 3)")
            if pos == "exit":
                print("bye bye ...")
                sys.exit()
            else:
                pos = int(pos)
            if checkfree(game, pos):
                game = play(game, stone, pos)
                showgamefield(game)
                winner,  gameoverflag = checkwin(game)
                if gameoverflag:
                   print("Winner is: ",  winner) 
                player = not player
            else:
                print("col is full, choose other col")
 
 
if __name__ == "__main__":
    main()