改めましてお勉強

しめさば
記事: 0
登録日時: 11年前

改めましてお勉強

投稿記事 by しめさば » 11年前

ありがたい事に昨日の日記にコメントを頂き、環境は(参考書籍を除き)揃った!

独り言を添えつつ、お勉強の成果らしきものを日記化しようかなぁと思う次第。
あまり書くと荒らし的になってしまうかもしれないので、この日記のコメントという形で書いていった方がいいのかしら?
3日坊主にならないようにのんびり少しずつやっていこう。

新・ゲームプログラミングの館
http://dixq.net/g/
プロジェクトをDLして、1.1から改めて学習。

CODE:

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        DxLib_Init();   // DXライブラリ初期化処理
        WaitKey();      // キー入力待ち
        DxLib_End();    // DXライブラリ終了処理
        return 0;
}
ふむふむ。
DxLib.hというヘッダーファイルをincludeするのね。
恐らく同一ディレクトリのDxLibフォルダの内容をincludeしてるんだね。
出ましたWINAPI WinMain ん~、積み本のひとつ「14歳からはじめるC言語」で呪文として扱われたアレだな。
それにしてもあの本、14歳でスンナリ行けるんだろうか・・・。
積んだ事によって、余計な劣等感を抱いてしまったんだが・・・。
この際なので検索してみると
http://news.mynavi.jp/articles/2009/05/25/windowsapi/
というページが出てきた。
WINPAPIの意味はわからないが、とにかくWinMainというのは、「Windowsアプリケーションのエントリーポイント」らしい。
と、とにかくint Main(void){}みたいなモノで、Main関数のWindowsのモノなのでWinMainなんだな。きっと。多分・・・。

4行目を検索してみると
http://easyshotemup.web.fc2.com/dxlib/01.html
なるページが。
へぇ~。本当は沢山の数値を初期化をしなければならない所を DxLib_Init();だけで済ましてしまうんだ。
こりゃスゴイ。(中身のコードの意味はサッパリであるが・・・)

5行目が
WaitKey();
これはWaitっていうくらいだから、キー入力を待つためのコマンドなんだろう。
これが無いと、ウィンドウがパッと出て消えるんだろう。きっと・・・。

6行目が
DxLib_End();
DXライブラリ終了処理を行っているんだな。ってコメント文に書いてあるがな!っていうね。
http://dixq.net/forum/viewtopic.php?f=3&t=5291
というコチラのフォーラムが出てきたけど、ワカラナイw
当たり前ながら、プログラム出来る人ってスゴイなぁ。

で最後に0を返すと。

よし、デバッグ無しで開始・・・エラー・・・だと・・・!?

悔しいので、1.2章に進んでみると。
ChangeWindowMode(TRUE); // ウィンドウモードに設定
が追記されていたので、これを追加して実行・・・。ほっ(安堵)
一応リファレンスをぺたりんこ
http://homepage2.nifty.com/natupaji/DxL ... html#R11N1

うむー前途多難だな。こりゃ。
思いの他時間がかかってしまった・・・・。今日はここまで。
最後に編集したユーザー しめさば on 2013年11月23日(土) 00:50 [ 編集 1 回目 ]

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前

Re: 改めましてお勉強1日目

投稿記事 by softya(ソフト屋) » 11年前

「14歳からはじめるC言語わくわく・・」の本も同じDXライブラリを利用してますね。分かりやすいかは読んだことがないのでよく知りません。
それとウィンドウアプリにおけるWinMainはコンソールアプリのmainと同じと覚えておいてよいですよ。

リファレンスです。
「DXライブラリ置き場 リファレンスページ」
http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html

しめさば
記事: 0
登録日時: 11年前

Re: 改めましてお勉強1日目

投稿記事 by しめさば » 11年前

>softya(ソフト屋)様

 コメントありがとうございます。
 なるほど。main関数という理解で良かったんですね。

 今日ダンボールを漁ってみたら「講談社 新これならわかるC++ 小林健一郎著」を発掘致しました。
 いつ読み始めたか分かりませんがしおりが「7章 オブジェクトの動的な生成と破棄」という項目にあったので、そこで詰んだんだろうなぁ。

 これを最初からまた読んでみようかしら。。。
 こちらのフォーラムでモチベ維持させて頂きつつ、のんびりやろうかと思います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前

Re: 改めましてお勉強

投稿記事 by softya(ソフト屋) » 11年前

別の日記にも書いた通り、C++はC言語を拡張した別言語です。
C++は難易度が高いので、C言語の文法で使えるDXライブラリを使う分には勉強の必然はありません。
そこをよく考えてもらった方が良いかと思います。

・C++とC言語は別の言語である。
・C++はC言語をほぼ内包している。

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

Re: 改めましてお勉強

投稿記事 by usao » 11年前

私がVS2012でウィザードに吐かせたWinMainを見たら

CODE:

int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
					   _In_opt_ HINSTANCE hPrevInstance,
					   _In_ LPTSTR    lpCmdLine,
					   _In_ int       nCmdShow)
となっていて,さらに謎な要素が増えている模様.
(何だ _in_ とかって?→宣言を見たらなんかとても複雑そうで調べるのをやめた)


どんなゲームを作られるのかによると思いますが,
私はどちらかというと「Cオンリー縛り」よりは「C++もちょっとだけ」という形のほうが
いろいろと楽じゃないかなと思います.
ただ,だとしても,いきなりC++な本を読むのではなくて
C→C++ という学習の段階は経るべきだと思います.

前の日記で「やさしいC」が薦められていますが,
そんなわけで私は同シリーズの「やさしいC++」を薦めます.
タイトルが「C++」となっていますが,Cの超基礎~C++のさわり程度 という感じの内容です.

しめさば
記事: 0
登録日時: 11年前

Re: 改めましてお勉強

投稿記事 by しめさば » 11年前

>softya(ソフト屋)様

 コメントありがとうございます!
softya(ソフト屋) さんが書きました:C言語の文法で使えるDXライブラリを使う分には勉強の必然はありません。
そこをよく考えてもらった方が良いかと思います。
 なるほど。
 この視点はありませんでした。使用している文法はC言語なんですね。
 となるとやはり、一度読み支えてしまった本は結局また支えてしまう可能性が高そう・・・。


>usao様

 コメントありがとうございます!
 実は作りたいゲームというのが明確にありまして、2年ほど前にニコニコ生放送で「どんなゲームやってみたい?」という雑談放送をしていました。
 私が歴史SLGが好きというのもありますが、その中であった「THE 文官」を作りたいというか遊びたいという熱量が未だ消えなかったため、コチラに流れ着いたのでございます。
 ちなみに、当時放送内で作った雑記がコチラ↓
 http://www4.hp-ez.com/hp/simesaba23/page1
初心者のくせに風呂敷がデカイというパターンのアレではございますが・・・。

 やはりオススメは「やさしい~」シリーズですか。

 本命:やさしいC第4版
 対抗:やさしいC++第4版

といった所で、本屋さんに向かおうと思います。

しめさば
記事: 0
登録日時: 11年前

Re: 改めましてお勉強

投稿記事 by しめさば » 11年前

たった一日でスゴイ閲覧数だ。
モチベ維持のため非常にヨサゲ!(感謝)

さて、続きをやろう。

1.4章

CODE:

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode( TRUE ); // ウィンドウモードに設定
        DxLib_Init();   // DXライブラリ初期化処理

        int Handle;     // データハンドル格納用変数
        Handle = LoadGraph( "画像/キャラクタ00.png" ); // 画像をロード
        DrawGraph( 50, 100, Handle, TRUE ); // データハンドルを使って画像を描画

        WaitKey();     // キー入力があるまで待機
        DxLib_End();   // DXライブラリ終了処理
        return 0;
} 
 新しく出てきた関数は
Handle = LoadGraph( "画像/キャラクタ00.png" ); // 画像をロード

DrawGraph( 50, 100, Handle, TRUE ); // データハンドルを使って画像を描画

それぞれのリファレンスは

http://homepage2.nifty.com/natupaji/DxL ... .html#R3N2

