Python学习-1 pygame

为了引导小孩学习编程,选择他喜欢的我的世界素材
1、安装python,目前最新版本python311.exe
https://www.python.org/
https://www.python.org/ftp/python/3.11.2/python-3.11.2-amd64.exe
2、安装完毕后执行
pip3 install pygame
如果本机上有其他版本python3,要进入新安装版本目录,并复制修改python为python311,不然后面会出错。
3、打开vscode,输入以下代码(使用小球展示代码修改的)

import sys
import pygame

print(pygame)
pygame.init()  # init() 用来对python进行初始化, 因为pygame是跨平台的所以需要先根据所在系统与环境初始化

# pygame.display 该对象负责游戏窗口的显示
#  set_mode(resolution=(0,0)) -> Surface 表面/图层
#  该方法用来设置游戏窗口的大小,调用该方法,会立即显示一个游戏窗口
#  需要一个元组作为参数,元组中有两个参数
#        第一个  是屏幕的宽度
#        第二个  是屏幕的高度
#  该方法会返回一个surface对象,该对象表示画面中的一个基本元素,游戏中的所有元素都是一个一个图层组成

screen = pygame.display.set_mode((1024, 768))
# print(screen)  # <Surface(800x600x32 SW)>  代表整个窗口

# set_caption 用来设置游戏窗口的标题
pygame.display.set_caption('小球丝滑移动')

# 设置窗口的背景颜色 给screen设置颜色,设置颜色值,使用的是RGB值【光的三原色】 0-255 表示一个字节
screen.fill((220, 220, 220))  # 使用fill,来为surface设置背景颜色

# image 对象专门用来加载图片
# pygame.image.load(img_path) -> surface
ball = pygame.image.load('intro_ball.gif')
ball1 = pygame.image.load('intro_ball1.gif')
# print(ball)  # <Surface(111x111x8 SW)>

# Rect 表示矩形,即每一个图层在窗口中,所占的位置实际上都是一个矩形
ball_rect = ball.get_rect()
ball1_rect = ball1.get_rect()
screen_rect = screen.get_rect()
# print(ball_rect)  # <rect(0, 0, 111, 111)>

# 【坐标与我们数学中的,在y轴方向是向下的,x轴一样】 通过改变矩形对象的x 和 y来影响 矩形的位置
# ball_rect.x = 100
# ball_rect.y = 100
# centerx 和 centery 用来设置图层中心位置坐标 --> 去到窗口的中心位置
ball_rect.centerx = screen_rect.centerx
ball_rect.centery = screen_rect.centery

ball1_rect.centerx = screen_rect.centerx
ball1_rect.centery = screen_rect.centery
# blit(source, dest, area=None, special_flags = 0) -> Rect
# 这是surface的方法,可以将一个其他的图层绘制到当前图层中
#       参数:
#           1.要绘制的图层
#           2.绘制图层的位置 <rect(0, 0, 111, 111)>
screen.blit(ball, ball_rect)
screen.blit(ball1, ball1_rect)

# flip 对整个窗口进行渲染
# Update the full display Surface to the screen
pygame.display.flip()


# 创建一个存储小球移动方向的变量
ball_dir = 0
# 创建一个存储小球移动速度的变量
ball_speed = 1

font1=pygame.font.SysFont("幼圆",48)
text1_0=font1.render("哈哈哈啊",True,(255,0,0))
# 创建一个游戏主循环【任何一个游戏都有一个无限循环在运行着】
while 1:
    # event 是pygame中的事件对象,通过event可以获取事件信息
    # lst = pygame.event.get()  # 列表中都是当前所发生的事件对象
    for event in pygame.event.get():
        # 判断用户是否点击关闭
        if event.type == pygame.QUIT:
            sys.exit()
        # 检查用户是否敲击键盘
        elif event.type == pygame.KEYDOWN:
            # 获取用户按下的按键, key 用来在键盘按下时,会获取按键的编号
            # print(event.key)
            ball_dir = event.key  # 只控制方向
        elif event.type == pygame.KEYUP:
            # 按键松开停止移动 【这里注意有个按住多个方向键问题】
            # 注意 这里要解决一个问题:即我们按住左键球向左移动,但是我们同时按住右键,再松开左键就停止了
            if ball_dir == event.key:
                ball_dir = 0

    if ball_dir == pygame.K_UP:
        # 小球向上移动,y值减小
        ball_rect.y -= ball_speed
    elif ball_dir == pygame.K_DOWN:
        ball_rect.y += ball_speed
    elif ball_dir == pygame.K_LEFT:
        ball_rect.x -= ball_speed
    elif ball_dir == pygame.K_RIGHT:
        ball_rect.x += ball_speed
    # else:
    #     # 回到初始位置
    #     ball_rect.centerx = screen_rect.centerx
    #     ball_rect.centery = screen_rect.centery

    # 控制小球的位置是否超过左右边界
    if ball_rect.left < 0:  # 也可以是 ball_rect.x
        ball_rect.left = 0
    elif ball_rect.right > screen_rect.width:
        ball_rect.right = screen_rect.width
    # 控制小球的位置是否超过上下边界
    if ball_rect.top < 0:  # 也可以是 ball_rect.y
        ball_rect.top = 0
    elif ball_rect.bottom > screen_rect.height:
        ball_rect.bottom = screen_rect.height

    # 需要先盖一层,防止画完小球一直存在无法体现移动
    screen.fill((220, 220, 220))
    screen.blit(ball1, ball1_rect)
    screen.blit(ball, ball_rect)
    screen.blit(text1_0,(100,100))
    pygame.display.flip()

4、下载图片到当前目录
image
image
image

posted @ 2023-02-24 22:08  zhaogaojian  阅读(89)  评论(0编辑  收藏  举报