主要内容 #
-
- 24点游戏的主函数完善
1.24点游戏的主函数完善 #
前面几课我们已经完成了界面设计,类的定义,显示功能等,现在主要是将main函数的功能流程进行完善,代码实现如下:
def main(): ''' 主函数 ''' # 初始化, 导入必要的游戏素材 pygame.init() pygame.mixer.init() screen = pygame.display.set_mode(SCREENSIZE) pygame.display.set_caption('24点小游戏-大师码') win_sound = pygame.mixer.Sound(AUDIOWINPATH) lose_sound = pygame.mixer.Sound(AUDIOLOSEPATH) warn_sound = pygame.mixer.Sound(AUDIOWARNPATH) pygame.mixer.music.load(BGMPATH) pygame.mixer.music.play(-1, 0.0) # 24点游戏生成器 game24_gen = Game24Generator() game24_gen.generate() # 精灵组 # --数字 number_sprites_group = getNumberSpritesGroup(game24_gen.numbers_now) # --运算符 operator_sprites_group = getOperatorSpritesGroup(OPREATORS) # --按钮 button_sprites_group = getButtonSpritesGroup(BUTTONS) # 游戏主循环 clock = pygame.time.Clock() selected_numbers = [] selected_operators = [] selected_buttons = [] is_win = False while True: for event in pygame.event.get(): if event.type == pygame.QUIT: # 是否退出 pygame.quit() sys.exit(-1) elif event.type == pygame.MOUSEBUTTONUP: # 检测鼠标是否点击三个不同的按钮 mouse_pos = pygame.mouse.get_pos() selected_numbers = checkClicked(number_sprites_group, mouse_pos, 'NUMBER') selected_operators = checkClicked(operator_sprites_group, mouse_pos, 'OPREATOR') selected_buttons = checkClicked(button_sprites_group, mouse_pos, 'BUTTON') screen.fill(AZURE) # 更新数字 if len(selected_numbers) == 2 and len(selected_operators) == 1: # 选择两个操作数和一个操作符 noselected_numbers = [] for each in number_sprites_group: # 遍历数字组 if each.is_selected: # 如果被选中 if each.select_order == '1': # 选中的次序 selected_number1 = each.attribute elif each.select_order == '2': selected_number2 = each.attribute else: raise ValueError('Unknow select_order <%s>, expect <1> or <2>...' % each.select_order) else: # 未被选中则加入未选中列表 noselected_numbers.append(each.attribute) each.is_selected = False for each in operator_sprites_group: # 遍历字符组 each.is_selected = False result = calculate(selected_number1, selected_number2, *selected_operators) # 计算结果 if result is not None: game24_gen.numbers_now = noselected_numbers + [result] # 更新数字为Result is_win = game24_gen.check() # 检测是否胜利 if is_win: win_sound.play() # 播放胜利音效 if not is_win and len(game24_gen.numbers_now) == 1: # 如果没赢并且只剩下一个数字还不是24说明游戏失败 lose_sound.play() # 播放失败音效 else: warn_sound.play() # 结果为空,播放警告音效 selected_numbers = [] selected_operators = [] number_sprites_group = getNumberSpritesGroup(game24_gen.numbers_now) # 由于数字在逐渐变少,因此需要重新绘出数字精灵组 # 精灵都画到screen上 for each in number_sprites_group: each.draw(screen, pygame.mouse.get_pos()) # 画出数字精灵 for each in operator_sprites_group: each.draw(screen, pygame.mouse.get_pos()) # 画出操作符精灵 for each in button_sprites_group: if selected_buttons and selected_buttons[0] in ['RESET', 'NEXT']: is_win = False # 如果选择按钮是'RESET'或者'NEXT',则将成功标志设为否 if selected_buttons and each.attribute == selected_buttons[0]: each.is_selected = False # 根据button function执行响应操作 number_sprites_group = each.do(game24_gen, getNumberSpritesGroup, number_sprites_group, button_sprites_group) selected_buttons = [] each.draw(screen, pygame.mouse.get_pos()) # 画出按钮精灵 # 游戏胜利 if is_win: showInfo('Congratulations', screen) # 游戏失败 if not is_win and len(game24_gen.numbers_now) == 1: showInfo('Game Over', screen) pygame.display.update() clock.tick(30)
全部修改完之后,运行整体代码,看整体效果。
至此完成了24点游戏所有的代码部分,希望大家可以对代码进行深入理解,并且尝试修改代码,完成新的功能,比如改为21点等。
小结 #
- 本节主要介绍了24点游戏的主循环start函数的完善,至此24点游戏开发完成。