项目三:pygame游戏

目录

pygame模块

介绍

功能

安装

如何编写一个游戏的程序

组成

利用pygame模块绘制图形

 在游戏窗口中加载图片

在游戏窗口中显示文字

在游戏窗口中进行各种操作(即人机交互)

游戏一:雪容融

游戏二:碰撞检测

总结:

pygame常用子模块

pygame模块

介绍

        Python Pygame 是一款专门为开发和设计 2D 电子游戏而生的软件包,它支 Windows、Linux、Mac OS 等操作系统,具有良好的跨平台性。Pygame 由  Pete Shinners 于 2000 年开发而成,是一款免费、开源的的软件包。        

        Pygame 在 SDL(Simple DirectMedia Layer,使用 C语言编写的多媒体开发库) 的基础上开发而成,它提供了诸多操作模块,比如图像模块(image)、声音模块(mixer)、输入/输出(鼠标、键盘、显示屏)模块等。

功能

        绘制图形

        显示图片        

        动画效果        

        与键盘、鼠标、游戏手柄等外设交互        

        播放声音        

        碰撞检测

安装

        1.  打开 cmd

        2.  pip install pygame

如何编写一个游戏的程序

组成

一、初始设置

        首先需要导入模块,创建游戏屏幕,然后初始化一些重要的变量

二、游戏循环(意味着游戏正式开始)

        当打我们游戏时可能会触发游戏中的各种事件,比如鼠标事件、键盘按键事件、摄像拍照事件等等,因此游戏程序需要一直循环监听玩家的操作,只有当用户点击了游戏“关闭”按钮时,监听才会结束。如果想要达到“循环监听”目的,此时就需要设置一个游戏循环(Game Loop)也称为游戏的主循环,这样才能保证人机交互的体验感。

 三、退出程序

        当用户想要停止程序的时候,使用一种方式来结束程序

利用pygame模块绘制图形

代码示例:

初始设置:这是整个程序中的第一部分代码,它的作用是自动检测 Pygame 软件包是否正常可用,并检查电脑的硬件调用接口、基础功能是否存在问题,比如音频、光驱、声卡驱动等设备。同时,它会完成 Pygame 中所有模块的初始化操作,比如 display(显示模块)、font(字体模块)、mixer(声音控制模块)、cursors(光标控制模块)等。

import pygame
pygame.init()    #初始化pygame

screen=pygame.display.setmode((800,600)) #创建一个显示窗口
pygame.display.set_caption("pygame绘制图形") #设置窗口标题

游戏循环:意味着游戏正式开始

1.  需要设置一个游戏循环(Game Loop)也称为游戏的主循环。

2.  玩家可能有移动和点击鼠标、按下键盘上的技能键,或是滑动手机屏幕等操作,这些操作是为了玩家和程序之间实现人机交互,这些与游戏程序交互的操作被称为事件(Event)。游戏程序需要遍历玩家的所有操作,不同的操作游戏状态都会发生不同的改变,需要及时刷新屏幕上的显示,从而构建出游戏的动态画面效果。当用户点击了游戏“关闭”按钮时,循环才会结束。

while True:
    for event in pygame.event.get():   #监听事件(遍历)
        if event.type==pygame.QUIT:  #退出事件
            break
    pygame.draw.circle(screen,(255,0,0),(200,300),20) #绘制图形
    pygame.display.update() #更新屏幕

退出程序:

当循环结束后,游戏选择退出

pygame.quit()

效果图:

 在游戏窗口中加载图片

        在游戏中,能够看到的游戏元素大多都是图像。图像文件初始是保存在磁盘上的,如果需要使用,第一步就需要被加载到内存

        要在屏幕上看到某一个图像的内容,需要按照三个步骤:

        1.使用 pygame.image.load() 加载图像的数据

        2.使用游戏屏幕对象,调用 blit方法 将图像绘制到指定位置

        3.调用 pygame.display.update() 方法更新整个屏幕的显示

代码示例:

import pygame    #导入模块

