Ejemplo n.º 1
0
def main(twoPlayer, playComputer, White, Black):
	black_player = chessboard.setBlack()
	white_player = chessboard.setWhite()
	players = chessboard.Players()
	for sprites in black_player.sprites():
		players.add(sprites)
	for sprites in white_player.sprites():
		players.add(sprites)
	black_pieces = black_player.sprites()
	white_pieces = white_player.sprites()
	Pieces = black_pieces + white_pieces 
	blackPiece = []
	whitePiece = []

	screen = pygame.display.set_mode((640, 640))
	gridsquare = chessboard.convert(pygame.Surface((80, 80)).convert_alpha())
	board = pygame.image.load('chessboard.gif').convert()
	board = pygame.transform.scale(board, (640, 640))
	
	clearBoard = pygame.image.load('chessboard.gif').convert()
	clearBoard = pygame.transform.scale(clearBoard, (640, 640))
	
	players.draw(board)
	screen.blit(board, (0, 0))
	grid = []
	newPiece = None
	for y in range(0, 640, 80):
		for x in range(0, 640, 80):
			occupied = False
			for piece in Pieces:
				if piece.xpos == x + 40 and piece.ypos == y + 40:
					occupied = True
					newPiece = piece
			if occupied:
				s = chessboard.Square(gridsquare, x, y, newPiece)
				#screen.blit(s.image, (x, y))
				grid.append(s)
			else:
				s = chessboard.Square(gridsquare, x, y, None)
				#screen.blit(s.image, (x, y))
				grid.append(s)
	pygame.display.update()
	checkmate = False
	stalemate = False
	turn = True
	whiteKing = None
	blackKing = None
	whiteCount = 0
	blackCount = 0
	
	while True:
		while not checkmate and not stalemate:
			for event in pygame.event.get():
				if event.type == pygame.QUIT:
					sys.exit() 
			
			if twoPlayer:
				while turn and not checkmate and not stalemate:
					for event in pygame.event.get():
						if event.type == pygame.QUIT:
							sys.exit() 
					turn = user.movement_whitePlayer(white_player, event, grid, whitePiece, screen, board, clearBoard, black_player, players)

				black_pieces = black_player.sprites()
				if len(black_pieces) == 1:
					whiteCount += 1
			
				for black_piece in black_player:
					if type(black_piece) == chessboard.King:
						blackKing = black_piece		

				checkmate = blackKing.checkmate(black_player, white_player, grid)	
				stalemate = blackKing.stalemate(black_player, white_player, grid)	
				if whiteCount == 50:
					stalemate = True

				elif len(white_pieces) == 1 and len(black_pieces) == 1:
					stalemate = True

				while not turn and not checkmate and not stalemate:
					for event in pygame.event.get():
						if event.type == pygame.QUIT:
							sys.exit()
					turn = user.movement_blackPlayer(black_player, event, grid, blackPiece, screen, board, clearBoard, white_player, players)
					
				white_pieces = white_player.sprites()
				if len(white_pieces) == 1:
					blackCount += 1

				for white_piece in white_player:
					if type(white_piece) == chessboard.King:
						whiteKing = white_piece

				if not checkmate and not stalemate: 
					checkmate = whiteKing.checkmate(white_player, black_player, grid)
					stalemate = whiteKing.stalemate(white_player, black_player, grid)
				if blackCount == 50:
					stalemate = True

				elif len(white_pieces) == 1 and len(black_pieces) == 1:
					stalemate = True
			
			elif playComputer:
				if White:
					while turn and not checkmate and not stalemate:
						for event in pygame.event.get():
							if event.type == pygame.QUIT:
								sys.exit()
						turn = user.movement_whitePlayer(white_player, event, grid, whitePiece, screen, board, clearBoard, black_player, players)

					black_pieces = black_player.sprites()
					if len(black_pieces) == 1:
						whiteCount += 1
			
					for black_piece in black_player:
						if type(black_piece) == chessboard.King:
							blackKing = black_piece		

					checkmate = blackKing.checkmate(black_player, white_player, grid)	
					stalemate = blackKing.stalemate(black_player, white_player, grid)	
					if whiteCount == 50:
						stalemate = True

					elif len(white_pieces) == 1 and len(black_pieces) == 1:
						stalemate = True

					if not turn and not checkmate and not stalemate:
						for event in pygame.event.get():
							if event.type == pygame.QUIT:
								sys.exit()
						turn = AI.movement_blackPlayer(black_player, event, grid, screen, board, clearBoard, white_player, players)

					white_pieces = white_player.sprites()
					if len(white_pieces) == 1:
						blackCount += 1

					for white_piece in white_player:
						if type(white_piece) == chessboard.King:
							whiteKing = white_piece

					if not checkmate and not stalemate: 
						checkmate = whiteKing.checkmate(white_player, black_player, grid)
						stalemate = whiteKing.stalemate(white_player, black_player, grid)
					if blackCount == 50:
						stalemate = True

					elif len(white_pieces) == 1 and len(black_pieces) == 1:
						stalemate = True

					#turn = True
				
				elif Black:
					if turn and not checkmate and not stalemate:
						for event in pygame.event.get():
							if event.type == pygame.QUIT:
								sys.exit()
						turn = AI.movement_whitePlayer(white_player, event, grid, screen, board, clearBoard, black_player, players)

					black_pieces = black_player.sprites()
					if len(black_pieces) == 1:
						whiteCount += 1
			
					for black_piece in black_player:
						if type(black_piece) == chessboard.King:
							blackKing = black_piece		

					checkmate = blackKing.checkmate(black_player, white_player, grid)	
					stalemate = blackKing.stalemate(black_player, white_player, grid)	
					if whiteCount == 50:
						stalemate = True

					elif len(white_pieces) == 1 and len(black_pieces) == 1:
						stalemate = True

					while not turn and not checkmate and not stalemate:
						for event in pygame.event.get():
							if event.type == pygame.QUIT:
								sys.exit()
						turn = user.movement_blackPlayer(black_player, event, grid, blackPiece, screen, board, clearBoard, white_player, players)

					white_pieces = white_player.sprites()
					if len(white_pieces) == 1:
						blackCount += 1

					for white_piece in white_player:
						if type(white_piece) == chessboard.King:
							whiteKing = white_piece

					if not checkmate and not stalemate: 
						checkmate = whiteKing.checkmate(white_player, black_player, grid)
						stalemate = whiteKing.stalemate(white_player, black_player, grid)
					if blackCount == 50:
						stalemate = True

					elif len(white_pieces) == 1 and len(black_pieces) == 1:
						stalemate = True

		text = pygame.font.Font(None, 25)
		prompt = None
		if blackKing.checkmate(black_player, white_player, grid):
			prompt = text.render("White Won: Press Y to play again, Press N for menu", True, (0, 0, 255))
		elif whiteKing.checkmate(white_player, black_player, grid):
			prompt = text.render("Black Won: Press Y to play again, Press N for menu", True, (0, 0, 255))
		elif stalemate:
			prompt = text.render("Draw: Press Y to play again, Press N for menu", True, (0, 0, 255))
		players.clear(board, clearBoard)
		players.draw(board)
		screen.blit(board, (0, 0))
		select = False
		while not select:
			screen.blit(prompt, (0, 320))
			pygame.display.update()
			pygame.event.pump()
			keys = pygame.key.get_pressed()
			if keys[pygame.K_y]:
				players.clear(board, clearBoard)
				players.empty()
				black_player = chessboard.setBlack()
				white_player = chessboard.setWhite()
				for sprites in black_player.sprites():
					players.add(sprites)
				for sprites in white_player.sprites():
					players.add(sprites)
				black_pieces = black_player.sprites()
				white_pieces = white_player.sprites()
				Pieces = black_pieces + white_pieces 
				blackPiece = []
				whitePiece = []
				players.draw(board)
				screen.blit(board, (0, 0))
				grid = []
				newPiece = None
				for y in range(0, 640, 80):
					for x in range(0, 640, 80):
						occupied = False
						for piece in Pieces:
							if piece.xpos == x + 40 and piece.ypos == y + 40:
								occupied = True
								newPiece = piece
						if occupied:
							s = chessboard.Square(gridsquare, x, y, newPiece)
							#screen.blit(s.image, (x, y))
							grid.append(s)
						else:
							s = chessboard.Square(gridsquare, x, y, None)
							#screen.blit(s.image, (x, y))
							grid.append(s)
				pygame.display.update()
				checkmate = False
				stalemate = False
				turn = True
				whiteKing = None
				blackKing = None
				whiteCount = 0
				blackCount = 0
				select = True
			elif keys[pygame.K_n]:
				menu.main()