CodeGym /Java Blog /ランダム /初めに、ありました...
John Squirrels
レベル 41
San Francisco

初めに、ありました...

ランダム グループに公開済み
初めに、ありました... - 1 私の最初の仕事の試用期間は 3 年前に終了しましたが、今になってようやく記事を書く時間を見つけました。私は大学のさまざまな学部で 1 年間を過ごしました。最初の学期では経営学を学び、二学期ではソフトウェア エンジニアリングに転向しました。彼らが私にプログラミングの仕方を教えてくれることを期待していましたが、私の間違いでした。そこで、資料を集めて、すべてを独学で学ぶことにしました。私が先生に感謝している唯一の理由は、スティーブン・プラットの電子書籍「The C Programming Language」から始めることを勧めてくれたことです。本当に実践的な練習がたくさん載った良書です。私はこの本に約 2 か月間費やしましたが、その後友人のグループでこのオンライン Java コースを見つけて、それが始まりました。 最初は Android 開発者になろうと思っていました、しかし、学習が進むにつれて、バックエンドの方が興味があるように思えました。ちなみに私はレベル20になるまで3ヶ月ほど勉強して、その後就職活動をすることにしました。最初の仕事は別の都市に移ることだったなぜなら、私の会社にはジュニア Java 開発者のための求人がなかったからです。会社を見つけて応募し、テスト課題を受け取り、それを完了するのに 1 週​​間かかりました。Hibernate、Servlet/JSP、MySQL を使用して単純な Web アプリケーションを作成する必要がありました。これらの用語をすべて見て、MySQL がデータベースであることしか知りませんでした。最初はとてもがっかりしました。いくつかの KFC で求人を探すことも決めましたが、その後、テスト課題に挑戦することにしました。結局のところ、私はいつでもKFCで仕事を得ることができました。私は一週間休みなく働き、なんとかテストを終えることができました。解決策を提出しましたが、「見た目が良くなかった」ため、さらに 4 回修正しました。私の最後の解決策は正しいことが判明しましたが、ポジションはすでに埋まっており、追加の応募は 3 か月間受け付けられません。どうするつもりですか?今後 3 か月間、HTML、CSS、JS、SQL、PHPを学びました。なぜ PHP なのか? リクエストなどに応答するサーバー言語が必要でした。当時、サーブレットと JSP は複雑すぎるように思えました。結局、ひどいインターフェースを備えた本格的な Web アプリケーションを作成してしまいました。自分のポートフォリオ用にコードを GitHub に公開しました。この時点で 3 か月が経過していましたが、同じ会社から再度連絡があり、面接に招待されました。SQL の知識をテストするための簡単なタスクが与えられ、なんとか数時間で完了することができました。私が雇用について話している相手は、私がまだ習得する時間がなかったトピックであるアルゴリズムとデータ構造について質問するだろうとほのめかしました。とはいえ、面接まであと15日ありました。私はこれを得た!Robert Lafore の著書「Data Structures & Algorithms in Java」が役に立ちました。しなかった 2 週間ですべてを読んで理解する時間はありませんが、それでも多くのことを学びました。そして迎えた面接の日。約束の時間に到着しました。二人の男性が出迎えて面接が始まりました。心配していたと言っても過言ではありません。声が震えました。彼らはアルゴリズムとデータ構造以外のすべてについて質問しました。彼らは Spring、DI、IoC、Hibernate、JVM の仕組み、ガベージ コレクターの仕組みについて質問しましたが、私はこれらの質問の 1 つも答えることができませんでした。Java コア (コレクション、例外、OOP など) に関する質問にのみ回答できました。面接の時点で不合格だとわかっていましたが、何のフィードバックももらえず残念でした。代わりに、私は自分の知識のギャップを特定し、それを埋めるために熱心に取り組み始めました。そして迎えた面接の日。約束の時間に到着しました。二人の男性が出迎えて面接が始まりました。心配していたと言っても過言ではありません。声が震えました。彼らはアルゴリズムとデータ構造以外のすべてについて質問しました。彼らは Spring、DI、IoC、Hibernate、JVM の仕組み、ガベージ コレクターの仕組みについて質問しましたが、私はこれらの質問に 1 つも答えることができませんでした。Java コア (コレクション、例外、OOP など) に関する質問にのみ回答できました。面接の時点で不合格だとわかっていましたが、何のフィードバックももらえず残念でした。代わりに、私は自分の知識のギャップを特定し、それを埋めるために熱心に取り組み始めました。そして迎えた面接の日。約束の時間に到着しました。二人の男性が出迎えて面接が始まりました。心配していたと言っても過言ではありません。声が震えました。彼らはアルゴリズムとデータ構造以外のすべてについて質問しました。彼らは Spring、DI、IoC、Hibernate、JVM の仕組み、ガベージ コレクターの仕組みについて質問しましたが、私はこれらの質問に 1 つも答えることができませんでした。Java コア (コレクション、例外、OOP など) に関する質問にのみ回答できました。面接の時点で不合格だとわかっていましたが、何のフィードバックももらえず残念でした。代わりに、私は自分の知識のギャップを特定し、それを埋めるために熱心に取り組み始めました。心配していたと言っても過言ではありません。声が震えました。彼らはアルゴリズムとデータ構造以外のすべてについて質問しました。彼らは Spring、DI、IoC、Hibernate、JVM の仕組み、ガベージ コレクターの仕組みについて質問しましたが、私はこれらの質問に 1 つも答えることができませんでした。Java コア (コレクション、例外、OOP など) に関する質問にのみ回答できました。面接の時点で不合格だとわかっていましたが、何のフィードバックももらえず残念でした。代わりに、私は自分の知識のギャップを特定し、それを埋めるために熱心に取り組み始めました。心配していたと言っても過言ではありません。声が震えました。彼らはアルゴリズムとデータ構造以外のすべてについて質問しました。彼らは Spring、DI、IoC、Hibernate、JVM の仕組み、ガベージ コレクターの仕組みについて質問しましたが、私はこれらの質問の 1 つも答えることができませんでした。Java コア (コレクション、例外、OOP など) に関する質問にのみ回答できました。面接の時点で不合格だとわかっていましたが、何のフィードバックももらえず残念でした。代わりに、私は自分の知識のギャップを特定し、それを埋めるために熱心に取り組み始めました。Java コア (コレクション、例外、OOP など) に関する質問にのみ回答できました。面接の時点で不合格だとわかっていましたが、何のフィードバックももらえず残念でした。代わりに、私は自分の知識のギャップを特定し、それを埋めるために熱心に取り組み始めました。Java コア (コレクション、例外、OOP など) に関する質問にのみ回答できました。面接の時点で不合格だとわかっていましたが、何のフィードバックももらえず残念でした。代わりに、私は自分の知識のギャップを特定し、それを埋めるために熱心に取り組み始めました。面接に落ちてから1か月後に仕事が見つかりました。ちなみに、この求人は CodeGym に関するディスカッションで見つけました ( CodeGym は CodeGym のロシア語版です — 編集者注))。まず、採用担当者とのSkype面接がありました(所要時間は約2時間)。彼らは、Java コア、ガベージ コレクション (その仕組みがわかりました)、データベース、およびデータ構造について質問しました。面接官は私に、画面を共有して計算機を書くように言いました。ちょうど 1 週間前に電卓を書いたばかりだったので、嬉しくて泣きそうになりました。私は自分に自信を持ってこの仕事を始めました。しかし、興奮のせいか、それとも他の理由からか、アルゴリズムの一部を忘れてしまいました。画面が共有されました。Googleに相談するのが怖かった。幸いなことに、私は携帯電話を持っていたので、命は救われました。翌日、彼らは直接面接に電話をかけ、数日後にオファーを受け取りました。。それは公式の立場ではありませんでした。私の役柄は個人事業主の見習いでした。私たちはイベントの企画、チケットの販売などのサービスを作成しました。初めて働いた日のことを覚えています。上司は 15 分かけて何をする必要があるかを説明しました。「すべては明らかですか?」彼は尋ねた。「うーん、そうではない。もう一度見直してもらえますか?」私は非常に心配して尋ねました。上司はもう一度すべてを説明しました。「もう明らかですか?」「はい、そうなりました。」実際のところ、私は何も理解できませんでした。しかし、私は別の説明を求めるのが怖かった。それは働いている人なら誰でも理解できると思います。この作業は、Thymeleaf から AngularJS への移植に要約されました。幸いなことに、完成したコードの塊を見つけたので、それを何をすべきかの例として使用しました。仕組みはわかりませんでしたが、作業は完了しました。その後、私にはバックエンドに直接関連するタスクが割り当てられました。Spring を実際に使用して初めて、「Spring for Professionals」で読んだ内容を理解できるようになりました。そこで 8 か月間働き、その後別の都市に移り、すぐに正式な仕事を見つけて 2 年間働き、途中で肩書を「ジュニア」から「中堅」に変更しました。そして、自分の仕事がルーティン化し、一滴の楽しみも感じられなくなってしまったという事実に直面しました。それで休憩を取りました。休憩中に指が萎縮するのを防ぐために、私は別の分野、つまりゲーム開発に挑戦することにしました。具体的には、Java の知識があったため、モバイル ゲーム開発で Android を取り上げました。それがこれから詳しくお話しすることです。Spring を実際に使用して初めて、「Spring for Professionals」で読んだ内容を理解できるようになりました。そこで 8 か月間働き、その後別の都市に移り、すぐに正式な仕事を見つけて 2 年間働き、途中で肩書を「ジュニア」から「中堅」に変更しました。そして、自分の仕事がルーティン化し、一滴の楽しみも感じられなくなってしまったという事実に直面しました。それで休憩を取りました。休憩中に指が萎縮するのを防ぐために、私は別の分野、つまりゲーム開発に挑戦することにしました。具体的には、Java の知識があったため、モバイル ゲーム開発で Android を取り上げました。それがこれから詳しくお話しすることです。Spring を実際に使用して初めて、「Spring for Professionals」で読んだ内容を理解できるようになりました。そこで 8 か月間働き、その後別の都市に移り、すぐに正式な仕事を見つけて 2 年間働き、途中で肩書を「ジュニア」から「中堅」に変更しました。そして、自分の仕事がルーティン化し、一滴の楽しみも感じられなくなってしまったという事実に直面しました。それで休憩を取りました。休憩中に指が萎縮するのを防ぐために、私は別の分野、つまりゲーム開発に挑戦することにしました。具体的には、Java の知識があったため、モバイル ゲーム開発で Android を取り上げました。それがこれから詳しくお話しすることです。そこですぐに正式な仕事を見つけ、2年間働き、途中で肩書を「ジュニア」から「中堅」に変更しました。そして、自分の仕事がルーティン化し、一滴の楽しみも感じられなくなってしまったという事実に直面しました。それで休憩を取りました。休憩中に指が萎縮するのを防ぐために、私は別の分野、つまりゲーム開発に挑戦することにしました。具体的には、Java の知識があったため、モバイル ゲーム開発で Android を取り上げました。それがこれから詳しくお話しすることです。そこですぐに正式な仕事を見つけ、2年間働き、途中で肩書を「ジュニア」から「中堅」に変更しました。そして、自分の仕事がルーティン化し、一滴の楽しみも感じられなくなってしまったという事実に直面しました。それで休憩を取りました。休憩中に指が萎縮するのを防ぐために、私は別の分野、つまりゲーム開発に挑戦することにしました。具体的には、Java の知識があったため、モバイル ゲーム開発で Android を取り上げました。それがこれから詳しくお話しすることです。私は別の分野、つまりゲーム開発に挑戦することにしました。具体的には、Java の知識があったため、モバイル ゲーム開発で Android を取り上げました。それがこれから詳しくお話しすることです。私は別の分野、つまりゲーム開発に挑戦することにしました。具体的には、Java の知識があったため、モバイル ゲーム開発で Android を取り上げました。それがこれから詳しくお話しすることです。私のチーム。 すぐに、開発者 2 人、ゲーム デザイナー 1 人、サウンド エンジニア 1 人の 4 人 (私を含む) の小さなチームを結成しました。チームにはゲーム開発の経験が全くない人がいなかったことと、休暇の時間が限られていたこともあり、絶対に完成させることができる簡単なプロジェクトを実装することにしました。そして、私たちはそうしました!当初の締め切りは 11 月 15 日でしたが、ご存じのとおり、予定通りにプロジェクトを完了するのは間違いです。ということで、2週間遅れで完成しました。私たちのテクノロジー スタックは Java 8 と libGDX で構成されていました。

