pygame 壁球游戏操作

  

1.窗口设置

# hello world game
import pygame,sys

pygame.init()  #初始化,其实就是检查,电脑上一些需要的硬件调用接口、
                #基础功能是否有问题。如果有问题,会在程序运行之前就反馈错误无,
                # 方便进行排查和规避
                #pygame.display.init()
screen=pygame.display.set_mode((600,400))# display-控制显示窗口和屏幕的Pygame模块
                                        # 初始化窗口或屏幕以进行显示分辨率(宽高)
                                        #注意此时size位置带括号
pygame.display.set_caption('pygame游戏吧聊') #设置当前窗口标题

while  True:#无限循环,直到Python运行时退出结束。注意,T大写
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            sys.exit()#导入的模板退出

pygame.display.update()#对显示窗口进行更新,默认窗口全部重绘

2.展示壁球

import pygame,sys

pygame.init()
size=width,height=600,400
speed=[1,1]
BLACK=0,0,0 #定义RGB
BLUE=0,0,255


screen=pygame.display.set_mode(size ) #注意定义后size不可加括号


pygame.display.set_caption("pygame 展示壁球游戏罢聊")
ball=pygame.image.load("/Users/zs_pn/PycharmProjects/image/ball.gif")
ballrect=ball.get_rect()#矩形移动一个偏移量(x,y)  Rect对象有一些重要属性,
        # 例如: top,bottom,left,right表示上下左右 width,height表示宽度、高度
        #get_rect()方法返回一个 覆盖图像的矩形Rect对象。
while  True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            sys.exit()
    ballrect=ballrect.move(speed[0],speed[1])#矩形移动一个偏移量(x,y),即在横轴方向移
                                            #动x像素,纵轴方向移动y像素,x,y为整数
    if ballrect.left<0 or ballrect.right>width:
        speed[0]=-speed[0]#壁球的反弹运动 遇到左右两侧,横向速度取反;
    if ballrect.top<0 or ballrect.bottom>height:
        speed[1]=-speed[1] # 遇到上下两侧,纵向速度取反。

    screen.fill(BLACK)#显示窗口背景填充为color颜色#小球不断运动,运动后原有位置
                                # 将默认填充白色,因此需要不断刷新背景色颜色要定义
    screen.blit(ball,ballrect)#将一个图像绘制在另一个图像上,
                        # 即将src绘 制到dest位置上。通过Rect对象引导对球的绘制
    pygame.display.update()

3.添加刷新率

import pygame,sys

pygame.init()
size=width,height=600,400
speed=[1,1]
BLACK=0,0,0
screen=pygame.display.set_mode(size)
pygame.display.set_caption("pygame 节奏型壁球游戏罢聊")
ball=pygame.image.load("/Users/zs_pn/PycharmProjects/image/ball.gif")
ballrect=ball.get_rect()
fps=900 #每秒帧率参数,视频中每次展示的静态图像称为帧
fclock=pygame.time.Clock()#创建一个Clock对象,用于操作时间


while  True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            sys.exit()
    ballrect=ballrect.move(speed[0],speed[1])
    if ballrect.left<0 or ballrect.right>width:
        speed[0]=-speed[0]
    if ballrect.top<0 or ballrect.bottom>height:
        speed[1]=-speed[1]

    screen.fill(BLACK)#直接RGB以元组形式 screen.fill((0,255,255,128)) 也可四个添加透明度
    screen.blit(ball,ballrect)
    pygame.display.update()
    fclock.tick(fps)#clock.tick(framerate) 控制帧速度,即窗口刷新速度,
                # 例如: clock.tick(100)表示每秒钟100次帧刷新

4.窗口设置全屏型

# Unit PYG03: Pygame Wall Ball Game version 4  全屏型
import pygame,sys

pygame.init()

vInfo = pygame.display.Info()   #窗口全屏显示
size = width, height = vInfo.current_w, vInfo.current_h
speed = [1,1]
BLACK = 0, 0, 0

#print(pygame.display.Info())
screen = pygame.display.set_mode(size, pygame.RESIZABLE)  #窗口大小可调
#screen = pygame.display.set_mode(size, pygame.NOFRAME)  #窗口无边框
#screen = pygame.display.set_mode(size, pygame.FULLSCREEN)  #窗口全屏显示
print(pygame.display.Info())
#但是要让游戏感知到我们窗口的变化,需要使用屏幕信息函数
#pygame.display.Info()#  产生一个显示信息对象VideoInfo,表达当前屏幕的参数信息
#current_w#:当前显示模式或窗口的像素宽度    放在窗口定义前面
#current_h#:当前显示模式或窗口的像素高度
pygame.display.set_caption("Pygame壁球")
ball=pygame.image.load("/Users/zs_pn/PycharmProjects/image/ball.gif")
ballrect = ball.get_rect()
fps = 300
fclock = pygame.time.Clock()

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[1] == 0 else (abs(speed[1]) - 1)*int(speed[1]/abs(speed[1]))
            elif event.key == pygame.K_ESCAPE:
                sys.exit()
                #pygame。quit 退出模块
    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]

    screen.fill(BLACK)
    screen.blit(ball, ballrect)
    pygame.display.update()
    fclock.tick(fps)

5.窗口调节

# Unit PYG03: Pygame Wall Ball Game version 5  伸缩型
import pygame,sys

pygame.init()
size = width, height = 600, 400
speed = [1,1]
BLACK = 0, 0, 0
screen = pygame.display.set_mode(size, pygame.RESIZABLE)  #窗口大小可调
#screen = pygame.display.set_mode(size, pygame.NOFRAME)  #窗口无边框
#screen = pygame.display.set_mode(size, pygame.FULLSCREEN)  #窗口全屏显示

pygame.display.set_caption("Pygame壁球")
ball=pygame.image.load("/Users/zs_pn/PycharmProjects/image/ball.gif")
ballrect = ball.get_rect()
fps = 300
fclock = pygame.time.Clock()

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[1] == 0 else (abs(speed[1]) - 1)*int(speed[1]/abs(speed[1]))
            elif event.key == pygame.K_ESCAPE:
                sys.exit()
    #   elif event.type == pygame.VIDEORESIZE:
    #      size = width, height = event.size[0], event.size[1]
    #      screen = pygame.display.set_mode(size, pygame.RESIZABLE)
    # 响应窗口大小更改 不注释为正确伸缩性
    # Pygame.VIDEORESIZE这是一种窗口大小更改的事件 可以感知小球 换个背景颜色和没注释对比一下
    # 事件发生后,返回event.size元组,包含新窗口的宽度和高度
    # size[0] 宽度,也可以用event.w
    # size[1] 高度,也可以用event.h
    # 返回参数仅在事件发生时有用
    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]

    screen.fill((0,255,255,128))
    screen.blit(ball, ballrect)
    pygame.display.update()
    fclock.tick(fps)

6.更换图标


# Unit PYG03: Pygame Wall Ball Game version 6  图标型
import pygame,sys

pygame.init()
size = width, height = 600, 400
speed = [1,1]
BLACK = 0, 0, 0
screen = pygame.display.set_mode(size, pygame.RESIZABLE)  #窗口大小可调

icon = pygame.image.load("/Users/zs_pn/PycharmProjects/image/PYG03-flower.png")
pygame.display.set_icon(icon)
#pygame.display.set_caption(title, icontitle=None)
#title设置窗口的标题内容
#icontitle设置图表化后的小标题 †小标题可选,部分系统没有。
# 该函数与游戏交互逻辑配合,可以根据游戏情节修改标题内容
#pygame.display.set_icon(surface)
#设置窗口的图标效果、图标是一个Surface对象,与图像对应。
pygame.display.set_caption("Pygame壁球" )
ball = pygame.image.load("/Users/zs_pn/PycharmProjects/image/ball.gif")
ballrect = ball.get_rect()
fps = 300
fclock = pygame.time.Clock()

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[1] == 0 else (abs(speed[1]) - 1)*int(speed[1]/abs(speed[1]))
            elif event.key == pygame.K_ESCAPE:
                sys.exit()
        elif event.type == pygame.VIDEORESIZE:
            size = width, height = event.size[0], event.size[1]
            screen = pygame.display.set_mode(size, pygame.RESIZABLE)
    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]

    screen.fill(BLACK)
    screen.blit(ball, ballrect)
    pygame.display.update()
    fclock.tick(fps)

4.1添加鼠标控制

import pygame,sys

pygame.init()
size = width, height = 600, 400
speed = [1,1]
BLACK = 0, 0, 0
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Pygame壁球控制罢聊")
ball=pygame.image.load("/Users/zs_pn/PycharmProjects/image/ball.gif")
ballrect = ball.get_rect()
fps = 300
fclock = pygame.time.Clock()

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[1] == 0 else (abs(speed[1]) - 1)*int(speed[1]/abs(speed[1]))
    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]

    screen.fill(BLACK)
    screen.blit(ball, ballrect)
    pygame.display.update()
    fclock.tick(fps)

7.壁球感知

# Unit PYG03: Pygame Wall Ball Game version 7  感知型
import pygame,sys

pygame.init()
size = width, height = 600, 400
speed = [1,1]
BLACK = 0, 0, 0
screen = pygame.display.set_mode(size, pygame.RESIZABLE)  #窗口大小可调

icon = pygame.image.load("/Users/zs_pn/PycharmProjects/image/PYG03-flower.png")
pygame.display.set_icon(icon)
pygame.display.set_caption("Pygame壁球")
ball = pygame.image.load("/Users/zs_pn/PycharmProjects/image/ball.gif")
ballrect = ball.get_rect()
fps = 300
fclock = pygame.time.Clock()

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[1] == 0 else (abs(speed[1]) - 1)*int(speed[1]/abs(speed[1]))
            elif event.key == pygame.K_ESCAPE:
                sys.exit()
        elif event.type == pygame.VIDEORESIZE:
            size = width, height = event.size[0], event.size[1]
            screen = pygame.display.set_mode(size, pygame.RESIZABLE)
    if pygame.display.get_active():
        ballrect = ballrect.move(speed)
        #pygame.display.get_active():判断窗口是否最小化
        #当窗口在系统中显示(屏幕绘制 / 非图标化)
        #时返回True,否则返回False

        #pygame.display.flip() - ---重新绘制整个窗口
        #pygame.display.update() - --仅重新绘制窗口中有变化的区域,相比.flip()
        #执行更快
        #拉动窗口小球会跑出去
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = - speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = - speed[1]

    screen.fill(BLACK)
    screen.blit(ball, ballrect)
    pygame.display.update()
    fclock.tick(fps)

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值