Python으로 구현된 과일 자르기 벽돌 게임

WBOY
풀어 주다: 2023-04-22 18:58:06
앞으로
1718명이 탐색했습니다.

Fruit Ninja의 게임 플레이는 매우 간단합니다. 던져진 과일을 최대한 자르면 됩니다.

오늘 Xiao Wu는 Python을 사용하여 이 게임을 간단하게 시뮬레이션할 것입니다. 이 간단한 프로젝트에서는 마우스를 사용하여 잘라야 할 과일을 선택하고, 폭탄을 세 번 자르면 플레이어는 실패하게 됩니다.

Python으로 구현된 과일 자르기 벽돌 게임

1. 가져와야 하는 패키지

import pygame, sys
import os
import random
로그인 후 복사

2. 창 인터페이스 설정

# 游戏窗口
WIDTH = 800
HEIGHT = 500
FPS = 15 # gameDisplay的帧率,1/12秒刷新一次
pygame.init()
pygame.display.set_caption('水果忍者') # 标题
gameDisplay = pygame.display.set_mode((WIDTH, HEIGHT)) # 固定窗口大小
clock = pygame.time.Clock()
# 用到的颜色
WHITE = (255,255,255)
BLACK = (0,0,0)
RED = (255,0,0)
GREEN = (0,255,0)
BLUE = (0,0,255)
background = pygame.image.load('背景.jpg') # 背景
font = pygame.font.Font(os.path.join(os.getcwd(), 'comic.ttf'), 42) # 字体
score_text = font.render('Score : ' + str(score), True, (255, 255, 255)) # 得分字体样式
로그인 후 복사

3. 과일 위치를 무작위로 생성

def generate_random_fruits(fruit):
fruit_path = "images/" + fruit + ".png"
data[fruit] = {
'img': pygame.image.load(fruit_path),
'x' : random.randint(100,500),
'y' : 800,
'speed_x': random.randint(-10,10),
'speed_y': random.randint(-80, -60),
'throw': False,
't': 0,
'hit': False,
}
if random.random() >= 0.75:
data[fruit]['throw'] = True
else:
data[fruit]['throw'] = False
data = {}
for fruit in fruits:
generate_random_fruits(fruit)
로그인 후 복사
  • 이 기능은 과일을 무작위로 생성하고 과일 데이터를 저장하는 데 사용됩니다.
  • 'x'와 'y'는 x와 y 좌표에 과일의 위치를 ​​저장합니다.
  • Speed_x 및 speed_y는 x 및 y 방향으로 과일의 이동 속도를 저장합니다. 또한 과일의 대각선 움직임도 제어합니다.
  • 던지기, 생성된 과일 좌표가 게임 외부에 있는지 확인하는 데 사용됩니다. 외부에 있으면 폐기됩니다.
  • 데이터 사전은 무작위로 생성된 과일의 데이터를 저장하는 데 사용됩니다.
4. 글꼴 그리기

font_name = pygame.font.match_font('comic.ttf')
def draw_text(display, text, size, x, y):
font = pygame.font.Font(font_name, size)
text_surface = font.render(text, True, WHITE)
text_rect = text_surface.get_rect()
text_rect.midtop = (x, y)
gameDisplay.blit(text_surface, text_rect)
로그인 후 복사

    Draw_text 함수는 화면에 텍스트를 그릴 수 있습니다.
  • get_ect()는 Rect 객체를 반환합니다.
  • X와 y는 X와 Y 방향의 위치입니다.
  • blit()은 화면의 지정된 위치에 이미지를 그리거나 텍스트를 씁니다.
5. 플레이어 생활을 위한 팁

# 绘制玩家的生命
def draw_lives(display, x, y, lives, image) :
for i in range(lives) :
img = pygame.image.load(image)
img_rect = img.get_rect()
img_rect.x = int(x + 35 * i)
img_rect.y = y
display.blit(img, img_rect)
def hide_cross_lives(x, y):
gameDisplay.blit(pygame.image.load("images/red_lives.png"), (x, y))
로그인 후 복사

    img_ect는 십자 아이콘(오른쪽 상단에 위치)의 (x, y) 좌표를 가져옵니다.
  • img_lect .x는 다음 십자가 아이콘을 이전 아이콘에서 35픽셀 떨어져 있도록 설정합니다.
  • img_lect.y는 화면 상단에서 십자 아이콘이 시작되는 위치를 결정하는 역할을 담당합니다.
