ゲーム開発の基本は何ですか?[閉まっている]


12

ビデオゲームのコーディング方法を完全に理解していません。

私は初心者プログラマーであり、数学とその他のことを行うコンソールアプリケーションの作成経験しかありません。私はこれらの論理プロセスがどのように画像を画面上で動かすことができるか理解していません(ビデオゲーム)。明らかに、ゲーム開発の本やそれに似たものに飛び込んだとしても理解できますが、現在でもプログラミングの基本を理解しています。コンピューターで簡単な計算を行ってから、コンピューターでビデオゲームなどのすばらしいグラフィカルプログラムを作成できるようになるまでの間に、誰でも簡単な説明やコーディングを行うことができますか?誰かが私を指すことができる入門ビデオがありますか?

回答:


14

あなたがプログラミングの絶対的な初心者であり、あなたが知っているかもしれないことを私の例の基礎とするために、利用可能なオプションの中からユーザーに選択させたいメニューを持つコンソールアプリケーションを書くために、最初に何をしますか?

メニューを作成することを考えた場合、あなたはポイントを得ましたが、ユーザーが利用可能なオプションの一部ではないキーを押した後、

  1. アプリケーションが終了するか、または
  2. ユーザーが「終了」キーを押すまで続行しますか?

私の賭けは#2で、アプリケーションは、ユーザーが明示的にキーを押してコンソールアプリケーションを終了するまで続行します。

ゲームはなんとなく似ています!ゲームをいつ終了しますか?ユーザーが選択した場合、そうですか?したがって、アクションまたはゲームメニューは、ユーザーが終了するまで継続する必要があります。次に、この終了キーが押されるまで続行するようにプログラムに指示するループを作成する必要があります。

ゲームループについてご紹介しました。ゲームは、ユーザーが明示的に終了するまで実行される別のプログラムです。

ゲームループでは、ゲームをプレイしているとき、動きは特定の座標で画面に描かれた画像です。ユーザー/プレーヤーがなどの方向キーを押すと、[Left]X座標を減少させながら画像の座標を更新し、左方向への動きの印象を与えます。プレイヤーが次に自分のキャラクター/船にしたいアクションを取得するために、これらの入力を取得する必要がありました。その後、ゲームループは、プレーヤーから別の目的のアクションを取得できるまで、ゲームが終了するまでループし続けます。

まあ、この答えはかなり長くなり始めているのではないかと思うので、あなたに興味があるかもしれない他の2つの質問を指摘させてください。

  1. ゲーム、チュートリアルなどの書き始め方
  2. クラスを使用してXNAでスプライトを移動する

この3番目のリンクは、ゲームの作成を開始する方法ではなく、画面上でスプライトを移動させる方法に関するものです。グラフィックを画面上で移動させる方法についても質問されたので、これは興味があると思いました。

これがお役に立てば幸いです!=)


4

コンソールアプリケーションを作成しているときに、ほとんどの場合、print()またはread()またはwrite()と呼ばれる関数を使用します。これらの代わりに、グラフィカルゲームは、set_pixel()と同じくらい低いレベルのその他の関数を使用して、画面上の個々のピクセルの色を、多くの効果を持つ3次元モデルを描画できるフレームワーク全体に設定します。

しかし、主な考え方は、単純な数学コンソールアプリケーションの場合と同じです。ユーザーから入力を取得し、それに応じていくつかの変数を変更し、出力を印刷(または描画)します。ゲームやその他の対話型プログラムは、これらの入力、計算、出力サイクルの30、60以上を毎秒実行します。もちろん、すべての部分は必要に応じて複雑にすることができますが、通常はすべて入力-計算-出力になります。心配しないでください、あなたは正しい道を進んでいます。

推奨事項については、できる限りプログラミングを続けてください。ゲームプログラミングに集中することに興味があり、コンソールプログラミングしか知らない場合は、小さなテキストベースのアドベンチャーまたはRPGを作成してみてください。そうすれば、変数の管理方法、乱数の使用方法、コードの整理方法について多くのことを練習できます。

その経験を積んだら、グラフィックスライブラリの基本を学びましょう。手続き型プログラミングを行う場合はOpenGLをお勧めしますが、オブジェクト指向プログラミングを行う場合はXNAをお勧めします。

ただし、一度に多くのものを取りすぎないでください。ソースツリーを管理する方法を学習している間、配列を反復処理する方法を学習している間、入力とサウンドを取得する方法を学習している間、複雑なツールを学ぶことに失望するのは非常に簡単ですゲームを設計しています。

長い道のりがありますが、楽しみは実際にそれを歩いていることを覚えておいてください。

良い仕事を続けてください!


4

コンピューターゲームは、次の無限ループです。

  • 更新:ゲームの状態を1つの小さなタイムスライス(1/80秒など)進めます。
  • 現在のゲームの状態をペイントします。

これらのバリエーションがあります。ゲームによっては、各ペイントの間に更新が追加されたり、異なるマシンでゲームの流れが等しくスムーズになるように変更したりできます。しかし、それは技術的な詳細です。

