Pygame:提高游戏的颜值1

🚴大家好!我是近视的脚踏实地,虽然近视,但是脚踏实地,这一篇来谈谈Pygame的事件。下面就来谈谈如何提高Pygame游戏的颜值

display模块的 set_mode(resolution = (0, 0), flags = 0, depth = 0)方法详解

⚠️set_mode(resolution = (0, 0), flags = 0, depth = 0) —> Surface⚠️
我们一直通过display模块的 set_mode() 方法来指定界面的大小,这个方法会返回一个Surface对象,然后我们就用这个Surface对象作为界面,可以看到方法有三个参数。

※参数resolution

首先是resolution参数,用于指定界面的大小,如果你什么都不给的话,就会使用默认的(0,0),那么pygaem会根据当前的屏幕分辨率来创建一个窗口,❗️但是要注意,这一功能只有在SDL高于或者等于1.2.10的时候才会实现,如果是低于这个版本号的话,那么就会抛出异常❗️,所以一般第一个参数我们还是指定比较好

※参数flags

第二个参数 flags 是指定扩展选项,如果要同时指定多组选项可以使用 管道操作符 “|”, 那么 flags 参数有如下提供的几个可选项:

在这里插入图片描述

※参数depth

第三个参数 depth 用于指定颜色的位数,一般不推荐自己设置,Pygame 会根据当前的操作系统去取一个最合适的值。

大家在玩游戏的时候应该会发现😏,比如LOL,穿越火线,很多游戏他都是全屏模式的,不全屏还不给玩,这是为啥?🤔,因为全屏的好处有太多了,第一,你可以显示更多的内容,第二可以开启硬件加速,最重要的一点是,整个程序你霸占了整个屏幕,其他的软件都一边站去,没他们什么事,

创建全屏模式的窗口

全屏模式在Pygame中非常简单,只需要将第二个参数设置为 FULLSCREEN 即可,同时,我们还可以加上硬件加速。我们需要一个按钮来控制退出全屏,否则全屏了,没有退出就GG了,所以我们要来关联一个快捷键,使得我们的全屏得到控制

※版本一

直接拿之前的代码来修改

import pygame
import sys
from pygame.locals import *

# 初始化Pygame
pygame.init()

size = width, height = 600, 400
speed = [-2, 1]
bg = (255, 255, 255) # RGB

fullscreen = False

#实例化Clock对象
clock = pygame.time.Clock()

# 创建指定大小的窗口 Surface
screen = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption("初次见面,请大家多多关照!")

# 加载图片 Surface
turtle = pygame.image.load("turtle.png")
# 获得图像的位置矩形
position = turtle.get_rect()

l_head = turtle
r_head = pygame.transform.flip(turtle, True, False)

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

        if event.type == KEYDOWN:
            if event.key == K_LEFT:
                 turtle = l_head
                 speed = [-1,0]
            if event.key == K_RIGHT:
                 turtle = r_head
                 speed = [1,0]
            if event.key == K_UP:
                 speed = [0,-1]
            if event.key == K_DOWN:
                 speed = [0,1]
                 
            #全屏(F11)
            if event.key == K_F11:
                 fullscreen =  not fullscreen
                 if fullscreen:
                      screen = pygame.display.set_mode((1600,900),FULLSCREEN | HWSURFACE)
                 else:
                      screen = pygame.display.set_mode(size)
                      
                                  
    # 移动图像
    position = position.move(speed)

    if position.left < 0 or position.right > width:
        # 翻转图像
        turtle = pygame.transform.flip(turtle, True, False)
        # 反方向移动
        speed[0] = -speed[0]

    if position.top < 0 or position.bottom > height:
        speed[1] = -speed[1]

    # 填充背景
    screen.fill(bg)
    # 更新图像
    screen.blit(turtle, position)
    # 更新界面
    pygame.display.flip()
    # 延迟10毫秒
    #pygame.time.delay(10)
    
    clock.tick(100)

在这里插入图片描述
(解析:首先在KEYDOWN事件的判断下加一个控制全屏的按钮(F11),然后这里先在上面设置一个标志fullscreen = False,表示默认不全屏,那么当按下F11的时候fullscreen = not fullscreen,就取反,Flase变True,再次按下就又变回False,如果是True,那么创建一个全屏窗口和普通窗口没什么区别,但是你的尺寸要改一下,screen = pygame.display.set_mode((1920, 1080),FULLSCREEN | HWSURFACE),第一个参数就是自己电脑的尺寸,第二是设置flags参数,设置为全屏和硬件加速就OK了)

