アーケード作成のニュアンス





そして、これがハブラハブルのオープンスペースに足を踏み入れる最初の試みです。



最近、私の回避ゲームがリリースされました。 障害物をかわす必要があるシンプルなアーケードゲーム。 ゲーム自体の開発は簡単ですが、シンプルさには落とし穴があります。 この記事でそれらのいくつかについてお話したいと思います。





赤いボールは、指が触れるポイントに移動します。



レベルエディター



Evasionのレベルは、特定の速度で落ちるスプライトのマトリックスとして表示されます。 一番下の行が許容可能な座標を下回ると、一番上の行に移動します。 その結果、一種のコンベアベルトができました。 移動の瞬間に、障害物がそれぞれ変化し、スプライト上の画像が変化します。 障害の種類ごとに独自のIDがあります。 レベル情報は2次元配列に格納されます。



このようにして、障害が変化します。



public static bool Next_M(int Series) //    { if (Set < 0) Set = 0; if (Set < mLvl) //     { // xR -     for (int i = 0; i < xR; i++) { M_Load(Series, i, Level[i, Set]); //    ,     Level } Set++; } else //   { for (int i = 0; i < xR; i++) { M_Load(Series, i, 0); } if (Finish) { Finish = false; return true; } } return false; }
      
      





最初に、レベルを作成するために、文字列式を入力し、既に整数値に変換する必要がありました。



 Base[0] = "040900080205080202000204050000001500060001001515141314140706000705110704040004020406"; //     
      
      





しかし、彼はすぐにこれが行われていないことに気付きました。 このプロセスは遅く、退屈で、エラー修正は干し草の山の針を徹底的に検索することで罰せられました。 その結果、迅速で便利なレベルエディターを作成することになりました。





中央のテープはスライドで下げられます。



エディターは開発を数回簡素化しました。 レベルをすばやく構築してテストできます。 また、レベルエディターを作成してゲームを楽にする機会があれば、時間を費やすのが面倒にならないでください。 さらに、これはゲームの追加オプションとして提示できます(エディターが通常の人間が使用するのに便利な場合)。



Evasionのエディターは存在しますが、参照専用です。 レベルを保存することはできますが、機会は友人などと共有されます。 しかし、これは全く異なる話です...



エンドレスモード



数学に関する多くの知識がなければ、ランダムに生成されたレベルは私にとって理解できないタスクになりました。 唯一の解決策は、長さ3〜5のスプライトの小さなブロックを作成して繰り返すことでした。 実装は退屈で退屈ですが、他に選択肢はありませんでした。 ある日、数学のペアでBFUに座って、1つの単語が思い浮かびました:多く!



すべての障害はセットに分けることができます:



  1. あらゆる種類の障害
  2. 上からのすべての障害物(最初の配列のサブセット)
  3. 以下のすべての障害
  4. 左側に
  5. 右へ


複数の障害物が一度に複数の配列に分類される種。 入口、出口、およびそれらの間の距離をランダムに見つけます。 すべてが1行で発生します。 距離に応じて、通過できない場所の外観を除外する場所と場所を見つけます。



  public static void Next_M(int S) { int Di = Math.Abs(In - Ou); //       if (Di == 0) //       { List<int> Cut = Draw(0, 1); // 0 -   , 1 -  M_Load(S, In, Cut[StaticVolue.Rnd(0, Cut.Count)]); } else { List<int> Cut = new List<int>(); if (In > Ou) { Cut = Draw(0, 2); M_Load(S, In, Cut[StaticVolue.Rnd(0, Cut.Count)]); for (int C = In - 1; C >= Ou; C--) { if (C == Ou) { Cut = Draw(1, 3); M_Load(S, C, Cut[StaticVolue.Rnd(0, Cut.Count)]); } else { Cut = Draw(2, 3); M_Load(S, C, Cut[StaticVolue.Rnd(0, Cut.Count)]); } } } else { Cut = Draw(0, 3); M_Load(S, In, Cut[StaticVolue.Rnd(0, Cut.Count)]); for (int C = In + 1; C <= Ou; C++) { if (C == Ou) { Cut = Draw(1, 2); M_Load(S, C, Cut[StaticVolue.Rnd(0, Cut.Count)]); } else { Cut = Draw(2, 3); M_Load(S, C, Cut[StaticVolue.Rnd(0, Cut.Count)]); } } } } In = Ou; Ou = StaticVolue.Rnd(0, Matrix_Control.xR); }
      
      





 static List<int> Draw(int A) { List<int> CellSet = new List<int>(); bool ice; for (int y = 0; y < AllCell.Length; y++) { ice = true; for (int i = 0; i < 9; i++) { if (AllCell[y] == EnterCell[A, i]) //      ,     A { ice = false; } } if (ice) CellSet.Add(AllCell[y]); } return CellSet; }
      
      





これは、ランダムレベルの実装です。 これをどのように改善するかについてのアイデアがある場合は、コメントに書いてください。



音楽伴奏



ゲーム内の音楽についていくつかの言葉を言いたかった。



あなたが学生で、良い音楽のためのお金がなく、無料のオプションがあなたに合わない場合はどうでしょうか? 方法は2つあります。自分で書くか、できればグループと仲良くしてください。 たまたま自分で音楽を書く方法がわからなかったのですが、友達とは幸運でした。



私のゲームの音楽は、地元のカリーニングラードのバンド「ヒューストン、問題があります!」から親切に提供されました。



それだけです プロジェクトの皆さんに幸運を。



All Articles