Jadual Kandungan
1 Pakej yang perlu diimport
2 Tetapan antara muka tetingkap
3 kedudukan buah
4. Melukis fon
5. Petua untuk kehidupan pemain
6. Skrin permulaan dan penamat permainan
7 Gelung utama permainan
Rumah pembangunan bahagian belakang Tutorial Python Permainan bata memotong buah-buahan dilaksanakan dalam Python

Permainan bata memotong buah-buahan dilaksanakan dalam Python

Apr 22, 2023 pm 06:58 PM
python permainan Ninja Buah

Permainan Fruit Ninja sangat mudah, cuma potong buah-buahan yang dibaling sebanyak mungkin.

Hari ini Xiao Wu akan menggunakan python untuk mensimulasikan permainan ini. Dalam projek mudah ini, kami menggunakan tetikus untuk memilih buah untuk dipotong, dan bom akan disembunyikan dalam buah Jika bom dipotong tiga kali, pemain akan gagal.

Permainan bata memotong buah-buahan dilaksanakan dalam Python

1 Pakej yang perlu diimport

import pygame, sys
import os
import random
Salin selepas log masuk

2 Tetapan antara muka tetingkap

# 游戏窗口
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)) # 得分字体样式
Salin selepas log masuk

3 kedudukan buah

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)
Salin selepas log masuk
  • Fungsi ini digunakan untuk menjana buah secara rawak dan menyimpan data buah.
  • 'x' dan 'y' menyimpan kedudukan buah pada koordinat x dan y.
  • Speed_x dan speed_y menyimpan kelajuan bergerak buah dalam arah x dan y. Ia juga mengawal pergerakan pepenjuru buah.
  • balingan, digunakan untuk menentukan sama ada koordinat buah yang dijana berada di luar permainan. Jika di luar, ia akan dibuang.
  • Kamus data digunakan untuk menyimpan data buah yang dijana secara rawak.

4. Melukis fon

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)
Salin selepas log masuk
  • Fungsi Draw_text boleh melukis teks pada skrin.
  • get_rect() mengembalikan objek Rect.
  • X dan y ialah kedudukan dalam arah X dan Y.
  • blit() melukis imej atau menulis teks pada lokasi tertentu pada skrin.

5. Petua untuk kehidupan pemain

# 绘制玩家的生命
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))
Salin selepas log masuk
  • img_rect mendapat koordinat (x, y) ikon pangkah (terletak di bahagian atas sebelah kanan).
  • img_rect .x menetapkan ikon pangkah seterusnya menjadi 35 piksel dari ikon sebelumnya.
  • img_rect.y bertanggungjawab untuk menentukan tempat ikon pangkah bermula dari bahagian atas skrin.

6. Skrin permulaan dan penamat permainan

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
Salin selepas log masuk
  • Fungsi show_gameover_screen() memaparkan skrin permainan awal dan skrin penamat permainan.
  • pygame.display.flip() hanya akan mengemas kini sebahagian daripada skrin, tetapi jika tiada hujah diluluskan, keseluruhan skrin akan dikemas kini.
  • pygame.event.get() akan mengembalikan semua acara yang disimpan dalam baris gilir acara pygame.
  • Jika jenis acara sama dengan berhenti, maka pygame akan keluar. Acara
  • . Acara KEYUP, peristiwa yang berlaku apabila kekunci ditekan dan dilepaskan.

7 Gelung utama permainan

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()
Salin selepas log masuk
  • Ini ialah gelung utama permainan
  • Jika lebih daripada 3 bom dimusnahkan Potong, game_over menamatkan permainan dan gelung pada masa yang sama.
  • game_running digunakan untuk mengurus gelung permainan.
  • Jika jenis acara adalah keluar, maka tetingkap permainan akan ditutup.
  • Dalam gelung permainan ini, kami memaparkan buah-buahan secara dinamik pada skrin.
  • Jika buah tidak dipotong, tiada apa yang akan berlaku kepadanya. Jika buah dipotong, maka imej separuh potong buah harus muncul di tempatnya.
  • Jika pengguna mengklik bom tiga kali, mesej GAME OVER akan dipaparkan dan tetingkap akan ditetapkan semula.
  • clock.tick() akan memastikan gelung berjalan pada kelajuan yang betul. Gelung harus dikemas kini selepas setiap 1/12 saat.

