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

Pygame實(shí)戰(zhàn)之實(shí)現(xiàn)扎氣球游戲

 更新時(shí)間:2021年12月25日 09:11:23   作者:顧木子吖  
這篇文章主要為大家介紹了利用Python中的Pygame模塊實(shí)現(xiàn)的一個(gè)扎氣球游戲,文中的示例代碼講解詳細(xì),對(duì)我們了解Pygame模塊有一定的幫助,感興趣的可以學(xué)習(xí)一下

導(dǎo)語

?前幾天,有人私信小編:

說陪女朋友在小廣場(chǎng)上面逛街玩兒扎氣球:結(jié)果一個(gè)都沒扎破,扎心了老鐵。

女朋友都要離家出走了~讓我給想想辦法:小編只想給你一個(gè)表情。

?哈哈哈,開玩笑的~于是,為了滿足需求,小編做了一個(gè)重大決定:熬夜給他做了一款扎氣球的小

游戲,可以拿去哄哄女朋友啦~

這游戲做完之后木子已經(jīng)替大家玩兒過了,這個(gè)很棒,不信的話你自己試試?

正文

本文的扎氣球小游戲原型就是路邊的扎氣球的游戲撒,基于Pygame做的!

就準(zhǔn)備好射的箭、不同顏色的氣球、一張背景圖片、然后爆炸的特效就可。哦~對(duì)了音樂還是要準(zhǔn)備,游戲的話有音樂背景才更有趣哦~

一、準(zhǔn)備中

1)素材資料

首先是準(zhǔn)備好需要的素材、圖片、背景音樂:

2)運(yùn)行環(huán)境

環(huán)境安裝 本文用到的運(yùn)行環(huán)境:Python3.7、Pycharm社區(qū)版2020、Pygame游戲模塊部分自帶

模塊直 接導(dǎo)入不需要安裝。

模塊安裝:

pip install -i https://pypi.douban.com/simple/ +模塊名

二、代碼演示

這款小游戲總的有6個(gè).py文件組成的,代碼比較都啦,這里就只放一點(diǎn)點(diǎn)哈!

主程序運(yùn)行:

?from game import *
 
def main() :
    intro = True
    game = Game()
    game.loadMusic()
    game.readHighScore()
    pygame.mixer.music.play(loops=-1)
    while intro:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                intro = False
        game.screen.fill(SKY_BLUE)
        game.screen.blit(game.background, game.background_rect)
        game.draw.Button(200, 2*game.HEIGHT/3, "PLAY", BRIGHT_GREEN, GREEN, game.gameloop, 150, 100)
        game.draw.Button(game.WIDTH/2 - 75, 2*game.HEIGHT/3, "PLAY TIMED", BRIGHT_RED, RED, game.time_restricted, 150, 100)
        game.draw.Button(game.WIDTH-350, 2*game.HEIGHT/3, "QUIT", BRIGHT_GREEN, GREEN, quit, 150, 100)
        game.draw.draw_text("__ArcuS__", game.WIDTH/2, game.HEIGHT/3, 200, BLUE)
        game.draw.draw_text("HIGH SCORE:%d" % (game.highscore), game.WIDTH-400, 50, 30, BLACK)
        pygame.display.flip()
        game.clock.tick(FPS)
 
main()
定義的一些常量:桌面背景、音樂等等。
 
FPS = 60
GRAVITY = 0.15
PI = 3.142
 
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (200, 0, 0)
BRIGHT_RED = (255, 0, 0)
GREEN = (0, 200, 0)
BRIGHT_GREEN = (0, 255, 0)
SKY_BLUE = (0, 255, 255)
BLUE = (0, 0, 255)
GREEN_YELLOW=(181,255,98)
BROWN=(204,102,0)
DARK_BROWN=(204,76,0)
 
HIGHSCORE_FILE="highscore.txt"
ARROW_IMAGE = "assets/arrow_1.png"
BACKGROUND_IMAGE = "assets/background.png"
 
EXPLOSION_SOUND = "assets/boom.wav"
CLICK_SOUND = "assets/select.wav"
MUSIC_FILE = "assets/tgfcoder-FrozenJam-SeamlessLoop.ogg"
VOLUME = 0.2
 
ARROW_SIZE = (16, 150)
BALOON_SIZE = (100, 100)
HIT_RADIUS = 15
MISSES = 15
GAME_TIME = 60
定義游戲精靈類等:
 
import pygame
import math
import random
from os import path
from constants import *
 
