Pygame实战之实现扎气球游戏

目录
  • 导语
  • 正文
    • 一、准备中
    • 二、代码演示
    • 三、效果展示

导语

​前几天,有人私信小编:

说陪女朋友在小广场上面逛街玩儿扎气球:结果一个都没扎破,扎心了老铁。

女朋友都要离家出走了~让我给想想办法:小编只想给你一个表情。

​哈哈哈,开玩笑的~于是,为了满足需求,小编做了一个重大决定:熬夜给他做了一款扎气球的小

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

这游戏做完之后木子已经替大家玩儿过了,这个很棒,不信的话你自己试试?

正文

本文的扎气球小游戏原型就是路边的扎气球的游戏撒,基于Pygame做的!

就准备好射的箭、不同颜色的气球、一张背景图片、然后爆炸的特效就可。哦~对了音乐还是要准备,游戏的话有音乐背景才更有趣哦~

一、准备中

1)素材资料

首先是准备好需要的素材、图片、背景音乐:

2)运行环境

环境安装 本文用到的运行环境:Python3.7、Pycharm社区版2020、Pygame游戏模块部分自带

模块直 接导入不需要安装。

模块安装:

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

二、代码演示

这款小游戏总的有6个.py文件组成的,代码比较都啦,这里就只放一点点哈!

主程序运行:

​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
​

三、效果展示

游戏规则的话:箭会出现在游戏界面底部中间位置,拉动它:即是鼠标左键拉动方向可自己调整,

直接向下拉动然后放箭射中气球即可。射中的越多积累的分数越高哦!

1)截图展示效果——

游戏开始界面如下:

游戏开始界面如下:

扎中气球效果如下:

游戏结束总成绩13分:

2)视频展示效果——

