見出し画像

ゲームプログラミング・C++をはじめから丁寧に

こんばんは。今日もお疲れ様です。

私はどちゃくそにプログラミング初心者です。
好きな言語はCです。なぜなら

あまりにもオンラインの無料教材が充実していたからです。

C言語を学んでいると、自ずとC++と言う言語に興味が湧いてきます。

聞く限りC++はC言語から派生しており、
同じくコンパイル型言語であり、
C言語より早動きそうであり、
オブジェクト志向である、、

のように、シンプルにかっこよくてC自体に関連する要素が多いのです!

これまでは「競技プログラミングをしている人が好きな難しい言語」
と言うイメージでしたが、私も指くらい突っ込んでも良いでしょう。

これはC++と全くはじめから戦う試みです。
Cの若干の知識はありますが、なくても問題ないように、執筆したいと思います。

どうか見守っていただけると、嬉しいです!

参考文献

こちらを参考に進めさせていただきます!

C++の良いところ

かっこいい
メモリ使用量が少ない
Xcodeが入って入れば(gccが使えれば)すぐ始められる。

C++の良くないところ

標準ライブラリが貧弱(使いたくばpythonを書けばいいかも)
Cを動かすまでの知識が必要かもしれない。

だと思われます。
macを使われている方はまずXcodeをアップルストアよりダウンロードしていただきたいと思います。

gccはwindowsとも相性が良く、Linuxで主に使われるコンパイラです。

いやコンパイラってなんだよ。となっている方は当然の疑問です。
今後少し詳しく書かせていただくかもしれませんが、
「C++と言うプログラミング言語で書いたプログラム」を「パソコンが分かる0と1の集合のデータへ」変換するソフトだと思っていただければ良いかと思います。

CPUは勉強中で特にハード面の知識がかなり少ないので、経験者の方には呆れられてしまう可能性が大ですが、いつかキャッチアップして見せますので、ご容赦いただければと思います。

またコンパイラで今後はClangが来る、などの情報もありますが、もう少し調べさせていただきたいです!

エディタ

プログラミングのための、コードを書くところです。
VScodeで検索し、最新のもの(安定版などがあるかもしれません、、知識不足恐縮です)をダウンロードしてください。

私の理解は以下です。

テキストエディタなど、ただのテキストを記述するアプリでもプログラムを作ることは可能ながら、デフォルトでは白黒でありお世辞にも見やすいものではありません。

そんな中、適切に色をつけ、コードに何が書いてあるかが見やすいように設計されているものがエディタだと考えています。

一般にローカルの(自身のパソコンの中の)ファイルを触ることができ、ファイルの追加や削除、その拡張子の指定などが簡単になるアプリです。

私が当初、別の方から入れてもらった時は、コードを実行するところだと思っていました。

実際に、
何となくpythonを書くと右下のところで実行できる。しかし自分で別の言語でややこしいことをしようとすると動かなかったりする。

なんて使いにくくて、よくわからないソフトだ!と

第一関門を通過できなかった記憶があります。

これはただシンプルにメモを作るためのソフトで、
ただ綺麗に色をつけてくれている。
と、割り切ってしまうことができれば、迷いが少なく進めるのではないでしょうか?

自分で好きなファイル(あいうえおと書いた.txtファイルで構いません)を好きなところに保存してみて、VScodeから閲覧する。

逆にVScodeで適当なメモを作成してみて、パソコンから探して開いてみる(Finderの検索でも良いですが、今後パスなどを意識するために、場所をぽちぽちして検索してみてください)

これができると、もう私と同じ土俵に立っていただいたと、思っていただいて問題ありません!

VScodeに拡張機能を入れよう!

C/C++を扱うには、
Extention(拡張機能)を入れる必要があります。

C/C++
C/C++ Extention Pack
C/C++ Themes

が今見た中では入っておりました。

VScodeの原文のまま、一番上の紹介文章を記載すると、
「The C/C++ extension adds language support for C/C++ to Visual Studio Code, including editing (IntelliSense) and debugging features.」

とのことです。編集およびデバグの機能を搭載していると言うことでしょう。

拡張子

少しウズウズしてきたので、c++の拡張子を記載いたしましょう。
.cpp
.c++
.cxx
.cc
など複数許容されているようです。

.cppが一般的であるようなので、こちらを採用いたしましょう。

いや拡張子ってなんだよ。
と思われる方もいらっしゃると思います。

私の整理のために行数を割かせていただきたいです。

拡張子とは、任意のファイルについているものです。
どのアプリ(ソフト)で、そのファイルを開くべきなのかを指定しています。

もしかしたら、どのようなものとして理解すれば良いのかを指定しているだけで、それぞれの対応アプリは、その理解方法に準拠しているだけなのかもしれません。

任意のデータは、わかりやすいように表示されてはいますが、記憶媒体の上では0と1の羅列です。

「あいうえお」と記述したテキストファイルが「01000100000010111110101011110、、」(適当)なような中身だったとしましょう。
これを画像のデータだとして.jpegとして理解したらどうでしょうか?
全く意味がわからないし、写真の本当に端っこ程度のデータしかない!
となり、データが破損してしまう(開けない)と言う状況になってしまうのではないでしょうか。

