Python游戏开发入门:pygame实例运动的小球-5

简介: Python游戏开发入门:pygame实例运动的小球-5

Python游戏开发入门

Python游戏开发入门:pygame最小开发框架-1

Python游戏开发入门:pygame屏幕绘制机制-2

Python游戏开发入门:pygame事件处理机制-3

Python游戏开发入门:pygame色彩与绘图机制-4

image.png

代码如下

# -*- coding: utf-8 -*-
# @File    : pygame_demo.py
# @Date    : 2018-05-22
"""
极简开发框架:
    引入及初始化
    事件及刷新
"""
import pygame, sys
import pygame.freetype
# 将计算值归一化,0-255
def RGBChannel(a):
    return 0 if a<0 else (255 if a>255 else int(a))
# 初始化
pygame.init()
# 窗体属性设置
size = width, height = 600, 400
speed = [1, 1]
bgcolor = pygame.Color("black")
# 设置屏幕可伸缩
screen = pygame.display.set_mode(size, pygame.RESIZABLE)
# 设置icon图标和标题
icon = pygame.image.load("PYG03-flower.png")
pygame.display.set_icon(icon)
pygame.display.set_caption("pygame小球和文字运动")
# 文字设置
GOLD = 255, 251, 0
RED = pygame.Color("red")
pos = [230, 160]
f1 = pygame.freetype.Font('C://Windows//Fonts//msyh.ttc', 36)
f1rect = f1.render_to(screen, pos, "世界和平", fgcolor=GOLD, size=50)
f1surf, f2rect = f1.render("宇宙和谐", fgcolor=RED, size=50)
# 每秒钟100次帧刷新, 视频中每次展示的静态图像称为帧
fps = 100
clock = pygame.time.Clock()
# 图像载入
ball = pygame.image.load("PYG02-ball.gif")
# 返回一个覆盖图像的矩形Rect对象
ballrect = ball.get_rect()
still =False # 鼠标按下检测符号
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        # 键盘敲击的事件
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                speed[0] = speed[0] if speed[0]==0 else (abs(speed[0])-1)*int(speed[0]/abs(speed[0]))
            elif  event.key == pygame.K_RIGHT:
                speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] - 1
            elif event.key == pygame.K_UP:
                speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] - 1
            elif event.key == pygame.K_DOWN:
                speed[1] = speed[1] if speed[0]==0 else (abs(speed[0])-1)*int(speed[0]/abs(speed[0]))
            # Esc键退出
            elif event.key == pygame.K_ESCAPE:
                sys.exit()
        # 屏幕大小拖动后刷新小球运动的范围
        elif event.type == pygame.VIDEORESIZE:
            size = width, height = event.w, event.h
            screen = pygame.display.set_mode(size, pygame.RESIZABLE)
        # 鼠标可以通过左键摆放壁球,当释放按键时壁球运动
        elif event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                still =True
        elif event.type == pygame.MOUSEBUTTONUP:
            if event.button == 1:
                still = False
            ballrect = ballrect.move(event.pos[0] - ballrect.left, event.pos[1] - ballrect.top)
        elif event.type == pygame.MOUSEMOTION:
            if event.buttons[0] == 1:
                ballrect = ballrect.move(event.pos[0] - ballrect.left, event.pos[1] - ballrect.top)
    # 当游戏界面在系统中显示时返回True,否则返回False
    if pygame.display.get_active() and not still:
        # 小球运动,矩形移动一个偏移量(x,y)
        ballrect = ballrect.move(speed)
    """
    壁球的反弹运动
    遇到左右两侧,横向速度取反;
    遇到上下两侧,纵向速度取反。
    """
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = - speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = - speed[1]
    # 根据壁球移动状态修改游戏的背景色
    # R:水平距离 / 窗体宽度
    bgcolor.r = RGBChannel(ballrect.left * 255 / width)
    # G: 垂直距离 / 窗体高度
    bgcolor.g = RGBChannel(ballrect.top * 255 / height)
    # B: 最小速度 / 最大速度
    bgcolor.b = RGBChannel(min(speed[0], speed[1]) * 255 / max(speed[0], speed[1], 1))
    # 显示窗口背景填充为color颜色,采用RGB 色彩体系
    screen.fill(bgcolor)
    # 文字的移动控制
    if pos[0] < 0 or pos[0] + f1rect.width > width:
        speed[0] = -speed[0]
    if pos[1]< 0 or pos[1] + f1rect.height > height:
        speed[1] = -speed[1]
    pos[0] = pos[0] + speed[0]
    pos[1] = pos[1] + speed[1]
    # 将一个图像绘制在另一个图像上,即将src绘制到dest位置上。
    # 通过Rect对象引导对壁球的绘制。
    screen.blit(ball, ballrect)
    # 绘制文字,方式1
    f1surf, f2rect = f1.render("宇宙和谐", fgcolor=RED, size=50)
    screen.blit(f1surf, (pos[0]+50, pos[1]+50))
    # 绘制文字,方式2
    frect = f1.render_to(screen, pos, "世界和平", fgcolor=GOLD, size=50)
    # 刷新屏幕显示
    pygame.display.update()
    # 控制帧速度,即窗口刷新速度
    clock.tick(fps)
