>백엔드 개발 >파이썬 튜토리얼 >Python으로 귀여운 쌀만두를 구현하는 방법

Python으로 귀여운 쌀만두를 구현하는 방법

WBOY
WBOY앞으로
2023-05-13 21:25:041535검색

두 개의 스프라이트를 만들고 배경 요소를 만듭니다

Zongzi and love

먼저 엘프인 zongzi 개체를 만듭니다. 클래스는 충돌인 pygame.sprite.Sprite 클래스를 상속해야 합니다. 모듈 중요한 부분. update 기능은 종지가 방향을 제어하고 종지가 경계를 벗어나는 것을 방지하며 종지가 경계에 닿으면 바텀 아웃 기능을 시작하여 종지가 다른 쪽에서 튀도록 합니다. 경계의 방향. pygame.sprite.Sprite类,这是碰撞模块的重要部分。update函数是控制粽子方向,并防止粽子跑出边界,当粽子触碰到边界时出发触底反弹功能,使粽子向边界另一方向反弹移动。

class Player(pygame.sprite.Sprite):
    """
    粽子对象
    """
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load('min2.png')
        self.image = pygame.transform.scale(self.image, (130, 130))
        print(self.image)
        self.rect = self.image.get_rect()
        self.rect.midbottom = (20, screen_height )
    def update(self):
        screen.blit(self.image, (self.rect.x, self.rect.y))
        screen.blit(self.image, self.rect)
        x_move = 0
        y_move = 0
        # 获取按键,并进行相应的移动
        key = pygame.key.get_pressed()
        #通过控制数字来设置粽子速度
        if key[pygame.K_LEFT]:
            x_move -= 4
        if key[pygame.K_RIGHT]:
            x_move += 4
        if key[pygame.K_UP]:
            y_move -= 4
        if key[pygame.K_DOWN]:
            y_move += 4
        self.rect.x += x_move
        self.rect.y += y_move
        # 控制人物的最低位置
        if self.rect.bottom > screen_height+330 :
            self.rect.bottom = screen_height + 330
        # 绘制粽子
        screen.blit(self.image, self.rect)
        #防止粽子跑出边界
        if  self.rect.right > 1400:
            self.rect.x -= 20
        elif  self.rect.left <=-10:
            self.rect.x += 20
        elif  self.rect.top < 0:
            self.rect.y += 50
        elif self.rect.bottom> 730:
            self.rect.y -= 60

在添加一个❤,当咸粽吃到❤时得分。其也必须继承pygame.sprite.Sprite类,通过Move_update使❤随机出现在游戏中,并在游戏边界内移动。

