跳至正文
View Categories

2 min read

python开发五子棋5 #

  1. 主函数的消息事件的判断与更新
  2. 五子棋输赢结果的展示

收获 #

了解五子棋主函数消息事件的判断与更新方法,通过PyGame实践学会独立建立和更新项目,完成五子棋游戏主函数的开发

主函数的消息事件的判断与更新 #

本小节为五子棋棋子触发规则的条件设置,包括游戏退出,点击鼠标落子和超出边界区域的情况等

#############################将上几节已定义的主函数替换更新为下面的函数##########################
def main():
    pygame.init()
    screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
    pygame.display.set_caption('五子棋')

    font1 = pygame.font.SysFont('SimHei', 36)
    font2 = pygame.font.SysFont('SimHei', 72)
    fwidth, fheight = font2.size('黑方获胜')

    checkerboard = Checkerboard(Line_Points)
    cur_runner = BLACK_CHESSMAN
    winner = None

    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                sys.exit()
            elif event.type == KEYDOWN:
                if event.key == K_RETURN:
                    if winner is not None:
                        winner = None
                        cur_runner = BLACK_CHESSMAN
                        checkerboard = Checkerboard(Line_Points)
            elif event.type == MOUSEBUTTONDOWN:
                if winner is None:
                    pressed_array = pygame.mouse.get_pressed()
                    if pressed_array[0]:
                        mouse_pos = pygame.mouse.get_pos()
                        click_point = _get_clickpoint(mouse_pos)
                        if click_point is not None:
                            if checkerboard.can_drop(click_point):
                                winner = checkerboard.drop(cur_runner, click_point)
                                if cur_runner == BLACK_CHESSMAN:
                                    cur_runner = WHITE_CHESSMAN
                                else:
                                    cur_runner = BLACK_CHESSMAN
                        else:
                            print('超出棋盘区域')

五子棋输赢结果的展示 #

本小节为五子棋满足五子相连的结果进而触发输赢结果的步骤开发.

####################在while True 语句下,跳出for event in pygame.event.get()循环后添加下列代码##############
# 画棋盘
_draw_checkerboard(screen)

# 画棋盘上已有的棋子
for i, row in enumerate(checkerboard.checkerboard):
    for j, cell in enumerate(row):
        if cell == BLACK_CHESSMAN.Value:
            _draw_chessman(screen, Point(j, i), BLACK_CHESSMAN.Color)
        elif cell == WHITE_CHESSMAN.Value:
            _draw_chessman(screen, Point(j, i), WHITE_CHESSMAN.Color)

_draw_chessman_pos(screen, (SCREEN_HEIGHT + Stone_Radius2, Start_X + 20), BLACK_STONE_COLOR)
_draw_chessman_pos(screen, (SCREEN_HEIGHT + Stone_Radius2, Start_X + 20 + Stone_Radius2 * 3), WHITE_STONE_COLOR)

if winner:
    print_text(screen, font2, (SCREEN_WIDTH - fwidth)//2, (SCREEN_HEIGHT - fheight)//2, winner.Name + '获胜', RED_COLOR)

if cur_runner == BLACK_CHESSMAN:
    print_text(screen, font1, RIGHT_INFO_POS_X, Start_X, '获胜' if winner else '落子中', BLUE_COLOR)
else:
    print_text(screen, font1, RIGHT_INFO_POS_X, Start_X + Stone_Radius2 * 3, '获胜' if winner else '落子中', BLUE_COLOR)

pygame.display.flip()

小结 #

本节介绍了五子棋棋盘初始化,棋盘检查,动作消息的判断更新,棋盘棋子的绘制,结果的展示等. 需要掌握五子棋人人交战的主函数原理,pygame的调用方法,动作消息的功能实现和棋盘棋子的更新