LoginSignup
3
4

More than 3 years have passed since last update.

C言語の復習がてら、ゲームに応用してみる Part1

Last updated at Posted at 2019-07-03

前置(見なくても特に支障はない)

初めに

今回の記事はC言語を勉強する上でGUIでの開発をしているが、私自身が初心者であるため、ところどころに抜けがあるかもしれないがどうか許してほしい。そして気づいた場合にはぜひ教えていただきたい。
また、CUIをディスるような発言が多々見られるかもしれないが、決してそんな気はないので寛容に見ていただけるとありがたい。

退屈な黒き画面からの脱出

プログラミングの学習を始める際に、C言語に触れるというケースは多いだろう。
その中で、C言語の勉強のほとんどは「コマンドプロンプト(cmd)」を用いるのだ。

プログラムの中に処理を書いたら、それが黒い画面に表示され、結果を見て、次のステップへ...。
そういう学習を多くのプログラマは経ている。実際私はそうだった。
だが、一つ問いたいのは「こんな勉強方法を面白く感じるか?」ということだ。
(面白く感じるから私の話を聞く必要のない人もいるだろう。そういう人は即座にこのページを閉じ、幸せな人生を歩んで欲しい。)

成果物を作ってこそのプログラマー

私たちはもっとプログラムに対して夢を持っていたはずだ。何でもできる魔法とさえ感じたはずだ。(言い過ぎかもしれない)
何よりおそらく全員がこういった感情を持つだろう。
で?これができたら結果として何になるの?
こういった感情を抱けば、学習することはかなり苦痛となり、学んでもすぐに忘れてしまうことは間違いない。
だからこそ、目に見える形にして、達成感を得て、初めてプログラムを学んだといえるだろう。
そういう視点から見て、今回はしっかり目に見えるものを制作していこう。

概要

今回のシステムの概要をざっくりと言うと、

「C言語を使ってゲームを作りつつ、その仕組みを理解してC言語を学ぼう。」

ということである。

作ったゲーム :アウトベーダー
(インベーダーならぬ)
ざっくりゲームについて説明すると逃げていく敵に対して、弾を打ち、倒すゲームだ。スコアなどは特にない。

 プレイ画面.png

 githubはこちら

今回使用する環境設定等

開発環境+ツール:
Visual Studio
(私が開発したときの最新は2019だった。)

ゲームライブラリ(インストールからゲーム制作の初期設定含め全て):
DXライブラリ

Let's 開発

初期設定

まずは概要に記載したそれぞれからインストール及びダウンロードを行い、開発の環境を整えよう。(Dxライブラリはリンク先のページに設定方法等書いてあるため、自分のインストールしたVisual Studioのバージョンにあった設定を行っていただきたい。)

設定が終わったら、一度作ったファイルを削除した後、「Main」という名前のcppファイルを作り、以下のコードを書いて実行してみてほしい。

main.cpp
#include "DxLib.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    if (DxLib_Init() == -1)
    {
        return -1;
    }

    DxLib_End();

    return 0; 
}

このプログラムを動かしてみた人なら真っ先に私に対して「お前のプログラムバグってんぞ!!!」と文句を言いたくなるだろう。
それもそのはずだ。このプログラムは画面を表示してすぐに消えるように作られているのだから。

 プログラムの仕組みを知っておこう

プログラムの仕組みとしてまず知っておかなければいけないのは「プログラムは上から下に順を追って動く」ということだ。
当たり前のことのように思うかもしれないが、処理の順番はとても大切だ。

そこで先ほどのコードを以下のように書き変えてみてくれ。

main.cpp
#include "DxLib.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    if (DxLib_Init() == -1)
    {
        return -1;
    }

    //Escキーが押されていない間(==0 のとき)、無限ループする。
    while (CheckHitKey(KEY_INPUT_ESCAPE) == 0) {

    }

    DxLib_End();

    return 0; 
}

これで画面が表示され続けるはずだ。

勉強は疲れないか?私は疲れる。

かなり長く書いたため、私が書き疲れたので、続きは次回にしようと思う。
次回から本格的に開発をしてみよう。
Part2はコチラ

3
4
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
3
4