発達

開発は10月17日に開始された。合計 45 日間を費やし、その期間は次のとおりです。
  1. libGDX の使い方を学びました。
  2. コードを書きました。
  3. グラフィックを作成しました。
  4. 私たちは音楽を作りました。
このゲームを見たことがある人なら誰でも、「なぜこんなに時間がかかったのですか?ゲームはとてもシンプルです。」と疑問に思うかもしれません。はい、そうです。正確に言うと、開発部分 (コードを書く) には 1 週間半ほどかかりました。残りの時間は次のように分けられました。
  1. ゲームエンジンの使い方をマスターする。
  2. アートワークの描画と再描画。
  3. 音楽を書くこと。
  4. https://freesound.orgでサウンドを検索します。
  5. ゲームを宣伝する方法に関する記事を大量に読んでいます。
また、誰かが試験だった、誰かが追試験だったなど、さまざまな理由で「ダウンタイム」が発生する瞬間もありました。1 週間半以上がダウンタイムのせいであることは間違いありません。「議論」にもある程度の時間を費やしました。ゲームに何を追加するかについての新しいアイデアがほぼ毎日出てきたので、「それは余計だ」「それは合わない」などと議論しました。私たちはたくさんのアイデアを捨てました。たとえば、走るゴキブリを追加して、潰して追加点を獲得するなどです。私の意見では、最も難しいことの 1 つは、ゲームに何を入れるかを事前に決めて、「もう 1 匹だけ追加」しようとせずに計画を忠実に守ることでした。 " 特徴。そうやって積み重ねてきた45日間。ゲームのプロトタイプは 1 週間半後に完成しました。この時期は本当にグラフィックがなかったので、 初めに、ありました... - 2ゲームは技術的な意味で非常にシンプルです。box2d (物理エンジン) を使用する必要さえありませんでした。衝突を処理し、斜辺を独自に計算できます。私が強調したい最も興味深い点は次のとおりです。
  1. 当初、すべてのゲーム要素はランダムに生成されました。言い換えれば、プロバイダー (ブラック ホール、ハサミ、忍者スター、鉛筆の芯、ハートの) を配列に入れ、ランダムなプロバイダーを取得し、ランダムな座標を持つ要素を取得しました。このアプローチは「実際にはあまり良くない」ことがすぐに明らかになりました。テストに参加した友人も同じことを言っていて、テンプレートの使用を勧めていました。ゲーム開発に携わっている人にとって、これはおそらく明らかな解決策です。しかし、私たちはこの分野の初心者だったので、それは非常に実践的なアドバイスでした。

    そこで、いくつかのテンプレートを作成しました。鉛筆の芯 — 超高速で集めるのはとてもクールです (指でシューッ、シューッ、シューッという音)。もう 1 つのテンプレートは、何と呼んでいいのかわかりません。コード内でクラスに何という名前を付けたかだけ説明しますStraightForwardPattern

    初めに、ありました... - 3

    これらのテンプレートにより改善されましたが、どういうわけか予測しすぎてしまいました。そのため、ランダムなテンプレートをもう 1 つ追加しました。言い換えれば、いくつかの「静的」テンプレートと 1 つのランダムなテンプレートができました (ここに「完全にバランスの取れた」ミームを挿入します)。

  2. これが私たちが遭遇した主な問題です。LibGDX は無限ループで render (float delta) メソッドを呼び出します。ここにすべての要素が描画されます。鉛筆の線は次のように描画されます。指の座標を取得し、そこにテクスチャを描画します。したがって、画面上で指を非常に速く動かすと、render(delta) メソッドの呼び出し間のミリ秒が原因で、線に「ギャップ」が生じます。

    解決策は非常に簡単でした。テクスチャが描画された最後の座標を記憶し、次の座標を取得し、それらの間の距離が X よりも大きく、指が放されていない場合は、ギャップを埋めます。最初は、このオプションは機能しないのではないかと考えました。線が角張ってしまうためです。しかし、私たちの不安は杞憂に終わり、すべてがうまくいきました。

