python开发五子棋5 #
- 主函数的消息事件的判断与更新
- 五子棋输赢结果的展示
收获 #
了解五子棋主函数消息事件的判断与更新方法,通过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的调用方法,动作消息的功能实现和棋盘棋子的更新