isvertical()
This commit is contained in:
parent
5c9d3fd678
commit
0ff179d9ff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
21
bishop.py
21
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
|
||||
|
10
board.py
10
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))
|
||||
"""
|
||||
|
||||
|
27
game.py
27
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)
|
15
main.py
15
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()
|
||||
time.sleep(1)
|
||||
ruch=game.nextMove(ruch)
|
||||
game.printBoard()
|
||||
time.sleep(1)
|
||||
ruch=game2.nextMove(ruch)
|
||||
game2.printBoard()
|
92
move.py
92
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
|
5
piece.py
5
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):
|
||||
|
22
rook.py
22
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
|
||||
|
Loading…
Reference in New Issue
Block a user