Ich hatte ja letztens vor, ein konsolenbasiertes Schachspiel zu programmieren aber angesichts der Tatsache, dass ich neu in Python bin und noch nicht viel mit OOP gemacht hab, hab ich mir gedacht, dass Schach fürs erste doch etwas zu Komplex für das erste Python-Projekt wäre.
Also hab ich mich für 4-Gewinnt entschieden, da das sehr viel simpler ist.
Was haltet ihr von meinem Code?
Code: Alles auswählen
# -*- coding: cp1252 -*-
class Board:
def __init__(self, rows, colums):
self.board = [0] * rows
self.rows = rows
self.colums = colums
for x in range(0, rows):
self.board[x] = [0] * colums
def __str__(self):
board = ""
for i in range(0, self.colums):
board = board + " " + str(i + 1) + " " * 3
board = board + "\n\n"
for row in range(0, self.rows):
for col in range(0, self.colums):
if self.board[row][col] == 0:
board = board + " - | "
else:
board = board + " " + str(self.board[row][col]) + " | "
board = board + "\n" + (self.colums * 5 - 1) * "-" + "\n"
return board
def __getitem__(self, key):
return self.board[key]
def ChangeValue(self, row, col, value):
self.board[row][col] = value
class Player:
def __init__(self, id, name):
self.id = id
self.name = name
class ConnectFour:
def __init__(self, player1, player2, rows = 6, colums = 7):
self.board = Board(rows, colums)
self.player = [Player("X", player1), Player("O", player2)]
self.turn = 0
def __str__(self):
return '-' * 30 + "\n" + str(self.board) + "\nPlayer 1: " + self.player[0].name + " [" + self.player[0].id + "]\nPlayer 2: " + self.player[1].name + " [" + self.player[1].id + "]" + "\n" + '-' * 30 + "\n"
def ChangeTurn(self):
if self.turn == 0:
self.turn = 1
else:
self.turn = 0
def DropDisc(self, col):
result = ""
for i in range(0, self.board.rows):
if self.board[i][col] == 0:
result = i
else:
break
if result == "":
raise -1
self.board[result][col] = self.player[self.turn].id
def CheckWin(self):
# Check vertical
count = 0
for row in range(0, self.board.rows):
for col in range(0, self.board.colums):
if self.board[row][col] == self.player[self.turn].id:
count += 1
if count == 4:
return self.player[self.turn].id
else:
count = 0
# Check horizontal
count = 0
for col in range(0, self.board.colums):
for row in range(0, self.board.rows):
if self.board[row][col] == self.player[self.turn].id:
count += 1
if count == 4:
return self.player[self.turn].id
else:
count = 0
# Check diagonal
count1 = 0
count2 = 0
for row in range(0, self.board.rows - 3):
for col in range(0, self.board.colums - 3):
for i in range(0, 4):
if self.board[row + i][col + i] == self.player[self.turn].id:
count1 += 1
else:
count1 = 0
if self.board[row + i][col + 3 - i] == self.player[self.turn].id:
count2 += 1
else:
count2 = 0
if count1 == 4 or count2 == 4:
return self.player[self.turn].id
return 0
def play(self):
while(1):
try:
print str(self.player[self.turn].name) + " ist an der Reihe\nWo möchtest du setzen?"
row = input()
self.DropDisc(row - 1)
print str(self) + "\n"
if self.CheckWin() != 0:
print self.player[self.turn].name + " Hat gewonnen!!!"
break
self.ChangeTurn()
except:
print "\nUngültige Eingabe!\n"
x = ConnectFour("Karl", "Horst")
x.play()
Meint ihr der Code lässt sich dafür weiterverwenden?
Ich muss mir erstmal die ganzen Module anschauen, die ich überhaupt für die Netzwerkfunktion brauche und mir das dann aneignen, deswegen kann ich das noch relativ schlecht beurteilen.