您当前的位置: 首页 >  游戏

风间琉璃•

暂无认证

  • 1浏览

    0关注

    337博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

python游戏制作

风间琉璃• 发布时间:2021-08-08 22:02:20 ,浏览量:1

游戏开发过程 学习参考网站:https://www.pygame.org/news 常用函数总结:

# ----------窗口相关操作-----------  
# 创建窗口  
scene = pygame.display.set_mode([屏幕宽,屏幕高])  
# 设置窗口标题  
pygame.display.set_caption("标题")  
# 设置窗口图标  
pygame.display.set_icon(image)  
# 将图片绘制到窗口  
scene.blit(image, (0, 0))  
  
# ----------图像相关操作-----------  
# 加载图片  
image = pygame.image.load("图片路径")  
# 获得图片矩形 -> Rect(x, y, width, height)  
rect =  image.get_rect()  
# 移动矩形坐标  
rect.move_ip(x, y)  
# 判断两个矩形是否相交 -> bool  
flag = pygame.Rect.colliderect(rect1,rect2)  
 
# ----------事件相关操作-----------  
# 获得所有事件列表  
event_list = pygame.event.get()  
# 常见事件类型  
# QUIT 关闭窗口  
# MOUSEMOTION 鼠标拖动  
# KEYDOWN 键盘按键  
# 获得当前所有持续按键 bools_tuple  
bool_list = pygame.key.get_pressed()  
  
  
# ----------音效相关操作-----------  
# 加载背景音乐  
pygame.mixer.music.load("./res/bg2.ogg")  
# 播放背景音乐,-1表示循环播放  
pygame.mixer.music.play(-1)  
# 加载音效  
self.bomb = pygame.mixer.Sound("./res/baozha.ogg")  
# 播放音效  
pygame.mixer.Sound.play(self.bomb) 

1.用pygame建立一个游戏界面

# 建立一个界面
import pygame
import sys

pygame.init()  # pygame 初始化

pygame.display.set_caption("我的第一个游戏")         # 窗口的标题
screen = pygame.display.set_mode( (500, 500) )    # 创建一个窗口对象 设置参数以元组传入

while True:
    pygame.display.update()                       # 不断重新刷新界面
    for event in pygame.event.get():              # 从pygame的事件队列中获取事件对象
        if event.type == pygame.QUIT:             # pygame.QUIT是一个常量,数值为256,表示事件类型为退出pygame
            pygame.quit()                         # pygame退出,和pygame.init()对应
            sys.exit()                            # 如果系统在pygame.quit()前终止,IDLE会挂起,一般最后调用sys.exit()

界面如图:在这里插入图片描述

2.基本图形的绘制


import pygame
import sys

pygame.init()  # pygame 初始化

size = width, height = 300, 300
pygame.display.set_caption("图形绘制")        # 窗口的名称
screen = pygame.display.set_mode(size)           # 创建一个窗口对象 设置参数以元组传入

# 定义颜色变量
WHITE = pygame.color.Color(255, 255, 255)        # 定义白色常量
BLACK = pygame.color.Color(0, 0, 0, a=255)       # 定义黑色常量 alpha通道默认255,不透明
RED = "#FF0000"                                  # 定义红色        十六进制
GREEN = "0x00FF00"                               # 定义绿色
BLUE = (0, 0, 255)                               # 定义蓝色 也可以是列表[0, 0, 255]

screen.fill(WHITE)                               # 窗口填充白色


while True:
    # 画线 蓝色 起点(150,130) 终点(130,170)
    pygame.draw.line(screen, BLUE, (150, 130), (130, 170))
    # 画线 蓝色 起点(150,130) 终点(170,170)
    pygame.draw.line(screen, BLUE, (150, 130), (170, 170))
    # 画线 蓝色 起点(130,170) 终点(170,170)
    pygame.draw.line(screen, GREEN, (130, 170), (170, 170))
    # 画圆 黑色 圆心:(100,50) ,半径 30
    pygame.draw.circle(screen, BLACK, (100, 50), 30)
    # 画圆 黑色 圆心:(200,50) ,半径 30
    pygame.draw.circle(screen, BLACK, (200, 50), 30)
    # 画正方形 红色 左上方(100,200) 宽 100 高50 边框宽度为2的空心矩形
    pygame.draw.rect(screen, RED, (100, 200, 100, 50), 2)

    for event in pygame.event.get():              # 从pygame的事件队列中获取事件对象
        if event.type == pygame.QUIT:             # pygame.QUIT是一个常量,数值为256,表示事件类型为退出pygame
            pygame.quit()                         # pygame退出,和pygame.init()对应
            sys.exit()                            # 如果系统在pygame.quit()前终止,IDLE会挂起,一般最后调用sys.exit()
    pygame.display.update()                       # 不断重新刷新界面

