AS3でゲームを開発する(パート2:ダックハントミニゲーム)


図4
ダックハント

目的:コンピューターゲーム開発
対象読者:初心者、興味がある、見物人
ツール: ActionScript 3.0


サイクルコンテンツ





はじめに


以前のリリースでは...
  • おそらくわずかにあいまいな紹介です。
  • 特定のコメントセットが定義されています。
  • 必要なツールを作成して説明しました。
  • 現在の部分にタスクが設定されます。


ミニゲームのインスピレーションは、古い温かい「 ダックハント 」でした。 しかし、何かを繰り返すと、この創造性のプロセスが実質的に奪われ、退屈なルーチンに変わります。 はい、そのようなゲームのコピーはすでに存在している可能性が高いです(慎重に、アヒルの飛行から美的衝撃を受けることができます)。 小さなゲームが作成されていることを覚えておく必要がありますので、不必要な機能でゲームをオーバーロードしないでください(そして非常に面白いバリエーションがあります)。
古いコンピューターゲームの事前に作成されたパロディを作成することにより、パロディが行われる他の著作権のオブジェクトの顕著な使用を実証します。



スケッチ


スケッチを描くとき、​​私はアヒル狩りに関するゲームを作成していると考えるのをやめました。 図5では、これに慣れることができます。抽象画面では、抽象ターゲットが飛んでおり、抽象的に破壊する必要があります。 それだけです それ以外はすべて詳細です。

図5
カモ狩り。スケッチ


試作機



備考10:
抽象的な目的のために、ある種の単純なアニメーション(静的な黒い正方形)を思いつくことができますが、 私はすでにアヒルのアニメーションを作成していたので、すぐに必要な目標を作成することは許されると考えました。 図6は、単純なUML図を示しています。

図6
カモ狩り。 UMLクラス図
CDisplay抽象画面で、 CTarget抽象ターゲットは、CTargetEmitterがCTargetFactory抽象ターゲットファクトリ を使用してリリースすることを示します。 ユーザーは、 CWeapon抽象武器( CWeaponMagazine gunshotマガジン )でターゲットを撃shootするように求められます。
図7は、結果のプロトタイプのスクリーンショットです。

図7
カモ狩り。試作機
アヒルCDuckTargetは、CTargetを拡張して、シングルショットから破壊することが提案されているターゲットになります( CSniperRifleMagazineはCWeaponMagazineを拡張します )スナイパーライフルCSniperRifleはCWeaponを拡張します


備考11:
CRandomTargetFactoryはCTargetFactoryを拡張し、異なる目標ファクトリを1つに結合できるため、 CTargetEmitterは特定の戦略に従って(この場合、擬似ランダムな方法で)異なる目標を発行できます。

CGameは、画面に表示する必要があるCRoundラウンドの連続セットです。 そして、 CStatisticゲームの一般的な統計は、各ラウンドの統計で構成されています。 CRoundは、プレイできるようにするために必要なすべての情報(目標をリリースする数と速度、使用する効果、ラウンドを成功させるためにカウントするものなど)を保持しています。


単体テストを使用した場合と使用しない場合の開発の比較
meiciucの質問の 1つに対する回答。
ActionScriptで単体テストを行う理由 ActionScriptがそれほど悪いのはなぜですか? まあ、リストする必要はありません。 ユニットテストは一般的に実証済みのプラクティスであると言いたかったのです。 読んでみてください:
  1. 単体テストは努力する価値がありますか? [閉じた] ;
  2. 足で自分を撃たない方法
  3. 単体テストとTDDの使用について

ここで、質問を変えます。なぜActionScriptがあまりにも優れているので、動作しないのでしょうか。

最初は、ゲームはほぼ1つのクラスのプログラムとして実装され、「最高の伝統」ではすべてを実行することに注意してください。 図89では 、この作成のスクリーンショットを見ることができます。 このオプションは、Gitでも引き続き利用可能です:alx.duckhunt.CDraft。

図8
カモ狩り。最初のバージョン