相关文章
|
2月前
|
Java 图形学 Python
用Python和Pygame打造绚丽烟花效果+节日祝福语
本文介绍了一款基于Python和Pygame库实现的烟花效果程序,模拟烟花发射、爆炸及粒子轨迹,结合动态文本显示祝福语,营造逼真的节日氛围。程序包括烟花类、粒子类、痕迹类和动态文本显示功能,通过随机化颜色、速度和粒子数量增加效果多样性。用户可以看到烟花从屏幕底部发射、上升并在空中爆炸,伴随粒子轨迹和动态祝福语“蛇年大吉”、“Happy Spring Festival”。文章详细解析了核心代码逻辑和技术要点,帮助读者理解如何利用Pygame库实现复杂视觉效果,并提供了未来改进方向,如优化性能、增加特效和增强交互性。
131 20
|
2月前
|
前端开发 搜索推荐 编译器
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
151 34
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
|
2月前
|
API 开发者 Python
Pygame Zero(pgzrun)详解(简介、使用方法、坐标系、目录结构、语法参数、安装、实例解释)
Pygame Zero(pgzrun)详解(简介、使用方法、坐标系、目录结构、语法参数、安装、实例解释)
223 17
|
2月前
|
人工智能 编译器 Python
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
68 0
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
|
3月前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
268 5
|
4月前
|
JSON 开发工具 git
基于Python和pygame的植物大战僵尸游戏设计源码
本项目是基于Python和pygame开发的植物大战僵尸游戏,包含125个文件,如PNG图像、Python源码等,提供丰富的游戏开发学习素材。游戏设计源码可从提供的链接下载。关键词:Python游戏开发、pygame、植物大战僵尸、源码分享。
|
5月前
|
Python
Python中的push方法详解与实例
Python中的push方法详解与实例
85 3
|
4月前
|
测试技术 API 数据安全/隐私保护
Python连接到Jira实例、登录、查询、修改和创建bug
通过使用Python和Jira的REST API,可以方便地连接到Jira实例并进行各种操作,包括查询、修改和创建Bug。`jira`库提供了简洁的接口,使得这些操作变得简单易行。无论是自动化测试还是开发工作流的集成,这些方法都可以极大地提高效率和准确性。希望通过本文的介绍,您能够更好地理解和应用这些技术。
418 0
|
5月前
|
数据可视化 Python
Python绘制基频曲线——实例解析与应用探讨
Python绘制基频曲线——实例解析与应用探讨
47 0
|
C++ Python
54 python - 类属性、实例属性
54 python - 类属性、实例属性
58 0

热门文章

最新文章