关于游戏控制项设定,注意先认识一下状态机(还不明白的同学去看一下马里奥就知道了)

本文介绍了如何使用Pygame库开发一个游戏,涉及游戏状态的切换、鼠标事件的监听与处理,以及音效的播放和图像的加载与缩放。
摘要由CSDN通过智能技术生成
import pygame  # sys是python的标准库,提供Python运行时环境变量的操控
import os
import sys

from guongju.components import music
# 鼠标按下事件,记录初始位置

initial_position = None
ping={'x':None,'y':None,'w':None,'h':None}
class zao:

    def __init__(self,state_dict,start_state):
        self.screen = pygame.display.get_surface()
        self.clock = pygame.time.Clock()
        self.keys=pygame.key.get_pressed()
        self.state_dict=state_dict
        self.state=self.state_dict[start_state]




    def update(self):
        if self.state.finished:
            next_state=self.state.next
            self.state.finished=False
            self.state=self.state_dict[next_state]
            self.music = music.Music(next_state)
        self.state.update(self.screen,self.keys)


    def run(self):
        global initial_position
        sound_effect = pygame.mixer.Sound("music/anjianyinxiao/anjian.wav")
        while True:  # 无限循环,直到Python运行时退出结束

            for event in pygame.event.get():  # 从Pygame的事件队列中取出事件,并从队列中删除该事件

                if event.type == pygame.QUIT:  # 获得事件类型,并逐类响应
                    pygame.display.quit()
                    pygame.quit()  # "退出事件被触发!"
                    sys.exit()
                elif event.type == pygame.KEYDOWN:
                    self.keys = pygame.key.get_pressed()
                elif event.type == pygame.KEYUP:
                    self.keys = pygame.key.get_pressed()

                elif event.type == pygame.MOUSEBUTTONDOWN:  # 如果鼠标点击事件发生
                    # 播放音效
                    sound_effect.play()
                    # 鼠标按下事件,记录初始位置
                    initial_position = pygame.mouse.get_pos()
                    delta_x, delta_y = pygame.mouse.get_rel()

                    ping['x'] = pygame.mouse.get_pos()[0]
                    ping['y'] = pygame.mouse.get_pos()[1]

                elif event.type == pygame.MOUSEMOTION:
                    # 鼠标移动事件,记录坐标变化
                    if initial_position:
                        delta_x, delta_y = pygame.mouse.get_rel()
                        ping['w'] = delta_x
                        ping['h'] = delta_y

                elif event.type == pygame.MOUSEBUTTONUP:  # 添加鼠标松开事件的处理
                    initial_position = None
                    ping['w'] = 0
                    ping['h'] = 0

            self.update()
            pygame.display.update()  # 对显示窗口进行更新,默认窗口全部重绘
            self.clock.tick(60)


def load_graphics(polllll, accept=('.jpg', '.png', '.bmp', '.gif')):
    graphics = {}
    for pic in os.listdir(polllll):
        name, ext = os.path.splitext(pic)
        if ext.lower() in accept:
            img = pygame.image.load(os.path.join(polllll, pic))
            if img.get_alpha():
                img = img.convert_alpha()
            else:
                img = img.convert()
            graphics[name] = img
    return graphics


def get_image(sheet, x, y, width, height, scale):
    image = pygame.Surface((width, height),pygame.SRCALPHA)
    image.blit(sheet, (0, 0), (x, y, width, height))  # 0,0 代表画到哪个位置,×,y,w,h
    image = pygame.transform.scale(image, (int(width * scale), int(height * scale)))
    return image

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值