※(修改版本一的bug)版本二

首先上面的截图我也不知道啥回事😥,自己运行的时候是真正全屏的,而且老污龟🐢的龟头不会进到墙里边的,应该是截图的工具的问题,那么现在他的主要bug就是虽然改变了到了全屏,但是他移动范围还是之前的那个窗口的尺寸,在原来的窗口边界就掉头了

修改思路就是:第一当按下F11全屏的时候,相应地修改width,和height的值,再次按下F11退出全屏的时候,把width和height恢复为原来的尺寸
在这里插入图片描述
当然这样仍然有bug,如果全屏的时候老污龟跑到原本窗口外,在按F11回来时,老污龟就不见了,回不来了,所以第二个就是先去前面做个初始位置的备份,oturtle_rect表示的是初始化时矩形的位置,即老污龟的位置
在这里插入图片描述
接着回来再做个判断,如果按下F11回到原始窗口的时候,老污龟的位置刚好在初始化窗口的范围内,就不用复位了,直接把width,和height的值修改为size就好了,如果恢复时,不在原始窗口范围内,那就需要复位了
在这里插入图片描述
下面是完整的源码👇

import pygame
import sys
from pygame.locals import *

# 初始化Pygame
pygame.init()

size = width, height = 600, 400
speed = [-2, 1]
bg = (255, 255, 255) # RGB

fullscreen = False

#实例化Clock对象
clock = pygame.time.Clock()

# 创建指定大小的窗口 Surface
screen = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption("初次见面,请大家多多关照!")

# 加载图片 Surface
turtle = pygame.image.load("turtle.png")
# 获得图像的位置矩形
oturtle_rect = turtle.get_rect()
#保存这个初始位置,等等复位用到
position = oturtle_rect



l_head = turtle
r_head = pygame.transform.flip(turtle, True, False)

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

        if event.type == KEYDOWN:
            if event.key == K_LEFT:
                 turtle = l_head
                 speed = [-1,0]
            if event.key == K_RIGHT:
                 turtle = r_head
                 speed = [1,0]
            if event.key == K_UP:
                 speed = [0,-1]
            if event.key == K_DOWN:
                 speed = [0,1]
                 
            #全屏(F11)
            if event.key == K_F11:
                 fullscreen =  not fullscreen
                 if fullscreen:
                      screen = pygame.display.set_mode((1600,900),FULLSCREEN | HWSURFACE)
                      width , height = 1600, 900
                 else:                      
                      screen = pygame.display.set_mode(size)
                      width , height = size
                      if position.right > width or position.bottom > height:
                           position =  oturtle_rect
                                                                      

    # 移动图像
    position = position.move(speed)

    if position.left < 0 or position.right > width:
        # 翻转图像
        turtle = pygame.transform.flip(turtle, True, False)
        # 反方向移动
        speed[0] = -speed[0]

    if position.top < 0 or position.bottom > height:
        speed[1] = -speed[1]

    # 填充背景
    screen.fill(bg)
    # 更新图像
    screen.blit(turtle, position)
    # 更新界面
    pygame.display.flip()
    # 延迟10毫秒
    #pygame.time.delay(10)
    
    clock.tick(200)

还有一个问题就是我知道自己电脑的尺寸就设置(1600,900)了,但是你游戏是开发给用户用的,这样的话就不知道用户的显示器分辨率是多少,这就是需要用到 display 模块里的 list_modes() 方法,如下:就可以显示出当前显示器支持的所有分辨率,这就是返回了一个列表,从大到小以此列举出当前显示器支持的分辨率,所以全屏的话就直接将这个列表获取之后取得他的的第一个元素作为set_mode的尺寸就可以了
在这里插入图片描述

实现可以拖拽改变窗口大小

pygame的话默认情况下窗口是不可以通过拖拽来改变窗口大小的,普通的窗口是可以的,因为游戏的话,里边的角色和场景都是按比例设置好的,如果让你这么一拖,就会变得四不像,但是Pygame 还是提供了支持改变窗口尺寸的选项。就是设置 RESIZABLE 的选项来实现。如下:
在这里插入图片描述
在这里插入图片描述
上面运行后可以发现,窗口是可以修改了,但是背景和龟兄的活动范围大小也没有变,因为还没有去响应他

