백엔드 개발 파이썬 튜토리얼 Python 타사 라이브러리 pygame을 사용하는 방법

Python 타사 라이브러리 pygame을 사용하는 방법

Jun 02, 2023 pm 09:50 PM
python pygame

기능: pygame은 일반적으로 게임을 만드는데 사용됩니다

참고: 1. pygame에서 제공하는 기능을 사용하기 전에 init 메소드를 호출해야 합니다

2 게임이 끝나기 전에 quit 메소드를 호출해야 합니다

다양한 기능 in pygame:

1 .pygame.init(): 이 함수는 pygame을 사용할 때 초기화됩니다. 이 함수를 참조해야만 pygame

2.pygame.Rect()에서 제공하는 함수를 사용할 수 있습니다. 이 함수는 위치를 설정할 수 있습니다. 초기화 함수를 참조하지 않고도 사용할 수 있는 특수 함수입니다

3.pygame.display.set_mode(solution=(0,0),flags=0,length=0): 이 함수는 게임 개체의 메인 창을 생성합니다.

매개변수 1: 화면의 너비와 높이를 지정합니다. 기본값은 화면 크기와 일치합니다.

매개변수 2: 화면에 대한 추가 옵션을 지정하며 기본적으로 전달되지 않습니다.

매개변수 3: 색상의 자릿수, 기본적으로 자동 일치

4. pygame.display.update(): 기본 창 콘텐츠 새로 고침

5.pygame.image.load(): 필요한 이미지 로드

6 . 메인 창 object.blit(image, position): 지정된 위치에 이미지를 그립니다.

7.pygame.time.Clock(): 프레임 속도를 제어하는 ​​시간 객체 생성

8. ): 초당 프레임 속도를 제어합니다

9.pygame.event.get( ): 이벤트 리스너, 목록 반환

10.pygame.sprite.Sprite: Sprite, 이미지 데이터를 저장하고 ret

에 사용되는 객체 11.pygame.sprite.Group (Sprite 1, Sprite 2): Elf 그룹 객체 생성

12. Elf 그룹 object.update(): elf 그룹에서 엘프의 위치를 ​​업데이트합니다

13. (): 엘프 그룹의 모든 엘프를 메인 창에 그립니다

14.pygame .time.set_time(eventid,milliseconds): 각 기간 동안 프로그램이 실행할 내용을 설정합니다. 첫 번째 매개변수는 기반으로 지정해야 합니다. pygame.USEREVENT 상수에서 두 번째 매개변수는 밀리초 값입니다

15.pygame.key.get_pressed( ): 키 모니터링은 모든 키의 튜플을 반환합니다. 튜플의 키가 트리거되는지 여부를 결정하려면 키보드 상수를 사용하세요. 트리거되면 해당 값은 1

16.pygame.sprite.groupcollide(elf group 1, elf group Group 2, bool, bool): 두 elf 그룹의 충돌을 감지하고 사전이 첫 번째로 반환됩니다. 매개변수는 세 번째 매개변수와 연결되고, 두 번째 매개변수는 네 번째 매개변수와 연결됩니다. bool 유형이 true이면 충돌이 소멸됩니다.

17.pygame.sprite.spritecollide(elf, elf group, bool): 감지합니다. elf와 elf 그룹 간의 충돌이 발생하고 bool 유형이 true인 경우 elf 그룹의 목록이 반환됩니다.

비행기 전쟁 게임 요약:

import pygame
import time
from plane_Sprite import *
 
