Maison  >  Article  >  développement back-end  >  Comment implémenter de jolies petites boulettes de riz en Python

Comment implémenter de jolies petites boulettes de riz en Python

WBOY
WBOYavant
2023-05-13 21:25:041475parcourir

Créez deux sprites et construisez des éléments d'arrière-plan

Zongzi et love

Créez d'abord un objet zongzi, qui est un elfe. La classe doit hériter de la classe pygame.sprite.Sprite, qui est la collision. partie importante du module. La fonction update contrôle la direction du zongzi et empêche le zongzi de sortir de la limite. Lorsque le zongzi touche la limite, il démarre la fonction de descente, faisant rebondir le zongzi dans l'autre. direction de la frontière. 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))

搭建完成后为

Comment implémenter de jolies petites boulettes de riz en 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))

Ajoutez un ❤ et marquez des points lorsque la boulette de riz salée mange ❤. Il doit également hériter de la classe pygame.sprite.Sprite et utiliser Move_update pour faire apparaître ❤ de manière aléatoire dans le jeu et se déplacer dans les limites du jeu.

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()

Remarque : color{#FF45b0}{Remarque :} Remarque : screen.blit(image, rect) Pour dessiner une image dans le jeu, elle doit contenir deux paramètres, l'un est l'image elle-même , et l'autre One est la position de l'image dans le jeu, qui est rect.

Comment implémenter de jolies petites boulettes de riz en PythonConstruction d'arrière-plan

Importez directement des images et affichez-les dans la boucleComment implémenter de jolies petites boulettes de riz en Pythonrrreee

Une fois la construction terminée, ce sera

Comment implémenter de jolies petites boulettes de riz en Python🎜🎜Module Collision🎜🎜J'ai travaillé dur sur la partie collision, en utilisant notamment les instructions suivantes ! ! couleur{bleu}{surtout ! ! } En particulier! ! Au début, je pensais qu'il n'y avait pas de collision, alors j'ai ajouté plusieurs déclarations. En fait, c'est arrivé, mais je n'ai pas ajouté de déclaration ->Que se passerait-il dans ces conditions, provoquant cette tragédie...🎜🎜Analysons cela. conditionnez soigneusement, player est un objet zongzi, group est un groupe contenant ❤, pygame.sprite.collide_circle_ratio(0.5) peut contrôler la collision d'image volume, donc la condition de collision Atteint ! 🎜rrreee🎜Module gourmand🎜🎜Mangez ❤ lorsque la collision est atteinte, définissez l comme un tableau vide, utilisez l.append(aixin) pour ajouter une instance ❤, lorsque lorsque le Le tableau l existe, il entre dans la phase de collision. Après la collision, utilisez la fonction pop pour supprimer ❤. 🎜🎜Ensuite, ajoutez le jugement. Si le tableau l est vide, ajoutez une nouvelle ❤ instance de jeu, qui est l'instance ❤ ci-dessus🎜rrreee🎜Mécanisme de comptage🎜🎜Utilisez score pour calculer et citer un . ttf code>Le fichier de police 🎜rrreee🎜 est finalement rendu sous la forme 🎜🎜🎜🎜🎜🎜🎜🎜code complet🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer