忍者ブログ
Admin*Write*Comment
35歳からのC言語ゲームプログラミング
[1]  [2]  [3]  [4
×

[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
矢印キーの入力をチェックして、キャラを上下左右に動かすところまできた。
動いてるのは写真じゃわからんので、ソースだけアップします。

RIMG0685.JPG

















次はキャラクターのアニメーションだ。
テキストの著者が用意した関数ライブラリを導入なきゃなんない。
僕はソースを書くより、この開発環境の設定などをするのが、とても苦手だ。
説明読んでもよう解らんから、取り合えず書いてあるとおりにして、使いながら理解って事で。

アニメーションパターンはどうすっかなぁ?
自作したいけど、今、そこに時間かけるのはやってる事の趣旨がブレるしな・・・。
とりあえず、テキストのサンプル使うかも・・・。
DXライブラリの導入を完了!
とりあえず画面にキャラクターを表示するサンプルソースを書いた。
キャラのデータはテキストのHPからサンプルをダウンロードすりゃ早かったんだけども、せっかくの記念すべき『C言語で初のグラフィック標示』なのでフリーソフトのドット絵エディターをダウンロードして自分で描いてみた。
多少絵心はあるつもりなんだけど、ドット絵は初だったので思うように描けない。
でもさ、他人の絵に”お初”を持って行かれるよりはいいかと・・・。

RIMG0683.JPG












無事に標示されたあ!
感激!!




RIMG0684.JPG











ソースコードはこんな感じっス。
いやはや、簡単。
DXライブラリに最敬礼!


testplayer.png





ドット絵はこんなの。
もっと時間かければ上手く描けるかな?

あ、ちなみにDXライブラリはC言語での2Dゲーム開発を楽ーにしてくれる有難いライブラリのようです。
MSX-BASICやファミリーBASICなみに簡単だといいなあ・・・。

配列変数をグローバルにしない場合。
配列の要素全て(10個)をメモリアドレスで渡して、標示部分を関数にしようと思ったんだけど、関数で渡せる引数には個数制限があるのね・・・。
テキストには何も書いてないから、いけると思ったらバグが・・・orz

めげてもしょうがないので、配列を入れ替える部分を関数化に変更。
隣り合った配列要素二つを関数に渡して、関数内ではポインタを使ってメモリアドレス内のデータを直接入れ替え。

よし、上手くいった。
RIMG0682.JPG

















ポインタの意味もなんとなく理解できたし、「基本の章」はこれで終了!
次はいよいよDXライブラリの導入じゃ!

さあ、ゲームを作ろうか!
関数とグローバル変数の項を読んだので、試しに前の記事の『数字を小さい順に並べ替える』プログラムを書き換えてみた。

まず、配列変数をグローバル変数にして関数内でも使えるようにする。
次に配列の表示部分を丸ごと関数にした。
あとはmain内から必要に応じて表示関数へジャンプ!

返値も引数も必要ない場合の、関数の定義と呼び出し方を調べるのに苦労したけど何とか完成。
RIMG0681.JPG

















配列変数をグローバルにしないで、関数と受け渡しする時はどうすれば良いのか?
ポインタの勉強をして試してみよう。
  • ABOUT
やってやれないことはないっ!たぶん・・・
  • カレンダー
06 2025/07 08
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
年齢:
51
性別:
男性
誕生日:
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]