class PlaneGame(object):
    def __init__(self):
        print('初始化')
        # 1.创建游戏窗口
        self.screem = pygame.display.set_mode(SCREEM_RECT.size)  # 这里需要拿到元组类型的数据,使用 .size 可以拿到数组中的数据
        # 2.创建游戏时钟
        self.clock = pygame.time.Clock()
        # 3.调用私有方法,精灵和精灵组的创建
        self.__create_sprite()
        # 4.创建敌机定时器
        pygame.time.set_timer(CREATE_ENEMY_EVENT, 1000)
        # 5.创建子弹定时器
        pygame.time.set_timer(HERO_FIRE_EVENT, 500)
    def __create_sprite(self):
        # 创建背景精灵类
        # bg1 = BackGround('./images/background.jpg')
        # bg2 = BackGround('./images/background.jpg')
        bg1 = BackGround()
        bg2 = BackGround(True)
        self.back_groud = pygame.sprite.Group(bg1, bg2)  # 创建背景精灵组
        self.enemy_group = pygame.sprite.Group()  # 创建敌机精灵组
        self.he1 = Hero()
        self.hero_group = pygame.sprite.Group(self.he1)  # 创建英雄精灵组
 
    def StartGame(self):
        print('开始游戏')
        while True:
            # 1.设置刷新的帧率
            self.clock.tick(SHUA)
            # 2.事件监听
            self.__event_handler()
            # 3.碰撞检测
            self.__check_cllide()
            # 4.更新/和绘制精灵组图片
            self.__update_sprite()
            # 5.更新显示
            pygame.display.update()
    # 定义私有方法
    def __event_handler(self):
        """监听事件处理"""
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                # 调用静态方法:使用类名
                PlaneGame.__game_over()
            # 判断定时器事件
            elif event.type == CREATE_ENEMY_EVENT:
                # 创建敌机对象
                enemy = Enemy()
                # 添加到精灵组中
                self.enemy_group.add(enemy)
            elif event.type == HERO_FIRE_EVENT:
                self.he1.fire()
        # 获取键盘信息
        key_pressed = pygame.key.get_pressed()
        # 判断对应的键盘
        if key_pressed[pygame.K_RIGHT]:
            self.he1.speed = 3
        elif key_pressed[pygame.K_LEFT]:
            self.he1.speed = -3
        elif key_pressed[pygame.K_UP]:
            self.he1.speed = -2
        elif key_pressed[pygame.K_DOWN]:
            self.he1.speed = 2
        else:
            self.he1.speed = 0
    def __check_cllide(self):
        """碰撞检测"""
        # 子弹摧毁敌机
        pygame.sprite.groupcollide(self.he1.bullets, self.enemy_group, True, True)
        # 敌机撞毁英雄
        enemy_list = pygame.sprite.spritecollide(self.he1, self.enemy_group,True)
        if len(enemy_list) > 0:
            # 销毁英雄
            self.he1.kill()
            # 结束游戏
            PlaneGame.__game_over()
    def __update_sprite(self):
        """更新精灵组"""
        self.back_groud.update()  # 刷新图像数据
        self.back_groud.draw(self.screem)  # 绘画图像
        # 敌机精灵组更新
        self.enemy_group.update()
        self.enemy_group.draw(self.screem)
        # 英雄精灵组更新
        self.hero_group.update()
        self.hero_group.draw(self.screem)
        # 子弹精灵组更新
        self.he1.bullets.update()
        self.he1.bullets.draw(self.screem)
    @staticmethod # 静态方法
    def __game_over():
        """结束游戏"""
        print('游戏结束')
        pygame.quit()
        exit()
if __name__ == "__main__":
 
    # 创建游戏对象
    plane_start = PlaneGame()
    # 启动游戏
    plane_start.StartGame()
로그인 후 복사

위 코드는 다음과 같습니다. 게임이 함수를 구현하려면

import random
import pygame
 
# 定义常量,一般使用大写字母'
# 屏幕大小常量
SCREEM_RECT = pygame.Rect(0, 0, 591, 764)
# 刷新的帧率
SHUA = 60
# 设置敌机定时器事件常量
CREATE_ENEMY_EVENT = pygame.USEREVENT
# 设置英雄子弹定时器事件常量
HERO_FIRE_EVENT = pygame.USEREVENT + 1  # 因为 pygame.USEREVENT 被占用,所以需要加1进行区分
 
