python开发五子棋4 #
- 画出棋子
- 落子动作函数的实现
收获 #
了解python类函数的定义方法和原理,完成五子棋棋子的绘制、交互动作的实现和游戏中棋子的更新。
画出棋子 #
本小节为五子棋棋子的绘制方法和对应位置信息的实现.
#######################在五子棋2的from pygame.locals import *后面添加以下代码########
import pygame.gfxdraw
from checkerboard import Checkerboard, BLACK_CHESSMAN, WHITE_CHESSMAN, Point
Stone_Radius = SIZE // 2 - 3 # 棋子半径
Stone_Radius2 = SIZE // 2 + 3
Checkerboard_Color = (0xE3, 0x92, 0x65) # 棋盘颜色
BLACK_COLOR = (0, 0, 0)
WHITE_COLOR = (255, 255, 255)
RED_COLOR = (200, 30, 30)
BLUE_COLOR = (30, 30, 200)
BLACK_STONE_COLOR = (45, 45, 45)
WHITE_STONE_COLOR = (219, 219, 219)
RIGHT_INFO_POS_X = SCREEN_HEIGHT + Stone_Radius2 * 2 + 10
#######################在五子棋2的_draw_checkerboard()函数后面添加以下代码作为新的功能函数########
# 画棋子
def _draw_chessman(screen, point, stone_color):
# pygame.draw.circle(screen, stone_color, (Start_X + SIZE * point.X, Start_Y + SIZE * point.Y), Stone_Radius)
pygame.gfxdraw.aacircle(screen, Start_X + SIZE * point.X, Start_Y + SIZE * point.Y, Stone_Radius, stone_color)
pygame.gfxdraw.filled_circle(screen, Start_X + SIZE * point.X, Start_Y + SIZE * point.Y, Stone_Radius, stone_color)
def _draw_chessman_pos(screen, pos, stone_color):
pygame.gfxdraw.aacircle(screen, pos[0], pos[1], Stone_Radius2, stone_color)
pygame.gfxdraw.filled_circle(screen, pos[0], pos[1], Stone_Radius2, stone_color)
# 在后端输出
def print_text(screen, font, x, y, text, fcolor=(255, 255, 255)):
imgText = font.render(text, True, fcolor)
screen.blit(imgText, (x, y))
落子动作函数的实现 #
通过pygame库获取鼠标的点击位置,并根据棋盘建立时设置的长、宽、高将其转换为棋盘上的坐标,从而方便进行棋子的绘制。
#######################在五子棋2的_draw_chessman_pos()函数后面添加以下代码作为新的功能函数########
# 获取鼠标点击位置,传入参数为pygame库获取的鼠标点击位置
def _get_clickpoint(click_pos):
pos_x = click_pos[0] - Start_X # 点击的位置在棋盘中的横坐标
pos_y = click_pos[1] - Start_Y # 点击的位置在棋盘中的纵坐标
if pos_x < -Inside_Width or pos_y < -Inside_Width: # 若越界
return None
x = pos_x // SIZE # 以棋子的大小为单位计算
y = pos_y // SIZE
# 修正点击位置,当用户点击位置与交点有偏差时自动修正
if pos_x % SIZE > Stone_Radius:
x += 1
if pos_y % SIZE > Stone_Radius:
y += 1
if x >= Line_Points or y >= Line_Points: # 恰好在中间位置时不修正
return None
return Point(x, y) # 返回游戏区的坐标
小结 #
本节介绍了五子棋棋子、动作函数实现和更新方法,需要掌握pygame的调用方法,以及棋子动作交互功能的实现