#游戲精靈類
class Arrow(pygame.sprite.Sprite):
    def __init__(self,game):
        pygame.sprite.Sprite.__init__(self)
        self.WIDTH = game.WIDTH
        self.HEIGHT = game.HEIGHT
        self.image_orig = pygame.transform.scale(game.arrow_img, ARROW_SIZE)
        self.image_orig.set_colorkey(BLACK)
        self.image = self.image_orig
        self.rect = self.image.get_rect()
        self.rect.centerx = self.WIDTH/2
        self.rect.bottom = self.HEIGHT-100
        self.rot = 0
        self.speedx = 0
        self.speedy = 0
        self.range = 0
        self.max_height = 0
        self.release_angle = 0
        self.set_vel = False
        self.Released = False
        self.releasex = self.rect.centerx
        self.releasey = self.rect.bottom
        self.cy = self.rect.centery
        self.game = game
 
    def update(self):
        if self.Released:
            self.speedy -= GRAVITY
            self.rect.bottom -= self.speedy
            self.rect.centerx += self.speedx
            self.rot = (-math.atan2(self.speedx, self.speedy)*180/3.14) % 360
            new_image = pygame.transform.rotate(self.image_orig, self.rot)
 
            old_center = self.rect.center
            self.image = new_image
            self.rect = self.image.get_rect()
            self.rect.center = old_center
            # print "moving"
            if self.rect.bottom < 0 or self.rect.left > self.WIDTH + 10 or self.rect.right < -10:
                self.kill()
            
        else:
            mouse = pygame.mouse.get_pos()
            click = pygame.mouse.get_pressed()
            if mouse[1] > self.rect.centery and click[0] == 1:
                self.set_vel = True
                dist = math.sqrt(
                    math.pow(self.rect.centerx-mouse[0], 2)+math.pow(self.rect.bottom-mouse[1], 2))
                # print dist
 
                self.rect.centerx = mouse[0]
                self.rect.centery = mouse[1]
                # print(2*GRAVITY*(self.rect.centery-mouse[1]))
                self.speedy = math.sqrt(2*GRAVITY*(-self.cy+mouse[1]))*4
                self.speedx = self.speedy * \
                    (mouse[0]-self.releasex)/(self.cy-mouse[1])
                self.rot = (-math.atan2(self.speedx, self.speedy)
                            * 180/3.14*0.5) % 360
                new_image = pygame.transform.rotate(self.image_orig, self.rot)
                old_center = self.rect.center
                self.image = new_image
                self.rect = self.image.get_rect()
                self.rect.center = old_center
 
                # print "setting velocity"
 
            else:
                if self.set_vel:
                    self.Released = True
                    self.game.last_arrow_time = pygame.time.get_ticks()
                    self.max_height = (self.rect.bottom-mouse[1])
                    self.range = (mouse[0]-self.rect.centerx)*2
                    # print "releasing"
                # math.sqrt(math.pow(mouse[0]-self.rect.centerx,2)+math.pow(mouse[1]-self.rect.centery,2)) < 200:
                else:
                    if (mouse[0]-self.rect.centerx) != 0:
                        theta = math.atan(
                            (mouse[1]-self.rect.bottom)/(self.rect.centerx-mouse[0]))
                    else:
                        theta = PI
                    move = theta-self.rot
                    self.rot = math.degrees(theta)
                    new_image = pygame.transform.rotate(
                        self.image_orig, self.rot)
                    old_center = self.rect.center
                    self.image = new_image
                    self.rect = self.image.get_rect()
                    self.rect.center = old_center
                    # print "rotating"
                    # print self.rot
                    # print theta
 
 
class Baloon(pygame.sprite.Sprite):
    def __init__(self,game):
        pygame.sprite.Sprite.__init__(self)
        self.WIDTH = game.WIDTH
        self.HEIGHT = game.HEIGHT
        bcolor = random.choice(game.baloon_color)
        temp = "assets/balloon_{}.png".format(bcolor)
        self.image_orig = pygame.image.load(
            path.join(path.dirname(__file__), temp))
        if bcolor == "blue":
            self.image_orig.set_colorkey(BLUE)
        elif bcolor == "black":
            self.image_orig.set_colorkey(BLACK)
        elif bcolor == "green":
            self.image_orig.set_colorkey(BRIGHT_GREEN)
        elif bcolor == "red":
            self.image_orig.set_colorkey(BRIGHT_RED)
 
        self.image_orig = pygame.transform.scale(self.image_orig, BALOON_SIZE)
        self.image = self.image_orig.copy()
        self.rect = self.image.get_rect()
        self.radius = HIT_RADIUS
 
        temp = random.randrange(self.WIDTH - self.rect.width)
        while (-150 < temp-self.WIDTH/2 < 150):
            temp = random.randrange(self.WIDTH - self.rect.width)
        self.rect.x = temp
        self.rect.y = random.randrange(self.HEIGHT+100, self.HEIGHT+150)
        self.speedy = random.randrange(-4, -1)
        self.speedx = random.randrange(-3, 3)
        self.game = game
        self.last_update = pygame.time.get_ticks()
        # print "baloon"
 
    def update(self):
        self.rect.y += self.speedy
        if self.rect.top < -20 or self.rect.left < -25 or self.rect.right > self.WIDTH + 20:
            self.kill()
            self.game.misses += 1
?

三、效果展示

游戲規(guī)則的話:箭會(huì)出現(xiàn)在游戲界面底部中間位置,拉動(dòng)它:即是鼠標(biāo)左鍵拉動(dòng)方向可自己調(diào)整,