绘制图形: 在这里插入图片描述

3.实现小车的运动 方式一:

import pygame
import sys

pygame.init()

size = width, height = (400, 600)

pygame.display.set_caption("图像绘制")
screen = pygame.display.set_mode(size)

background = pygame.image.load("AnimatedStreet.png")   # 将图片保持在内存中 绘制背景图面
player = pygame.image.load("Player.png")
x, y = 178, 504                                        # player的位置

FPS = 30                                               # 设置每秒刷新的次数 图像的帧数率
clock = pygame.time.Clock()                            # 返回一个时钟对象


while True:

    screen.blit(background, (0, 0))               # 将图片渲染在指定的位置
    screen.blit(player, (x, y))
    y -= 1


    for event in pygame.event.get():              # 从pygame的事件队列中获取事件对象
        if event.type == pygame.QUIT:             # pygame.QUIT是一个常量,数值为256,表示事件类型为退出pygame
            pygame.quit()                         # pygame退出,和pygame.init()对应
            sys.exit()                            # 如果系统在pygame.quit()前终止,IDLE会挂起,一般最后调用sys.exit()
    pygame.display.update()                       # 不断重新刷新界面
    clock.tick(FPS)                               # 按照指定的更新速率来属性界面,没到时间就让它循环等待

方式二:类的封装:

# -*- codeing = utf-8 -*-
# @Time : 2021/8/8 21:25
# @Author : chao
# @File : 图像运动-类封装.py
# @Software : PyCharm

import pygame
import sys

pygame.init()

size = width, height = (400, 600)

pygame.display.set_caption("图像绘制")
screen = pygame.display.set_mode(size)

# 对游戏角色封装
class Player():
    def __init__(self):
        x, y = (width/2, height/2)                   # 屏幕的中心距离
        self.image = pygame.image.load("Player.png")   # 将图片素材加载到内存
        self.rect = self.image.get_rect(center = (x, y))  # 将rect对象的中心点,定位在(x,y)处
        #self.rect = self.image.get_rect(top = 200, left = 200)   # 默认是定位在(0,0),还可以结合其他rect的属性定位显示位置

    def move(self):
        #self.rect.y -= 1                               # 直接修改rect对象的y坐标
        #self.rect = self.rect.move(0, -1)              # 使用 rect对象的move方法,设定移动增长量,返回移动后的rect对象
        self.rect.move_ip(0, -2)                       # 直接对当前rect对象移动指定数值的位移 负数表示x向左,y向上

background = pygame.image.load("AnimatedStreet.png")   # 将图片保持在内存中 绘制背景图面

FPS = 30                                               # 设置每秒刷新的次数 图像的帧数率
clock = pygame.time.Clock()                            # 返回一个时钟对象

player = Player()                                      # 创建Player的对象,改变图像的所在的位置

while True:

    screen.blit(background, (0, 0))               # 将图片渲染在指定的位置
    screen.blit(player.image, player.rect)        # 将player对象的image 渲染到player中指定的rect区域
    player.move()                                 # 不断的调用move()方法,


    for event in pygame.event.get():              # 从pygame的事件队列中获取事件对象
        if event.type == pygame.QUIT:             # pygame.QUIT是一个常量,数值为256,表示事件类型为退出pygame
            pygame.quit()                         # pygame退出,和pygame.init()对应
            sys.exit()                            # 如果系统在pygame.quit()前终止,IDLE会挂起,一般最后调用sys.exit()
    pygame.display.update()                       # 不断重新刷新界面
    clock.tick(FPS)                               # 按照指定的更新速率来属性界面,没到时间就让它循环等待

