Python制作游戏入门,使用Pygame库制作一个不断移动的小球 - Go语言中文社区

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)            #设置屏幕帧率

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_42119852/article/details/100147399
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-29 20:37:41
  • 阅读 ( 1193 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