LoginSignup
2
1

More than 3 years have passed since last update.

ゲームプログラミングC++を1から

Posted at

はじめに

私は情報理工系の大学院一年生です。
研究も細々としていましたが、自分をブラッシュアップするためのことを全くしておらず、
ひどく後悔しました。そんな自分でも何かできるようになろうと、強化月間のようなものを設けてみようと思い立ち、情報発信の練習もかねて投稿させていただきます。
稚拙な書き手ではございますが、何か得ることがある記事にしていきたいと思います。

なぜゲームプログラミング?

Unityなどで、簡単なゲームを作ったことはあるのですが、ゲームエンジンの中身がよくわからず、自由に作れている感覚が得られなかったからです。C++をもちいて少しでも低めのレイヤーで自分でコードを打ちながら作っていこうと考えたからです。

環境とgit

OS Windows 10 Home(64bit)
processor Intel Core i7-9750H CPU @ 2.60GHz
RAM 16.0 GB
IDE Visual Studio 2019

gitはこちら

ゲームプログラミングC++ : amazon

Chapter1

今回作ったゲーム

簡単なピンポンゲームです。
青背景に左端に白色のパドル、真ん中に白いボールがあり、パドルでボールをはじくというものです。パドルは上下に動き、WとSキーで操作を行います。

ゲームループ

  1. 概要
    ゲームはフレームごとのループの処理が行われている。そこには、大きく分けて次の3つの処理段階が存在している。
  2. 入力処理
    入力となるものは、キーボード、マイク、マウスなど多岐にわたります。それらを受け取る機能がSDLにあるので、それを受け取ることでパドルの動作方向、ゲームの停止を決めています。
  3. ゲーム更新
    ループの速度はプロセッサによってきまってしまうので、更新はデルタタイムを用いて行う。 要は、実時間の1秒当たり何ピクセル動くのかを記述することでプロセッサによらない画面上のオブジェクトの速度を表すということ。ここでパドルの次の位置、ボールの次の位置と、衝突判定を行う。
  4. 出力処理
    画像に描画する部分。イメージとしては、Rendererは1つのpixelであり、画面サイズ分の配列を持ったバッファの一部をその色で塗ることを繰り返して、最終的に出力を行うというもの。

躓いたところ

VisualStudioに慣れていないので、この周りについて躓いた部分も書いていこうと思います。

外部ライブラリの入れ方

プロジェクトのプロパティから

  1. C/C++の全般:追加のインクルードディレクトリ
  2. リンカの全般:追加のライブラリディレクトリ
  3. リンカの入力:追加の依存ファイル

を著者のプロジェクトの設定の通りにすることで、ヘッダファイルなどが探せるようになります。
その他プロパティについて詳しく知りたい方は、こちらのDocumentにあるかと思います。

SDL_mainの外部参照エラー

今回ゲームを表示するために使っているのはSDLライブラリです。
コンパイル中にLNK2019のエラーが出ました。

LNK2019error
LNK2019 未解決の外部シンボル "public: __thiscall Game::Game(void)" (??0Game@@QAE@XZ) が関数 _SDL_main で参照されました 

これはGameのコンストラクタが宣言されているだけで定義されていないのが問題でした。Game.cppに定義することで解決しました。

ビルドできるのに.dllが見つからない

実行時にSDL2.dllが見つからないと出てきますが、
これは、ソリューションがあるフォルダ下のDebugフォルダの中にSDL2.dllを入れてあげると問題なく動作するようになりました。
これは、ビルドしたゲームがdllを探すのがdebug直下だからだという理由らしいです。

おわりに

読んでいただきありがとうございました。
できるだけ続けられるように簡単に記事にしました。
わかりやすくまとめられているようには感じないので、もっと精進したいと思います。
本を読んだ感じとしては、アイデアを文中で与えて、gitで完成コードの感覚をつかみながら自分で書いていくので、わかりやすかったです。
自身のgit内のソースコードに関しては、本の中の課題や、やってみて自分で感じたことをもとに改変している場合があるのでご注意ください。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1