Python制作游戏入门,使用Pygame库制作一个不断移动的小球

安装pygame库

 

pip install pygame

实现以下功能

创建一个游戏窗口,在游戏窗口中创建一个不断斜向移动的小球,并在小球移动至窗口边缘时使其弹回并继续移动

贴出代码

import pygame,sys

pygame.init()                           #初始化pygame
info = pygame.display.Info()            #获取当前窗口信息
size = width,height = info.current_w,info.current_h           #设置窗口大小
speed = [1,1]                           #设置运动速度
black = 0,0,0                           #设置背景颜色为黑色
fps = 600                               #设置帧率为300
s = pygame.display.set_mode(size,pygame.FULLSCREEN)       #设置窗口大小和显示模式,pygame.NOFRAME:无边框,pygame.RESIZABLE:窗口大小可调,pygame.FULLSCREEN:全屏显示
pygame.display.set_caption("ball")      #设置窗口标题
ball = pygame.image.load("ball.gif")    #加载图片,加载成功后,pygame会将图片转换成一个Surface对象返回,修改该对象位置就相当于移动图片
ballrect = ball.get_rect()              #将图片生成一个矩形
fclock = pygame.time.Clock()            #创建一个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] + 1
            elif event.key == pygame.K_RIGHT:
                speed[0] = speed[0] + 1
            elif event.key == pygame.K_UP:
                speed[1] = speed[1] + 1
            if event.key == pygame.K_DOWN:
                speed[1] = speed[1] + 1
            if event.key == pygame.K_ESCAPE:
                sys.exit()
    ballrect = ballrect.move(speed[0],speed[1])         #球的移动,ballrect.move(x,y)方法中横轴移动x像素,纵轴移动y像素

    s.fill(black)               #在球移动后填充背景颜色为黑色(使用RGB色彩体系,R表示红色G表示绿色B表示蓝色)
    s.blit(ball,ballrect)       #通过ballrect矩形的移动来引导球的移动(blit函数:将一个图像绘制在另一个图像上)
    pygame.display.update()     #刷新屏幕
    fclock.tick(fps)            #设置屏幕帧率

运行效果

以下是可以使用键盘加快小球移动速度和鼠标控制小球位置的代码

import pygame,sys

#鼠标移动
pygame.init()
size = width,height = 600,400           #设置窗口大小
speed = [1,1]                           #设置运动速度,x轴与y轴每次移动1(像素)
black = 0,0,0                           #设置背景颜色为黑色
fps = 300                               #设置帧率为300
flag = False
ico = pygame.image.load("1.ico")
pygame.display.set_icon(ico)
s = pygame.display.set_mode(size,pygame.RESIZABLE)       #设置窗口大小和显示模式,pygame.NOFRAME:无边框,pygame.RESIZABLE:窗口大小可调,pygame.FULLSCREEN:全屏显示
pygame.display.set_caption("ball")      #设置窗口标题
ball = pygame.image.load("ball.gif")    #加载图片,加载成功后,pygame会将图片转换成一个Surface对象返回,修改该对象位置就相当于移动图片
ballrect = ball.get_rect()              #将图片生成一个矩形
fclock = pygame.time.Clock()            #创建一个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
            if event.key == pygame.K_DOWN:
                speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1) * int(speed[1]/abs(speed[1]))
            if event.key == pygame.K_ESCAPE:
                sys.exit()
        elif event.type == pygame.VIDEORESIZE:
            size = width, height = event.w , event.h
            s = pygame.display.set_mode(size, pygame.RESIZABLE)
        elif event.type == pygame.MOUSEBUTTONDOWN:      #鼠标按下事件
            if event.button == 1:                       #如果鼠标按下的是左键
                flag = True
        elif event.type == pygame.MOUSEBUTTONUP:        #鼠标松开事件
            flag == False
            if event.button == 1:
                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.right, event.pos[1] - ballrect.bottom)
    ballrect = ballrect.move(speed)         #球的移动,ballrect.move(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]

    s.fill(black)               #在球移动后填充背景颜色为黑色(使用RGB色彩体系,R表示红色G表示绿色B表示蓝色)
    s.blit(ball,ballrect)       #通过ballrect矩形的移动来引导球的移动(blit函数:将一个图像绘制在另一个图像上)
    pygame.display.update()     #刷新屏幕
    fclock.tick(fps)            #设置屏幕帧率

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您提供一个简单的小游戏的实现。 首先,您需要安装 Python 3.x 版本和 Pygame 模块。然后,您可以按照以下步骤进行操作: 1. 导入 Pygame 模块和 sys 模块: ```python import pygame import sys ``` 2. 初始化 Pygame游戏窗口: ```python pygame.init() screen = pygame.display.set_mode((640, 480)) pygame.display.set_caption('小游戏') ``` 3. 定义小的类和其运动方法: ```python class Ball: def __init__(self, x, y, radius, color, speed): self.x = x self.y = y self.radius = radius self.color = color self.speed = speed def move(self): self.x += self.speed[0] self.y += self.speed[1] ``` 4. 定义游戏主循环: ```python ball = Ball(320, 240, 10, (255, 0, 0), (5, 5)) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() screen.fill((255, 255, 255)) pygame.draw.circle(screen, ball.color, (ball.x, ball.y), ball.radius) ball.move() if ball.x - ball.radius < 0 or ball.x + ball.radius > 640: ball.speed = (-ball.speed[0], ball.speed[1]) if ball.y - ball.radius < 0 or ball.y + ball.radius > 480: ball.speed = (ball.speed[0], -ball.speed[1]) pygame.display.update() ``` 在游戏主循环中,我们首先处理 Pygame 的事件,如果用户关闭了游戏窗口,则退出游戏。然后我们清空游戏窗口,绘制小,并让小运动。如果小撞到了窗口的边缘,则改变小的速度方向。最后,我们调用 Pygame 的 `display.update()` 方法更新游戏窗口。 这样,一个简单的小游戏就完成了。您可以根据自己的需求进行修改和完善。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ERROR_R

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值