1秒間に50〜100回発生する更新フェーズ(そうなることが多い)は、次のことを行います。

  • ゲームの物理を更新します。俳優に速度があるとしましょう。この更新により、彼が正しい方向に少し移動するはずです。また、物理エンジンを使用する場合、他のアクトまたは障害物との衝突をチェックする必要があります。
  • ゲームのルールを更新します。これが物理実験ではなくゲームになります。弾丸がプレーヤーの俳優に当たったとしましょう。ゲームのルールでは、プレイヤーにXポイントのヘルスを差し引き、弾丸を消すように指示しています。
  • AIの更新。時々、コンピューター制御のアクターが何をすべきかを決定する必要があります。左か右に行きますか?素敵な場所への道を見つけましょう。武器を発射します。
  • 入力制御。キーボードで押されたボタンに応じて、プレーヤーアクターを更新します。
  • シーングラフを更新します。これは、アニメーションを1ステップ進めたり、GUIを更新して、プレーヤーのヘルスが10ポイント減少したことを示すことができます。唯一の目的は、ゲームの外観と雰囲気を良くすることです。

どこから始めますか?

グラフィカルゲームの基本的な要件は、グラフィックをプログラムすることです。必ずウィンドウを開いて、その中にボールを描いてください。

何らかのクラスを作成できると思います。Ballクラスを作成します。次のメンバーがあります:x、y、deltaX、deltaY。すべて整数で、ピクセル単位です。次に、このループを記述します。

forever, do this {
  start measure time (in milliseconds)
  //physics part
  add deltaX to x
  add deltaY to y
  if x is bigger than the screen width, assign -deltaX to deltaX
  if y is bigger than the screen height, assign -deltaY to deltaY
  if x is less than 0, assign -deltaX to deltaX
  if y is less than 0, assign -deltaY to deltaY

  //paint
  paint the ball at x, y
  stop measuring time, assign this to workTime
  make the thread sleep for (25 - workTime) milliseconds
}

これにより、ボールがウィンドウの境界で跳ね返ります。まだゲームではなく、物理的なシミュレーションです。ボールクラス内でボールの物理更新を記述する場合、いくつかのボールを簡単に追加できます。それらをリストに保存し、フレームごとに更新してペイントします。

パドル(物理学をシミュレートし、マウスまたはキーボードで制御可能にする)と、ボールが左壁に到達するのを止めるなどのゲームの目的を追加できます。時間の経過とともにゲームがますます多くのボールを追加する場合、難易度は増加します。ゲームがあります。

なぜ(25-workTime)ミリ秒スリープするのですか?このようにすると、シミュレーションは毎秒40回の更新とペイントの一定のペースで実行されます。かなりスムーズになります。スリープ部分をスキップすると、アニメーションはぎくしゃくして100%CPUを占有します。また、ボールの速度は、ボールを実行するマシンの速度に依存します。現在、ボールの垂直速度は40 * deltaYピクセル/秒です。


2

数学を実行するコンソールプログラムを使用し、正しい答えを入力すると、紙吹雪が飛び散ります。ゲームになりました(私のほかに、Math Blasterを子供のようにプレイする人はいませんか?:))。

ゲーム環境を作成するためのコンピューターの作成方法については、頭を包むのは少し大変ですが、それは人間が周囲の世界を理解しているということになります。ゲームは、同じ数学、物理学、および科学を使用して自分自身を定義し、周囲の世界に適用してその仕組みを説明します。

Simゲームは、リアルからバーチャルの良い例です。ずいぶん前に、私はSimゲームの背後にいる男とのインタビューを読みました。例外を除いて、ほとんどすべては、私たちの周りの世界を説明しようとするトピックについて読んでから生まれ、数学の数式を利用して仮想環境に入れましたそれを表すために。たとえば、SimCityは、経済の基本をシミュレートしようとすることから生まれました。

3Dゲーム環境の作成方法の詳細については、物理学を追加し、オーディオを追加し、ユーザーが操作を開始できるようにします。それが、このサイトや他の多くの目的です。より具体的な答えにまとめる。

結局のところ、私はビデオゲームを非常に高速な限定データセットデータベースとして説明しています。リレーショナルデータと高速データアクセスに重点を置いています。つまり、フレームを60秒ごとにレンダリングする場合、プレーヤーがゲーム内にいる場所の関係に基づいて、潜在的に大量のデータを非常に高速に処理します。ゲームが追跡する他のすべてのデータへ:)


Lol、「非常に高速なデータセットデータベースとしてのビデオゲーム」は、おそらく混乱を助長しているだけです。
michael.bartnett

1

理解する必要があるのは行列です。彼らはゲームを支えています。行列の力を理解すると、ゲームがどのように単純な数学に還元されるかがわかります。

ゲーム空間で頂点位置を取ります。マトリックスを使用してスクリーンに投影します(スクリーン座標を見つけます)。それと、隣接する頂点との間にいくつかのピクセルを補間し、完了です。それは明らかに非常に大きな単純化ですが、ラスタライズの基本は、行列をひとたび理解すればまったく複雑ではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.