- ベストアンサー
ゲームプログラミング初心者のための実践的なC言語入門書を探す方法
- ゲームやツールを作るためにC言語を勉強したいプログラミング初心者のために、実践的なC言語入門書を探す方法について解説します。
- C言語の入門書はたくさんありますが、どれが実践に適しているのか分かりにくいですよね。本屋での探し方や選び方のポイントを紹介します。
- 知識が最小限でも、簡単なプログラムを自力で作れるようになるためには、実践的な本が必要です。ぜひおすすめの本を見つけてみてください。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
>どの言語から学び始めるといいでしょうか? 平たく言うと「プログラミング教育用に設計された」言語で始めるのが一番でしょう。 一昔前ですと、BASICから始める、と言うケースが多かったでしょうが、今の時代では合わないと思います。例えば、いずれC言語なんかを学ぶにしても「あまりにも形式が違う」んですね。BASIC自体は元々Fortranと言う「世界初の高級言語」を模して作られたモノですし、そもそもFortran自体が一部を除きあまりメジャーじゃない言語になっています。よって、この時代に古典的に「BASICから学ぶ」と言うのは利口な選択肢とも思えません。 今だと、恐らくBASIC代わりに使える教育用言語だと、Pythonが一番適しているでしょう。 Pythonの利点は以下の通りです。 1.インタプリタなんでコンパイルの必要が無い。 C言語の学習の障害の一つ目は「軽く試す」には複雑な機構を提供している辺りです。「ソースを書く」→「コンパイルする」→「テストする」のサイクルが必要で、「思いついたまま書いてみて結果をすぐ確認する」と言う「学習」には向いていません。これはJavaなんかにも言えます。基本的には初めてのプログラミングの学習にはインタプリタの方が向いています。 確かに実行速度で考えるとコンパイラの方が優秀なんですが、一方、現代のパソコンのスペックではインタプリタでも「イライラする」程速度の低下は見られません。 2.オブジェクト指向言語である。 僕自身はそんなにオブジェクト指向、って好きじゃないんですが(笑)、一方、ある意味「オブジェクト指向」は現代使われている殆どの言語で採用されています。その辺の概念を学ぶにも適しているでしょう。 3.動的型付け言語である。 プログラム初心者にとって頭が痛い問題の一つに「変数の型の宣言」と言うものがあります。プログラムを実際書く前に「どんな変数が必要になるのか?」予測しなければなりません。例えば変数xが整数なのか、小数なのか、とかですね。 平たく言うと、これがhttp://oshiete1.goo.ne.jp/qa3824753.htmlで質問者が混乱してた理由の一つなんですが、本質的には「変数の型の宣言」ってのは「プログラムを動かすロジック」とは何の関係もないのです(どっちかと言うと機械側の都合です)。 C言語やJavaなんかは「変数の型の宣言」と言うモノを厳密に行わなければならない「静的型付け言語」に分類される言語なんですが、一方、LispやPythonなんかはそう言う煩わしさがない「動的型付け言語」と言われる類の言語です。プログラミング言語の方が「勝手に」変数の種類を判断してくれる、と考えてあながち間違いないです。 従って、余計な「作法」は避けておいてアルゴリズムの記述に集中出きるでしょう。これも初心者向けの理由です。 4.文法的にはC/C++から借りてきてるモノが多い。 これはPythonだけの特徴ではありませんが、いずれにせよ、この後C言語を勉強するようになっても、すんなりと移動出来るでしょう。 5.キレイなソースを書こう、と言う習慣が身につく。 これはPythonの最大の特徴で、インデント(字下げの事)が文法の一部として組み込まれている、と言う特徴があります。 例えば前述のCommon Lispのコードを見てほしいんですが、仮にこれを「たった一行で書こう」としても実は動くんです。ただし人間側には読みづらい。 殆どのプログラミング言語の要求とは限らないんですが、プログラムの構造を記述する際、「改行」と「字下げ」ってのは「他人が読みやすいソースを書く」には殆ど必須のマナーなんです。一方、Pythonはその「マナー」が文法として定められているので、自然と「読みやすいソースを書くにはどうするか?」と言う習慣が身につきます。まあ、一種「ソースコードの書道」と言うか(笑)。ですから、「最初にやる言語」としてはいい言語なんです。 6.色々な斬新なアイディアが含まれている。 PythonはC等の「手続き型」と言われる言語の影響や、オブジェクト指向型言語の影響を受けています。が、同時に、今流行りつつある「関数型言語」からもアイディアを借りてきています。仮にC++等の本格的なオブジェクト指向言語へと向かわなくてもLisp、Haskell、Erlang等の「関数型言語」への橋渡しもすんなり提供してくれるでしょう。 7.無料である。 Pythonはタダで手に入ります。 とまあ、そんなワケで、Pythonを一通り学んだ後でC言語を学んでも遅くないでしょう。むしろ、「将来的にCを学ぶ」目標でもPythonを最初に学んだ方が有用だと思います。 また、 http://oshiete1.goo.ne.jp/qa3826636.html でも書きましたが、ゲーム開発用ツールなんかも揃ってるのがPythonの利便性ですね。 Pygame: http://www.pygame.org/news.html この辺は http://oshiete1.goo.ne.jp/qa3826636.html を参照して下さい。 Pythonは次のサイトからダウンロード可能です。 Python Japan User's Group: http://www.python.jp/Zope/ また、同サイト内でオンラインチュートリアルなんかも用意されているんで、すぐに「自分で試してみる」事が可能です。 インスタントハッキング: http://www.python.jp/Zope/intro/instant_hacking_jp インスタントパイソン: http://www.python.jp/Zope/intro/instant_python_jp 上記2つの文書に従って「すぐにでも」Pythonを動かしてみる事が可能です。
その他の回答 (7)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★回答者No.3です。 >何かの言語の文法を覚えることが必須なのですか。 ↑ 必須です。 分かりやすく例えると外国人がまだ日本語を覚えていません。 でも日本語で『小説』を書きたいんです。 だから教えて下さい。と尋ねられました。 ・このとき最低限として日本語だけは覚えるのが必須だよとしかアドバイスが 出来ないんですよ。分かりますよね。この例えならば。 それでプログラミングをするならC言語以外でもそうですが必ず『書き方』があります。 これを覚えるのが必須事項です。当然文法をしっかりと覚える必要があります。 >ゲームだけでなく、簡単なツールも色々と作りたいのですが、 >書いて頂いた参考URLやそこの書籍でカバーできますでしょうか? ↑ 紹介した『DXライブラリ』はC言語の基本知識だけで簡単にゲームが作れるタイプの ライブラリです。簡単なツールとはどのようなものでしょうか? CUIレベルのユーティリティならばC言語の基本的なもので作成できます。 でもウインドウが出るタイプの GUI は軽く2、3年はかかると思います。 理由は GUI は Windows OS の仕組みをおよそ知らないと作れませんので。 つまりC言語の知識外の OS の API の知識が必須になります。 ・もし手軽にフリーソフトなどを作成したいならば HSP もお勧めです。 説明書を読んだ限りでは簡単にウインドウが出せたり、音楽・動画ファイルを 再生できるようです。ゲームも作れるようですがお勧めできません。 理由は単純変数と配列しか使えず、構造体などを使って分かりやすくデータなどを 管理できそうにないからです。なのでお勧めは回答No.3で紹介したC言語の基本を学び DXライブラリで作り上げる方法が良い。でもC言語を習得しただけではゲームは作成不可能。 ・プログラミングに興味があるのならば最初に学ぶべき言語としては『C言語』をお勧めします。 ゲームやちょっとしたツールを作りたいだけなら HSP もお勧めとなります。 今後の目的は何でしょうか? 参考文献: http://www.plustarnet.com/aspil/Programming/ http://l.huu.cc/g/ http://rina.jpn.ph/~rance/directx7/directx7study/index.html http://www.c3.club.kyutech.ac.jp/gamewiki/
お礼
繰り返しお返事を頂き本当にありがとうございます。 言語を習得しただけですと、作成できない場合がたくさんあって、 その他の知識も必要なのですね。 よく分かりました。 自分は、加速器というツール(アプリケーションの速度を自由に変更できます。) を知り、それに感化され、自分もそのような便利なものを作ってみたいと思うようになりました。 (それが"簡単なツール"に該当しなかったら申し訳ないです。) 本来の質問の主旨と全く違って申し訳ないのですが、 色々考えていく内に、ゲームやツールを作るという目的よりも 将来の選択肢を増やすためにプログラミングを勉強しようと思い至りました。 ですので、それに一番合っている言語を教えていただけたらうれしいです。 やはりC言語でしょうか? 何度もお手数を頂き申し訳ありません。 再度、ご教授頂けたら幸いです。
- cametan_42
- ベストアンサー率62% (162/261)
ええと、もう一つ例を挙げましょう。 別スレの話ですが、 C言語。どうしてコンパイルできません^^; http://oshiete1.goo.ne.jp/qa3824753.html と言うのがありました。 別に内容がどうの、って話じゃあ無いんですが、「この程度のプログラムを書く」のにも、ある種初心者にとってはC言語は適さない、と言う好例だと思います。 回答例ANo.7なんかもの凄くキレイだと思います。が、他言語ユーザーから言うと「これでも充分複雑だ」と言う感想がどうしても出てきてしまう(笑)。 ちなみに、Common Lispなんかで題意を書くと、見た目もっとシンプルで終わっちゃうと思います(人によって感想は違いますが)。 ;; Common Lispでの回答例 (defun main () ;C言語に合わせてmain関数として定義 (labels ((iter (n ls) ;局所関数iterを定義 (if (zerop n) (format t "平均値:~A~%最大値:~A~%最小値:~A~%" (/ (apply '+ ls) (length ls)) ;平均値の計算 (apply 'max ls) ;最大値の計算 (apply 'min ls)) ;最小値の計算 (iter (1- n) (cons (read) ls))))) ;iterを再帰呼び出し (format t "5つの実数の平均、最大値、最小値を求めます~%") (iter 5 nil))) ;局所関数iterを初期値設定して呼び出し ;; ここまで 例示されているC言語のソースですと、変数名がやたら多いですし、もう書くの想像しただけで嫌気がさしてきます(笑)。一方、Common Lisp版だったら変数はカウンターのnと入力(read)された数値を突っ込むリストls(C言語で言う配列)だけなんで、ロジックもよりシンプルだと思います。 いや、僕はCommon Lisp好きなんですが、ゲームを書くのには向かないと思いますし、全然推薦する気なんてありません(むしろやらん方がイイでしょう・笑)。 が、要するに言いたいのは、「簡単なプログラムを書く」にせよ、C言語の方が大変だ、と言う実例を挙げたかっただけ、なのです。 >とにかく簡単なプログラムを自力で色々と作れるようになりたいです。 と言うにはC言語はメンド臭すぎ、って事なんですよ。 まあ、C言語で言う「行数」とCommon Lispで書いた「行数」と言うのは同一視出来ませんが(Common Lispには基本的に処理を分ける"行"と言う考え方が無い)、それでも、ある程度の「C言語で書くプログラムの行数の多さ」ってのは比較してみて擬似的に計れると思います。 「ゲームを作る」「簡単なプログラムを自力で作れる」目的にはそれに見合った「適切な言語」が他にある、と言う事です。 言い換えれば、Cの本懐は「簡単なプログラムを複雑に書かざるを得ない」と言う事なんです。もっと言うと、「想像するに複雑なシステムプログラミングを(比較的)簡単に書ける」のはCの事実なんですが、その辺、目的とする「複雑さ」とCを使うと「どのくらいその複雑さを単純化出来るか?」と言うトレードオフの関係が明快じゃないと、あまり有用な選択肢ではないのです。 つまり、「目的が簡単」だったらCはあまりにも「複雑な手段を」提供しがち、って事になります。ある意味非常に中庸なポジションをCは占めてる、って事なのです。
お礼
C言語がとても手間がかかる言語だということが本当によく分かりました。 C言語のメリットとデメリットもよく分かりました。 言語って適材適所なのですね。 思い返せば、知人にした、どんな風にC言語を学べば良いか?という質問に対する助言、 それらしい本を片っ端から読んでいけ!を聞き流して、 もっと「楽」を探していました。 C言語だけでなくプログラミングを少し甘く見ていたのかもしれません。 少し考えてみて、今すぐゲームやツールを作ろうとする考えは、 捨てることにしました。 ですが、プログラミングを勉強したいと思う気持ちはありますし、 これから自分自身、高校、大学、社会人と進んでいく上で、 将来の選択肢を増やすために、少しづつプログラム関係の勉強をして行こうと決めました。 ですので、一番最初の質問の主旨と全く異なって申し訳ないのですが、 どの言語から学び始めるといいでしょうか? 何度もお手数を頂き申し訳ありません。 再度、ご教授頂けたら幸いです。
- cametan_42
- ベストアンサー率62% (162/261)
>その道に詳しい知人に聞いた その人が「どんな本がいい」と言うかちょっと興味がありますね。 >C言語は、いろいろ出来るから長い目で見ればとても便利だよ 一理あるんでしょうが……。 どうも誤解もあるようですね。どうしてそこまでC言語が評価が高いのか……(もちろんいい言語ですが)。 一応注釈しておきますが、C言語と言うのは元々「OSを開発する為に」開発された言語です。システムプログラミングがCの本懐なんです。 ですから、「色々出来る」のはその通りですが、逆に言うと「色々出来る」と言うのはCの場合では「メンド臭い」ってのと同義なのです。「知識などは最小限で良いです」と言う人には向きません。繰り返しますがCは「簡単に書ける」言語ではないのです。 C言語でどれか一冊?となるとC言語の開発者が書いた次の本しか選べないでしょう。 プログラミング言語C http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9EC-ANSI%E8%A6%8F%E6%A0%BC%E6%BA%96%E6%8B%A0-B-W-%E3%82%AB%E3%83%BC%E3%83%8B%E3%83%8F%E3%83%B3/dp/4320026926/ref=sr_1_2?ie=UTF8&s=books&qid=1204528154&sr=1-2 ただし、上の本を読んだから即ゲームがプログラム出来るかどうか、ってのは保証しません。他の方もおっしゃっているように「最小限の知識=Cの文法を完全に覚える」と言う事ですから、上の本が適切だろう、と言う事です。ゲームを作るなら上の本+αの知識が必要になるでしょうね。 >選んだ理由は明瞭簡潔なのです 「友人が薦めたから」と言うのは、貴方にとっては「明瞭簡潔」でしょうが、文脈上「明瞭簡潔」ではないです。ここには「言語の特性は最低限理解している」と言う理由がありません。「友人が薦めた」と言うのは「C言語の性質」と何も関係がありません。つまり、理由になっていないのです。 ピンと来ないかもしれないんで、良くある「Hello World」プログラム(端末上で「Hello World」と表示するだけのプログラム)の例で見てみます。 /* C言語の一番単純な例 */ #include <stdio.h> main() { printf("Hello World\n"); } /* ここまで */ Common Lispなんかじゃこうです。 ;; LispでのHello World (format t "Hello World~%") ;; ここまで Pythonだとこうです。 # PythonでのHello World print "Hello World\n" #ここまで この3つは「やってる事が全く同じ」なんですが、Cの場合「書かなきゃならない」量が大体3倍になっています。つまり、あくまで概算ですけど、「他の言語じゃ1行で済む」仕事でもCだったら「その3倍は書かなきゃならない」と言う事です。 これは何でか、と言うと「C言語は元々システムプログラミング向け」と言う性質に由来してるんです。「きめ細かいプログラミングが可能」な故に「きめ細かく書かなきゃならない」。つまり、他の言語じゃ「隠されていて余計な操作をプログラマが意識しなくて良い」ケースでもCの場合は「明示的に事細かく指定していかなければならない」って事です。特に上の例ではメモリ弄りは当然出てきませんが、もっと進むと「ハードウェアにより近いレベルで」直接メモリを弄らないとならないケースが出てきます。他の「もっと進んだ言語」ではガベージコレクション(ゴミ集め)等を実装していて、使われなくなったメモリを自動開放してくれても、Cはそう言う「親切さ」はありません。 貴方が言う「最低限の知識で~」書いたCのゲームプログラムはメモリを鬼のように使いまくって結局止まってしまう、と言う事にもなりかねないのです。Cで求める「最低限の知識」は貴方が考えてる「最低限の知識」より遥に高度でしょう。
- tetsumyi
- ベストアンサー率25% (1946/7534)
>簡単なゲームやツールなどの実行ファイル(exeファイル?)を色々と作ってみたい と言うことであればHSPかActiveBasicが良いのではないでしょうか? WindowsプログラミングはWindowsの基本を理解するために多くの勉強と時間を必要とします。 Windows操作を自動で実装してくれる上のような言語を利用した方がはるかに簡単です。
お礼
お返事ありがとうございます。 比較的簡単な言語を勉強した方がいいですかね。。 HSPの方は少し聞いたことがあり、書籍が少なく、 学習方法が難しいと小耳に挟んだことがあるのですが、 どんなもんなのでしょうか?
- Oh-Orange
- ベストアンサー率63% (854/1345)
★紹介 ・次のページで紹介されている本とライブラリを使えば1年ぐらいで きっとゲームが出来るでしょう。 http://homepage2.nifty.com/natupaji/DxLib/→『DXライブラリ置き場』 でもゲームのアルゴリズム(考え方)を学ばないと数年はかかります。 >知識などは最小限で良いです。 ↑ これね。 C言語などの文法を全て覚えるが最小限になります。 この最初の段階(ポインタなど)で挫折する人が多いようです。 あなたはゲーム作りを軽く考え過ぎているように思います。 『ツクール・シリーズ』ならプログラミングの知識なしで いろいろとカスタマイズして作れますよ。これもお勧め。 http://tkool.jp/→『ツクールweb』 ・いろいろと参考にして下さい。
お礼
お返事ありがとうございます。 何かの言語の文法を覚えることが必須なのですか。 参考URLを教えていただきありがとうございます。 ゲームだけでなく、簡単なツールも色々と作りたいのですが、 書いて頂いた参考URLやそこの書籍でカバーできますでしょうか? (ツクールの方は自分も少し存じておりますが、少し難しそうですね。)
私個人の意見ですが、プログラマーにならない、もしくは、ドライバーとか、めちゃめちゃシステムに食い込んでいるソフトを作らないのなら、CやJAVAは習得しなくてもいいと思っています。 個人的な偏見も混じっています。 C、JAVA : なんでも出来るけど、時間がかかる。 Visual Basic、Delphi : ある程度のソフトが手早くできる。 PHP,Perl : HPに特化した言語。 その他。 だと思っています。 あとは本は、まぁ、相性です。 私もJAVAの時に、薦められた本を読みましたが、分からず、本屋を歩き回って、自分向けの本を探しました。 とくに、CとかJAVAは、本によって、目標みたいなものがちがいますからねー。
お礼
お返事ありがとうございます。 言語のご説明感謝です。 参考にしたいと思います。 本についてですが、やっぱり目標みたいなのは違うのですね。。 自分に合う合わない、はだいたい分かるのですが、 この本をこなせば具体的にどんなレベル(どんなものを作れるか)に達する!というのがいまいち分からないんです・・・
- cametan_42
- ベストアンサー率62% (162/261)
>全くの素人なので、本の題名や中身をパラパラと見ただけでは、 どれが一番実践に適しているのか全く分かりませんでした。 全くの素人なのは全然かまわないんですけど、個人的な意見では「最初の言語としてC言語」を選ぶ理由が分かりません。むしろ、 >知識などは最小限で良いです。とにかく簡単なプログラムを自力で色々と作れるようになりたいです。 と言うのならC言語は向きません。C言語はそんな「簡単な」言語ではないからです。(C言語で「なければならない」理由を考え付きますか?もし、その理由が明解なら、逆に言うと「どれが一番実践に適している本なのか」すぐ分かるでしょう。) 言語の選択から考え直した方が良いでしょう。
お礼
お返事ありがとうございます。 C言語を選んだ理由は、「ゲームやツールを色々作ってみたいのだけれど、言語は何から始めたらいいか」 とその道に詳しい知人に聞いたところ、「C言語は、いろいろ出来るから長い目で見ればとても便利だよ」 と助言をもらったので、C言語を勉強しようと思い至りました。 ですので、選んだ理由は明瞭簡潔なのですが、 良さそうな本が分からない状況です。
お礼
参考にしていただきます! ご回答本当にありがとうございました!!