diff --git a/__pycache__/bishop.cpython-310.pyc b/__pycache__/bishop.cpython-310.pyc index cbbc8b3..ac0d32b 100644 Binary files a/__pycache__/bishop.cpython-310.pyc and b/__pycache__/bishop.cpython-310.pyc differ diff --git a/__pycache__/board.cpython-310.pyc b/__pycache__/board.cpython-310.pyc index decdaa9..cb46780 100644 Binary files a/__pycache__/board.cpython-310.pyc and b/__pycache__/board.cpython-310.pyc differ diff --git a/__pycache__/game.cpython-310.pyc b/__pycache__/game.cpython-310.pyc index dca92e4..e7261bb 100644 Binary files a/__pycache__/game.cpython-310.pyc and b/__pycache__/game.cpython-310.pyc differ diff --git a/__pycache__/move.cpython-310.pyc b/__pycache__/move.cpython-310.pyc index 1bfe1f9..fce85f0 100644 Binary files a/__pycache__/move.cpython-310.pyc and b/__pycache__/move.cpython-310.pyc differ diff --git a/__pycache__/piece.cpython-310.pyc b/__pycache__/piece.cpython-310.pyc index 64fc705..e68cd18 100644 Binary files a/__pycache__/piece.cpython-310.pyc and b/__pycache__/piece.cpython-310.pyc differ diff --git a/__pycache__/rook.cpython-310.pyc b/__pycache__/rook.cpython-310.pyc index 6a170ef..95557a6 100644 Binary files a/__pycache__/rook.cpython-310.pyc and b/__pycache__/rook.cpython-310.pyc differ diff --git a/bishop.py b/bishop.py index ab72eef..dbf933e 100644 --- a/bishop.py +++ b/bishop.py @@ -2,20 +2,13 @@ from piece import Piece from board import Board from square import Square class Bishop(Piece): - def straightline_moves(self, piece, row, column, isvertical): - if isvertical is True: - self.direction = [ - (0, 1), - (0, -1), - (1, 0), - (-1, 0)] - else: - self.direction = [ - (1, 1), - (-1, -1), - (1, -1), - (-1, 1) - ] + def straightline_moves(self, piece, row, column): + self.direction = [ + (1, 1), + (-1, -1), + (1, -1), + (-1, 1) + ] for dir in self.direction: self.left, self.right = dir self.possible_row = row + self.left diff --git a/board.py b/board.py index 95b948b..0241e73 100644 --- a/board.py +++ b/board.py @@ -1,7 +1,5 @@ from square import Square from piece import Piece -import random - class Board: def __init__(self): self.boardlist = [[0, 0, 0, 0, 0, 0, 0, 0] for x in range(8)] @@ -11,7 +9,6 @@ class Board: self.boardlist[row][column] = Square(row, column) self._add_pieces('white') self._add_pieces('black') - def _add_pieces(self, color): if color == 'white': self.pawn_row = 6 @@ -19,11 +16,6 @@ class Board: else: self.pawn_row = 1 self.other_row = 0 - - self.boardlist[0][0] = Square(0, 0, Piece("king", 'black')) - self.boardlist[2][2] = Square(2, 2, Piece("queen", 'white')) - self.boardlist[2][2] = Square(2, 2, Piece("king", 'white')) -""" #pawns for column in range(8): self.boardlist[self.pawn_row][column] = Square(self.pawn_row, column, Piece("pawn", color)) @@ -40,4 +32,4 @@ class Board: self.boardlist[self.other_row][3] = Square(self.other_row, 3, Piece("queen", color)) #king self.boardlist[self.other_row][4] = Square(self.other_row, 4, Piece("king", color)) -""" + diff --git a/game.py b/game.py index 6f5cb0f..879aa98 100644 --- a/game.py +++ b/game.py @@ -1,52 +1,49 @@ from board import Board from move import Move -import random - class Game: def __init__(self): self.board = Board() - def printBoard(self): self.b = [] for row in range(8): - if row==0: self.b.append('0') + if row == 0: self.b.append('0') if row == 1: self.b.append('1') - if row==2: self.b.append('2') + if row == 2: self.b.append('2') if row == 3: self.b.append('3') - if row==4: self.b.append('4') + if row == 4: self.b.append('4') if row == 5: self.b.append('5') - if row==6: self.b.append('6') + if row == 6: self.b.append('6') if row == 7: self.b.append('7') for column in range(8): if self.board.boardlist[row][column].has_piece(): self.piece = self.board.boardlist[row][column].piece.name self.color=self.board.boardlist[row][column].piece.color if self.piece == 'rook': - if self.color=='white': + if self.color =='white': self.b.append('r') else: self.b.append('R') elif self.piece == 'pawn': - if self.color=='white': + if self.color =='white': self.b.append('p') else: self.b.append('P') elif self.piece == 'knight': - if self.color=='white': + if self.color =='white': self.b.append('h') else: self.b.append('H') elif self.piece == 'bishop': - if self.color=='white': + if self.color =='white': self.b.append('b') else: self.b.append('B') elif self.piece == 'queen': - if self.color=='white': + if self.color =='white': self.b.append('q') else: self.b.append('Q') elif self.piece == 'king': - if self.color=='white': + if self.color =='white': self.b.append('k') else: self.b.append('K') @@ -65,7 +62,6 @@ class Game: self.b.append('H') print(self.b) print('') - def currently_available_moves(self): for row in range(8): for column in range(8): @@ -79,5 +75,4 @@ class Game: else: self.color = Move.move_rival(self, ruch) self.currently_available_moves() - return Move.move_boot(self, self.color) - + return Move.move_boot(self, self.color) \ No newline at end of file diff --git a/main.py b/main.py index bcf6b2e..68cddeb 100644 --- a/main.py +++ b/main.py @@ -3,13 +3,12 @@ import time game = Game() game2 = Game() game.printBoard() -#game2.printBoard() +game2.printBoard() ruch=None - - while True: - print("gra bialy") - time.sleep(2) - ruch=input("Podaj:c") - game.nextMove(ruch) - game.printBoard() \ No newline at end of file + time.sleep(1) + ruch=game.nextMove(ruch) + game.printBoard() + time.sleep(1) + ruch=game2.nextMove(ruch) + game2.printBoard() \ No newline at end of file diff --git a/move.py b/move.py index 0956d8b..0b26673 100644 --- a/move.py +++ b/move.py @@ -14,34 +14,30 @@ class Move: self.from_row = int(ruch[1]) self.to_column = Move.letters_to__numbers(ruch[3]) self.to_row = int(ruch[4]) - #update board self.x = self.board.boardlist[self.from_row][self.from_column].piece self.board.boardlist[self.from_row][self.from_column].piece = None - #Move.mat(self, self.x, self.to_row, self.to_column) self.board.boardlist[self.to_row][self.to_column].piece = self.x Move.pawn_promotion(self, self.x, self.to_row) self.board.boardlist[self.to_row][self.to_column].piece.moved = True return self.board.boardlist[self.to_row][self.to_column].piece.color - - def move_boot(self, color): #kolor przeciwnika - self.x, self.initial_row, self.initial_column, self.final_row, self.final_column = Move.random_valid_move(self, color) + def move_boot(self, color): + self.initial_row, self.initial_column, self.final_row, self.final_column = Move.random_valid_move(self, color) + self.x=self.board.boardlist[self.initial_row][self.initial_column].piece self.board.boardlist[self.initial_row][self.initial_column].piece = None Move.mat(self, self.x, self.final_row, self.final_column) self.board.boardlist[self.final_row][self.final_column].piece = self.x - Move.pawn_promotion(self, self.x, self.final_row) # update piece self.board.boardlist[self.final_row][self.final_column].piece.moved = True self.board.boardlist[self.final_row][self.final_column].piece.delete_moves() - self.initial_column = Move.numbers_to_letters(self.initial_column) self.final_column = Move.numbers_to_letters(self.final_column) self.ruch = str(self.initial_column) + str(self.initial_row) + ' ' + str(self.final_column) + str( self.final_row) return self.ruch - def random_valid_move(self, color): + #usuwanie ruchów z valid_moves, które mogłyby doprowadzić do szachowania króla self.boot_piece = [] self.piece_row_column = [] for r in range(0, 8): @@ -53,37 +49,31 @@ class Move: if Move.check_szach(self, color, r, c, move[0], move[1]) is False: self.kopia.append(move) self.board.boardlist[r][c].piece.valid_moves=self.kopia - for xddr in range(8): - for xddc in range(8): - if self.board.boardlist[xddr][xddc].has_piece() and self.board.boardlist[xddr][xddc].piece.color!=color: - if (len(self.board.boardlist[xddr][xddc].piece.valid_moves)>0): - self.boot_piece.append(self.board.boardlist[xddr][xddc]) + #spis pól z figurami, które mają możliwość ruchu + for r in range(8): + for c in range(8): + if self.board.boardlist[r][c].has_piece() and self.board.boardlist[r][c].piece.color != color: + if (len(self.board.boardlist[r][c].piece.valid_moves)>0): + self.boot_piece.append(self.board.boardlist[r][c]) if (len(self.boot_piece)==0): print("MAT") exit(0) + #losowanie figury self.value = random.randrange(0, len(self.boot_piece)) - self.initial_piece = self.boot_piece[self.value] - while len(self.initial_piece.piece.valid_moves) == 0: - self.value = random.randrange(0, len(self.boot_piece)) - self.initial_piece = self.boot_piece[self.value] - print(self.initial_piece.row, self.initial_piece.column) - self.move_initial_row = self.initial_piece.row - self.move_initial_column = self.initial_piece.column - #random move for piece - self.value = random.randrange(0, len(self.initial_piece.piece.valid_moves)) - self.move_final = self.initial_piece.piece.valid_moves[self.value] - - self.move_final_row = self.move_final[0] - self.move_final_column = self.move_final[1] - self.x = self.board.boardlist[self.move_initial_row][self.move_initial_column].piece - - return self.x, self.move_initial_row, self.move_initial_column, self. move_final_row, self.move_final_column - + self.initial_square = self.boot_piece[self.value] + #losowanie ruchu figury + self.move_initial_row = self.initial_square.row + self.move_initial_column = self.initial_square.column + self.value = random.randrange(0, len(self.initial_square.piece.valid_moves)) + self.move_final_square = self.initial_square.piece.valid_moves[self.value] + self.move_final_row = self.move_final_square[0] + self.move_final_column = self.move_final_square[1] + return self.move_initial_row, self.move_initial_column, self. move_final_row, self.move_final_column #, self.x def calc_moves(self, piece, row, column): #piece.delete_moves() piece.valid_moves=[] if piece.name == 'rook': - Rook.straightline_moves(self, piece, row, column,True) + Rook.straightline_moves(self, piece, row, column) pass elif piece.name == 'pawn': Pawn.pawn_moves(self, piece, row, column) @@ -92,7 +82,7 @@ class Move: Knight.knight_moves(self, piece, row, column) elif piece.name == 'bishop': pass - Bishop.straightline_moves(self, piece, row, column,False) + Bishop.straightline_moves(self, piece, row, column) elif piece.name == 'queen': pass Queen.straightline_moves(self, piece, row, column,True) @@ -100,36 +90,28 @@ class Move: elif piece.name == 'king': King.king_moves(self, piece, row, column) pass - def pawn_promotion(self, x, final_row): if x.name == "pawn": if (final_row == 0) or (final_row == 7): - x.name == "queen" + x.name = "queen" def mat(self, x, final_row, final_column): if self.board.boardlist[final_row][final_column].has_piece(): if self.board.boardlist[final_row][final_column].piece.name == 'king': - - print("MAT") exit(0) pass - - def check_szach(self, color, initial_row, initial_column, final_row, final_column):#kolor przeciwnika - + def check_szach(self, color, initial_row, initial_column, final_row, final_column): + #zapisanie poprzedniego ustawienia tablicy i wykonanie ruchu self.piece = self.board.boardlist[initial_row][initial_column].piece self.previous_piece = self.board.boardlist[final_row][final_column].piece self.board.boardlist[initial_row][initial_column].piece = None self.board.boardlist[final_row][final_column].piece = self.piece - for rowxd in range(8): - for columnxd in range(8): - if self.board.boardlist[rowxd][columnxd].has_piece(): - if self.board.boardlist[rowxd][columnxd].piece.color == color: - Move.calc_moves(self, self.board.boardlist[rowxd][columnxd].piece, rowxd, columnxd) - for r1 in range(8): - for c1 in range(8): - if self.board.boardlist[r1][c1].has_piece(): - if self.board.boardlist[r1][c1].piece.name=='king' and self.board.boardlist[r1][c1].piece.color != color: - self.king_position= (r1,c1) - #tu skonczylas + for r in range(8): + for c in range(8): + if self.board.boardlist[r][c].has_piece(): + if self.board.boardlist[r][c].piece.color == color: + Move.calc_moves(self, self.board.boardlist[r][c].piece, r, c) + elif self.board.boardlist[r][c].piece.name=='king': + self.king_position = (r, c) for r2 in range(8): for c2 in range(8): if self.board.boardlist[r2][c2].has_piece(): @@ -137,16 +119,12 @@ class Move: if self.king_position in self.board.boardlist[r2][c2].piece.valid_moves: self.board.boardlist[final_row][final_column].piece=self.previous_piece self.board.boardlist[initial_row][initial_column].piece= self.piece - #print("XXXXXXXXXXXXXXXXXXX") for rowxd2 in range(8): for columnxd2 in range(8): if self.board.boardlist[rowxd2][columnxd2].has_piece(): if self.board.boardlist[rowxd2][columnxd2].piece.color == color: Move.calc_moves(self, self.board.boardlist[rowxd2][columnxd2].piece, rowxd2,columnxd2) - #print("valid moves przeciwnika") - #print(self.board.boardlist[r2][c2].piece.valid_moves) return True - self.board.boardlist[final_row][final_column].piece = self.previous_piece self.board.boardlist[initial_row][initial_column].piece = self.piece for rowxd in range(8): @@ -156,9 +134,6 @@ class Move: if self.board.boardlist[rowxd][columnxd].piece.color == color: Move.calc_moves(self, self.board.boardlist[rowxd][columnxd].piece, rowxd, columnxd) return False - - - @staticmethod def numbers_to_letters(number): if number == 0: @@ -178,7 +153,6 @@ class Move: elif number == 7: number = "H" return number - @staticmethod def letters_to__numbers(letter): if letter == 'A': @@ -197,4 +171,4 @@ class Move: letter = 6 elif letter == 'H': letter = 7 - return letter + return letter \ No newline at end of file diff --git a/piece.py b/piece.py index 475936d..2129cd7 100644 --- a/piece.py +++ b/piece.py @@ -5,16 +5,11 @@ class Piece: self.valid_moves = [] self.moved = False if color == 'white': - if (self.name=='king'): - self.where_king=(3,7) self.pawn_direction = -1 else: self.pawn_direction = 1 - if (self.name=='king'): - self.where_king=(3,7) def add_moves(self, move): self.valid_moves.append(move) - def delete_moves(self): self.valid_moves = [] def change_where_king(self, move): diff --git a/rook.py b/rook.py index 6cde0bd..917a14c 100644 --- a/rook.py +++ b/rook.py @@ -2,20 +2,14 @@ from piece import Piece from board import Board from square import Square class Rook(Piece): - def straightline_moves(self, piece, row, column, isvertical): - if isvertical is True: - self.direction = [ - (0, 1), - (0, -1), - (1, 0), - (-1, 0)] - else: - self.direction = [ - (1, 1), - (-1, -1), - (1, -1), - (-1, 1) - ] + def straightline_moves(self, piece, row, column): + + self.direction = [ + (0, 1), + (0, -1), + (1, 0), + (-1, 0) + ] for dir in self.direction: self.left, self.right = dir self.possible_row = row + self.left