Atas ialah kandungan terperinci Permainan bata memotong buah-buahan dilaksanakan dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux? Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux? Apr 01, 2025 pm 05:09 PM

Penyelesaian kepada Isu Kebenaran Semasa Melihat Versi Python di Terminal Linux Apabila anda cuba melihat versi Python di Terminal Linux, masukkan Python ...

Apakah sebabnya mengapa fail penyimpanan berterusan saluran paip tidak dapat ditulis apabila menggunakan crawler scapy? Apakah sebabnya mengapa fail penyimpanan berterusan saluran paip tidak dapat ditulis apabila menggunakan crawler scapy? Apr 01, 2025 pm 04:03 PM

Apabila menggunakan crawler scapy, sebab mengapa fail penyimpanan berterusan paip tidak boleh ditulis? Perbincangan Ketika belajar menggunakan Crawler Scapy untuk Crawler Data, anda sering menemui ...

Python Hourglass Graph Lukisan: Bagaimana untuk mengelakkan kesilapan yang tidak ditentukan? Python Hourglass Graph Lukisan: Bagaimana untuk mengelakkan kesilapan yang tidak ditentukan? Apr 01, 2025 pm 06:27 PM

Bermula dengan Python: Lukisan Grafik Hourglass dan Pengesahan Input Artikel ini akan menyelesaikan masalah definisi berubah -ubah yang dihadapi oleh pemula python dalam program lukisan grafik Hourglass. Kod ...

Apakah sebabnya mengapa Pool Proses Python mengendalikan permintaan TCP serentak dan menyebabkan pelanggan terjebak? Apakah sebabnya mengapa Pool Proses Python mengendalikan permintaan TCP serentak dan menyebabkan pelanggan terjebak? Apr 01, 2025 pm 04:09 PM

Proses Python Pool mengendalikan permintaan TCP serentak yang menyebabkan pelanggan terjebak. Apabila menggunakan Python untuk pengaturcaraan rangkaian, adalah penting untuk mengendalikan permintaan TCP serentak dengan cekap. …

Bagaimana untuk melihat fungsi asal yang terkandung secara dalaman oleh python funcools.partial Object? Bagaimana untuk melihat fungsi asal yang terkandung secara dalaman oleh python funcools.partial Object? Apr 01, 2025 pm 04:15 PM

Sangat meneroka kaedah tontonan python funcools.partial Object in Funcools.Partial Menggunakan Python ...

Pembangunan Aplikasi Desktop Cross-Platform Python: Perpustakaan GUI mana yang terbaik untuk anda? Pembangunan Aplikasi Desktop Cross-Platform Python: Perpustakaan GUI mana yang terbaik untuk anda? Apr 01, 2025 pm 05:24 PM

Pilihan Perpustakaan Pembangunan Aplikasi Desktop Python Python Banyak pemaju Python ingin membangunkan aplikasi desktop yang boleh dijalankan pada kedua-dua sistem Windows dan Linux ...

Bagaimana cara menyalin seluruh lajur satu data ke dalam data data lain dengan struktur yang berbeza di Python? Bagaimana cara menyalin seluruh lajur satu data ke dalam data data lain dengan struktur yang berbeza di Python? Apr 01, 2025 pm 11:15 PM

Apabila menggunakan Perpustakaan Pandas Python, bagaimana untuk menyalin seluruh lajur antara dua data data dengan struktur yang berbeza adalah masalah biasa. Katakan kita mempunyai dua DAT ...

Adakah Google dan AWS menyediakan sumber imej Pypi awam? Adakah Google dan AWS menyediakan sumber imej Pypi awam? Apr 01, 2025 pm 05:15 PM

Ramai pemaju bergantung kepada PYPI (PythonPackageIndex) ...

See all articles