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()