基于pygame的简易运动小球游戏,导入pygame模块

本文介绍了如何使用pygame模块在Python中创建一个简单的游戏,涉及pygame的安装、基本代码结构以及键盘控制小球的移动和速度调整。游戏允许玩家通过键盘操作改变小球在屏幕上的运动状态和全屏模式切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

制作这个游戏,需要用到pygame模块,

下载pygame步骤:

在安装的python目录下找到Scripts文件

 进入Scripts文件中在目录栏输入cmd进入命令行模式

 在控制台输入pip install pygame==2.5.2 -i  https://mirrors.aliyun.com/pypi/simple/

2.5.2是pygame的版本,根据个人需求可以安装其他版本, -i https://mirrors.aliyun.com/pypi/simple/是用阿里云镜像库下载(速度快).我已经安装过了就不演示了.

安装成功后,运行代码:

 小球会自动移动,碰到边缘处会反弹,按"↑"或"W"会加速垂直的速度,按"↓"或"S"会减速垂直的速度,当速度减到0时,小球会静止.按"←"和"→"或"A"和"D"会加速或减速水平方向的速度,速度减到0时,小球会静止.

代码:

#hello world game
#1.引入pygame和其他模块
import pygame,sys

#2.初始化
pygame.init()
size=width,height=800,600
screen=pygame.display.set_mode((size),pygame.RESIZABLE)#宽,高
pygame.display.set_caption("ball rotate")#标题
ball=pygame.image.load("ball.gif")
ballrect=ball.get_rect()
speed=[1,1]
offset=1
fps=300
fclock=pygame.time.Clock()
bg=(130,216,207)#背景颜色
fullscreen=False
still=False
bgcolor=pygame.Color("black")

def RGBChannel(a):
    return 0 if a<0 else(255 if a>255 else int(a))

#3.事件循环及对事件的响应
while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            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]))
            if event.key==pygame.K_RIGHT:
                speed[0]=speed[0]+1 if speed[0]>0 else speed[0]-1
            if 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_a:
                speed[0]-=offset
            if event.key==pygame.K_d:
                speed[0]=offset
            if event.key==pygame.K_w:
                speed[1]-=offset
            if event.key==pygame.K_s:
                speed[1]=offset
        if event.type==pygame.MOUSEBUTTONDOWN:
            if event.button==1:
                still=True
        if event.type==pygame.MOUSEBUTTONUP:
            still=False
            if event.button==1:
                ballrect=ballrect.move(event.pos[0]-ballrect.left,event.pos[1]-ballrect.top)
        if event.type==pygame.MOUSEMOTION:
            still=False
            if event.buttons[0]==1:
                ballrect=ballrect.move(event.pos[0]-ballrect.left,event.pos[1]-ballrect.top)

#无边框时,需要键入ESC键表示退出
        elif event.type==pygame.KEYDOWN:
            if event.key==pygame.K_ESCAPE:
                pygame.quit()
                sys.exit()
#设置全屏和非全屏的切换 F11 (笔记本电脑键盘F11不能用,用数字1代替)              
            if event.key==pygame.K_1:
                fullscreen=not fullscreen
                if fullscreen:
                    screen=pygame.display.set_mode(size,pygame.FULLSCREEN)
                else:
                    screen=pygame.display.set_mode(size)
                
    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]
    vinfo=pygame.display.Info()
    size=width,height=vinfo.current_w,vinfo.current_h  #感知窗口大小的实时变化

    bgcolor.r=RGBChannel(ballrect.left*255/width)
    bgcolor.g=RGBChannel(ballrect.top*255/width)
    bgcolor.b=RGBChannel(min(speed[0],speed[1])*255/max(speed[0],speed[1],1))
    
    #4.刷新屏幕
    screen.fill(bgcolor)#消除残影
    screen.blit(ball,ballrect)        
    pygame.display.update() #属于while语句
    fclock.tick(fps)
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不太会敲代码的搬砖工程师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值