用pygame来编写简单的游戏

使用pygame编写游戏时,首先要构建游戏的框架
这是最小框架这是最小框架

壁球小游戏代码

import pygame, sys  # 引入pygame sys		(sys是标准库,提供python运行时环境变量的操控)

pygame.init()  # 初始化  对pygame内部各功能模块进行初始化创建及变量设置,默认调用
icon = pygame.image.load("img2.jpg")
pygame.display.set_icon(icon)       #设置窗口的图表效果
size = width, height = 600, 400
#vInfo = pygame.display.Info() #生成屏幕相关信息
#size = width,height=vInfo.current_w,vInfo.current_h     #将屏幕的长宽赋给size
speed = [1,1]
BLACK = 0, 0, 0
screen = pygame.display.set_mode(size,pygame.RESIZABLE)    #窗口大小可调
#screen = pygame.display.set_mode(size,pygame.FULLSCREEN)
#screen = pygame.display.set_mode(size)  # screen = pygame.display.set_mode(r=(0,0),flags=0)(r是游戏屏幕的分辨率,采用(width,height)方式输入,flags用来控制显示类型,可采用 | 组合使用)(pygame.resizable 窗口大小可调。pygame.NOFRAME 窗口没有边界显示。pygame.FULLSCREEN 窗口全屏显示。)   设置窗体 设置窗口宽度和高度(二值元组)窗口采用笛卡尔坐标系 左上为(0,0)向右为X正方向,向下为Y负方向
pygame.display.set_caption("WDNMD")  # 设置窗口的表土内容,参数是一个字符串类型
ball = pygame.image.load("img1.jpg")  # pygame.image.load(filename) 将filename路径下的图像载入游戏,支持13种常用图片格式
ballrect = ball.get_rect()              # surface对象 ball.get_rect() pygame使用内部定义
fps = 300  # Frame per second 每秒帧率参数
fclock = pygame.time.Clock()  # pygame.time.Clock() 创建一个Clock对象,用于操作时间surface对象表示所有载入的图像,其中.get_rect()方法返回一个覆盖图像的矩形(图像的外接矩形)rect对象rect中top, bottom, left, right表示上下左右,width, height表示宽度,高度
still = False
bgcolor = pygame.Color("black")

def RGBchannel(a):
    return 0 if a<0 else (255 if a>255 else int(a))  #当a<0时 返回值为0,当a>255时 返回值为255,当0<a<255时 返回值为a的整数


while True:  # 执行死循环
    for event in pygame.event.get():  # 从事件队列中取出事件,并从队列中删除该事件
        if event.type == pygame.QUIT:  # pygame.QUIT是Pygame中定义的退出时间常量
            sys.exit()      # sys.exit()用于退出结束游戏并退出
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
               sys.exit()   # sys.exit()用于退出结束游戏并退出
            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_LEFT:
                speed[1] = speed[1] if speed[1] == 0 else(abs(speed[1] - 1) * int(speed[1] / abs(speed[1])))

        elif event.type == pygame.VIDEORESIZE:      #这是一个窗口大小改变的事件,事件发生后返回新窗口的宽度event.size[0]和高度event.size[1]
            size = width,height=event.size[0],event.size[1]
            screen = pygame.display.set_mode(size,pygame.RESIZABLE)

        elif event.type == pygame.MOUSEBUTTONDOWN:      #按下鼠标事件
            if event.button == 1:           # event.button = 鼠标按下键编号 (取值为整数,左键为1,右键为3)
                still = True
        elif event.type == pygame.MOUSEBUTTONUP:        #释放鼠标事件
            still = 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:                   #event.buttons[0,0,0] 对应鼠标的三个键,鼠标移动时,这三个件处于按下状态,对应的位置值为1,繁值0.
                ballrect = ballrect.move(event.pos[0] - ballrect.left,event.pos[1] - ballrect.top )        #鼠标移动时按下左键,小球移动到鼠标现在的位置


    if pygame.display.get_active() and not still:     #当窗口在系统中显示(屏幕绘制/非图标化)时返回True,否则返回False,该函数可以用来判断游戏靠窗口是否被最小化,进一步半段后可以暂停游戏,改变响应模式等
        ballrect = ballrect.move(speed[0],speed[1])  # ballrect.move(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]  # 碰壁后速度取反
    if ballrect.right > width and ballrect.right + speed[
        0] > ballrect.right:  # 由于当鼠标将图片拖到最边缘时图片的右边坐标远大于宽度,所以单次取反只会使图片在边缘来回浮动,进行如下操作,小球则会离开边缘。
        speed[0] = -speed[0]
    elif ballrect.bottom > height and ballrect.bottom + speed[1] > ballrect.bottom:
        speed[1] = -speed[1]

    bgcolor.r = RGBchannel(ballrect.left*255/width)
    bgcolor.g = RGBchannel(ballrect.left * 255 / height)
    bgcolor.b = RGBchannel(min(speed[0],speed[1]) * 255 / max(speed[0],speed[1],1))

    screen.fill(bgcolor)      # screen.fill(color)	显示窗口背景填充为color颜色采用RGB色彩体系 由于图片不断运动,运动后原位置默认填充白色,因此需要不断刷新
    screen.blit(ball, ballrect)     # screnen,blit(src,dest)将图像绘制在另一个图像上,即将src绘制到dest位置上,通过rect对象引导对壁球的绘制
    pygame.display.update()      # 对显示窗口进行刷新,默认窗口全部重绘
    fclock.tick(fps)    # clock.tick(framerate) 控制帧速度,即窗口刷新速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值