「いやそもそも何で拡張子の話を始めたんだよ!」
という方もいらっしゃるでしょう。
それはVScodeでファイルを作成するとき、
(使い方が変である可能性はありますが)@@.cなどとして(ここではC言語のプログラムだとする)、何語で書かれていますよ。という宣言をしてファイルを作成します。

(後から変更もできそうですが、あまりメリットを感じません)
ただ実験の為に、テキストエディットにてそれぞれの言語のプログラムを作り、拡張子を手動で変えて(拡張子まで表示させた上で、名前の変更で可能です。)実行することは良いことだと思います!

Hello, World!と記述させる。

実際にコードを書きましょう!
Cを経験された方もいらっしゃるかもしれませんので、
一旦そのまま記載させていただきます。

#include <iostream>

int main(){
    std::cout <<  "Hello, World!" << std::endl;

    return 0;
}

詳細は少しお待ち下さい。

ここでgccコンパイルをする時にエラーにぶち当たりました。

二日間ほどネットの海を放浪として来た結果、g++コマンドにて、コンパイルができました。

少し自走してしまったので、再び話し出します。

プログラミングとは処理の方法を命令し、
その処理の部分を人間よりも早く単純計算ができる
CPU/GPUにお任せすることをいう、というイメージをします。

あまり一般的ではない可能性がありますが、
上のイメージをする時、

プログラミングに触れる前は、
「命令を書く」→「コンピュータが理解して計算」→「閲覧」
のような流れをイメージしていました。

大まかに間違ってはいないのですが、
これは、
「命令を書く」→「コンピュータが分かれるように翻訳」→「コンピュータが計算」→「閲覧」

の方がより正しいです。

(音声に反応するソフト、ブラウザなどを考えなければ)
パソコンを開けて、「1+1は?」と声をかけても全く返事が来ません。
どうしたら理解してもらえるでしょうか?
モールス信号に直して、裏面を爪で叩いてみましょうか。

それでももちろん伝わりません。

コンピュータの中で、演算を行うところ、
いわゆる脳のような部分であるCPUは、
0,1(オンオフ、電圧のあるなし)しか感知できません。

つまり、私たちの(ギリギリ)わかるようなコードを、
CPUさんにわかるように、翻訳する必要があるのです。

その翻訳を行なってくれるソフトを「コンパイラ」と呼びます。
翻訳後のCPUが理解できる言語を機械語と言います。

アルバイター、バーテンダー、プログラマーのように、何かをする人を意味して、
コンパイルする人(?)なのでコンパイラです。

世の中のプログラミング言語はこの翻訳を行わなければもちろんCPUに理解してもらえないのですが、いつ、この翻訳をするのかでプログラミング言語はジャンル分けされます。

人間語を見て、随時翻訳を行うのが「インタプリタ型言語」
いわゆるPythonなどです。
人間語を翻訳することで、時にそのOS(パソコンをうごかす根幹となるソフト)に応じた機械語へ翻訳するのが、「コンパイル型言語」です。
CやJavaなどが挙げられます。
Javaは実行程度しかしたことがありませんが、少々特殊です。
あまりにも知識不足であるため、説明は後日にさせていただきたいです。

上のコードが書かれたファイルを、
.ccなどの拡張子で、保存します。
ターミナルに、g++ filename.ccを打ち込み、
./a.outにて、実行できます。

g++が動かない場合は、homebrewを入れた記憶がある方は、
brew install gccと打ち込み、gccをインストールします。

brew listと打ち込み、自身がインストールしたパッケージ(ソフト?)
のリストが得られますが、その中にgccが追加されていれば、コンパイラが問題なく入ったということでしょう。

ちょうどWindowsを触る経験があり、C言語を実行できるようにコンパイラを入れようとしたところ、パスが通らず未解決になってる問題もあるので、気軽に書いているようですが、どのくらい難しいかはよくわかっているつもりです。

パスを通す。という単語はよく出てきますが、
以下のように私は理解しています。

パソコンに何らかのソフトAを入れた(ダウンロードした)とします。
パソコンの中のどこかにそのソフトAがあります。
ある日、ターミナル(コマンドプロンプト)という
OSコマンド(パソコンを動かす根幹のアプリOSに出す指示)を書くことができる場所から、Aを使いたいんだーーと指示を出したとします。
しかし、ターミナルはすべてのファイルの場所とその中身を覚えているわけではありません。
「Aがどこにあるかわからないよ。というかあるかどうかも知らない。」
という返事をすることがあります。
これが「パスが通っていない」という状況だと思われます。

homebrewとは、便利なソフトで、
ターミナルにAを入れる機能を付けることで、
ダウンロードするときに、当事者としてターミナルにAの場所を覚えさせることができるソフトとなります。
これにより、macに「パスが通っていない。」という状況が起こりにくくなるのです。

あとがき

ご精読ありがとうございました。
C++の練度が上がり次第、似た記事を出したいと思います。
どうかよろしくお願いします。

ありがとうございます!!!!!!!!!!!!!