class GameSprite(pygame.sprite.Sprite):
    """飞机大战游戏精灵"""
    def __init__(self, image_name, speed = 1):
        # 需要调用超级初始化方法
        super().__init__()
        # 定义属性
        self.image = pygame.image.load(image_name)  # 加载图像
        self.rect = self.image.get_rect()  # 获取到图像位置变更的信息
        self.speed = speed  # 设置变更的速度
 
    def update(self):
        # 在屏幕垂直向上移动
        self.rect.y += self.speed
 
# 创建一个子类,完成屏幕需求
class BackGround(GameSprite):
    """游戏背景精灵"""
    # is_alt 判断参数
    def __init__(self, is_alt= False):
        # 调用父类初始化方法设置参数
        super().__init__('./images/background.jpg')
        # 判断是否是叠加图像
        if is_alt:
            self.rect.y = -self.rect.height
    def update(self):
        # 调用父类的方法
        super().update()
        # 2.判断是否移出屏幕,移出屏幕,重新设置到屏幕上方
        if self.rect.y >= SCREEM_RECT.height:
            self.rect.y = -self.rect.height
 
# 创建敌机类
class Enemy(GameSprite):
    def __init__(self):
        # 1.调用父类方法,创建敌机精灵,同时指定敌机图片
        super().__init__('./images/enemy_2.jpg')
        # 2.指定敌机的初始随机速度
        self.speed = random.randint(1, 3)
        # 3.指定敌机的初始随机位置
        self.rect.bottom = 0
        max_x = SCREEM_RECT.width - self.rect.width  # 计算x的最大值
        self.rect.x = random.randint(0, max_x)
 
    def update(self):
        # 调用父类方法,保持垂直飞行
        super().update()
        # 判断是否非常屏幕,是,则删除精灵组
        if self.rect.y >= SCREEM_RECT.height + self.rect.height:
            # kill 方法可以将精灵从精灵组中移除,精灵就会被自动销毁
            self.kill()
    def __del__(self):
        # print('%s' % self.rect)
        pass
 
# 创建英雄类
class Hero(GameSprite):
    def __init__(self):
        # 1.调用父类中的初始方法,加载图片
        super().__init__('./images/planeNormal_2.jpg', 0)
        # 2.重新设置位置
        self.rect.centerx = SCREEM_RECT.centerx
        self.rect.bottom = SCREEM_RECT.bottom - 80
        # 创建子弹组
        self.bullets = pygame.sprite.Group()
    def update(self):
        self.rect.x += self.speed
        # 控制屏幕不会出界
        if self.rect.x <= -30:
            self.rect.x = -30
        elif self.rect.right >= SCREEM_RECT.right + 30:
            self.rect.right = SCREEM_RECT.right + 30
    def fire(self):
        # 设置每次发射三枚子弹
        for i in (0, 1, 2):
            # 1.创建子弹精灵
            bullet = Bullet()
            # 2.设置精灵位置
            bullet.rect.bottom = self.rect.y - i * 24
            bullet.rect.centerx = self.rect.centerx
            # 3.将精灵添加到精灵组
            self.bullets.add(bullet)
