Obstschneidesteinspiel, implementiert in Python

WBOY
Freigeben: 2023-04-22 18:58:06
nach vorne
1718 Leute haben es durchsucht

Das Gameplay von Fruit Ninja ist sehr einfach: Schneiden Sie einfach die geworfenen Früchte so weit wie möglich ab.

Heute wird Xiaowu Python verwenden, um dieses Spiel einfach zu simulieren. In diesem einfachen Projekt wählen wir mit der Maus die zu schneidende Frucht aus und die Bombe wird in der Frucht versteckt. Wenn die Bombe dreimal geschnitten wird, wird der Spieler scheitern.

Obstschneidesteinspiel, implementiert in Python

1. Pakete, die importiert werden müssen

import pygame, sys
import os
import random
Nach dem Login kopieren

2. Fensterschnittstelleneinstellungen

# 游戏窗口
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)) # 得分字体样式
Nach dem Login kopieren
#🎜🎜 #3, Obstpositionen zufällig generieren

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)
Nach dem Login kopieren

  • Diese Funktion wird verwendet, um Früchte zufällig zu generieren und Fruchtdaten zu speichern .
  • 'x' und 'y' speichern die Position der Frucht auf den x- und y-Koordinaten.
  • Speed_x und speed_y speichern die Bewegungsgeschwindigkeit der Frucht in x- und y-Richtung. Es steuert auch die diagonale Bewegung der Frucht.
  • Wurf, der verwendet wird, um festzustellen, ob die generierten Fruchtkoordinaten außerhalb des Spiels liegen. Wenn es draußen ist, wird es verworfen.
  • Das Datenwörterbuch wird zum Speichern zufällig generierter Fruchtdaten verwendet.
4. Schriftarten zeichnen

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)
Nach dem Login kopieren

    Die Draw_text-Funktion kann Text auf dem Bildschirm zeichnen.
  • get_rect() gibt ein Rect-Objekt zurück.
  • X und y sind die Positionen in X- und Y-Richtung.
  • blit() zeichnet ein Bild oder schreibt Text an einer bestimmten Stelle auf dem Bildschirm.
5. Tipps für das Spielerleben

# 绘制玩家的生命
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))
Nach dem Login kopieren

    img_rect ruft die (x, y)-Koordinaten des Kreuzsymbols (oben rechts) ab ).
  • img_rect .x Legen Sie fest, dass das nächste Kreuzsymbol 35 Pixel vom vorherigen Symbol entfernt ist.
  • img_rect.y ist dafür verantwortlich, zu bestimmen, wo das Kreuzsymbol oben auf dem Bildschirm beginnt.
6. Start- und Endbildschirme des Spiels

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
Nach dem Login kopieren

  • show_gameover_screen() Die Funktion zeigt den Startbildschirm des Spiels und den Endbildschirm des Spiels an .
  • pygame.display.flip() aktualisiert nur einen Teil des Bildschirms, aber wenn keine Argumente übergeben werden, wird der gesamte Bildschirm aktualisiert.
  • pygame.event.get() gibt alle in der Pygame-Ereigniswarteschlange gespeicherten Ereignisse zurück.
  • Wenn der Ereignistyp gleich quit ist, wird Pygame beendet.
  • event.KEYUP-Ereignis, ein Ereignis, das auftritt, wenn die Taste gedrückt und losgelassen wird.
7. Hauptschleife des Spiels

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()
Nach dem Login kopieren
  • Dies ist die Hauptschleife des Spiels #🎜 🎜# Wenn mehr als 3 Bomben abgeschnitten werden, beendet game_over das Spiel und führt gleichzeitig eine Schleife durch.
  • game_running wird verwendet, um die Spielschleife zu verwalten.
  • Wenn der Ereignistyp „Beenden“ ist, wird das Spielfenster geschlossen.
  • In dieser Spielschleife zeigen wir die Früchte dynamisch auf dem Bildschirm an.
  • Wenn eine Frucht nicht geschnitten wird, passiert ihr nichts. Wenn die Frucht angeschnitten ist, sollte anstelle der Frucht ein halb angeschnittenes Bild der Frucht erscheinen.
  • Wenn der Benutzer dreimal auf die Bombe klickt, wird die Meldung „GAME OVER“ angezeigt und das Fenster wird zurückgesetzt.
  • clock.tick() sorgt dafür, dass die Schleife mit der richtigen Geschwindigkeit läuft. Die Schleife sollte alle 1/12 Sekunde aktualisiert werden.

Das obige ist der detaillierte Inhalt vonObstschneidesteinspiel, implementiert in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:51cto.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage