回答:
起こる
心配する状態があまりないので簡単なゲームです(レンガの値の配列です。レンガの色が1つだけの場合はフラグの配列です)。AIはありません。ボールを正しくバウンスさせるための少しの物理学。
ソリティア
ルールはブレイクアウトよりも少し複雑であり、そのインターフェイスは大きく異なります。ゲームを実装するさまざまな方法について考える必要があります。つまり、あるゲームで機能するものは、必ずしも別のゲームで使用するものとは限りません。
パックマン
これは、少しのAIで作業できるので便利です。ゴーストをプレイヤーに追従させる(ただし、あまり良くない-プレイヤーにチャンスを与えたい)ことはすぐに実装でき、あなたは微調整して友人や家族に見せびらかすことができる楽しいゲームを作ることができます(肯定的なフィードバックは常にあなたが始めているときに良いこと)。
初期のビデオゲームでインスピレーションを探すと、比較的簡単に実装できるアイデアがたくさん見つかることがわかります。さらに、とにかくとてもシンプルなものをコピーしているので、非常にシンプルなアートワークとサウンドで逃げることができます。これにより、最初に基本に集中することができます-ゲームのループを開始して実行し、ピクセルを画面に表示する方法を理解し、サウンドを再生し、スコアを保持し、プレイヤーの入力をゲームに入力します。
どちらのゲームを最初に選択するかはほとんど関係ありません。簡単な結果を得ることができるシンプルなものを選択してください。そうすれば、翌日に移動して別のゲームを作成できます。そしてもう一つ。そして、もう1つ-作れば作るほど、自分自身をプッシュし、最終的には知らないうちに複雑なゲームを作ることになります。
初心者のプログラマーは、実際に書きたい最も単純なゲームから始めることを強くお勧めします。Matt Rixが述べたように、ゲームの作成とデモの大部分は、クレジット、メニュー、プレイテスト、ハイスコア、一時停止、プレイテスト、難易度、クリーンなゲーム状態遷移、プレイを完了させることです。テストなど。これらの処理は、少なくとも半分の時間で実行できますが、面白くありません。そうではありません。ですから、概念を愛し、本当にやる気のある場合を除き、あなたはあきらめますとゲームがある前に移動するゲーム。
RPGを作成する場合は、自分でやりたいことを思い付くことができる、最もシンプルで管理しやすいRPGコンセプトを見つけてください。SFシューティングゲーム、ホラーをテーマにしたプラットフォーマーなど、何でもしたい場合は同じです。楽しいことをすべて終えた後でも、仕上げたいと思うものを選びますが、実際に完了するまでに何十時間もの仕事を見続けています。
「翼を手に入れる」ための最高のゲームは?完成したもの。あなたが書いた半分のPONG / Breakout / Galaga / Tetrisのデモの数は気にしません。実際に完成したゲームをリリースするまで、あなたはゲーム開発者ではありません。
さらに、40歳のゲームの別のバージョンをプレイしたい人は誰もいません。少なくともゲームを書くポイントは、人々がプレイすることです。
このラダーを少し前にTIGsourceに投稿しました。非常に基本的なものから非常に複雑なものまでです。
ゲームプログラミングの学習で最も重要なルール:プログラミングの学習は困難です。ゲームデザインを学ぶのは難しいです。優れたゲームアートやオーディオの作り方を学ぶのは難しいです。これらのすべてを同時に実行しようとすると、失敗のレシピになります。一度に一つのことを学びます。
結果:デザイン、アート、サウンドが既に行われているゲームをプログラムします。オリジナルのゲームではなく、クローンを作成します。
私のクラスでは、これらのゲームを次の順序で開始することを常にお勧めします。
1)テトリス。アートは色付きの長方形であり、Microsoftペイントでは合計でさえも描画できます。音は必要ありません。プログラミングは比較的簡単ですが、いくつかの重要な点が依然として必要です。内部のゲームの状態と画面に描かれるものの違いを理解すること。画面にピリオドを描くことができる(おそらくスプライトとブリットを含む); getch()またはscanf()を待つだけでなく、ユーザー入力をリアルタイムで受け入れることができます。
2)ブレイクアウト/アルカノイド。アートはまだ色付きの長方形であり、あなたはまだ音を必要としません。ボールはスムーズに移動およびバウンドする必要があるため、テトリスのすべての基本概念に加えて、いくつかの基本的な衝突検出および2D物理学を使用します。
3)Gradius / R-Type。これを作成するためのフリーウェアタイルセットを見つけることができます。ここでは背景がスクロールしているので、ページフリッピングやダブルバッファリングなどの手法を使用して、グラフィックメモリがどのように機能するかについてもう少し学ぶ必要があります。また、動的な敵と弾丸が発生する傾向があるため、自分の後にクリーンアップすることを学ぶ必要があります(つまり、ゲームがふるいのようにメモリをリークしないように画面から離れる敵と弾丸を取り除きます)。
4)Super Mario Bros.以前のスクロールプロジェクトと同様ですが、スクロールがプレイヤーの制御下にあり、自動ではない点が異なります。また、重力とそれに伴うすべての楽しい衝突物に対処する必要があります(最後のフレームで数ピクセル上にいたからといって床から落ちないで、次のフレームで数ピクセル下に移動したいなど) )。また、重力は条件付きであることに注意してください:プレイヤーと一部の敵に影響を与えますが、通常はプラットフォームや浮遊コインなど、実際の世界とは少し異なります。
これらの4つすべてを実行できる場合は、ほぼすべての2Dゲームを実行できるはずです。すべてのツールがあります。3Dゲームを作りたい場合...最初に2Dを学ぶのは簡単で、数学を深く理解する必要がないので、とにかく2Dのことを理解する必要があります...それに慣れて、いくつかの基本的な3Dツール(TorqueやUnityなどのライブラリ、または元のDoomやQuakeなどのオープンソースゲーム)の使用を開始してください。
幸運を!
これは実際に良い質問です。私はあなたがどこにいるか分からないので、私は空のためにスイングし、あなたがあなたの人生でコード行を書いたことがないと仮定します。気分を害するために、鼻のどの部分もあなたを怒らせないようにカットしてください。
私は実際にあなたが尋ねたものとは少し異なる質問に答えるつもりだと思います、そして私はあなたがその場で尋ねた質問を満たすために例を挙げます。私がそうする理由はわずかですが、視点に大きな違いがあると思います。重要なのは特定のゲームではなく、それらのゲームがデザイナーにもたらす考え方です。
あなたは、人々があなたのことをどのように話すかを知っています。彼らの考え方と心と肝臓を食べ、それによって彼らの強力な力を得るために、さまざまなプログラミング言語を学ぶことになっていますか?それには本当の真実があります-最初の純粋またはほぼ純粋なプログラミング言語の後、命令型言語であっても、あなたは非常によく定義されているので、ほとんど副作用のない関数を書くことになりますその形式ではない言語であっても、その方が適しています。haskell、ml / ocaml / smlnj、formulaONE、c ++テンプレートなど、どの言語であるかは特に関係ありません-サイドエフェクト状態に依存せずに、多くのクラスの作業を行う方法を学習します。堅牢で機械に近いプログラミング言語を初めて学ぶときは、サイズ型の抽象化について学びます。宣言型または制約型の言語を初めて学ぶときは、裁量的なツールとしての境界について学びます。バックトラック検索言語を初めて学ぶとき、あなたはIaを祈ることを学ぶでしょう!いや!C'thulhu F'tagn Nagn !、それから私たちは心臓と肝臓を食べることに戻り、人生の輪が満たされました。
ゲームデザインも同じです。特定の言語と並行して特定のゲームを学ぶ必要は必ずしもありませんが、言語特性ファミリーのような、その考え方を処理する象徴的な代表的なゲームを学ぶ必要があります。また、肝臓や心臓を食べることがたくさんあります。ペッパークラッカーを取得します。
ここでのギャグ(少なくとも私が見ているように)は、トピックの大きなリストをカバーしたいということです。それは、キャラクターシートの習熟度を刻むようなものです。特定の状況を処理するためのより多くのメカニズムを利用できるようにしています。はい、それらはレベル調整可能ですが、全体にわたってできる限り多くの点で1つまたは2つあるということは、1つを使用するときが来たら、ゼロから始めず、どの戦術が利用できるかを知っていることを意味しますスケールアップするために。
だから、見て。
まず、歯を切りたいです。これらは、新しいプラットフォームをターゲットにすることを学習しているとき、または健忘症から回復しているときにも役立ちます。これらは高速ではなく、素晴らしいものです。
順番に:
それらを取得したら、プラットフォームをターゲットにする準備が整い、学習を開始できます。
これらは特定の順序ではありません。必要に応じてそれらを再配置できます。それぞれにいくつかの例を示しますが、それらは規範的なものではありません。別のゲームで同じ経験が得られ、一連のレッスンに参加できるほど小さい場合は、気軽に交換してください。実際的な理由から、画面のレンダリングと入力に比較的早く習熟するのは良いことです。あなたはそれらをたくさん使うつもりです。抽象化クラスを作成する前に、いくつかのゲームを待ちます。あなたは素朴な抽象化に捕まりたくありません。
...ええ。私は飽きた。
テトリス
非常に一般的なゲームです。立ち往生した場合、多くのオープンソースクローンがばらばらになります。2Dグラフィックス、入力処理、スコアリングなどの基礎を教えます。
次に、このオリジナルのアイデアを取り入れて、スピンします。大学のコンピューターグラフィックスクラス用にテトリスの3Dバージョンを書くことで、3Dグラフィックス/ openglの基本を学びました。
GameDev.netには、ゲーム開発について段階的に学習するために、ゲームの進行を推奨する優れた記事があります。リストからの私のお気に入りのアドバイスは、これらのゲームを実際に磨くことです。リリース可能な状態に完全に終了します。
リストは次のとおりです(これらの一部は他の回答で提供されています)。
私はすべての人をモノポリーで始めるのが好きです。私は通常、練習の基礎としてBrett SchuchertのMonopoly "code kata"を使用しますが、それに多くを追加します。これが本当に好きな理由はいくつかあります。
優れたコーディングプラクティス(設計パターン、TDD、SOLID、継続的インテグレーションなど)に深く関心があり、この演習を行う際に開発者に多くの制約を課します。
ほぼ全員がモノポリーのルールを知っており、ゲーム全体を1日で完了することができます。これにより、新しい開発者はすぐに勝ち、エンゲージメントが上がります。
最初の要件はキーボードコントロールから始まりますが、後でマウスコントロールの要件を追加します。これにより、開発者はいくつかのこと、既存のコードのリファクタリング方法、具体的なクラスの代わりにインターフェースのシステムの変更部分のプログラミング、より良い/適切な抽象化、単体テストの対象、単体テストの対象外、なぜ単体テストの対象、良い単体テストになります。
より洗練されたAIをプラグインすることもあれば、プラグインしないこともあります。時には、CutesやLaddersなどのやや複雑なロジックを持つ他のボードゲームを使用します。ボードゲームを完全にやめて、ポーカーゲームやブラックジャックをすることもあります。
私にとって本当に重要な部分は、人々がすぐに勝つことであり、優れたプログラミング標準に従うと、ソフトウェアをどれだけ柔軟に作成できるかを理解することです。これらの演習は非常に迅速に自信を構築します。時々、より経験豊富な開発者は、より複雑なプロジェクトから休憩をとったり、学んだばかりの新しいテクニックを練習したりするために、自分でこれらを行うことを好みます(デメテルの法則?)。
冒険を選ぶ
ゲームを作成してプログラミングを始めた友人からこのヒントを得ました。これは、冒険の本を選ぶのとよく似ています。基本的には、次のような出力を備えたシンプルなテキストアドベンチャーゲームです。
You are standing in a forest clearing in the middle of the night. You hear
some wolves howl in the distance. Should you:
a) make camp for the night
b) go further north
> _
そのようなゲームを作成することは、ゲームループ、基本的なコンソール入力、および基本的なスクリプト作成を教える必要があります。ゲームを書くのにグラフィックエンジンは必要ないので、実装するのは非常に簡単で、初心者が簡単に飛び込めます。上級者はおそらくスクリプトエンジンを作成するでしょう。
初心者プログラマーでの私の経験では、進行は通常次のようになります:
他の回答にはいくつかの良い提案がありますが、私は投票に投げ込みたいだけです。まず、扱いにくいと思われるものから始めてください。
卓球は良い例です。
目標は次のとおりです。ゲームデザインとルールセットを非常に頭がおかしくなり、学習している新しいこと(言語、プラットフォーム、API)を常に学習することに集中できます。ゲームの仕組みを理解するために休憩を取る。
あなたが始めたら、ピンポンは実際には最初の赤面よりもわずかに複雑であることがわかります。(私は男のプログラミングを教えており、彼は学習プロジェクトとしてpongを使用しています。いくつかの機能を追加しました。
app#1を他の人に提供/販売する準備ができるまで完了すると、それからもう少し複雑なもの(テトリス、冒険など)を引き受けますが、新しいテクノロジーの学習を始めるには、あなたが簡単に脳死をプログラムすること。
他の例:
しかし、繰り返します-あまりにも簡単なものから始めて、実際に何かを完了し、振り返って何が関係しているのかを確認できるようにします。言語/プラットフォーム/ SDK /エンジンで1つのアプリを記述したことと、ZEROアプリを記述したことの違いは巨大です。1と2、または2と5の違いははるかに小さいので、より大きなステップを取ることができますが、0から1のステップは小さなものにします。あなたが思っているよりも大きくなります!
Flappy Bird
似ています。プロのプログラマーとして、それは午後の仕事(まあ、それを「素敵」にする週末)ですが、別のプログラムを教えている間に、実際には多くの小さな複雑さがあることを学びました。繰り返しになりますが、1つはゼロよりもはるかに多くの経験があり、1つを手に入れると、どのように前進するかについてのより良いアイデアを得ることができます。
このWebサイトをチェックしてください:12コンピューターサイエンスゲームプロジェクトのアイデア
これらのゲームの中には、他の人が言ったことを含むものがあります。
ただし、次のような他のゲームについても説明しています。
また、各ゲームに難易度を感じるため、最初にやるべきことの感覚を与えます(したがって、ゲームに取り組む方法の計画)。
多くの人が次の機能を備えているため、ブレイクアウトから始めます。
ゲーム(またはソフトウェア)の作成で最も難しい部分は、何をすべきかを考え出すことです。 絶対にスペックが必要です! これは、既存のゲームのクローンを作成することの楽しい部分です。仕様はすでに存在します。あなたの仕様は「製品は他の製品が行うすべてのことをしなければならない」であり、他のゲームのコピーを手元に持っている場合、それを確認するのは非常に簡単です。
あなたが何をする必要があるかを理解したら、あなたが有能なプログラマーであれば、それを行う方法を理解することは本当に難しくありません。私は、熟練したまたは経験豊富なプログラマーを意味しません。これは、あなたがしようとしていることの大部分を行う方法を既に知っていることを意味します。ただし、抽象化で考える方法を理解し、プログラミングの基本である問題解決能力と論理的思考力を身に付ける必要があります。それができれば、何でもできます。
そうは言っても、本当に簡単なものを書くことでゲームを書くことを学ぼうとすることについて、ほとんどの人が言うことに同意しません。報酬は、それに費やした努力に直接比例します。本当にシンプルなゲームを書くことでゲームを書くことを学んだ場合、最後にわかるのは本当にシンプルなゲームを書く方法だけです。
一方、あなたが圧倒的な何かで始めるなら、あなたはそれを決して終わらせないでしょう。だから、あなたが深刻な問題に対処できるようにする中程度に挑戦的なものから始めてください。2DコンソールスタイルのRPGまたは横スクロールプラットフォーマーを構築することは、実際のゲームプログラミングの概念を学ぶための非常に良い方法です。
それは本当にあなたの現在の能力に依存します。プログラミングに比較的慣れていない場合は、人々が提案した特定のゲームのいずれかを使用してください。それ以外の場合は、どの種類のゲームで経験を有効に活用できるかを検討する必要があります。
最初のゲームを始めたとき、ゲーム開発の経験はゼロでしたが、数年前からエンタープライズ/基幹業務アプリの開発を行っていました。私の最初のゲームプロジェクトはターンベースの戦略ゲームであり、アーキテクチャ的に言えば、エンタープライズアプリケーションとそれほど違いはありませんでした。クライアント/サーバーシステムを使用し、二重WCFサービスチャネルを介して通信が行われました。ほとんどのプレイヤーの操作は「注文」としてキューに入れられ、ターンの終わりにサーバーにディスパッチされました。ターン処理はすべてサーバーで行われ、その後、ゲームユニバースの更新が各クライアントに送信されました。
その最初のプロジェクトは、ゲーム開発への道を歩みながら、馴染みのある領域で私を始めました。プロジェクトが進化するにつれて、私はゲーム開発者のようになり、エンタープライズアプリの開発者のようにはならないことを学びました。最終結果はかなりうまく機能し、戦艦や三目並べよりも少し印象的でした:)。
比較的単純なAI、グラフィックス、ゲームプレイ、コントロール、およびそれらを追加する場合を除き、効果音や音楽は必要ありません。MS-DOS用のQBasicでのプログラミング方法を学ぶときにこれら2つから始めました。素晴らしい最初のゲームです。パックマンは私のもう1つの選択肢です。
ムーンランダースタイルのゲームは素晴らしいです(重力の影響を受けるロケット船がある場合、プレイヤーは方向と推力を制御し、推力を使用する場合は燃料が制限されます)。非常に単純な物理学を実装する経験を積むと、衝突システムは非常に原始的です。心配するAIはなく、最も重要なのはその楽しさと中毒性です:)
エンティティシステム、敵AI、ピックアップ、タイルマップ、衝突検出、スコアリングなどが必要なため、ガントレットのようなものです。すべて揃っていますが、圧倒的な方法ではありません。
それはあなたが既に持っている通常のプログラマーとしてのスキルに本当に依存します。あなたの数学は仕事が必要ですか?グラフィックの知識はありますか?ラップの下に両方ありますか?
一般的には、テトリスとブレイクアウトも私の2つのスターターになると思います。それより簡単なものは十分な刺激を提供しません。テトリスは、データをアルゴリズムにレイアウトする方法の良いテストであり、ブレイクアウトは軽い数学の例です。私は常に人々に高い目標を向けるように言います。目標は行き詰まり、解決策を考え出すことです。
その後、空は限界です。繰り返しますが、高く目指してください。傾斜地、parralaxを備えたプラットフォーマーを試してみると、2d techの便利なバッグが手に入ります。ピンボールを追加して(イライラする準備をしてください)、数学が改善されます。
そこから3番目の次元に進み、コアスキル(アニメーション、レンダリング)を学びます。さまざまなゲームに対処するための比較的十分な準備が必要です。