図9
カモ狩り。最初のバージョン
ご覧のとおり、「プロトタイプ」として取得したものと非常によく似ています。
この作品は「ひざの上で」開発されました。 ですから、ユニットテストの有無にかかわらず開発を比較する機会が本当にありました。 私は時間記録さえも保持していたので、特定の数字を共有することができましたが、正直なところ、ケースごとに開発が行われたため、この比較を行うことは完全に正しくありません。 時間に影響を与える要因が多すぎます。 最終的に、私は費やした時間の日記をつけるという考えさえ捨てました。
alx.duckhunt.CDraftの非常に単純な構造に慣れることができます。 おそらくここでのテストは不要です。 ただし、この記事で何が起こったのかを見てください(後でさらに複雑になります)。 プロジェクトの複雑さが膝の上の単音節の部分からより複雑なものに変わるとすぐに、部分的な単体テストを使用することによる利益が具体的になります。
  • リファクタリングは簡単です。
  • 間違いを修正し、重要なことに、「転生」を回避する方が簡単です。
  • エラーではなくコードを再利用する方が簡単です。
  • 開発したアプリケーションのエラー検索時間ははるかに短くなります(主観的に)。

もちろん、 Flashでバナーを開発している場合、これはすべて必要ではありません。

この質問は別の記事に値しますが、私は書くつもりはありませんでした。


ちなみに...
  1. 抽象ファクトリーを適用したデザインテンプレート [CTarget; CTargetFactory]、[CDuckTarget; CDuckTargetFactory]、[CCloudTarget; CCloudTargetFactory] ;
  2. デザインパターンを適用したファクトリメソッド CWeapon :: createMagazine ;
  3. ある種のデザインパターンリンカー [CTargetFactory; CRandomTargetFactory] ;
  4. デザインパターンオブザーバーを適用[CDisplay; IDisplayListener]、CWeaponはIDisplayListenerを実装します。 CGameはIDisplayListenerを実装します




「ダックハント」



備考12:
がっかりしたいのですが、ミニゲームを別のゲームに埋め込むというアイデアは、特定の美的理由から徐々に魅力を失いました。 したがって、この役割で彼女を見ることはほとんどないでしょう。 しかし、私たちは一貫性があり、ゲームを別のものとして整理し、善が消えないようにします。
ここでは、私が「デザイナー」であるものについては説明しません。 CDuckHuntGameはCGame拡張し、ミニゲームにユーザーインターフェイスとデザインを追加します。
CNickGeneratorは、有名なゲームの典型的な面白いニックネームのシンプルなジェネレーターです。
クラウドは通常の方法でターゲットとして定義されます( CCloudTargetはCTargetを拡張しCCloudTargetFactoryはCTargetFactoryを拡張します )。 そのようなターゲットを破棄する必要はないため、ターゲットの現在のリストの外にあります。 ファクトリーは、さまざまなサイズのクラウドのクラウドプリミティブからアニメーションを生成できます。 図10では 、何が起こるかの例を見ることができます。

図10
カモ狩り。クラウドデモ
図11は、結果のゲームのスクリーンショットです。

図11
ダックハント

備考13:
記事にSWFムービーを挿入することはできません。また、無料のホスティングを利用している私のサイトは、訪問者の流入が比較的少ない場合でも明らかに満足しません。 私は自分のビデオを投稿できるプラットフォームを探すことにしました。それは誰でも利用できるでしょう。 検索の過程で、「rawgit.com」サービスを見つけました。これは、「github.com」にあるファイルをブラウザーで直接開く素晴らしい機会を提供します。
ゲームのデモ (注意!音!)。


備考14:
自分でSWFムービーをアセンブルしようとしている場合、すべてのアヒルを配置するには、最初にプロジェクトからアヒルを削除してから再度追加する必要があることに注意してください。 それが奇妙なFlashの仕組みです。 この状況は、アプリケーションコンテキスト設定ツールが表示されたときに修正されます。


おわりに


次号では:



文学
  1. 前半からの文学 ;
  2. Gorelenkov AI、「線形代数」をテーマにした電子教科書 (.CHMへのリンク(別のリンクは見つかりませんでした!))。

Source: https://habr.com/ru/post/J241917/


All Articles