最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)24點(diǎn)小游戲

 更新時(shí)間:2021年09月24日 16:13:15   作者:紅目香薰  
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)24點(diǎn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Python實(shí)現(xiàn)24點(diǎn)小游戲的具體代碼,供大家參考,具體內(nèi)容如下

玩法:通過加減乘除操作,小學(xué)生都沒問題的。

源碼分享:

import os
import sys
import pygame
from cfg import *
from modules import *
from fractions import Fraction
 
 
'''檢查控件是否被點(diǎn)擊'''
def checkClicked(group, mouse_pos, group_type='NUMBER'):
    selected = []
    # 數(shù)字卡片/運(yùn)算符卡片
    if group_type == GROUPTYPES[0] or group_type == GROUPTYPES[1]:
        max_selected = 2 if group_type == GROUPTYPES[0] else 1
        num_selected = 0
        for each in group:
            num_selected += int(each.is_selected)
        for each in group:
            if each.rect.collidepoint(mouse_pos):
                if each.is_selected:
                    each.is_selected = not each.is_selected
                    num_selected -= 1
                    each.select_order = None
                else:
                    if num_selected < max_selected:
                        each.is_selected = not each.is_selected
                        num_selected += 1
                        each.select_order = str(num_selected)
            if each.is_selected:
                selected.append(each.attribute)
    # 按鈕卡片
    elif group_type == GROUPTYPES[2]:
        for each in group:
            if each.rect.collidepoint(mouse_pos):
                each.is_selected = True
                selected.append(each.attribute)
    # 拋出異常
    else:
        raise ValueError('checkClicked.group_type unsupport %s, expect %s, %s or %s...' % (group_type, *GROUPTYPES))
    return selected
 
 
'''獲取數(shù)字精靈組'''
def getNumberSpritesGroup(numbers):
    number_sprites_group = pygame.sprite.Group()
    for idx, number in enumerate(numbers):
        args = (*NUMBERCARD_POSITIONS[idx], str(number), NUMBERFONT, NUMBERFONT_COLORS, NUMBERCARD_COLORS, str(number))
        number_sprites_group.add(Card(*args))
    return number_sprites_group
 
 
'''獲取運(yùn)算符精靈組'''
def getOperatorSpritesGroup(operators):
    operator_sprites_group = pygame.sprite.Group()
    for idx, operator in enumerate(operators):
        args = (*OPERATORCARD_POSITIONS[idx], str(operator), OPERATORFONT, OPREATORFONT_COLORS, OPERATORCARD_COLORS, str(operator))
        operator_sprites_group.add(Card(*args))
    return operator_sprites_group
 
 
'''獲取按鈕精靈組'''
def getButtonSpritesGroup(buttons):
    button_sprites_group = pygame.sprite.Group()
    for idx, button in enumerate(buttons):
        args = (*BUTTONCARD_POSITIONS[idx], str(button), BUTTONFONT, BUTTONFONT_COLORS, BUTTONCARD_COLORS, str(button))
        button_sprites_group.add(Button(*args))
    return button_sprites_group
 
 
'''計(jì)算'''
def calculate(number1, number2, operator):
    operator_map = {'+': '+', '-': '-', '×': '*', '÷': '/'}
    try:
        result = str(eval(number1+operator_map[operator]+number2))
        return result if '.' not in result else str(Fraction(number1+operator_map[operator]+number2))
    except:
        return None
 
 
'''在屏幕上顯示信息'''
def showInfo(text, screen):
    rect = pygame.Rect(200, 180, 400, 200)
    pygame.draw.rect(screen, PAPAYAWHIP, rect)
    font = pygame.font.Font(FONTPATH, 40)
    text_render = font.render(text, True, BLACK)
    font_size = font.size(text)
    screen.blit(text_render, (rect.x+(rect.width-font_size[0])/2, rect.y+(rect.height-font_size[1])/2))
 
 
'''主函數(shù)'''
def main():
    # 初始化, 導(dǎo)入必要的游戲素材
    pygame.init()
    pygame.mixer.init()
    screen = pygame.display.set_mode(SCREENSIZE)
    pygame.display.set_caption('24 point —— 九歌')
    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點(diǎn)游戲生成器
    game24_gen = game24Generator()
    game24_gen.generate()
    # 精靈組
    # --數(shù)字
    number_sprites_group = getNumberSpritesGroup(game24_gen.numbers_now)
    # --運(yùn)算符
    operator_sprites_group = getOperatorSpritesGroup(OPREATORS)
    # --按鈕
    button_sprites_group = getButtonSpritesGroup(BUTTONS)
    # 游戲主循環(huán)
    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)
        # 更新數(shù)字
        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]
                is_win = game24_gen.check()
                if is_win:
                    win_sound.play()
                if not is_win and len(game24_gen.numbers_now) == 1:
                    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
            if selected_buttons and each.attribute == selected_buttons[0]:
                each.is_selected = False
                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.flip()
        clock.tick(30)
 
 
