Fruit Ninja의 게임 플레이는 매우 간단합니다. 던져진 과일을 최대한 자르면 됩니다.
오늘 Xiao Wu는 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 방향으로 과일의 이동 속도를 저장합니다. 또한 과일의 대각선 움직임도 제어합니다.
- 던지기, 생성된 과일 좌표가 게임 외부에 있는지 확인하는 데 사용됩니다. 외부에 있으면 폐기됩니다.
- 데이터 사전은 무작위로 생성된 과일의 데이터를 저장하는 데 사용됩니다.
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()은 화면의 지정된 위치에 이미지를 그리거나 텍스트를 씁니다.
# 绘制玩家的生命
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는 화면 상단에서 십자 아이콘이 시작되는 위치를 결정하는 역할을 담당합니다.
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 이벤트, 키를 눌렀다 놓을 때 발생하는 이벤트입니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

slicepaythonlistisdoneusingthesyntaxlist [start : step : step] .here'showitworks : 1) startistheindexofthefirstelementtoinclude.2) stopistheindexofthefirstelemement.3) stepisincrementbetwetweentractionsoftortionsoflists

NumpyAllowsForVariousOperationsOnArrays : 1) BasicArithmeticLikeadDition, Subtraction, A 및 Division; 2) AdvancedOperationsSuchasmatrixmultiplication; 3) extrayintondsfordatamanipulation; 5) Ag

Arraysinpython, 특히 Stroughnumpyandpandas, areestentialfordataanalysis, setingspeedandefficiency

ListSandnumpyArraysInpythonHavedifferentmoryfootPrints : ListSaremoreFlexibleButlessMemory-Efficer, whilumpyArraySareOptimizedFornumericalData.1) ListSTorERENFERENCESTOOBJECTS, OverHeadAround64ByTeson64-BitSyStems.2) NumpyArraysTATACONTACOTIGUOU

ToensurePythonScriptTscriptsBecorrectelyRossDevelopment, Staging and Production, UsethesEStrategies : 1) EnvironmberVariblesForsimplesettings, 2) ConfigurationFilesforcomplexSetups 및 3) DynamicLoadingForAdAptability

Python List 슬라이싱의 기본 구문은 목록 [start : stop : step]입니다. 1. Start는 첫 번째 요소 인덱스, 2.Stop은 첫 번째 요소 인덱스가 제외되고 3. Step은 요소 사이의 단계 크기를 결정합니다. 슬라이스는 데이터를 추출하는 데 사용될뿐만 아니라 목록을 수정하고 반전시키는 데 사용됩니다.

ListSoutPerformArraysin : 1) DynamicsizingandFrequentInsertions/Deletions, 2) StoringHeterogeneousData 및 3) MemoryEfficiencyForsParsEdata, butMayHavesLightPerformanceCosceperationOperations.

TOCONVERTAPYTHONARRAYTOALIST, USETHELIST () CONSTUCTORORAGENERATERATOREXPRESSION.1) importTheArrayModuleAndCreateAnarray.2) USELIST (ARR) 또는 [XFORXINARR] TOCONVERTITTOALIST.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.