图片展现: 在这里插入图片描述

4.事件处理 4.1 键盘处理:通过获取键盘列表,判断他们的状态,并执行相应的操作

# -*- codeing = utf-8 -*-
# @Time : 2021/8/9 14:07
# @Author : chao
# @File : 事件处理--键盘.py
# @Software : PyCharm


import pygame
import sys
from pygame.locals import*
pygame.init()

size = width, height = (400, 600)

pygame.display.set_caption("图像绘制")
screen = pygame.display.set_mode(size)
background = pygame.image.load("AnimatedStreet.png")   # 将图片保持在内存中 绘制背景图面
FPS = 30                                               # 设置每秒刷新的次数 图像的帧数率
clock = pygame.time.Clock()                            # 返回一个时钟对象


# 对游戏角色封装
class Player():
    def __init__(self):
        x, y = (178, 504)                   # 屏幕的中心距离
        self.image = pygame.image.load("Player.png")   # 将图片素材加载到内存
        self.rect = self.image.get_rect(center = (x, y))  # 将rect对象的中心点,定位在(x,y)处
        #self.rect = self.image.get_rect(top = 200, left = 200)   # 默认是定位在(0,0),还可以结合其他rect的属性定位显示位置

    def move(self):
        pressed_keys = pygame.key.get_pressed()
        if pressed_keys[pygame.K_UP]:
            self.rect.move_ip(0, -5)

        if pressed_keys[pygame.K_DOWN]:
            self.rect.move_ip(0, 5)

        if pressed_keys[K_LEFT]:
            self.rect.move_ip((-5), 0)

        if pressed_keys[K_RIGHT]:
            self.rect.move_ip(5, 0)



player = Player()                                      # 创建Player的对象,改变图像的所在的位置

while True:

    # 绘制图像
    screen.blit(background, (0, 0))               # 将图片渲染在指定的位置
    screen.blit(player.image, player.rect)        # 将player对象的image 渲染到player中指定的rect区域

    # 角色移动
    player.move()


    for event in pygame.event.get():              # 从pygame的事件队列中获取事件对象
        if event.type == pygame.QUIT:             # pygame.QUIT是一个常量,数值为256,表示事件类型为退出pygame
            pygame.quit()                         # pygame退出,和pygame.init()对应
            sys.exit()                            # 如果系统在pygame.quit()前终止,IDLE会挂起,一般最后调用sys.exit()
    pygame.display.update()                       # 不断重新刷新界面
    clock.tick(FPS)                               # 按照指定的更新速率来属性界面,没到时间就让它循环等待

4.2 鼠标处理 使用mouse对象获取鼠标的位置,并根据鼠标位置进行动作响应。可以通过rect对象的属性,控制鼠标在图片上的定位点。

# -*- codeing = utf-8 -*-
# @Time : 2021/8/9 14:07
# @Author : chao
# @File : 事件处理--键盘.py
# @Software : PyCharm


import pygame
import sys
from pygame.locals import*
pygame.init()

size = width, height = (400, 600)

pygame.display.set_caption("图像绘制")
screen = pygame.display.set_mode(size)
background = pygame.image.load("AnimatedStreet.png")   # 将图片保持在内存中 绘制背景图面
FPS = 60                                               # 设置每秒刷新的次数 图像的帧数率
clock = pygame.time.Clock()                            # 返回一个时钟对象


# 对游戏角色封装
class Player():
    def __init__(self):
        x, y = (178, 504)                   # 屏幕的中心距离
        self.image = pygame.image.load("Player.png")   # 将图片素材加载到内存
        self.rect = self.image.get_rect(center = (x, y))  # 将rect对象的中心点,定位在(x,y)处
        #self.rect = self.image.get_rect(top = 200, left = 200)   # 默认是定位在(0,0),还可以结合其他rect的属性定位显示位置

    def move(self):
        mouseX, mouseY = pygame.mouse.get_pos()        # 获取鼠标的位置
        # 小车不能超出边界
        if player.rect.width/2             
关注
打赏
1665385461
查看更多评论
0.0377s