構造体の構造体変数に、つきまして

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

構造体の構造体変数に、つきまして

#1

投稿記事 by ムンバ » 17年前

こんばんは。
先日は、ご解説頂きありがとう御座いました。
またまたお世話になります。すみません。

只今、「ゲームプログラミングの館」の「18. 構造体でキャラクタデータを作る」で
勉強させて頂いてます。
(どうもありがとう御座います。楽しみながら勉強させて頂いてます。w)

構造体について自分なりに調べてみたのですが

#include "DxLib.h"

typedef struct{
int x,y,img;
}ch_t;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){

int image[16];
char Key[256];
ch_t ch;

if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理

ch.x =320;
ch.y =240;

(以下、略です。<(_ _)>)

ch_t ch; 

の行なのですが、どうしても解りません。
こんな質問で恥ずかしいです。(涙

約2週間前に良かれと思って、ネットでC言語の本を2冊(+漫画1冊^^;)を注文したのですが
今日、その内の一冊が「品切れのため、お取り扱いできません。」ってメールが来て・・・
未だに、他の本も届いてません。

そこで相変わらず、勉強不足&自分勝手な質問で申し訳ないのですが

int image[16] ← imageと言う配列に16個の整数が入る。
char Key[256] ← keyと言う配列に256個の文字列が入る。
と今の所、解釈したのですが。
(怖いので、この解釈のコメント・レスなどは、ご勘弁下さい。^^;)

ch_t ch;

↑この行は、何を意味するものなのでしょうか?
ちなみに、この行以降の ch を ch_t に置き換えてみたりして試してみたのですが、実行出来ませんでした。

ヒントでも頂ければと思いまして、質問させて頂きました。
お時間のある方、宜しければ、ご解説お願い致します。
宜しくお願い致します。<(_ _)>

kazuoni

Re:構造体の構造体変数に、つきまして

#2

投稿記事 by kazuoni » 17年前

構造体に限らず、以下のサイトは簡潔にまとめられているのでお勧めです。
(管理人さんに教えてもらったんですが^^;)
http://www9.plala.or.jp/sgwr-t/c/sec15.html
http://always-pg.com/c/runtime_rd/

ch_tはint,char同様の型名です。
intが整数型、charが文字型同様にchの型はch_t(集大成型)なんです。
具体的には
int x
int y
int img
のメンバを持っています。

構造体のオブジェクトのメンバは例えば
ch.img(int型)
のようにあらわすことができます。

>ch_t ch
はオブジェクトの定義をしているだけです。
int a;
これもオブジェクトの定義です。

ムンバ

Re:構造体の構造体変数に、つきまして

#3

投稿記事 by ムンバ » 17年前

おはようございます。
kazuoniさん、早速のご丁寧なご解説どうもありがとうございます!

超初心者なもので、この行で行き詰っていました。
(ご解説、メモらせて頂きました。)
そうでしたか。intとcharと同じ感じの働きをしてるんですね。
勉強になります。(_ _)

ご紹介頂いたサイト、ぜひ参考にさせて頂きます。(お気に入りに登録です。)

できるだけ自力で。って意気込みはあるのです。^^;
本当に助かりました。
また何かあれば質問させて頂きますので、宜しくお願い致します。
ありがとうございました。

管理人

Re:構造体の構造体変数に、つきまして

#4

投稿記事 by 管理人 » 17年前

>(怖いので、この解釈のコメント・レスなどは、ご勘弁下さい。^^;)

せっかくだから、きっちり覚えてみませんか?
間違った事指摘されることを恐れるより、最初のうちは間違いをドンドン指摘してもらって参考にした方が
ずっとのびると思いますよb

ゲームプログラミングの館は簡単なプログラムコードで紹介しているといっても、
最低限のCの知識があることを前提にしています。
そこで、C言語系の入門サイトを参考にしてみてはいかがでしょう。
http://www.google.co.jp/search?hl=ja&q= ... =&aq=f&oq=
最近は本を読まなくてもウェブ上でかなり勉強できます。

さて

>int image[16] ← imageと言う配列に16個の整数が入る。
>char Key[256] ← keyと言う配列に256個の文字列が入る。

についてですが、
image[16]には、16種類の画像ハンドルを入れるためのものです。
キャラクタ画像は16枚がセットになっていますよね。
画像を読み込んだとき、読み込み関数はその画像を扱う事の出来る識別番号を返してくれるので
それを格納しています。
また、Key[256]には文字列が入るわけではありません。
その変数がなんの関数で使われているか確認し、その関数が何なのかわからなければ
リファレンスを見てみて下さい。
KeyはGetHitKeyStateAllで使っているわけですが、キーボードの入力状態を示します。
0なら入力されていない、1なら入力されているということです。
Keyにはキーボード一つ一つの入力状態が入るわけですが、
どの要素にどのキーが対応しているかは
http://homepage2.nifty.com/natupaji/DxL ... .html#R5N2
こちらをご覧下さい。これらを格納するために256個char型の変数を配列で用意しているのです。

ムンバ

Re:構造体の構造体変数に、つきまして

#5

投稿記事 by ムンバ » 17年前

こんばんは。
すみません。解決ボタン押してしまって・・・このカキコも迷ったのですが。^^;
管理人さん、またまたお心遣い・ご解説ありがとうございます。
この書き込み、かなり長文になるかと思われますので、どうかご勘弁下さい。

こちらの掲示板の表題が「C言語何でも質問掲示板」になっていましたし
恐る恐る覗いてみると(もちろん管理人さんも含め)皆さんとってもご丁寧に解説されていて
しかも、すごく雰囲気が良い感じを受けました。
お世辞とかではなく、「ゲームプログラミングの館」も入りやすかったです。導かれる様に入りました。
そこで最初の質問をさせて頂いた訳ですが、ご迷惑をお掛けしてると思うくらい皆さん、ご丁寧なご解説で。(謝
正直に申しまして、プログラムとソースとコードの違いすら良く解りませんでしたので。^^;
あっ!?この様に甘やかされると調子に乗って、日記みたいな事をカキコしてしまうのが私の悪い癖なのです。
このまま、このカキコをここで終了して「投稿」ボタンを押すと、このスレッドが一番上になってしまうのが最も怖いです。(自爆

ご自分で努力されて勉強された方々が質問してる中で、私の様な質問をするのは~・・・?
でも、どうしても解らないので~・・・?
などと、質問させて頂くのに考えてしまう訳です。
自分なりに調べてはいるんです。本当に脳みそが硬いんです。^^
勉強不足なのも解っているのですが、「ゲームプログラミングの館」で楽しみながら勉強させて頂きたいっ!
という意気込みは今も変わりませんし、自分の作りたいと思ってるゲームも絶対に諦めるつもりもありません!
(自分を理解してもらいたいとか主張したいとかでは、ありません。)
  ↑この行、かなり言い訳がましい性格なんだと理解して頂ければ幸いです。w

そこで、さらに甘えさせて(言い訳させて)頂きます!ありがとうございます。

今、CとC++言語を参考させて頂いているサイトは、こちらのサイトと
kazuoniさんから、ご紹介頂いたサイトも含めまして9箇所あります。食い過ぎかもしれませんね。^^;
さりげなく見たページでも、少しでも頭に焼きつけられればと思って、今日も観覧してます。
本はネットができない職場で時間がある時とか、自宅のトイレとか(_ _)で、読みたいと思ってます。
やっぱり前置き長くなっちゃいました。

>せっかくだから、きっちり覚えてみませんか?
 がんばりますっ!ありがとうございます。

遠慮無く、いかせて頂きます。本当にありがとう御座います。(感謝
では早速です。<(_ _)>

int image[16]

 int image; だった場合。

 imageという名前を付けた入れ物(変数)に入る値は、整数(int)だけが入ります。
 ここでは準備をしてるだけでimageという変数には、まだ何も値が入ってません。
 image変数に16と言う値(整数)を入れたい時は image = 16; とすれば
 image変数に16と言う値(整数)が入ります。

 int image[16] の場合。
 
 imageという名前を付けた入れ物(配列)に、配列に入れたい値の準備をします。
 imageと名付けた配列に、入れたい配列の数は16個です。
 その値は全部、整数が入ります。
 まだimageと言う配列には、何も値が入ってません。
 char.pngに16個の画像が入ってるので、このうちの12番目の画像を呼び出したい場合は

 LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , image );

 char.pngファイルには、16個の画像があり、縦横(x,y)4個×4個の画像で
 各画像は縦横(x,y)32×32ピクセルで
 これを16個の値が入る様に設定したimage配列に代入します。
 そうすると

 img=image[12];

 imgには、char.png画像ファイルの13番目(配列12番目)の画像が入ります。

と解釈してまして、自分に対して解説してみました。(^^;; ヒヤアセ
ここまでは、如何でしょうか?

本当に変な意味とかは無いんですよっ!楽しく勉強したいんです。
宜しくお願い致します。すみません。(謝

kazuoni

Re:構造体の構造体変数に、つきまして

#6

投稿記事 by kazuoni » 17年前

>char.pngに16個の画像が入ってるので、このうちの12番目の画像を呼び出したい場合は 
>LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , image );
char.pngは一つの画像です。
LoadDivGraph()は本家を見てもらうと一発なのですが(↓)
http://homepage2.nifty.com/natupaji/DxL ... .html#R3N3

char.pngを16個に分割する。
横向き、縦向きにそれぞれ4個ずつ。
その一つ一つの大きさは縦、横ともに32
一個ずつimage[10]に代入している。(実際はポインタという考えが必要なのですが、ここではわかりやすくするために代入しているとします。)

こんな感じの事をやっています。

ムンバ

Re:構造体の構造体変数に、つきまして

#7

投稿記事 by ムンバ » 17年前

char.pngに16個の画像が入ってるので・・・

char.pngという、一つの画像ファイルに、16個の画像が区分されて入ってる
に訂正させて頂きます。w

ムンバ

Re:構造体の構造体変数に、つきまして

#8

投稿記事 by ムンバ » 17年前

kazuoniさん、お世話になります。

>一個ずつimage[10]に代入している。

 ポインタが、配列の値を一つ一つ探して、配列の値の10番目を見つけたら
 img=image[10];
 で、imgに画像の11番目が入ると言う事でしょうか?

うまく言えなくて申し訳御座いません。
お手数お掛けしますが再度、宜しくお願い致します。<(_ _)>

御津凪

Re:構造体の構造体変数に、つきまして

#9

投稿記事 by 御津凪 » 17年前

横入り失礼します。

> 一個ずつimage[10]に代入している。

10 ではなく 16 のような気が。(16個のint型配列という意味で)

> img=image[10];
> で、imgに画像の11番目が入ると言う事でしょうか?

そのとおりです。
画像の一番目を入れたいときは[/url]の中に0を入れればOKですし、
(仮に)100番目の画像を入れたいときは
img=image[99];
とすればOKです。

あと、

> 自分に対して解説してみました。(^^;; ヒヤアセ

解説は(訂正を含めて)ばっちりだとおもいますよ。

> 本当に変な意味とかは無いんですよっ!楽しく勉強したいんです。

楽しければなおプログラミングが好きになると思いますよ。
印象に残るものでなければ、記憶に刻まれませんしね。

kazuoni

Re:構造体の構造体変数に、つきまして

#10

投稿記事 by kazuoni » 17年前

すいません^^;10→16でした^^;

失礼しました。

ムンバ

Re:構造体の構造体変数に、つきまして

#11

投稿記事 by ムンバ » 17年前

こんばんは。

管理人さん、この場を設けて頂きどうもありがとう御座いました。
kazuoniさん、何度もお付き合い頂きましてありがとう御座いました。
御津風さん、先日ともに、ご丁寧なご解説頂きましてありがとう御座いました。
 本当に楽しくなってきちゃってます!ありがとう御座います。^^

このページごと保存させて頂きました。
初心者を脱出する時まで?のお守りにさせて頂きます。<(_ _)>

そこで、もう1度だけ、このスレッド上に行きます。申し訳御座いません。(謝
管理人さんからの宿題に答えられそうです。w
もちろん、kazuoniさんと御津風さんから頂いた、ご解説もきっちり頭に叩き込みました。

(例えば、変数名の頭に数字が使えないとか、記号が使えないなどの詳細は省略します。)
・変数とは、メモリを利用して値を記憶する仕組みです。
・変数は、自分の好きな名前を付けられます。(1部、駄目なの有り。)
・これは、箱の様なもので変数には値を入れられます。
・そこで変数を使うには、(C言語では)代入して実行する所より前に
 変数の名前(変数名)を考えておいて、この考えた変数名の型を指定しておかなければなりません。

ご迷惑をお掛けしました。
また何かあれば質問させて頂きますので、今後とも宜しくお願い致します。
管理人さん!今回は、これで勘弁して下さい~っ!ε=ε=┏( ~_~)┛
(PS:どうもありがとう御座いました。<(_ _)>)

閉鎖

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