ホームページ  >  記事  >  バックエンド開発  >  Python 3 と Pygame を使用したインタラクティブ ゲームの作成: パート 4

Python 3 と Pygame を使用したインタラクティブ ゲームの作成: パート 4

WBOY
WBOYオリジナル
2023-08-27 15:01:141264ブラウズ

###############概要###

これは、Python 3 と Pygame を使用したゲームの作成に関する 5 部構成のチュートリアル シリーズの 4 番目です。パート 3 では、Breakout の核心を掘り下げ、イベントの処理方法を学び、主要な Breakout クラスを確認し、さまざまなゲーム オブジェクトを移動する方法を確認しました。 使用 Python 3 和 Pygame 创建互动游戏:第 4 部分

このパートでは、衝突を検出する方法と、ボールがパドル、レンガ、壁、天井、床などのさまざまなオブジェクトに衝突したときに何が起こるかを学びます。最後に、ゲーム UI の重要なトピック、特に独自のカスタム ボタンを使用したメニューの作成方法を確認します。

影響チェック

ゲームでは、物と物がぶつかり合います。ブレークスルーも例外ではありません。ほとんどの場合、ボールが何かにぶつかります。

handle_ball_collisions()

メソッドには、ボールがオブジェクトに当たるかどうか、およびオブジェクトのどこに当たるかをテストする intersect()

という入れ子関数があります。ボールがオブジェクトを外した場合は、「Left」、「Right」、「Up」、「Down」、または「None」を返します。 リーリー

ラケットでボールを打つ ボールがラケットに当たると、跳ね返ります。パドルの上部に当たると跳ね返りますが、同じ水平方向の速度成分は維持されます。

ただし、パドルの片側に当たると反対側 (左または右) に跳ね返り、床に当たるまで下向きの動きを続けます。このコードでは intersect 関数() を使用します。 リーリー ###着陸######

ラケットが落下する途中でボールを外した場合(またはボールがラケットの側面に当たった場合)、ボールは落下を続け、最終的には床に当たります。この時点で、プレイヤーはライフを失いますが、ボールは再作成されるので、ゲームは続行できます。プレイヤーのライフがなくなるとゲームは終了します。

リーリー

天井や壁にぶつかる

ボールが壁や天井に当たると、跳ね返ります。

リーリー ブリックブレイク

ボールがレンガに当たると、これはブレイクアウトの主要なイベントです - レンガが消え、プレーヤーがポイントを獲得し、ボールが跳ね返り、その他いくつかのことが起こります (音響効果、場合によっては特殊効果)。後で議論します。

レンガが当たったかどうかを判断するために、コードはボールと交差するレンガがあるかどうかをチェックします。 リーリー

ゲームメニューのプログラミング

ほとんどのゲームには、何らかのユーザー インターフェイスがあります。 Breakoutには「PLAY」と「QUIT」という2つのボタンがあるシンプルなメニューがあります。このメニューはゲーム開始時に表示され、プレイヤーが「開始」をクリックすると消えます。ボタンとメニューがどのように実装され、それらがどのようにゲームと統合されるかを見てみましょう。

ボタンの作成

Pygame には組み込みの UI ライブラリがありません。サードパーティの拡張機能もありますが、メニュー用に独自のボタンを作成することにしました。ボタンは、通常、ホバー、および押されたという 3 つの状態を持つゲーム オブジェクトです。通常の状態はマウスがボタンの上にないとき、ホバー状態はマウスがボタンの上にあるがマウスの左ボタンが押されていないときです。押された状態は、マウスがボタン上にあり、プレイヤーがマウスの左ボタンを押したときです。

ボタンは、背景色とテキストが表示された長方形として実装されます。ボタンは、ボタンがクリックされたときに呼び出される on_click 関数 (デフォルトは noop ラムダ関数) も受け取ります。 リーリー

ボタンは独自のマウス イベントを処理し、これらのイベントに基づいて内部状態を変更します。ボタンが押されると、プレーヤーがボタンをクリックしたことを示す

MOUSEBUTTONUP

イベントが受信され、on_click()

関数が呼び出されます。 リーリー

背景の四角形の描画に使用される

back_color

プロパティは、常にボタンの現在の状態に一致する色を返すため、プレーヤーはボタンがアクティブであることを明確に確認できます。 リーリー

メニューの作成

create_menu()

関数は、テキスト「PLAY」と「QUIT」を含む 2 つのボタンを持つメニューを作成します。これには、

on_play()on_quit()

という名前の 2 つの入れ子関数があり、対応するボタンに供給されます。各ボタンは、

objects リスト (描画対象) と

menu_buttons フィールドに追加されます。

リーリー PLAY ボタンをクリックすると、on_play() が呼び出され、ボタンが objects リストから削除され、描画されなくなります。さらに、ゲームの開始をトリガーするブール値フィールド is_game_running および start_level が True に設定されます。 終了ボタンをクリックすると、is_game_running

False (実質的にゲームを一時停止) に設定され、game_over が True に設定され、最終ゲームがトリガーされます。順序。 リーリー ゲームメニューの表示と非表示

メニューの表示と非表示は暗黙的です。ボタンが objects リストにある場合はメニューが表示され、ボタンが削除されるとメニューは非表示になります。それはとても簡単です。

ボタンなどのサブコンポーネントをレンダリングする独自のサーフェスを備えたネストされたメニューを作成し、そのメニュー コンポーネントを追加/削除するだけで済みますが、この単純なメニューではその必要がありません。

###結論は###

このパートでは、衝突検出と、ボールがパドル、レンガ、壁、天井、床などのさまざまなオブジェクトに衝突したときに何が起こるかについて説明します。さらに、コマンドに基づいて表示/非表示を切り替えるカスタム ボタンを備えた独自のメニューを作成しました。

シリーズ最終回となる今回は、スコアやライフ、効果音、音楽などに注目しながら最終試合を見ていきます。

次に、ゲームに面白みを加える複雑な特殊効果システムを開発します。最後に、今後の方向性と改善の可能性について説明します。

以上がPython 3 と Pygame を使用したインタラクティブ ゲームの作成: パート 4の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。