ゲームについて

ゲームプレイはユニークだとは主張しませんが、非常に優れており、ユーザーを引き込むことができます。鉛筆を操作して、文字通り紙に絵を描き、ハサミ、忍者スター、ブラックホールなどの障害物を避けます。その間、鉛筆の芯がなくなり、小さな鉛筆を拾う必要があります。鉛筆を少し集める前に鉛筆が終わりそうになったら、鏡の破片を拾うことができます。数秒間、鉛筆の芯は消費されずに復元されますが、同時にコントロールがミラーリングされます。指が左に動くと、鉛筆は右に描画されます。また、一度障害物にぶつかっても生き残ることができるハートを拾うこともできます。指を離さずに鉛筆を長く動かすほどコンボが高くなり、より早くポイントが蓄積されます。 初めに、ありました... - 4ゲームのスピードも徐々に上がっていきます。欠けているのは怒っている鳥だけです。当初、私たちはゲームに「カラン ダッシュ」という名前を付ける予定でした (鉛筆を意味するロシア語の音訳は「カランダッシュ」です - はぁ! わかりますか?)。しかし、後で気が変わり、ペンシル ダッシュに落ち着きました。この優雅なダジャレはロシア語を話す聴衆にしか理解されないため、このようにしました。私たちは数日前にゲームをリリースし、現在プロモーションを行っています。ここでも、チームには経験のある人がいません。ゲームのプロモーションに関する知識はさまざまな記事から得ました。ゲームに関する情報をさまざまな Web サイトやフォーラムに無料で公開しました。当社の有料チャネルには、4pd での広告、1 人のブロガーによる広告、VKontakte の公開グループでの複数の投稿、AdMob 広告が含まれていました。 ちなみに、この投稿はプロモーションの一環でもあるため、ウェブサイトの管理者の許可を得て、ここにゲームへのリンクを掲載します。ゲームは Google Play でここから見つけることができます。インストールしていただければ幸いです (気に入っていただけると思います!)。評価を残していただければ、お子様にあなたの名前を付けることを約束します。:) 最初は... - 6
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION