isvertical()

This commit is contained in:
Agata Halik 2023-06-19 20:11:22 +02:00
parent 5c9d3fd678
commit 0ff179d9ff
13 changed files with 67 additions and 125 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -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

View File

@ -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))
"""

27
game.py
View File

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

15
main.py
View File

@ -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()
time.sleep(1)
ruch=game.nextMove(ruch)
game.printBoard()
time.sleep(1)
ruch=game2.nextMove(ruch)
game2.printBoard()

92
move.py
View File

@ -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

View File

@ -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):

22
rook.py
View File

@ -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