먼저 엘프인 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('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))❤을 추가하고 짠만두가 먹으면 점수를 얻습니다❤. 또한
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('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()참고: color{#FF45b0}{참고:} 참고:
screen.blit(image, ret)
게임에서 그림을 그리려면 두 개의 매개변수를 포함해야 하며, 하나는 그림 자체입니다. , 다른 하나는 게임 내 그림의 위치로 직선
입니다. 배경 구축
이미지를 직접 가져와 루프에 표시rrreee
구성이 완료되면 🎜🎜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 중국어 웹사이트의 기타 관련 기사를 참조하세요!