フルーツ忍者のゲームプレイは非常にシンプルで、投げられた果物をできるだけ切るだけです。
今日、Xiaowu は Python を使用してこのゲームを単純にシミュレートします。この簡単なプロジェクトでは、マウスを使用してカットする果物を選択し、その果物の中に爆弾が隠されており、爆弾が 3 回切れるとプレイヤーは失敗します。
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 方向の移動速度が格納されます。果物の斜めの動きも制御します。
- throw。生成されたフルーツ座標がゲームの外にあるかどうかを判断するために使用されます。屋外にある場合は廃棄されます。
- データ ディクショナリは、ランダムに生成された果物データを保存するために使用されます。
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_rect() は 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_rect は、十字アイコン (右上にあります) の (x, y) 座標を取得します。
- img_rect .x 次の十字アイコンを前のアイコンから 35 ピクセル離れた位置に設定します。
- img_rect.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() は、pygame イベント キューに保存されているすべてのイベントを返します。
- イベント タイプが quit に等しい場合、pygame は終了します。
- 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 つ以上ある場合shut off 、 game_over はゲームを終了し、同時にループします。
- game_running は、ゲーム ループを管理するために使用されます。
- イベント タイプが exit の場合、ゲーム ウィンドウは閉じられます。
- このゲーム ループでは、果物を画面上に動的に表示します。
- 果物は切らなければ何も起こりません。果物がカットされている場合は、その場所に果物の半分にカットされた画像が表示されるはずです。
- ユーザーが爆弾を 3 回クリックすると、ゲーム オーバー メッセージが表示され、ウィンドウがリセットされます。
- Clock.tick() はループを正しい速度で実行し続けます。ループは 1/12 秒ごとに更新される必要があります。
以上がPythonで実装されたフルーツカットレンガゲームの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

slicingapythonlistisdoneusingtheyntaxlist [start:stop:step] .hore'showitworks:1)startisthe indexofthefirstelementtoinclude.2)spotisthe indexofthefirmenttoeexclude.3)staptistheincrementbetbetinelements

numpyallows forvariousoperationsonarrays:1)basicarithmeticlikeaddition、減算、乗算、および分割; 2)AdvancedperationssuchasmatrixMultiplication;

Arraysinpython、特にnumpyandpandas、aresentialfordataanalysis、offeringspeedandeficiency.1)numpyarraysenable numpyarraysenable handling forlaredatasents andcomplexoperationslikemoverages.2)Pandasextendsnumpy'scapabivitieswithdataframesfortruc

listsandnumpyarraysinpythonhavedifferentmemoryfootprints:listsaremoreflexiblellessmemory-efficient、whileenumpyarraysaraysareoptimizedfornumericaldata.1)listsstorereferencesto objects、with whowedaround64byteson64-bitedatigu

toensurepythonscriptsbehaveCorrectlyAcrossDevelosment、staging、and Production、usetheseStrategies:1)環境variablesforsimplestetings、2)configurationfilesforcomplexsetups、and3)dynamicloadingforadaptability.eachtododododododofersuniquebentandrequiresca

Pythonリストスライスの基本的な構文はリストです[start:stop:step]。 1.STARTは最初の要素インデックス、2。ストップは除外された最初の要素インデックスであり、3.ステップは要素間のステップサイズを決定します。スライスは、データを抽出するためだけでなく、リストを変更および反転させるためにも使用されます。

ListSoutPerformArraysIn:1)ダイナミシジョンアンドフレーケンティオン/削除、2)ストーリングヘテロゼンダタ、および3)メモリ効率の装飾、ButmayhaveslightPerformancostsinceNASOPERATIONS。

toconvertapythonarraytoalist、usetheList()constructororageneratorexpression.1)importhearraymoduleandcreateanarray.2)useList(arr)または[xforxinarr] toconvertoalistは、largedatatessを変えることを伴うものです。


ホット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 バージョン、コードプロンプトをサポート!

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ホットトピック