class Heart_game(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.Heart_speed = [2,-3]
        # 加载小球图片
        self.image = pygame.image.load(&#39;min_love.png&#39;).convert_alpha()
        # 获取小球图片的区域开状
        self.rect = self.image.get_rect()
        x,y = random.randint(0,1300),random.randint(0,700)
        self.active = True
        self.rect.midbottom = (x, y )
    def Move_update(self):
        self.rect = self.rect.move(self.Heart_speed)
        #绘制爱心图片
        screen.blit(self.image, self.rect)
        if  self.rect.right > 1400:
            x = random.randint(-5, 0)
            y = random.randint(-5, -2) or random.randint(1, 5)
            self.Heart_speed = [x, y]
        elif  self.rect.left <=-10:
            x = random.randint(0, 5)
            y = random.randint(-5, 5)
            self.Heart_speed = [x, y]
        elif  self.rect.top < -10:
            x = random.randint(-3,3)
            y = random.randint(0,3)
            self.Heart_speed = [x,y]
        elif self.rect.bottom> 695:
            x = random.randint(-3, 3)
            y = random.randint(-3,0)
            self.Heart_speed = [x, y]

注 意 : color{#FF45b0}{注意:} 注意:screen.blit(image, rect)为在游戏中绘制图片,必须包含两个参数,一个是图片本身,另一个是图片在游戏中的位置,即为rect

背景搭建

直接导入图片并在循环中显示

bg = pygame.image.load("vack.jpeg").convert()
#下句需在游戏主循环中使用
screen.blit(bg, (0, 0))

搭建完成后为

Python으로 귀여운 쌀만두를 구현하는 방법

碰撞模块

碰撞部分我可是煞费苦心啊,使用以下语句, 尤 其 是 ! ! color{blue}{尤其是!!} 尤其是!!我一开始以为没有碰撞,添加多个语句,实际上他发生了,只是我没有加语句->在此条件下会发生什么,造成这个惨案…

我们来好好分析这段条件,player 是粽子对象,group是一个包含❤的组,pygame.sprite.collide_circle_ratio(0.5)可以控制图片碰撞体积,于是碰撞条件达成!

if pygame.sprite.spritecollide(player,group,True,pygame.sprite.collide_circle_ratio(0.5)) :
	语句

贪吃模块

当达到碰撞时把❤吃掉,设l为一个空数组,用l.append(aixin)加入❤实例,当数组l存在时,进入碰撞环节,碰撞后用pop函数删除❤。

然后加入判断,若数组l为空,则新加入❤游戏实例,也就是上述❤实例

    for each in l:
        each.Move_update()
        screen.blit(each.image, each.rect)
        if pygame.sprite.spritecollide(player,group,True,pygame.sprite.collide_circle_ratio(0.5)) :
                l.pop()
                score += 1
                print(score)
                # del aixin
    if not l:
        l.append(Heart_game())
        group.add(l[0])

计数机制

score计算,引用一个ttf

score = 0
score_font = pygame.font.Font("font.ttf",50)
score_text = score_font.render("Score: % s" % str(score), True, BLACK)
screen.blit(score_text, (0, 0))

❤을 추가하고 짠만두가 먹으면 점수를 얻습니다❤. 또한 pygame.sprite.Sprite 클래스를 상속하고 Move_update를 사용하여 ❤가 게임에 무작위로 나타나고 게임 경계 내에서 이동하도록 해야 합니다.

import pygame
from pygame.locals import *
import pygame
import sys
import asyncio
import time
import random
class Player(pygame.sprite.Sprite):
    #粽子对象
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(&#39;min2.png&#39;)
        self.image = pygame.transform.scale(self.image, (130, 130))
        print(self.image)
        self.rect = self.image.get_rect()
        self.rect.midbottom = (20, screen_height )
    def update(self):
        screen.blit(self.image, (self.rect.x, self.rect.y))
        screen.blit(self.image, self.rect)
        x_move = 0
        y_move = 0
        # 获取按键,并进行相应的移动
        key = pygame.key.get_pressed()
        if key[pygame.K_LEFT]:
            x_move -= 4
        if key[pygame.K_RIGHT]:
            x_move += 4
        if key[pygame.K_UP]:
            y_move -= 4
        if key[pygame.K_DOWN]:
            y_move += 4
        self.rect.x += x_move
        self.rect.y += y_move
        # 控制人物的最低位置
        # 绘制人物
        screen.blit(self.image, self.rect)
        if  self.rect.right > 1400:
            self.rect.x -= 20
        elif  self.rect.left <=-10:
            self.rect.x += 20
        elif  self.rect.top < 0:
            self.rect.y += 50
        elif self.rect.bottom> 730:
            self.rect.y -= 60
    # def eat(self):
class Heart_game(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.Heart_speed = [2,-3]
        # 加载小球图片
        self.image = pygame.image.load(&#39;min_love.png&#39;).convert_alpha()
        # 获取小球图片的区域开状
        self.rect = self.image.get_rect()
        x,y = random.randint(0,1300),random.randint(0,700)
        self.active = True
        self.rect.midbottom = (x, y )
    def Move_update(self):
        self.rect = self.rect.move(self.Heart_speed)
        screen.blit(self.image, self.rect)
        if  self.rect.right > 1400:
            x = random.randint(-5, 0)
            y = random.randint(-5, -2) or random.randint(1, 5)
            self.Heart_speed = [x, y]
        elif  self.rect.left <=-10:
            x = random.randint(0, 5)
            y = random.randint(-5, 5)
            self.Heart_speed = [x, y]
        elif  self.rect.top < -10:
            x = random.randint(-3,3)
            y = random.randint(0,3)
            self.Heart_speed = [x,y]
        elif self.rect.bottom> 695:
            x = random.randint(-3, 3)
            y = random.randint(-3,0)
            self.Heart_speed = [x, y]
# 加载基本的窗口和时钟
pygame.init()
screen_width = 1400
screen_height = 700
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption(&#39;迟到的端午&#39;)
clock = pygame.time.Clock()  # 设置时钟
# 加载背景,粽子,爱心
bg = pygame.image.load("vack.jpeg").convert()
player = Player()
aixin = Heart_game()
group = pygame.sprite.Group(aixin)
count = 0
score = 0
score_font = pygame.font.Font("font.ttf",50)
BLACK= (0,0,0)
l = []
l.append(aixin)
#  游戏主循环
game_run = 1
while game_run:
    clock.tick(60)
    screen.blit(bg, (0, 0))
    # 持续更新
    count += 1
    for each in l:
        each.Move_update()
        screen.blit(each.image, each.rect)
        if pygame.sprite.spritecollide(player,group,True,pygame.sprite.collide_circle_ratio(0.5)) :
                l.pop()
                score += 1
                print(score)
                # del aixin
    if not l:
        l.append(Heart_game())
        group.add(l[0])
    player.update()
    score_text = score_font.render("Score: % s" % str(score), True, BLACK)
    screen.blit(score_text, (0, 0))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_run = False
    # 窗口更新并绘制
    pygame.display.update()
pygame.quit()

참고: color{#FF45b0}{참고:} 참고: screen.blit(image, ret) 게임에서 그림을 그리려면 두 개의 매개변수를 포함해야 하며, 하나는 그림 자체입니다. , 다른 하나는 게임 내 그림의 위치로 직선입니다.

Python으로 귀여운 쌀만두를 구현하는 방법배경 구축

이미지를 직접 가져와 루프에 표시Python으로 귀여운 쌀만두를 구현하는 방법rrreee

구성이 완료되면

Python에서 귀여운 쌀만두를 구현하는 방법🎜🎜Collision 모듈🎜🎜특히 다음 명령문을 사용하여 충돌 부분을 열심히 작업했습니다! ! 색상{파란색}{특히! ! } 특히! ! 처음에는 충돌이 없는 줄 알고 여러 문장을 추가했는데 사실 그런 일이 발생했는데 문장을 추가하지 않았습니다. ->이런 조건에서 무슨 일이 일어나서 이런 비극이 발생하게 됐는지...🎜🎜이걸 분석해 보겠습니다. 조건을 주의 깊게 살펴보세요. player는 zongzi 객체이고, group은 ❤를 포함하는 그룹이며, pygame.sprite.collide_circle_ratio(0.5)는 이미지 충돌을 제어할 수 있습니다. 볼륨이므로 충돌 조건이 달성되었습니다! 🎜rrreee🎜Greedy module🎜🎜Eat ❤ 충돌에 도달하면 l을 빈 배열로 설정하고 l.append(aixin)를 사용하여 ❤ 인스턴스를 추가합니다. 배열 l이 존재하면 충돌 단계에 들어갑니다. 충돌 후 pop 함수를 사용하여 ❤를 삭제합니다. 🎜🎜그런 다음 판단을 추가합니다. 배열 l이 비어 있으면 위의 ❤ 인스턴스인 새로운 ❤ 게임 인스턴스를 추가합니다🎜rrreee🎜계산 메커니즘🎜🎜score를 사용하여 를 계산하고 인용합니다. ttf code>글꼴 파일🎜rrreee🎜이 최종적으로🎜🎜🎜🎜🎜🎜🎜🎜full code🎜rrreee로 렌더링됩니다.

위 내용은 Python으로 귀여운 쌀만두를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제