那么首先,当用户调整窗口尺寸时,会引发一个事件,叫做 VIDEORESIZE。那么我们就去检测这个事件,if event.type == VIDEORESIZE:,接着把用户调整的尺寸大小赋值给原来的size,size = event.size,在赋值给width和height就好了,
screen = pygame.display.set_mode(size,RESIZABLE),最后还要来重新画下屏幕,不然龟兄就会跑到黑暗处了😬。

最后就是还有一个BUG,当你改变窗口的速度比龟兄还快,他就会在只漏个头或者都不见了,所以也要判断一下他是在当前规定的活动范围,不在就复位就好了

下面是源码和效果图👇

import pygame
import sys
from pygame.locals import *

# 初始化Pygame
pygame.init()

size = width, height = 600, 400
speed = [-2, 1]
bg = (255, 255, 255) # RGB

fullscreen = False

#实例化Clock对象
clock = pygame.time.Clock()

# 创建指定大小的窗口 Surface
screen = pygame.display.set_mode(size,RESIZABLE)
# 设置窗口标题
pygame.display.set_caption("初次见面,请大家多多关照!")

# 加载图片 Surface
turtle = pygame.image.load("turtle.png")
# 获得图像的位置矩形
oturtle_rect = turtle.get_rect()
#保存这个初始位置,等等复位用到
position = oturtle_rect



l_head = turtle
r_head = pygame.transform.flip(turtle, True, False)

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

        if event.type == KEYDOWN:
            if event.key == K_LEFT:
                 turtle = l_head
                 speed = [-1,0]
            if event.key == K_RIGHT:
                 turtle = r_head
                 speed = [1,0]
            if event.key == K_UP:
                 speed = [0,-1]
            if event.key == K_DOWN:
                 speed = [0,1]
                 
            #全屏(F11)
            if event.key == K_F11:
                 fullscreen =  not fullscreen
                 if fullscreen:
                      screen = pygame.display.set_mode((1600,900),FULLSCREEN | HWSURFACE)
                      width , height = 1600, 900
                 else:                      
                      screen = pygame.display.set_mode(size)
                      width , height = size
                      if position.right > width or position.bottom > height:
                           position =  oturtle_rect

        #用户调整窗口尺寸
        if event.type == pygame.VIDEORESIZE:
            size = event.size
            width, height = size
            screen = pygame.display.set_mode(size,RESIZABLE)
            if position.right > width or position.bottom > height:
                position =  oturtle_rect
             
          

    # 移动图像
    position = position.move(speed)

    if position.left < 0 or position.right > width:
        # 翻转图像
        turtle = pygame.transform.flip(turtle, True, False)
        # 反方向移动
        speed[0] = -speed[0]

    if position.top < 0 or position.bottom > height:
        speed[1] = -speed[1]

    # 填充背景
    screen.fill(bg)
    # 更新图像
    screen.blit(turtle, position)
    # 更新界面
    pygame.display.flip()
    # 延迟10毫秒
    #pygame.time.delay(10)    
    clock.tick(200)

在这里插入图片描述

图像变化,变大缩小

想要给我们的程序加特技,那么你的图像还必须支持一定的变换,例如我们演示过的左右翻转,还有按角度转动、放大、缩小。

Pygame 有一个模块是可以支持的,就是 transform 模块,他支持你对Surface对象也就是,也就是图像做各种变化,然后返回一个变化后,转化后的Surface对象,下面列举了该模块几个常用的方法:

flip方法之前我们用过,就是撞墙后自动翻转,自动调头,他可以上下左右翻转,scale方法是缩放,还有一个smoothscale,普通的是快速缩放,效率比较高,但是并不确认精度,就是缩放后损失会比较大,smoothscale是平滑的缩放,采用了两种算法挑选最优的算法去进行一个平滑缩放,他损失的精度相对要小一些。

在这里插入图片描述
其实 tranform 的这些方法事实上玩的都是像素的小把戏,事实上就是将像素进行相应的转换,通过一些算法对图像的像素进行一个转换,位置更改,既然是像素更改,大多数变换之后难免会有一些精度的遗失,只有flip() 方法不会,因为他是上下左右调转,中间垂直做一个中心轴,左右两边像素互换而已,肯定不会损失精度,因此,我们不建议对变换后的 Surface 对象进行再变换,因为这样几轮之后,图像就会惨不忍睹了。

※版本一

前面的代码,我们使用 flip() 方法使得小蛇撞墙之后翻转,下面我们修改代码,使得小蛇可以实现缩放,分别响应我们键盘上的 等于号("=",放大),减号(“-”,缩小),空格 就恢复到原来大小。

首先,刚刚说了不能对一个对象转化后再去转化他,这样做会损失精度,所以给他做一个备份,这个工作其实在上面修改BUG的时候已经做了一半,再来改个图片对象的就OK 了
在这里插入图片描述

接着来设置放大缩小的比例,默认就是1.0,然后规定每点一次增加10%,要求如截图,然后下面需要注意的就是,我们将转化好的Surface对象给了turtle,里边用的是oturtle,如果也用turtle的话,那么转化后之后还放turtle,下一次还是用的话,那么他就会变得不堪入目,然后还需要注意的是smoothscale的第一个参数是需要转化的Surface对象,第二个参数是一个元组,表示他转化后的尺寸,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

※版本二

从上面的运行结果可以发现两个BUG,第一个就是当想要按方向键的时候,他就会自动恢复大小,这是因为我们按下方向键时,调用的 r_head 和 l_head 是原本在循环外定义好的,所以得到的值就是原始的turtle的值,而不是转化后的值
在这里插入图片描述
解决的话就是把转化后的turtle对象先赋给l_head,然后r_head在做一个对称的修改即可,但是还有一个问题就是,因为直接把转化后的turtle先给了l_head,所以当在按下放大或缩小的时候,无论龟兄往哪走,他的就或转往左边,因此还需要加个方向的判断,就是确定把当前的turtle 赋值给 r_head 还是 l_head

那么首先去上面创建一个控制龟兄方向的两个变量
在这里插入图片描述
接着要去修改一下龟兄控制移动的代码
在这里插入图片描述
然后就是先把转变后的对象给l_head和 turtle,接着在下面判断,如果dir_x==1也就是向右走的,那就改变turtle的值
在这里插入图片描述
最后把之前的speed列表改一下
在这里插入图片描述
下面是源码👇

import pygame
import sys
from pygame.locals import *

# 初始化Pygame
pygame.init()

size = width, height = 600, 400
#speed = [-2, 1]
bg = (255, 255, 255) # RGB

fullscreen = False

# 控制小乌龟方向,默认往左
dir_x, dir_y = -2, 1

#实例化Clock对象
clock = pygame.time.Clock()

# 创建指定大小的窗口 Surface
screen = pygame.display.set_mode(size,RESIZABLE)
# 设置窗口标题
pygame.display.set_caption("初次见面,请大家多多关照!")

# 加载图片 Surface
oturtle = pygame.image.load("turtle.png")
turtle = oturtle
# 获得图像的位置矩形
oturtle_rect = turtle.get_rect()
#保存这个初始位置,等等复位用到
position = turtle_rect = oturtle_rect

# 设置放大缩小的比例
ratio = 1.0



l_head = turtle
r_head = pygame.transform.flip(turtle, True, False)

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

        if event.type == KEYDOWN:

            # 控制小乌龟移动方向(方向键)
            if event.key == K_LEFT:
                 dir_x = -1
                 dir_y = 0
                 turtle = l_head
            if event.key == K_RIGHT:
                 dir_x = 1
                 dir_y = 0
                 turtle = r_head
            if event.key == K_UP:
                 dir_y = -1
                 dir_x = 0
            if event.key == K_DOWN:
                 dir_y = 1
                 dir_x = 0
                 
            #全屏(F11)
            if event.key == K_F11:
                 fullscreen =  not fullscreen
                 if fullscreen:
                      screen = pygame.display.set_mode((1600,900),FULLSCREEN | HWSURFACE)
                      width , height = 1600, 900
                 else:                      
                      screen = pygame.display.set_mode(size)
                      width , height = size
                      if position.right > width or position.bottom > height:
                           position =  oturtle_rect

            # 放大、缩小龟兄(=-),空格键恢复原始尺寸
            if event.key == K_EQUALS or event.key == K_MINUS or event.key == K_SPACE:
                #最大只能放大一倍,最小能缩小50%
                if event.key == K_EQUALS and ratio < 2:
                    ratio += 0.1
                if event.key == K_MINUS and ratio > 0.5:
                    ratio -= 0.1
                if event.key == K_SPACE:
                    ratio = 1

                turtle = l_head = pygame.transform.smoothscale(oturtle,\
                                            (int(oturtle_rect.width * ratio),\
                                            int(oturtle_rect.height * ratio)))
                r_head = pygame.transform.flip(turtle, True, False)
                if dir_x == 1:
                    turtle = r_head
                    
                

        #用户调整窗口尺寸
        if event.type == pygame.VIDEORESIZE:
            size = event.size
            width, height = size
            screen = pygame.display.set_mode(size,RESIZABLE)
            if position.right > width or position.bottom > height:
                position =  oturtle_rect
             
          

    # 移动图像
    position = position.move(dir_x,dir_y)

    if position.left < 0 or position.right > width:
        # 翻转图像
        turtle = pygame.transform.flip(turtle, True, False)
        # 反方向移动
        dir_x = -dir_x

    if position.top < 0 or position.bottom > height:
        dir_y = -dir_y

    # 填充背景
    screen.fill(bg)
    # 更新图像
    screen.blit(turtle, position)
    # 更新界面
    pygame.display.flip()
    # 延迟10毫秒
    #pygame.time.delay(10)
    
    clock.tick(200)