直接向下拉動(dòng)然后放箭射中氣球即可。射中的越多積累的分?jǐn)?shù)越高哦!

1)截圖展示效果——

游戲開始界面如下:

游戲開始界面如下:

扎中氣球效果如下:

游戲結(jié)束總成績(jī)13分:

2)視頻展示效果——

?到此這篇關(guān)于Pygame實(shí)戰(zhàn)之實(shí)現(xiàn)扎氣球游戲的文章就介紹到這了,更多相關(guān)Pygame扎氣球游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中數(shù)據(jù)類轉(zhuǎn)換為JSON的方法詳解

    Python中數(shù)據(jù)類轉(zhuǎn)換為JSON的方法詳解

    這篇文章主要介紹了Python中數(shù)據(jù)類轉(zhuǎn)換為JSON的方法詳解的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • pycharm遠(yuǎn)程調(diào)試openstack的圖文教程

    pycharm遠(yuǎn)程調(diào)試openstack的圖文教程

    這篇文章主要為大家詳細(xì)介紹了pycharm遠(yuǎn)程調(diào)試openstack的圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Python使用read_csv讀數(shù)據(jù)遇到分隔符問題的2種解決方式

    Python使用read_csv讀數(shù)據(jù)遇到分隔符問題的2種解決方式

    read.csv()可以從帶分隔符的文本文件中導(dǎo)入數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Python使用read_csv讀數(shù)據(jù)遇到分隔符問題的2種解決方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Python使用Colorama庫美化終端輸出的操作示例

    Python使用Colorama庫美化終端輸出的操作示例

    在開發(fā)命令行工具或調(diào)試程序時(shí),我們可能會(huì)希望通過顏色來區(qū)分重要信息,比如警告、錯(cuò)誤、提示等,而 Colorama 是一個(gè)簡(jiǎn)單易用的 Python 庫,可以幫助我們輕松地為終端輸出添加顏色,本文給大家介紹了Python使用Colorama庫美化終端輸出的操作示例,需要的朋友可以參考下
    2025-01-01
  • Python中的遞歸函數(shù)使用詳解

    Python中的遞歸函數(shù)使用詳解

    這篇文章主要介紹了Python中的遞歸函數(shù)使用詳解,遞歸函數(shù)是指某個(gè)函數(shù)調(diào)用自己或者調(diào)用其他函數(shù)后再次調(diào)用自己,由于不能無限嵌套調(diào)用,所以某個(gè)遞歸函數(shù)一定存在至少兩個(gè)分支,一個(gè)是退出嵌套,不再直接或者間接調(diào)用自己;另外一個(gè)則是繼續(xù)嵌套,需要的朋友可以參考下
    2023-12-12
  • 如何將Pycharm中調(diào)整字體大小的方式設(shè)置為

    如何將Pycharm中調(diào)整字體大小的方式設(shè)置為"ctrl+鼠標(biāo)滾輪上下滑"

    這篇文章主要介紹了如何將Pycharm中調(diào)整字體大小的方式設(shè)置為"ctrl+鼠標(biāo)滾輪上下滑",本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 教你如何用一行Python代碼實(shí)現(xiàn)GUI圖形界面

    教你如何用一行Python代碼實(shí)現(xiàn)GUI圖形界面

    GUI(圖形用戶界面),顧名思義就是用圖形的方式,來顯示計(jì)算機(jī)操作的界面,更加方便且直觀。本文將用一行代碼實(shí)現(xiàn)GUI界面的制作,需要的可以參考一下
    2022-05-05
  • Python編輯器Pycharm安裝配置超詳細(xì)教程

    Python編輯器Pycharm安裝配置超詳細(xì)教程

    PyCharm是一款功能強(qiáng)大的Python編輯器,具有跨平臺(tái)性,下面這篇文章主要給大家介紹了關(guān)于Python編輯器Pycharm安裝配置的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • python 如何讀、寫、解析CSV文件

    python 如何讀、寫、解析CSV文件

    這篇文章主要介紹了python 如何讀、寫、解析CSV文件,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • 基于PyInstaller各參數(shù)的含義說明

    基于PyInstaller各參數(shù)的含義說明

    這篇文章主要介紹了基于PyInstaller各參數(shù)的含義說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評(píng)論

海伦市| 连州市| 斗六市| 新泰市| 廉江市| 哈尔滨市| 孟津县| 西乡县| 成安县| 宣威市| 云南省| 阿拉善右旗| 临夏县| 仁化县| 黄梅县| 义马市| 西昌市| 海兴县| 梁山县| 商河县| 延庆县| 德阳市| 伊通| 军事| 安国市| 浦城县| 天等县| 栖霞市| 奈曼旗| 平邑县| 茂名市| 临江市| 沧州市| 得荣县| 凉城县| 余庆县| 平阳县| 铜鼓县| 伊宁市| 敖汉旗| 望奎县|