http://homepage2.nifty.com/natupaji/DxL ... .html#R3N7

画像データなのにint値を取るというのに違和感を感じるなぁ。

で「グラフィックのハンドル」って何だろう。
ハンドルとは
http://e-words.jp/w/E3838FE383B3E38389E383AB.html
『ポインタのポインタ(ポインタのアドレスを格納するポインタ)のこと』
なるほど、ポインタのアドレスを保存するからint値なんだね。納得。

デバッグっと・・・よし。表示された!
調べれば色々分かるもんだなぁ。
今日はここまで。
最後に編集したユーザー しめさば on 2013年11月23日(土) 21:12 [ 編集 1 回目 ]

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前

Re: 改めましてお勉強

投稿記事 by softya(ソフト屋) » 11年前

ハンドルは、ポインタと限定されません。何らかのリソースを表す数値です。
引用先にも、そう書いてありますよ。
配列の添字番号のこともありますし、ハッシュ値かも知れません。
使う側は、それが何の数値かは気にしないで使うのが原則です。
これも一種の抽象化です。

※ 現代のOSやプログラミングに置いて抽象化は大事な概念です。

アバター
へにっくす
記事: 634
登録日時: 13年前

Re: 改めましてお勉強

投稿記事 by へにっくす » 11年前

usao さんが書きました:私がVS2012でウィザードに吐かせたWinMainを見たら

CODE:

    int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
                           _In_opt_ HINSTANCE hPrevInstance,
                           _In_ LPTSTR    lpCmdLine,
                           _In_ int       nCmdShow)
となっていて,さらに謎な要素が増えている模様.
(何だ _in_ とかって?→宣言を見たらなんかとても複雑そうで調べるのをやめた)
一応説明しておくと、
_In_ → 入力を示す
_In_opt → 入力だが必須でない
ってだけで、コンパイル時に空白に置き換わるだけです。
APIENTRY
は言わずと知れた「ここから実行するよ」という印です。
WINAPIと同じですね。→参照
で、
_tWinMain、LPTSTR
と"T"が入っているのはTCHAR.Hでググればわかるかも(ぉぃ)

お邪魔しました。
最後に編集したユーザー へにっくす on 2013年11月24日(日) 00:01 [ 編集 1 回目 ]

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

Re: 改めましてお勉強

投稿記事 by usao » 11年前

>コンパイル時に空白に置き換わるだけ
まぁそりゃそうでしょうけど.
なにやらSALなる謎のコメント言語だそうで.コードの自動分析用?

>APIENTRY
>は言わずと知れた「ここから実行するよ」という印です。

単に__stdcall指定なだけだと思っていたのですが.
(何かこの文字列に他の役割がある?)


…っと,人の日記で好き勝手に聞くだけなのもあれなので……
「ハンドル」って,確かに最初はわかんないですよね.和訳しても「取っ手」とか言われるし.
私も昔,Win32の解説とかで「XXXへのハンドルです」とだけ書かれていて,
「ふーんなるほどハンドルか,OK!」とは流せずにもやもやした記憶があります.
最後に編集したユーザー usao on 2013年11月24日(日) 14:04 [ 編集 1 回目 ]

アバター
へにっくす
記事: 634
登録日時: 13年前

Re: 改めましてお勉強

投稿記事 by へにっくす » 11年前

usao さんが書きました:>APIENTRY
>は言わずと知れた「ここから実行するよ」という印です。

単に__stdcall指定なだけだと思っていたのですが.
(何かこの文字列に他の役割がある?)
いやいやその認識であってます(何書いてんだオレ・・・)。
かえって混乱させてすみません。
でも何で定義されてるんだか。と思うよね…WINAPIだけでええやんとか。
追記:ISLeさんのコメントでAPIENTRYが定義されている意味が理解できました。

とゆーことで、Visual Studioのウィザードではきだす_tWinMainは、
実は最初に掲示されたWinMainと同じですよってことで。
(文字コード云々の違いだけ)
しめさばさん、がんばってください。
最後に編集したユーザー へにっくす on 2013年11月24日(日) 20:31 [ 編集 5 回目 ]