pygame.init()    #pygame模块初始化
#创建一个窗口screen,大小为600*400
screen=pygame.display.set_mode([600,400])
back=pygame.image.load('bj.jpg') #加载背景图像
screen.blit(back,[0,0]) #将背景图画在窗口的[0,0]位置处
img=pygame.image.load('rr.jpg') #加载雪容融图像
screen.blit(img,[100,50])#将雪容融画在窗口的[100,50]位置处
pygame.display.update()    #窗口刷新

效果图:

利用循环,让雪容融动起来:

代码示例:

import pygame    #导入模块

pygame.init()    #pygame模块初始化
#创建一个窗口screen,大小为600*400
screen=pygame.display.set_mode([600,400])
back=pygame.image.load('bj.jpg') #加载背景图像
screen.blit(back,[0,0]) #将背景图画在窗口的[0,0]位置处
img=pygame.image.load('rr.jpg') #加载雪容融图像
screen.blit(img,[100,50])#将雪容融画在窗口的[100,50]位置处
pygame.display.update()    #窗口刷新

#在上一代码基础上新增以下代码
for i in range(1,5):
    screen.blit(img,[100+i*30,50+i*30]) #不断更改显示位置
    pygame.display.update() #更新屏幕
    pygame.time.delay(800)  #设置两次显示雪容融之间的延时

效果:雪容融出现五次,不符合移动情形

修改:雪容融移动需要完成两个步骤:

①把原来的图像擦掉或覆盖     ②在新的位置上画出图像

代码示例:

import pygame    #导入模块

pygame.init()    #pygame模块初始化
#创建一个窗口screen,大小为600*400
screen=pygame.display.set_mode([600,400])
back=pygame.image.load('bj.jpg') #加载背景图像
screen.blit(back,[0,0]) #将背景图画在窗口的[0,0]位置处
img=pygame.image.load('rr.jpg') #加载雪容融图像
screen.blit(img,[100,50])#将雪容融画在窗口的[100,50]位置处
pygame.display.update()    #窗口刷新
for i in range(1,5):
    screen.blit(back,[0,0]) #用背景图覆盖原来的雪容融
    screen.blit(img,[100+i*30,50+i*30]) #画出雪容融新的位置
    pygame.display.update() #更新屏幕
    pygame.time.delay(800)  #设置两次显示雪容融之间的延时

在游戏窗口中显示文字

代码示例:

import pygame    #导入模块

pygame.init()    #pygame模块初始化
#创建一个窗口screen,大小为600*400
screen=pygame.display.set_mode([600,400])
back=pygame.image.load('bj.jpg') #加载背景图像
screen.blit(back,[0,0]) #将背景图画在窗口的[0,0]位置处
img=pygame.image.load('rr.jpg') #加载雪容融图像
screen.blit(img,[100,50])#将雪容融画在窗口的[100,50]位置处
pygame.display.update()    #窗口刷新

for i in range(1,5):
    screen.blit(back,[0,0]) #覆盖底图

    textfont=pygame.font.SysFont('Arial',30) #创建文本对象,Arial,大小30
    text="北京"
    t=textfont.render(text,True,(255,0,0)) #生成平滑的红色字符串
    screen.blit(t,[50,50]) #在窗口显示

    screen.blit(img,[100+i*30,50+i*30]) #不断更改显示位置
    pygame.display.update() #更新屏幕
    pygame.time.delay(800)  #设置显示之间的延时

函数介绍:

render(文本内容,是否抗锯齿,字体颜色,字体背景颜色)

运行效果:

在游戏窗口中进行各种操作(即人机交互)

Pygame 会接受用户产生的各种操作(即事件)。事件(Event)是 Pygame 的重要模块之一,它是构建整个游戏程序的核心,比如鼠标点击、键盘敲击、游戏窗口移动、调整窗口大小、触发特定的情节、退出游戏等等,这些都可以看做是“事件”。

遍历事件并改变游戏状态:

for event in pygame.event.get(): #侦听并获取事件列表
        if event.type==pygame.QUIT: #接收到退出事件后退出程序
            sys.exit()

部分事件如下:

游戏一:雪容融

游戏功能:点击雪容融并显示得分

代码示例:

import pygame    #导入模块
import sys
import random
pygame.init()    #pygame模块初始化
score=0 #变量初始化
mousex=0
mousey=0
#创建一个窗口screen,大小为600*400
screen=pygame.display.set_mode([600,400])
back=pygame.image.load('bj.jpg') #加载背景图像
img=pygame.image.load('rr.png') #加载雪容融图像