6. 게임 시작 및 종료 화면

def show_gameover_screen():
gameDisplay.blit(background, (0,0))
draw_text(gameDisplay, "FRUIT NINJA!", 90, WIDTH / 2, HEIGHT / 4)
if not game_over :
draw_text(gameDisplay,"Score : " + str(score), 50, WIDTH / 2, HEIGHT /2)
draw_text(gameDisplay, "Press a key to begin!", 64, WIDTH / 2, HEIGHT * 3 / 4)
pygame.display.flip()
waiting = True
while waiting:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
if event.type == pygame.KEYUP:
waiting = False
로그인 후 복사

  • show_gameover_screen() 함수는 게임 초기 화면과 게임 종료 화면을 표시합니다.
  • pygame.display.flip()은 화면의 일부만 업데이트하지만 인수가 전달되지 않으면 전체 화면이 업데이트됩니다.
  • pygame.event.get()은 파이게임 이벤트 큐에 저장된 모든 이벤트를 반환합니다.
  • 이벤트 유형이 quit와 같으면 파이게임이 종료됩니다.
  • event.KEYUP 이벤트, 키를 눌렀다 놓을 때 발생하는 이벤트입니다.
7. 게임 메인 루프

first_round = True
game_over = True
game_running = True
while game_running :
if game_over :
if first_round :
show_gameover_screen()
first_round = False
game_over = False
player_lives = 3
draw_lives(gameDisplay, 690, 5, player_lives, 'images/red_lives.png')
score = 0
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_running = False
gameDisplay.blit(background, (0, 0))
gameDisplay.blit(score_text, (0, 0))
draw_lives(gameDisplay, 690, 5, player_lives, 'images/red_lives.png')
for key, value in data.items():
if value['throw']:
value['x'] += value['speed_x']
value['y'] += value['speed_y']
value['speed_y'] += (1 * value['t'])
value['t'] += 1
if value['y'] <= 800:
gameDisplay.blit(value['img'], (value['x'], value['y']))
else:
generate_random_fruits(key)
current_position = pygame.mouse.get_pos()
if not value['hit'] and current_position[0] > value['x'] and current_position[0] < value['x']+60 
and current_position[1] > value['y'] and current_position[1] < value['y']+60:
if key == 'bomb':
player_lives -= 1
if player_lives == 0:
hide_cross_lives(690, 15)
elif player_lives == 1 :
hide_cross_lives(725, 15)
elif player_lives == 2 :
hide_cross_lives(760, 15)
if player_lives < 0 :
show_gameover_screen()
game_over = True
half_fruit_path = "images/explosion.png"
else:
half_fruit_path = "images/" + "half_" + key + ".png"
value['img'] = pygame.image.load(half_fruit_path)
value['speed_x'] += 10
if key != 'bomb' :
score += 1
score_text = font.render('Score : ' + str(score), True, (255, 255, 255))
value['hit'] = True
else:
generate_random_fruits(key)
pygame.display.update()
clock.tick(FPS)
pygame.quit()
로그인 후 복사
  • 게임의 메인 루프입니다
  • 3개 이상의 폭탄이 끊어지면 game_over는 게임을 종료하고 동시에 루프를 돌립니다.
  • game_running은 게임 루프를 관리하는 데 사용됩니다.
  • 이벤트 유형이 종료인 경우 게임 창이 닫힙니다.
  • 이 게임 루프에서는 과일을 화면에 동적으로 표시합니다.
  • 과일을 자르지 않으면 아무 일도 일어나지 않습니다. 과일을 자르면 과일 자리에 반으로 자른 과일 이미지가 나타납니다.
  • 사용자가 폭탄을 세 번 클릭하면 GAME OVER 메시지가 표시되고 창이 재설정됩니다.
  • clock.tick()은 루프를 올바른 속도로 계속 실행합니다. 루프는 1/12초마다 업데이트되어야 합니다.

위 내용은 Python으로 구현된 과일 자르기 벽돌 게임의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:51cto.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