Aydar: 「私たちのゲーム「Syncomania」の物語は、私が奇妙な夢を見たという事実から始まりました。 これは、四つの白いボールが四角いフィールド上で同期して動くコンピューターゲームでした。 彼らのうちの最初のものが競技場から出たとき、私は目を覚ました。 翌朝、私はエドに電話しました。すでに午後に、私は大学の庭で出会いました。
エド: 「どのプログラマーが自分のゲームを作ることを夢見ていないのですか? 2014年の夏、私は多くの自由時間を持ち、このアイデアを喜んでつかみました。 そうすると、どんな困難に遭遇するか想像できませんでした。」
しかし、最初の段階では熱心で、すべてが簡単で面白かったです。 彼については、記事の最初の部分で説明します。
そのため、入り口では、1つの簡単なアイデアがありました。プレイヤーは1つの動きで4人のヒーローを操作します。
まず、ゲームのジャンルに対処する必要がありました。 アーケードをすぐに拒否しました。非常に多くの同時に移動する要素を管理することは簡単な作業ではありません。 私たちはどちらも、測定された知的ゲームが好きなので、ターンベースのパズルになることに同意しました。 確かに、ユーザーはこれから気分が良くなかった-ゲームはハードコアであることが判明した。 また、ゲームプロセスがプレーヤーのアクションに完全に依存するように、ランダムで予測不可能な要素を除外することにしました。
エド: 「考え直すことなく、プログラミング言語としてProcessingを選択しました。予備設定なしで簡単にプロトタイプを作成できるからです。 さらに、Java構文により、Ctrl + CやCtrl + Vなどの組み合わせを使用して、ゲームロジックをAndroidに簡単に転送できましたが、これについては後で詳しく説明します。 白い円の形で4人のヒーローを作成し、キーボードの矢印を使用して座標を変更しました。
Aidar: 「ヒーローの初期位置をレベルの等距離の場所に設定しました。対称的に見えたので、なぜですか?」 その後、各レベルが同じ方法で開始されれば楽しいと判断しました。」
コントロールを少し試してみたところ、ヒーローにはレベルを超えた何らかの目標が必要であることがわかりました。 最初に、ヒーローを競技場の外に連れて行くというアイデアを考えました(これはまさにアイダールの夢の場合でした)。 しかし、唯一の方法は、私たちにとってより面白く、劇的なように思えました-それはより多くの制限を課しました(ご存知のように、創造性が生まれます)。 だから私たちには勝利のための唯一の条件がありました。すべてのヒーローが生きて出なければなりません。 通常、出口標識は緑色で強調表示されます。 同じことをしました。

「2日目に、彼らは壁を作りました。 レベルの中央に壁があり、ヒーローと出口を隔てる可能性があります。」
壁オブジェクトは自然の障害物であり、通過シナリオを構築するための主要なツールです。 直観的に、私たちは主人公の動きの道に壁がある場合、主人公はそのままでいると決めました。 壁は通常石で作られているため、灰色の正方形として描いています。

私たちは、11 x 11の次元を持つチェス盤の形で競技場を作り上げました。したがって、オブジェクトの保存と移動が簡単になりました。 たとえば、ヒーローが左下隅にいる場合、彼の座標は[0] [0]です。 ヒーローを1セル上に移動するには、行の値に1を追加します:[0 + 1] [0] => [1] [0]。 各セルを占めることができるオブジェクトは1つだけです。自然な疑問が生じます。「2つのオブジェクトが同じセル上にある場合はどうなりますか?」最初に、1人のヒーローが壁にヒットし、2人目のヒーローが彼にヒットしたときだけ考えました。 そのため、負ける条件の1つが現れました。同じセルにいる2人のヒーローが相互に破壊されます。

トラップ要素を作成したときに負けの別の条件が現れました-セル、ヒットするとヒーローが死にます。 trapは危険で禁じられているものとして描かれなければならず、したがって、ミニマリストのスタイルに固執して、私たちは赤い正方形を選びました。

エド: 「ボードゲーム「ロボラリー」 、特にコンベアシステムが本当に好きです。これは、アクションを誤って計算すると驚きの要素をもたらします。 コンベヤは、コースの別の段階で(ヒーローの移動後)発射し、オブジェクトを矢印の方向に移動します。 「このようなものをゲームに持ち込み、フローと呼びました。」
ストリームには2つの主な機能があります。
1)乳首システム。 彼女は片道をスキップしますが、戻ってスキップしません。