'''run'''
if __name__ == '__main__':
    main()

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Django如何利用uwsgi和nginx修改代碼自動(dòng)重啟

    Django如何利用uwsgi和nginx修改代碼自動(dòng)重啟

    這篇文章主要介紹了Django如何利用uwsgi和nginx修改代碼自動(dòng)重啟問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • python繪制春節(jié)煙花的示例代碼

    python繪制春節(jié)煙花的示例代碼

    這篇文章主要介紹了使用python 實(shí)現(xiàn)的簡(jiǎn)單春節(jié)煙花效果的示例代碼,請(qǐng)注意,運(yùn)行本文的代碼之前,請(qǐng)確保計(jì)算機(jī)上已經(jīng)安裝了Pygame庫(kù),需要的朋友可以參考下
    2024-02-02
  • python搶購(gòu)軟件/插件/腳本附完整源碼

    python搶購(gòu)軟件/插件/腳本附完整源碼

    這篇文章主要介紹了python搶購(gòu)軟件/插件/腳本附完整源碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 詳解Python+opencv裁剪/截取圖片的幾種方式

    詳解Python+opencv裁剪/截取圖片的幾種方式

    這篇文章主要介紹了詳解Python+opencv裁剪/截取圖片的幾種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python信號(hào)量,條件變量和事件詳解

    python信號(hào)量,條件變量和事件詳解

    這篇文章主要為大家介紹了python的信號(hào)量,條件變量和事件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Python ORM框架SQLAlchemy學(xué)習(xí)筆記之關(guān)系映射實(shí)例

    Python ORM框架SQLAlchemy學(xué)習(xí)筆記之關(guān)系映射實(shí)例

    這篇文章主要介紹了Python ORM框架SQLAlchemy學(xué)習(xí)筆記之關(guān)系映射實(shí)例,Classic (經(jīng)典模式)和Modern (現(xiàn)代模式),分別介紹了,需要的朋友可以參考下
    2014-06-06
  • python中如何寫類

    python中如何寫類

    在本篇文章里小編給大家分享的是一篇關(guān)于python中寫類的方法和技巧,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • python類的方法屬性與方法屬性的動(dòng)態(tài)綁定代碼詳解

    python類的方法屬性與方法屬性的動(dòng)態(tài)綁定代碼詳解

    這篇文章主要介紹了python類的方法屬性與方法屬性的動(dòng)態(tài)綁定代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • 使用Python實(shí)現(xiàn)更改Word文檔的頁(yè)面大小

    使用Python實(shí)現(xiàn)更改Word文檔的頁(yè)面大小

    頁(yè)面大小確定文檔中每個(gè)頁(yè)面的尺寸和布局,有時(shí)我們會(huì)需要自定義頁(yè)面大小以滿足特定要求,下面我們就來看看如何使用Python實(shí)現(xiàn)這一效果吧
    2024-03-03
  • 詳解Python 最短匹配模式

    詳解Python 最短匹配模式

    這篇文章主要介紹了如何實(shí)現(xiàn)Python 最短匹配模式,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07

最新評(píng)論

富裕县| 滨州市| 石渠县| 靖边县| 岚皋县| 台中市| 舒兰市| 丰镇市| 谷城县| 灵武市| 邵阳县| 宜章县| 环江| 长武县| 巨鹿县| 金昌市| 石林| 佳木斯市| 正安县| 沛县| 高平市| 康马县| 庐江县| 内乡县| 社旗县| 崇信县| 黎城县| 从江县| 秦皇岛市| 延川县| 三江| 祁门县| 莱阳市| 九寨沟县| 龙陵县| 迁安市| 尼勒克县| 新泰市| 红原县| 苏尼特左旗| 茶陵县|