忍者ブログ
Admin*Write*Comment
35歳からのC言語ゲームプログラミング
[21]  [20]  [19]  [18]  [17]  [16]  [15]  [14]  [13]  [12]  [11
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

僕が使っているテキストでは、DXライブラリを導入した後、この本の著者が作った関数ライブラリをプロジェクトに追加する形を取っている。
このテキストで作るようなアクションゲームを作る際に便利な関数を集めた.cppファイルと、それらの関数や使用する構造体とグローバル関数を定義するヘッダファイルだ。

テキストでは、とにかくそれらのファイルをHPからダウンロードしてプロジェクトに追加しろと指示される。
それに加えて、(おそらく)状況によって必要な定義を行うための.hを支持にそって作らなければならない。

ちょっと、まってよ。
いままで.cppファイルは1つでやってきたじゃん!
2つあってもいいの?
そういう場合はどんな流れでプログラムは実行されるの?
なんで、ヘッダファイルは2つに分けてあるの?

その辺の説明は一切無しである。

まあ、それでも言われたとおりにやっときゃ、後で詳しい意味がわかってくるっていう流れかも知れないし、取り合えず最初のサンプルを打ち込んだ。
キャラクタの画像データをファイルから読み込むプログラムだ。

打ち終わって実行すると、エラー・・・。
打ち込んだソースをよーく見直すも、タイプミスや、打ち忘れはない。
エラーコードを読むと、おそらくMyMainと言う関数が定義されずに使おうとされているか、呼び出されているのに答える側がいないかっぽい感じがした。(よくわからんので、ホント感覚w)

これ、テキスト側のミスじゃね?
僕の中に猜疑心がうまれた・・・。

ダウンロードして追加させられたよくわからん.cppファイルとヘッダファイルのコードを開いて上から順に睨み続ける。
不明な部分もいっぱいあるんだけど、今までの勉強から何処が関数定義で、何処が関数の呼び出しで、何処がループになっていて・・・くらいは読めた。
んで、関数のいっぱい詰まったソースの中にMyMain関数を呼び出してるっぽい部分を発見。
しかし、そのコードの中にMyMain関数はない。
ってことはMyMain関数は僕の書いたほうのソースに無くちゃいけないんじゃないか?

いっきにプログラムの流れが見えた気がした。
解説があるわけじゃないから、上記の内容からの推測だけど、たぶんあってるとおもう。

ダウンロードしたヘッダファイル=今後テキストでずーっと使う関数や変数の定義。初期設定①
        ↓
本を見て自分で書いたヘッダファイル=流動的に変る関数や変数の定義。初期設定②
        ↓
ダウンロードしたcppファイル=今後のプログラムのメイン部分以外のループや関数。外堀
        ↓
今後本を見て書いてゆくcppファイル=今後のプログラムのメイン部分。本丸

たぶん、こういうことだ。
ダウンしたcppファイルには操作や表示といった具体的な部分の抜けたメインループが入っている。
そのかわりに、そこからMyMainと言う関数が呼び出されているのだ。
つまり、僕はこれから書いてゆくソースでMyMain関数の中身を作ってゆくという事だろう。
その関数の中にキャラクターを表示したり、動かしたりする命令をガリガリと書いてゆくのだ。

と言う事は、だ。
僕がこれから書くソースにはやる事があろうと無かろうと、MyMain関数を呼び出したソースに返して(応えて)あげなきゃいけないってことだ。

で、最初に書いたキャラクターのデータを読み込むソースを見てみる。
そこにはMyMain関数らしきものは無い。
テキストのサンプルソースを確かめてもやはり無い。
やられた。このやろー!
間違えてんのはお前じゃないか!

ソースにテキストには無い
void MyMain ( ) { }
を付け加えた。
何もやる事が無いので、そのまま返すだけの関数だ。

実行してみる。
データを読み込んだだけで、表示上は何もしていないプログラムなので真っ黒なウィンドウが開いた。
あっさり、成功だ。

まあ、おかげでそれぞれのファイルの意味と、プログラムの流れを掴めたから今回は多めに見てやろう(笑)。
なんか、これを自力で気付かせるために、わざとミスを仕込んだんじゃないだろな?ってくらい、ためになった。

RIMG0687.JPG











これがダウンしたソースの一部。
メインループってコメントの下のコード。
4列目にMyMain関数を呼び出す部分がある。



RIMG0688.JPG






んで、これが今回書いたコード。
本のサンプルには中断くらいにある
void MyMain( ) {
}
が抜けていた。
つまり、呼び出された関数が返されていなかったのだ。



PR
この記事にコメントする
お名前
タイトル
メール
URL
コメント
文字色
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
secret
  • わざとなのかそれとも
中の人 URL 2009/06/22(Mon)05:14:23 編集
欠落、もとい記述ミス的なモノって、プログラミングとか技術系の解説書に多い、というか1つもそういうミスがない!という書籍と未だ巡り合ったことはないのですが。

解説しているコードの量とかからしてしまうと、どうしても書き間違いや書き忘れが発生してしまうのは編集ミスなのか作者のミスなのか…。

でもある意味そういう欠落した事態(悪く言えば出版社側の過失)になっても、それを自分の糧にできるかできないかってのは人によるのではないですかね?

わからない壁にぶち当たった場合に、それをなんとかして乗り越えるかあきらめるか。それがプログラマと一般人を分ける指標…なの…かな?

(´Д`;)ノ 自分も同じことにならないようC言語の本買う時はなるべく深く読んでからにします・・・。いつになるかわからないですがorz
  • Re:わざとなのかそれとも
Call my name 2009/06/22 14:17
いやあ、アルゴリズムなんかで悩むのは楽しめるんですが、本の誤植などが原因で躓くと結構イラっときます。
でも本が間違えている可能性を見つけてしまったら、似たような文献を探してみるとか、ネット上の情報を調べるしかないわけで。
その過程で、便利なサイトを見つけたり、有用な本を見つけたりと、思わぬ副産物を得る場合がありますよね。
その調べるって事に関しては今の時代はもう、相当に便利です。
タイムスリップして子供の頃の自分に現在のネット社会について教えてあげても、絵空事としか思わないでしょう。
この記事へのトラックバック
この記事にトラックバックする:
  • ABOUT
やってやれないことはないっ!たぶん・・・
  • カレンダー
04 2025/05 06
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
  • 最新コメント
[11/09 CALL MY NAME]
[11/09 erin]
[08/18 うずランド]
[07/11 うずランド]
[06/23 うずランド]
  • プロフィール
HN:
Call my name
年齢:
50
性別:
男性
誕生日:
1974/05/22
職業:
スロ屋店員
趣味:
いろいろ
自己紹介:
やる気だけはあるつもりです。
はい。
  • バーコード
  • ブログ内検索
  • カウンター
  • アクセス解析
Copyright © 35歳からのC言語ゲームプログラミング All Rights Reserved.*Powered by NinjaBlog
Graphics By R-C free web graphics*material by 工房たま素材館*Template by Kaie
忍者ブログ [PR]