Heim >Backend-Entwicklung >Python-Tutorial >Wie man süße kleine Reisknödel in Python implementiert
Erstellen Sie zunächst ein Zongzi-Objekt, das ein Elf ist. Die Klasse muss die Klasse pygame.sprite
erben, die die Kollision darstellt Modul wichtiger Teil. Die Funktion update
steuert die Richtung des Zongzi und verhindert, dass der Zongzi über die Grenze hinausläuft. Wenn der Zongzi die Grenze berührt, startet er die Bottom-Out-Funktion, wodurch der Zongzi in die andere Richtung springt Richtung der Grenze. 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('min_love.png').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))
搭建完成后为
碰撞部分我可是煞费苦心啊,使用以下语句, 尤 其 是 ! ! 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))Fügen Sie ein ❤ hinzu und sammeln Sie Punkte, wenn der salzige Reisknödel ❤ isst. Es muss außerdem die Klasse
pygame.sprite.Sprite
erben und Move_update
verwenden, damit ❤ zufällig im Spiel erscheint und sich innerhalb der Spielgrenzen bewegt. 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('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 # 控制人物的最低位置 # 绘制人物 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('min_love.png').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('迟到的端午') 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()Hinweis: color{#FF45b0}{Hinweis:} Hinweis:
screen.blit(image, rect)
Um ein Bild im Spiel zu zeichnen, muss es zwei Parameter enthalten, einer ist das Bild selbst , das andere ist die Position des Bildes im Spiel, die rect
ist. Hintergrundkonstruktion
Bilder direkt importieren und in der Schleife anzeigenrrreee
Nachdem die Konstruktion abgeschlossen ist, wird sie 🎜🎜Kollisionsmodul🎜🎜Ich habe hart am Kollisionsteil gearbeitet und dabei insbesondere die folgenden Anweisungen verwendet! ! Farbe{blau}{besonders! ! } Besonders! ! Ich dachte zuerst, es gäbe keine Kollision, also habe ich mehrere Aussagen hinzugefügt. Tatsächlich ist es passiert, aber ich habe keine Aussage hinzugefügt –>Was würde unter dieser Bedingung passieren und diese Tragödie verursachen ... 🎜🎜Lassen Sie uns das analysieren Bedingung sorgfältig,player
ist ein Zongzi-Objekt, group
ist eine Gruppe mit ❤, pygame.sprite.collide_circle_ratio(0.5)
kann die Bildkollision steuern Volumen, also die Kollisionsbedingung erreicht! 🎜rrreee🎜Greedy-Modul🎜🎜Eat ❤ Wenn eine Kollision erreicht ist, legen Sie l
als leeres Array fest und verwenden Sie l.append(aixin)
, um eine ❤-Instanz hinzuzufügen, wenn Array l
existiert, es tritt in die Kollisionsphase ein. Verwenden Sie nach der Kollision die Funktion pop
, um ❤ zu löschen. 🎜🎜Fügen Sie dann eine Beurteilung hinzu. Wenn das Array l leer ist, fügen Sie eine neue ❤-Spielinstanz hinzu, bei der es sich um die obige ❤-Instanz handelt🎜rrreee🎜Zählmechanismus🎜🎜Verwenden Sie score
, um einen zu berechnen und anzugeben ttf code>Die Schriftartdatei 🎜rrreee🎜 wird schließlich als 🎜🎜🎜🎜🎜🎜🎜🎜vollständiger Code🎜rrreee gerendert
Das obige ist der detaillierte Inhalt vonWie man süße kleine Reisknödel in Python implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!