C言語初学からシューティングを作りたいです。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
sukuna

C言語初学からシューティングを作りたいです。

#1

投稿記事 by sukuna » 2年前

端的に申し上げますと、殆ど完全にC言語初心者と言って良い状態から、シューティングゲームの作成を通してプログラミングを学びたいと考えています。そこでどの様に勉強していけば良いかのアドバイスをいただきたいと思い質問させていただいております。

私はC言語は授業で、部分的に記述されていない穴埋めのような状態のプログラムを適切に埋めて提出するといったことを数回行った程度でして、なんとなくの書き方は理解していますが、一から一人でプログラムをかける自信は全くありません。有名なfor構文やwhileループなどは知っていますが、それ以上の発展的な文法は知らない状態です。

最終的には東方やエスプレイドのような弾幕シューティングゲームを作成したいと思っております。また、ただ作るだけでなくそのプログラムを理解して一人でも書けるようになりたいです。そこへ向けての勉強を、可能ならば実際にシューティングを作りながら実践的に身につけられた楽しくて継続しやすいと考えております。そこで、教材としてインターネット上に公開してくださっている「龍神録プログラミングのやかた」(https://dixq.net/rp/)を用いて勉強できないかと思って閲覧していたのですが、見たところ完成までの大枠は管理人の方が書いてくださっているようでした。これを使えばシューティングは完成しますが、自分でかけるようにはならないのではないかと感じました。かといって、C言語を一から細かく学んでいてはいつになったらシューティングの作成にたどり着けるのかが不安になります。私はどのような手段でC言語を学ぶのが私の目的の達成において効率的なのかが分かりません、C言語有識者の方々でアドバイスができる方がいらっしゃいましたら回答していただけると幸いです。長文失礼しました。

アバター
usao
記事: 1889
登録日時: 11年前

Re: C言語初学からシューティングを作りたいです。

#2

投稿記事 by usao » 2年前

効率の良さについては何とも言えないけども,結局のところ【必要なこと「だけ」を1つずつやっていく】ということになるかと.

「C言語」自体の文法はかなり小さいので,「C言語を学ぶ」というよりは,あなたがゲームを作るために使う枠組(:ライブラリ.下記)に振り回されたりとか,そういうあたりに苦労があるのではないかな,と想像します.

---

「C言語」だけだとウィンドウを出したり絵を表示したりという機能が無いので,そういったことをするための手段として何を使うか? を何はともあれ 模索する/決める 必要があるかと.

Windows上なら,一度は Win32API+GDI な枠組みでやってみるのが勉強になるんじゃないかとか個人的には思ったりしますが,「それって無駄な苦労じゃない?」と言われれば否定もできない.(何が「無駄」かはその人の背景事情次第ですし)

GDIはノーサンキューという場合には,DirectXとかOpenGLを使う…ということになるかと思いますが,それらを素で使うのも難易度高いので,そういうのを使う部分をやってくれるようなライブラリ:
・そのリンク先が使っているライブラリ(DXライブラリ)
・良く知りませんが SDL とかいうのもあったような
・etc
を使うのが現実的な選択肢なのかもしれません.
(私はこれらを使った経験が無いので,どれが良いとか悪いとかはわかんない)


で,何から何まで(:全ての実装)が揃わないと動かないものをいきなり作るのではなくて,
(1)で使うことにしたライブラリを使うことに慣れる的な目的も込めて,ものすっごく簡単な物から作ってみる,っていう…

アバター
usao
記事: 1889
登録日時: 11年前

Re: C言語初学からシューティングを作りたいです。

#3

投稿記事 by usao » 2年前

> 有名なfor構文やwhileループなどは知っていますが、それ以上の発展的な文法は知らない状態です。

C言語自体について言えば,ループが書ける段階から先に何かあるか?っていうともうほとんど無いような…?
C言語の文法的要素って

・型,変数(スコープ,生存期間,宣言と定義とか)
・配列
・関数
・if, swich とかの分岐
・for, while とかのループ ← いまこのあたり
・ポインタ
・構造体
・共用体 ← 個人的に,コレは本当に必要になるまでは知らなくてもOKじゃないか?とか思う.

みたいな.
(順序に多少に前後はあるかもだけど,大抵,それ系の本の目次とかもこんな感じじゃない?)

このくらいの内容が抑えられていれば大丈夫なんじゃないかな.
(逆に言えば,このくらいは押さえてから→物を作ることに進む方が混乱が少なくて良いんじゃないかな感)

アバター
usao
記事: 1889
登録日時: 11年前

Re: C言語初学からシューティングを作りたいです。

#4

投稿記事 by usao » 2年前

オフトピック
あと,ちょうど直近で こんな質問 があったけど,
ちょっとした 算数/数学 が(プログラミング以前の前提知識として)必要だと思う.

sukuna

Re: C言語初学からシューティングを作りたいです。

#5

投稿記事 by sukuna » 2年前

usao 様

回答ありがとうございます。大変参考になりました。

C言語自体の文法が小さいというのは想定していませんでした。しかしながら列挙してくださった内容のうち後半は知らなかったのでそこを学んでからゲーム作成に入ってみようと思います。

また、初めから難易度の高いことに取り組むのは抵抗がありますのでGDIを用いて、簡単なものから作ってみようと思います。

算数・数学は一通り履修しておりますのでその点は問題ないと思っています。

ご丁寧な回答ありがとうございました。

アバター
usao
記事: 1889
登録日時: 11年前

Re: C言語初学からシューティングを作りたいです。

#6

投稿記事 by usao » 2年前

> 一度は Win32API+GDI な枠組みでやってみるのが勉強になるんじゃないか

という雰囲気でGDIを挙げているので,「GDIでガチる」んじゃなくて,勉強目的で触れてみるのだ,というスタンスで軽い気持ちで(?)やってみるのが良いと思う.

例えば,STGなら操作する機体とか敵とかを「画像ファイルを読み込んでそれを表示するぜ!」とかしているとそれだけで割と辛いハズなので,「とりあえず四角とか丸で表せばOK」くらいでやるといい.
そういう表示部分はゲームの内容の実装とは本質的には無関係だし,表示に凝りたくなったらそれこそ別のライブラリを使う方がよい.

---

っていうことをとりあえずやってみるなら,以下のような感じになるのかな?

(1)VisualStudio(無いならタダの物をインストールするところからやる)で C++のWin32デスクトップアプリケーションのプロジェクトを作る → ひな形コードが生成される → ビルドして実行するとウィンドウが表示される.OK,出発点ができた.
雛形コードの量を見て「たったこれだけのことに,こんだけのコードが要るとかw」とか思ってみる.

(2)「メッセージドリブン」だとか「ウィンドウメッセージ」,「ウィンドウプロシージャ」みたいな話を Win32API に絡めて説明しているような解説を小一時間~ 読んで,どういう順序でプログラムが動くのかっていうのを学ぶ.
(Win32API を C言語で使うぜ!的な話を説明しているサイトとかはすぐ見つかると思うから,何個かを参考にするとよいかと.)

(3) ウィンドウプロシージャの WM_PAINT メッセージ時の処理にGDIの描画コードをてきとーに書いてみる.それこそ四角とか丸とか.「デバイスコンテキスト」だとか SelectObject() とかいう話が出てきて「?」になるだろうけどそれなりに頑張る.

(4) (3)で描画した四角とかをキーか何かで動かせるようにするとかそういうのを目指す.
「変数はとりあえず外部変数丸出しでいいや」と割り切っても,はじめてだとそれなりに大変なハズ.

(5) ゲーム用途だと GetMessage() だとつらいのでメインループを PeekMessage() を使うループにに書きかえようぜ的な話をやる.

(6) 「シングルバッファだからちらつく」だとか「ティアリングがどうの」とかが気になるかもしれないがとりあえずそれはそれとして何かゲームっぽいルールが最低限ある形にしてみる.(4)の時点で「入力に応じて表示が動く」という最低限のことは達成できているから,「後は何をどれだけ作ってみるか?」っていう話になる.


以上が一週間で終わるか1か月かかるかはわからんけども,「とりあえずギリギリ動いている何か」みたいなのができる感.
で,それ以降は,
そこまでの間に遭遇してきた山盛りの面倒事を全て裏でやってくれる(かもしれない)ライブラリを使う方向に行くとか,
せっかくだからもうちょっとこのままやってみるぜ!と,「DDBとDIBとDIBセクションでメモリデバイスコンテキストがどうの」みたいな話に突撃してBITMAP画像表示してみたりとか.

別のライブラリを使う方向に行くにしても,その前に


(7) (1)でできたひな形コード部分と,自身で書き加えたコード部分とを別のソースファイルに分ける的なことをやってみると良いかもしれない.「分割コンパイル」というやつ.「インクルードガードがどうのこうの…そもそもヘッダファイルとは何か?」とかそういう話も.


みたいなのをやっておくとよいかと思う.

アバター
usao
記事: 1889
登録日時: 11年前

Re: C言語初学からシューティングを作りたいです。

#7

投稿記事 by usao » 2年前

オフトピック
「結局何かしらのライブラリを使うっていうなら,最初からそれで始めればいいだろ」という意見も十分あり得ると思う.
そっち方向の話は他の誰かに期待!

sukuna

Re: C言語初学からシューティングを作りたいです。

#8

投稿記事 by sukuna » 2年前

usao様、

具体的な指針まで提示していただきありがとうございます。本当に何から手をつけて良いか分からない状態だったのでとても助かりました。

返信

“C言語何でも質問掲示板” へ戻る