即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

Pygame零门槛(烟花特效实现)

编程语言 a1558022264 17℃ 0评论
本文目录
[隐藏]

1.Pygame入门(烟花特效实现)

Pygame是Python的一个游戏模块,包含图像、声音、事件等,我们可以使用该模块开发2D游戏。接下来我们将学习Pygame的入门知识,并开发一个“烟花爆炸”的小游戏(其实只是一个烟花特效,不能算是游戏)

1.1.1.1 下载Pygame模块

pygame下载

1.1.2.2 导入Pygame模块

import pygame

1.1.3.3 小程序示例

import pygame
from pygame.locals import *
from sys import exit

# 初始化pygame
pygame.init()
# 设置游戏窗口属性
screen = pygame.display.set_mode((640, 480), 0, 32)
# 设置游戏窗口标题
pygame.display.set_caption('第一个PYGAME游戏')

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            exit()
    # 更新页面
    pygame.display.update()

上面的小程序是不是非常简单呢!

  1. 首先调用pygame的init方法初始化
  2. set_mode用于初始化游戏窗口, 第一个参数为窗口大小
  3. set_caption用户设置窗口标题

其实游戏是由一帧一帧的图片构成的,因此这里必然会有一个循环,每次循环用于绘制一次游戏界面,而具体绘制怎样的界面,这当然是由我们通过代码进行控制。

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            exit()
    # 更新页面
    pygame.display.update()

这就是pygame的游戏循环体,每次循环显示游戏的一帧图像。这里我们仅仅监听了退出游戏事件,其它什么也没做。不信你点一下游戏窗口的右上方“x”按钮,看看游戏会不会退出?


现在,你一定感觉到:pygame这么简单!


那么,进入实战吧!

1.2.游戏: 火花闪耀

1.2.1.特效:鼠标点击游戏窗口,指定位置会发出爆炸声并出现火花闪耀

实现原理:

  1. pygame事件监听获取鼠标点击事件,并且可以得到鼠标的具体点击位置
  2. 通过pygame的绘图函数,在指定位置绘制若干圆点,模拟“小火星儿”。小火星具有以下属性:位置、速度、方向(移动)、存活时间。其中,速度、方向和存活时间均随机产生。
  3. 通过pygame的Clock获取帧与帧之间的间隔时间,从而确定小火星的移动距离以及方向,确定下一帧小火星的位置
  4. 小火星生存时间到达一定值后,将其移除队列

代码如下:

#-*-coding:utf8-*-

import pygame
from pygame.locals import *
from sys import exit
from star import Star
import random
import math

def init_pygame():  
    # 初始化pygame
    pygame.init()
    screen = pygame.display.set_mode((640, 480), 0, 32)
    pygame.display.set_caption('火花闪耀')
    return screen

def play_sound(sound):
    sound.play()

def create_stars(pos):
    stars = []
    for i in xrange(800):
        star = create_random_star(pos)
        stars.append(star)
    return stars

def create_random_star(pos):
    # 生成一颗星
    star = Star(pos)
    # 随机角度
    star.set_degree(random.randint(-180, 180) / 180.0 * math.pi)
    # 随机速度
    star.set_speed(random.randint(1, 20))
    # 随机寿命
    star.total_life = random.randint(0, 20);
    # 随机颜色
    star.color = create_random_color()
    return star

def create_random_color():
    r = random.randint(0, 255)
    g = random.randint(0, 255)
    b = random.randint(0, 255)
    return (r, g, b)

def update_stars(stars, time_passed):
    # 所有的星星更新生存时间
    for star in stars:
        star.add_life(time_passed)
        star.move(time_passed)

def paint_stars(stars, screen):
    # 绘制星星
    for star in stars:
        star.draw(screen)

def get_passed_time(clock):
    return clock.tick() / 100.0

def clear_screen(screen):
    screen.fill((0, 0, 0))

# 进入游戏循环
def loop(screen):
    # 时间监听器
    clock = pygame.time.Clock()
    # 保存所有的星星
    stars = []
    # 音效
    sound = pygame.mixer.Sound('boom.wav')
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                exit()
            # 如果按下鼠标左键
            if event.type == MOUSEBUTTONDOWN:
                play_sound(sound)
                stars = create_stars(event.pos)

        # 获取经过的时间
        time_passed = get_passed_time(clock)
        # 更新星星属性
        update_stars(stars, time_passed)
        # 清屏
        clear_screen(screen)
        # 绘制星星
        paint_stars(stars, screen)
        # 更新页面
        pygame.display.update()

if __name__ == '__main__':
    screen = init_pygame()
    # 进入游戏循环
    loop(screen)

效果:


火花闪耀

转载请注明:CodingBlog » Pygame零门槛(烟花特效实现)

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情