while True:
    screen.blit(back,[0,0]) #覆盖底图
    textfont=pygame.font.SysFont('SimHei',30) #创建文本对象,Arial,大小30
    t=textfont.render('2022北京冬奥助力值'+str(score),True,(255,0,0)) #生成平滑的红色字符串
    screen.blit(t,[150,50]) #在窗口显示
    x=random.randint(0,400)#随机生成福字水平方向坐标
    y=random.randint(0,300)
    screen.blit(img,[x,y])#不断更改显示位置
    pygame.display.update() #更新屏幕
    pygame.time.delay(800)  #设置显示之间的延时
    for event in pygame.event.get(): #侦听并获取事件列表
        if event.type==pygame.QUIT: #接收到退出事件后退出程序
            sys.exit()
        if event.type==pygame.MOUSEBUTTONDOWN: #侦听到鼠标点击事件
            mousex,mousey=pygame.mouse.get_pos() #获取鼠标按下的坐标
            #判断鼠标是否击中福字,本例福字宽为100,高为100
    if mousex in range(x,x+100) and mousey in range(y,y+100): 
        score=score+5 #加分

游戏二:碰撞检测

游戏功能:键盘控制移动

游戏截图:

利用x坐标判定是否到达终点

代码示例:

if x<=0:
        textfont=pygame.font.SysFont('SimHei',30) #创建文本对象,使用系统自带字体,大小30
        t=textfont.render("YOU WIN!",True,(255,0,0)) #生成平滑的红色字符串
        screen.blit(t,[150,150]) #在窗口显示
        pygame.display.update() #更新屏幕
        pygame.time.delay(800)

完整代码:

import pygame    #导入模块
import sys

pygame.init()    #pygame模块初始化
#创建一个窗口screen,大小为500*300
screen=pygame.display.set_mode([500,300])
back=pygame.image.load('xd.jpg') #加载背景图像
screen.blit(back,[0,0]) #将背景图画在窗口的[0,0]位置处
img=pygame.image.load('xb.png') #加载人物图像
x=450
screen.blit(img,[x,200])#将人物画在窗口的[450,200]位置处
pygame.display.update()    #窗口刷新

while True:
    if x<=0:
        textfont=pygame.font.SysFont('SimHei',30) #创建文本对象,使用系统自带字体,大小30
        t=textfont.render("YOU WIN!",True,(255,0,0)) #生成平滑的红色字符串
        screen.blit(t,[150,150]) #在窗口显示
        pygame.display.update() #更新屏幕
        pygame.time.delay(800)
    else:
        for event in pygame.event.get(): #侦听并获取事件列表
            if event.type==pygame.QUIT: #接收到退出事件后退出程序
                sys.exit()
            if event.type==pygame.KEYDOWN:#键盘是否按下
                if event.key==pygame.K_LEFT:#按下左箭头键
                    x=x-2
                elif event.key==pygame.K_RIGHT:#按下右箭头键
                    x=x+2
    screen.blit(back,[0,0]) #覆盖底图
    screen.blit(img,[x,200])#不断更改显示位置
    textfont2=pygame.font.SysFont('SimHei',30) #创建文本对象,使用系统自带字体,大小30
    t2=textfont2.render("全民上冰雪",True,(255,0,0)) #生成平滑的红色字符串
    screen.blit(t2,[150,50]) #在窗口显示
    textfont3=pygame.font.SysFont('SimHei',20) #创建文本对象,使用系统自带字体,大小30
    t3=textfont3.render("加油!你距离终点还有"+str(x)+"米",True,(0,0,0)) #生成平滑红色字符串
    screen.blit(t3,[100,100]) #在窗口显示
    pygame.display.update() #更新屏幕
    pygame.time.delay(10)  #设置显示之间的延时

总结:

pygame是一个专门用来开发游戏的模块,可以包含图像、声音等。

pygame常用子模块

pygame.display访问显示设备

pygame.event 管理事件

pygame.font 使用字体

pygame.image 加栽和存储图片

猜你喜欢

转载自blog.csdn.net/qq_28782419/article/details/127762482