在这里插入图片描述

※版本三

😫😫BUG真多,刚刚说了第一个BUG,第二个BUG就是缩放后的龟兄弟🐢无法找到正确的边界,从上面的截图可以看到他飘逸地遁地了,这是因为鬼兄在缩放后,他的位置矩阵没有设置,所以用的还是原始的边界,原始的龟栏,

那么就是在缩放后相应地修改位置矩阵就好了,turtle_rect = turtle.get_rect() 先获取当前的位置矩阵,然后把他当前的宽和高赋给position的宽和高就可以了
在这里插入图片描述
结果去运行的时候,发现还有一个随机的BUG😭😭,龟龟可能会被卡在下方,所以还要修改一下代码:
在这里插入图片描述

源码如下👇

import pygame
import sys
from pygame.locals import *

# 初始化Pygame
pygame.init()

size = width, height = 600, 400
#speed = [-2, 1]
bg = (255, 255, 255) # RGB

fullscreen = False

# 控制小乌龟方向,默认往左
dir_x, dir_y = -2, 1

#实例化Clock对象
clock = pygame.time.Clock()

# 创建指定大小的窗口 Surface
screen = pygame.display.set_mode(size,RESIZABLE)
# 设置窗口标题
pygame.display.set_caption("初次见面,请大家多多关照!")

# 加载图片 Surface
oturtle = pygame.image.load("turtle.png")
turtle = oturtle
# 获得图像的位置矩形
oturtle_rect = turtle.get_rect()
#保存这个初始位置,等等复位用到
position = turtle_rect = oturtle_rect

# 设置放大缩小的比例
ratio = 1.0



l_head = turtle
r_head = pygame.transform.flip(turtle, True, False)

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

        if event.type == KEYDOWN:

            # 控制小乌龟移动方向(方向键)
            if event.key == K_LEFT:
                 dir_x = -1
                 dir_y = 0
                 turtle = l_head
            if event.key == K_RIGHT:
                 dir_x = 1
                 dir_y = 0
                 turtle = r_head
            if event.key == K_UP:
                 dir_y = -1
                 dir_x = 0
            if event.key == K_DOWN:
                 dir_y = 1
                 dir_x = 0
                 
            #全屏(F11)
            if event.key == K_F11:
                 fullscreen =  not fullscreen
                 if fullscreen:
                      screen = pygame.display.set_mode((1600,900),FULLSCREEN | HWSURFACE)
                      width , height = 1600, 900
                 else:                      
                      screen = pygame.display.set_mode(size)
                      width , height = size
                      if position.right > width or position.bottom > height:
                           position =  oturtle_rect

            # 放大、缩小龟兄(=-),空格键恢复原始尺寸
            if event.key == K_EQUALS or event.key == K_MINUS or event.key == K_SPACE:
                #最大只能放大一倍,最小能缩小50%
                if event.key == K_EQUALS and ratio < 2:
                    ratio += 0.1
                if event.key == K_MINUS and ratio > 0.5:
                    ratio -= 0.1
                if event.key == K_SPACE:
                    ratio = 1

                turtle = l_head = pygame.transform.smoothscale(oturtle,\
                                            (int(oturtle_rect.width * ratio),\
                                            int(oturtle_rect.height * ratio)))
                r_head = pygame.transform.flip(turtle, True, False)
                if dir_x == 1:
                    turtle = r_head

                turtle_rect = turtle.get_rect()
                position.width, position.height = turtle_rect.width, turtle_rect.height
                    
                

        #用户调整窗口尺寸
        if event.type == pygame.VIDEORESIZE:
            size = event.size
            width, height = size
            screen = pygame.display.set_mode(size,RESIZABLE)
            if position.right > width or position.bottom > height:
                position =  oturtle_rect
             
          

    # 移动图像
    position = position.move(dir_x,dir_y)

    if position.left < 0 or position.right > width:
        # 翻转图像
        turtle = pygame.transform.flip(turtle, True, False)
        # 反方向移动
        dir_x = -dir_x
        
        # 防止小乌龟卡在边缘
        if position.right > width:
            position[0] = width - turtle_rect.width
        else:
            position[0] = 0

    if position.top < 0 or position.bottom > height:
        dir_y = -dir_y
        if position.bottom > height:
            position[1] = height - turtle_rect.height
        else:
            position[1] = 0

    # 填充背景
    screen.fill(bg)
    # 更新图像
    screen.blit(turtle, position)
    # 更新界面
    pygame.display.flip()
    # 延迟10毫秒
    #pygame.time.delay(10)
    
    clock.tick(200)