​到此这篇关于Pygame实战之实现扎气球游戏的文章就介绍到这了,更多相关Pygame扎气球游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于Python Pygame实现的画饼图游戏

    目录 导入包 配置基本参数 根据输入的数字改变扇形的个数 监听事件 这个游戏就是实现键盘上输入不同的数字,将圆分割成不同的几个部分,每部分用不同的颜色来实现. 导入包 导入随机包,pygame,系统包,time时间包用于时间暂停.math是用来确认弧度的. import random import pygame, sys, time import math from pygame.locals import * 配置基本参数 初始化pygame,设置窗口大小标题,设置圆心的x和y轴,圆的半径,线

  • 基于pygame实现贪吃蛇小游戏示例

    目录 游戏截图 引入库 初始化模型 获取键盘事件 移动贪吃蛇 吃食物逻辑 碰撞到自身逻辑 结束游戏 显示文字函数 完整代码 游戏截图 引入库 import copy import random import sys import pygame 初始化模型 # 蛇模型 snake_list = [[10, 10]] # 食物的模型 x = random.randint(10, 490) y = random.randint(10, 490) food_point = [x, y] food_r,

  • Pygame实战练习之保护单身狗游戏

    导语 各位戏精大家好!我是木木子,这个中秋已经结束了,你们都带着对象回家了码? 中秋那几天朋友圈简直是大型秀恩爱现场. 又是一年中秋夜,依旧凭实力单身!呼吁大家记得保护下单身狗啊喂! ​ 作为一条人畜无害可可爱爱的单身狗 每年的假期几乎都被伤的体无完肤,今年我们不仅要好好生存,还要勇敢报复,让情侣们知道: 单身狗不是这么好欺负的~单身狗们报仇吧!今天带大家写一款贼有趣的单身狗小游戏~ ​ ​ 正文 首先准备好图片素材等: bgm音乐必备: import pygame class Sound():

  • Python Pygame实现兔子猎人守护城堡游戏

    目录 效果图 主要代码 游戏初始化 主函数 运行  效果图 守卫类游戏大家应该玩过吧,什么植物大战僵尸呀,保卫萝卜呀,今天我们自己用python来写一个自己的守护类小游戏兔子猎人守护城堡,让大家看看效果图. 主要代码 下面我来说一下是怎么得到的将代码分享一下给大家 首先得将要用到的库导入进来 import cfg import math import random import pygame from modules.Sprites import * from modules.interface

  • Pygame实战之检测按键正确的小游戏

    目录 游戏功能 引入包,初始化配置信息 初始化游戏提示信息 显示随机的字母 设置游戏的属性 完整代码  游戏功能 游戏开始,屏幕随机显示一个字符,按 Enter 游戏开始,每个字母有10秒的按键时间,如果按对,则随机产生新的字符,一共60s,如果时间到了,则游戏结束. 引入包,初始化配置信息 import sys, random, time, pygame from pygame.locals import * pygame.init() screen = pygame.display.set_

  • 基于Pygame实现简单的贪吃蛇游戏

    目录 导入相关的包 设置屏幕大小以及基本参数 设置贪吃蛇的位置,以及移动的大小 绘制蛇 让蛇动起来 实现贪吃蛇拐弯 实现随机食物 吃食物 完整代码  导入相关的包 import pygame, sys, random from pygame.locals import * 设置屏幕大小以及基本参数 设置屏幕大小为400*400,mainClock = pygame.time.Clock()用来设置时间同步,不会根据计算机的运行来决定运行多少次, mainClock.tick(1) 一秒只会运行一

  • Pygame实战之经典泡泡龙小游戏

    目录 导语 ​正文 一.准备中 二.开始敲代码 三.效果展示 总结 导语 Python版的消除类的游戏还是很多的,木木子之前也是推过不少~ 比如:百变的消消乐,还记得嘛?今天就出一个消除类--泡泡龙小游戏,希望你们喜欢哈~​! <泡泡乐>是一款适合全年龄玩家的游戏,采用非常经典的"泡泡龙"式的消除泡泡的玩法,游戏没有太多创新玩法,容 易上手.当我们一个人独处而无人聊天时可以用它来打发时间.来来来,跟着木木子一起开始玩泡泡龙游戏吧~ ​正文 一.准备中 1)游戏规则: 游戏玩

  • Pygame实战之实现扎气球游戏

    目录 导语 正文 一.准备中 二.代码演示 三.效果展示 导语 ​前几天,有人私信小编: 说陪女朋友在小广场上面逛街玩儿扎气球:结果一个都没扎破,扎心了老铁. 女朋友都要离家出走了~让我给想想办法:小编只想给你一个表情. ​哈哈哈,开玩笑的~于是,为了满足需求,小编做了一个重大决定:熬夜给他做了一款扎气球的小 游戏,可以拿去哄哄女朋友啦~ 这游戏做完之后木子已经替大家玩儿过了,这个很棒,不信的话你自己试试? 正文 本文的扎气球小游戏原型就是路边的扎气球的游戏撒,基于Pygame做的! 就准备好射

  • Pygame实战练习之炸弹人学院游戏

    导语 在现在这个浮躁的年代:小编每次登陆王者荣耀,还有每次登陆刺激战场Z! 看着里面的聊天界面,各种代打.各种的找cp.小小编觉得,我们已经失去了玩游戏的初心. 接下来,小台将带领你们走回童年时光,一起领略我们当初玩4399的单纯与天真! ​ 还记得小时候小台每到放学时刻,就会拉着只比我小半岁的小表妹,一块去亲戚家里玩电脑 每一次打开电脑做的第一件事情就是,打开浏览器,输入4399这四个数字,那个时候觉得hao123真是一个神奇的主页! 可以让我打开4399玩各种游戏qwq,尤其是Q版泡泡堂深得

  • Pygame实战练习之飞机大战游戏

    导语 承载童年的纸飞机你还会叠嘛? 如果你是个80后或者90后,那你应该记得小时候玩的纸飞机. 叠好后,哈口仙气,飞出去,感觉棒棒哒. ​ 虽然是一个极其简单的玩具,但那时候,很多熊孩子能傻傻地玩上一整天. 今天带大家制作一款彩色版本另一个版本的飞机大冒险~ 欢迎阅读往期另一个飞机大战的文章:python开发飞机大战游戏. Are you ready? 一起开启飞机大冒险吧~ ▼▼▼ 正文 首先准备好飞机大冒险的图片: ​ 环境安装:主要游戏模块pygame. pip install pygam

  • Pygame实战练习之推箱子游戏

    导语 ​ 要说小时候称霸所有翻盖手机的小游戏,除了贪吃蛇,那就是推箱子了. ​控制小人将所有箱子放到指定位置,就是这样简简单单的操作,陪伴我度过了无数个没有动画片的时光. ​这个画面是不是特别熟悉? 小编也是从玩「推箱子」那个年代过来的人.那时,我拿个学习机,在老师眼皮子底下,通过了一关又一关.现在想起来,依然觉得很快乐. 今天一天都没给大家更新游戏了,看大家饥渴难耐的样子,也是时候要开始准备了. ​ 那么今天为大家准备了童年经典游戏--推箱子,有看中就赶紧上车入手吧~ 正文 游戏规则: 推箱子

  • Pygame实战练习之一百层游戏

    导语 哈喽哈喽!大家好!我是木木子,又到了每日游戏更新环节! 8月30日,对暑假还意犹未尽的孩子们收到了一份"开学大礼": ​ 通知要求,严格限制向未成年人提供网络游戏服务的时间!啊这~禁了网游,那这波单机游戏的就是一波收割大胜利. ​安排!家里的孩子没游戏玩了怎么办?当然是由我提供新鲜热乎的游戏代码! ​ 正文 给整了一个一百层的闯关游戏!能完美通关的话孩子得玩很长一段时间,那我就解放了!! 主要分为二部分: ​ import pygame from pygame.locals im

  • Pygame实战之实现经典外星人游戏

    目录 前言 正文 安装环境 主要代码 前言 说说外星人那些事儿.... 你以为的外星人......他们都是乘坐UFO来地球的,长的嗯哼可能比较有特色.也许长这样 害!其实可能也或许不长这样. 图片的话借鉴的大众认知的这一款.当然你们还可以自己来!下面我们来做一款简单的<外星人入侵>小游戏吧! 正文 安装环境 下载python3,或如Anaconda3(64 bit),导入pygame游戏包. 主要代码 1.外星人设置,alien.py,代码: import pygame from pygame

  • Python Pygame实战之水果忍者游戏的实现

    目录 一.准备中 1.0游戏规则 1.1游戏图片素材(可修改) 1.2游戏字体素材(可修改) 二.环境安装 三.开始敲代码 3.0设置界面玩家生命值等 3.1导入模块 3.2界面背景.字体设置 3.3游戏窗口设置 3.4随机生成水果的位置与数据存放 3.5用一个字典来存放水果的数据 3.6在屏幕中绘制字体 3.7绘制玩家的生命 3.8游戏开始与结束画面 3.9游戏主循环 四.游戏展示效果 导语 Hey!下午好,我是木木子,关注我,一起玩游戏吧~ ​ ​微信小游戏很久之前刮起了一股切水果热潮,还记

  • Python Pygame实战之打砖块小游戏

    目录 导语 一.准备中 1)游戏规则: 2)环境安装 二.开始敲代码 1)配置文件 2)定义一些类 3)定义开始.结束界面 4)定义游戏 5)主函数与运行界面 三.效果展示 导语 嘿!前不久刚刚给大家过一款反弹球的小游戏嘛! 不知道大家还记得不?不记得可以看下往期的内容呢,在上一期的基础上升级了这款打砖块的小游戏,界面的话也挺简单的,经典配色原汁原味哈哈哈. 大家好,我是木木子,一个上的编程下的厅堂的女码农!今天带大家编写一款经典的打砖块儿小游戏! 小科普: 打砖块最早是由雅达利公司开发的一款独

  • Python Pygame实战之五款童年经典游戏合集

    目录 一.推箱子 1)代码展示 2)效果展示 二.滑雪 1)代码展示 2)效果展示​ 三.声控把音符 1)代码展示 2)效果展示 四.保卫萝卜 1)代码展示 2)效果展示​ 五.飞机大战 1)代码展示 2)效果展示 一.推箱子 1)代码展示 import os import sys import cfg import pygame from modules import * from itertools import chain '''游戏地图''' class gameMap(): def _

随机推荐