2)生産ライン。 これにより、ヒーロー、敵、ボックス(後で詳しく説明します)が事前定義されたルートに乗ることができます。

Aidar: 「ヒーローを殺すための洗練された方法を探し続け、私たちはトラップのアイデアを開発し、それらをモバイルにすることを決めました。 最初に、一定の頻度で2つのセル間を移動する振り子トラップをゲームに導入するというアイデアがありました。 しかし、競技場中を移動できるトラップは、はるかにクールです。 そのような要素は「生きている」ものとして取得され、すぐに敵と呼ばれます。
しかし、要素の不規則な動きは、ゲームに予測不可能性と制御不能性をもたらします。これは、我々が発明した世界の法則に反します。 したがって、敵はプレイヤー自身によって制御され、ヒーローの敵対者であるチームとは反対に、つまり反対方向に移動することにしました。 たとえば、ヒーローが右に行くと、敵は左に行きます。

レベルに多くの敵がいるとき、彼らが彼らの人生を生きているという幻想が作成されます:ストリームに乗って、首を壁にぶつけて失敗し、お互いのtrapや武器で死に、出口を通ってこの世界を去り、意図的に(実際にはそうではない)常にヒーローを殺そうとしています。

エド: 「テストレベルの1つで、敵は非常に迷惑だったので、私はいつも敵に復geしたいと思っていました。 ヒーローが使用できるツール、またはむしろそれらに対する武器が必要でした。 いくつかのオプションを試した後、私たちは敵を重い物で押しつぶすことにしました。
私たちは倉庫番ゲームを思い出して、変更されたタイプのボックスを作成しました(新しいものは忘れられた古いものです)。 実際、ボックスは押し込むことができる壁なので、十字線の付いたグレーの縮小された四角形として表示しました。 彼らは私たちのゲームのルールに調和して適合します:ヒーローまたは敵と一緒に箱に箱を押し込むと、キャラクターは死にます。法律によれば、2つのオブジェクトを同じセルに入れることはできません。 さらに、ボックスは小川で移動でき、トラップや出口に落ちると破棄されます。 倉庫番ゲームのように、連続して複数のボックスを押すことはできません。そのため、ヒーローがロックされている状況が発生する可能性があります。

Aidar: 「レベルを作成するとき、考えられるすべての解決策を予測することはほとんど不可能です。すでに最初に、エドと私はレベルをさまざまな方法で経験していることに気付きました。 これは驚くべきことではありません。新しい動きごとに状態の数が指数関数的に増加するからです。
パッセージのばらつきはゲームの特徴であり、私たちは心から誇りに思っています。 もちろん、ほとんどのレベルはためらうことなく完了することができますが、20の動きの代わりに40または60が必要な場合があります。 そのため、ゲームには再通過のインセンティブがありました-最短の解決策を探すことです。
エド: 「私にとって、最適なパッセージの検索はゲームの好きな部分です。 開発の最初の段階で、最初のユーザーである友人が記録を共有するテーブルを作成しました。レベルがいくつ移動したかです。 記録を破ってこのリストに入ったことで、私たちはさらにプレイするようになりました。」
ゲームのリリース前に、すべてのレベルの最短のウォークスルーを収集して、有料のヒントの形で発行する必要がありました。 これを行うために、制限のある網羅的な検索アルゴリズムをプログラムしましたが、多数のオブジェクトがあるレベルでは長すぎました。 決済時間が数日を超えたとき、クラウドソーシング(クラウドソーシング、クラウド-「クラウド」およびソーシング-「リソースの使用」)を使用することにしました。 プレイヤーがいずれかのレベルで記録を改善した場合、Googleアナリティクスを使用して、一連の動きの形で彼の決定を得ました。 経験豊富なプレイヤーは通常、試行錯誤のパターンを適用し、過度の動きを避けて、ヒューリスティックに最適なパッセージを探します。 したがって、ウォークスルーのベースをすばやく補充しましたが、驚いたことに、一部のプレーヤーは引き続き記録を更新しています。 アプリケーションの将来のバージョンでは、それらを慎重に記録および更新します。

継続するには...
次のパートでは、ゲーム「Syncomania」でレベルを渡すためのパズルとテクニックの開発方法について説明します。
思いついて最初のAndroidゲームを作成しました。 パート2:レベル