在这里插入图片描述

旋转图像,让龟兄贴边爬行

我们可以通过 rotate() 方法来旋转图像,让我们的龟兄贴边爬行,头要一直保持正常方向

首先rotate() 是默认逆时针方向旋转的,然后拿第一例子的代码来改,首先先得到龟兄各个方向的旋转,turtle_right = pygame.transform.rotate(turtle, 90),第一参数传入是Surface对象,第二个传入度数90°,因为是右边嘛,向左旋转90,即逆时针90°接可以了,下边,左边上边也类似,然后最后初始化位置在turtle_top
在这里插入图片描述
接着可以来判断了,if position.right > width: 就是走到右边这一块了,因为刚开始是安排他(5,0),就是龟兄右侧的位置大于我们宽度的时候,那说明他要出界了,那就应该让他调转一下,turtle = turtle_right,那么现在她发生旋转了,那他所在的矩形就发生了改变,那么要重新获取一下他的位置position = turtle_rect = turtle.get_rect(),因为现在的turtle已经是turtle_right了,因为turtle_right是在刚刚获得turtle对象和position下面一些声明的,所以在这声明turtle的值就是出于(0,0)的位置,所有这里应该重新计算,我们希望他从右边的上到下走,所以position.left要改变👉position.left = width - tuitle_rect.width,接着把方向和速度改为[0,5],表示x轴不动。Y轴向下走

接着是走到下面了,同样也是要修改位置,都是类似的,就不啰嗦了😄
在这里插入图片描述
下边是源码👇

import pygame
import sys
from pygame.locals import *

# 初始化Pygame
pygame.init()

size = width, height = 600, 400
bg = (255, 255, 255) # RGB

fullscreen = False

# 创建指定大小的窗口 Surface
screen = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption("初次见面,请大家多多关照!")

# 加在图片
turtle = pygame.image.load("turtle.png")
# 获得图像的位置矩形
position = turtle.get_rect()

speed = [5, 0]
turtle_right = pygame.transform.rotate(turtle, 90)
turtle_top = pygame.transform.rotate(turtle, 180)
turtle_left = pygame.transform.rotate(turtle, 270)
turtle_bottom = turtle
turtle = turtle_top

l_head = turtle
r_head = pygame.transform.flip(turtle, True, False)

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type == KEYDOWN:
            # 全屏(F11)
            if event.key == K_F11:
                fullscreen = not fullscreen
                if fullscreen:
                    screen = pygame.display.set_mode((1024, 768), FULLSCREEN | HWSURFACE)
                else:
                    screen = pygame.display.set_mode(size)


    # 移动图像
    position = position.move(speed)

    if position.right > width:
        turtle = turtle_right
        position = turtle_rect = turtle.get_rect()
        position.left = width - turtle_rect.width
        speed = [0, 5]

    if position.bottom > height:
        turtle = turtle_bottom
        position = turtle_rect = turtle.get_rect()
        position.left = width - turtle_rect.width
        position.top = height - turtle_rect.height
        speed = [-5, 0]

    if position.left < 0:
        turtle = turtle_left
        position = turtle_rect = turtle.get_rect()
        position.top = height - turtle_rect.height
        speed = [0, -5]

    if position.top < 0:
        turtle = turtle_top
        position = turtle_rect = turtle.get_rect()
        speed = [5, 0]

    # 填充背景
    screen.fill(bg)
    # 更新图像
    screen.blit(turtle, position)
    # 更新界面
    pygame.display.flip()
    # 延迟10毫秒
    pygame.time.delay(10)

在这里插入图片描述

本篇博客到这就完啦,非常感谢您的阅读🙏,如果对您有帮助,可以帮忙点个赞或者来波关注鼓励一下喔😬 ,嘿嘿👀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值