# 创建子弹类
class Bullet(GameSprite):
    def __init__(self):
        # 调用父类方法
        super().__init__(&#39;./images/bullet2.jpg&#39;, -3)
    def update(self):
        super().update()
        if self.rect.bottom < 0:
            self.kill()
로그인 후 복사

위는 구현하려는 각 스프라이트에 대한 코드입니다. 코드 세그먼트는 plane_Sprite로 이름이 바뀌고 위와 같이 함수 구현 코드에서 모듈로 참조됩니다. 직접 코드

【코드 구현 효과】

Python 타사 라이브러리 pygame을 사용하는 방법

위 내용은 Python 타사 라이브러리 pygame을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP와 Python : 다른 패러다임이 설명되었습니다 PHP와 Python : 다른 패러다임이 설명되었습니다 Apr 18, 2025 am 12:26 AM

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

Python vs. JavaScript : 학습 곡선 및 사용 편의성 Python vs. JavaScript : 학습 곡선 및 사용 편의성 Apr 16, 2025 am 12:12 AM

Python은 부드러운 학습 곡선과 간결한 구문으로 초보자에게 더 적합합니다. JavaScript는 가파른 학습 곡선과 유연한 구문으로 프론트 엔드 개발에 적합합니다. 1. Python Syntax는 직관적이며 데이터 과학 및 백엔드 개발에 적합합니다. 2. JavaScript는 유연하며 프론트 엔드 및 서버 측 프로그래밍에서 널리 사용됩니다.

PHP와 Python 중에서 선택 : 가이드 PHP와 Python 중에서 선택 : 가이드 Apr 18, 2025 am 12:24 AM

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

Windows 8에서 코드를 실행할 수 있습니다 Windows 8에서 코드를 실행할 수 있습니다 Apr 15, 2025 pm 07:24 PM

VS 코드는 Windows 8에서 실행될 수 있지만 경험은 크지 않을 수 있습니다. 먼저 시스템이 최신 패치로 업데이트되었는지 확인한 다음 시스템 아키텍처와 일치하는 VS 코드 설치 패키지를 다운로드하여 프롬프트대로 설치하십시오. 설치 후 일부 확장은 Windows 8과 호환되지 않을 수 있으며 대체 확장을 찾거나 가상 시스템에서 새로운 Windows 시스템을 사용해야합니다. 필요한 연장을 설치하여 제대로 작동하는지 확인하십시오. Windows 8에서는 VS 코드가 가능하지만 더 나은 개발 경험과 보안을 위해 새로운 Windows 시스템으로 업그레이드하는 것이 좋습니다.

Python에서 비주얼 스튜디오 코드를 사용할 수 있습니다 Python에서 비주얼 스튜디오 코드를 사용할 수 있습니다 Apr 15, 2025 pm 08:18 PM

VS 코드는 파이썬을 작성하는 데 사용될 수 있으며 파이썬 애플리케이션을 개발하기에 이상적인 도구가되는 많은 기능을 제공합니다. 사용자는 다음을 수행 할 수 있습니다. Python 확장 기능을 설치하여 코드 완료, 구문 강조 및 디버깅과 같은 기능을 얻습니다. 디버거를 사용하여 코드를 단계별로 추적하고 오류를 찾아 수정하십시오. 버전 제어를 위해 git을 통합합니다. 코드 서식 도구를 사용하여 코드 일관성을 유지하십시오. 라인 도구를 사용하여 잠재적 인 문제를 미리 발견하십시오.

PHP와 Python : 그들의 역사에 깊은 다이빙 PHP와 Python : 그들의 역사에 깊은 다이빙 Apr 18, 2025 am 12:25 AM

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

터미널 VSCODE에서 프로그램을 실행하는 방법 터미널 VSCODE에서 프로그램을 실행하는 방법 Apr 15, 2025 pm 06:42 PM

vs 코드에서는 다음 단계를 통해 터미널에서 프로그램을 실행할 수 있습니다. 코드를 준비하고 통합 터미널을 열어 코드 디렉토리가 터미널 작업 디렉토리와 일치하는지 확인하십시오. 프로그래밍 언어 (예 : Python의 Python Your_file_name.py)에 따라 실행 명령을 선택하여 성공적으로 실행되는지 여부를 확인하고 오류를 해결하십시오. 디버거를 사용하여 디버깅 효율을 향상시킵니다.

VScode 확장자가 악의적입니까? VScode 확장자가 악의적입니까? Apr 15, 2025 pm 07:57 PM

VS 코드 확장은 악의적 인 코드 숨기기, 취약성 악용 및 합법적 인 확장으로 자위하는 등 악성 위험을 초래합니다. 악의적 인 확장을 식별하는 방법에는 게시자 확인, 주석 읽기, 코드 확인 및주의해서 설치가 포함됩니다. 보안 조치에는 보안 인식, 좋은 습관, 정기적 인 업데이트 및 바이러스 백신 소프트웨어도 포함됩니다.

See all articles