ホームページ >バックエンド開発 >Python チュートリアル >Python でかわいい小さな団子を実装する方法
最初にエルフである zongzi オブジェクトを作成します。クラスは 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)
ゲーム内に画像を描画するには、2 つのパラメータが含まれている必要があります1 つは画像そのもので、もう 1 つはゲーム内の画像の位置 (rect
) です。
画像を直接インポートしてループ内に表示
bg = pygame.image.load("vack.jpeg").convert() #下句需在游戏主循环中使用 screen.blit(bg, (0, 0))
構築が完了すると
衝突部分は特に以下の文を使って頑張りました! ! \color{青}{特に! ! } 特に! !最初は衝突がないと思って複数のステートメントを追加しましたが、実際には衝突しましたが、ステートメントを追加しませんでした -> この状況で何が起こり、この悲劇が発生するのか... これを注意深く分析してみましょう。セグメント条件、
player は zongzi オブジェクト、group
は ❤ を含むグループ、pygame.sprite.collide_circle_ratio(0.5)
は画像の衝突量を制御できるため、衝突条件が満たされました。 <pre class="brush:py;">if pygame.sprite.spritecollide(player,group,True,pygame.sprite.collide_circle_ratio(0.5)) :
语句</pre>
貪欲モジュール
を空の配列に設定し、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])カウント メカニズムUse
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))
を参照し、最終的に
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()
以上がPython でかわいい小さな団子を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。