館7章において
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館7章において
質問が曖昧なので曖昧な返答になりますが、
> 「 ch.cnt++;」の「cnt」の意味と
cntはcountの略です。
>「ch.img=(ch.cnt%24)/6;」の「img」の意味が分かりません。
imgはimageの略です。
>また、「(ch.cnt%24)/6;」の意味も教えていただきたいですm(_ _)m24
24で割った余りを更に6で割るって事です。
> 「 ch.cnt++;」の「cnt」の意味と
cntはcountの略です。
>「ch.img=(ch.cnt%24)/6;」の「img」の意味が分かりません。
imgはimageの略です。
>また、「(ch.cnt%24)/6;」の意味も教えていただきたいですm(_ _)m24
24で割った余りを更に6で割るって事です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 館7章において
ch.img=(ch.cnt%24)/6というのは
>カウンタをふやして行き、24周期で1周します。その中で4種類の画像をループさせます。
と書かれています。以下のとおりに計算されていきます。
0 frames:0.000000...0
1 frames:0.166667...0
2 frames:0.333333...0
3 frames:0.500000...0
4 frames:0.666667...0
5 frames:0.833333...0
6 frames:1.000000...1
7 frames:1.166667...1
8 frames:1.333333...1
9 frames:1.500000...1
10 frames:1.666667...1
11 frames:1.833333...1
12 frames:2.000000...2
13 frames:2.166667...2
14 frames:2.333333...2
15 frames:2.500000...2
16 frames:2.666667...2
17 frames:2.833333...2
18 frames:3.000000...3
19 frames:3.166667...3
20 frames:3.333333...3
21 frames:3.500000...3
22 frames:3.666667...3
23 frames:3.833333...3
24 frames:0.000000...0
25 frames:0.166667...0
26 frames:0.333333...0
27 frames:0.500000...0
28 frames:0.666667...0
29 frames:0.833333...0
30 frames:1.000000...1
31 frames:1.166667...1
32 frames:1.333333...1
33 frames:1.500000...1
34 frames:1.666667...1
35 frames:1.833333...1
36 frames:2.000000...2
37 frames:2.166667...2
38 frames:2.333333...2
39 frames:2.500000...2
40 frames:2.666667...2
41 frames:2.833333...2
42 frames:3.000000...3
43 frames:3.166667...3
44 frames:3.333333...3
45 frames:3.500000...3
46 frames:3.666667...3
47 frames:3.833333...3
と計算されていきます。つまり (/6)というのは「6フレームごと」という意味です。
と書かれています。以下のとおりに計算されていきます。
0 frames:0.000000...0
1 frames:0.166667...0
2 frames:0.333333...0
3 frames:0.500000...0
4 frames:0.666667...0
5 frames:0.833333...0
6 frames:1.000000...1
7 frames:1.166667...1
8 frames:1.333333...1
9 frames:1.500000...1
10 frames:1.666667...1
11 frames:1.833333...1
12 frames:2.000000...2
13 frames:2.166667...2
14 frames:2.333333...2
15 frames:2.500000...2
16 frames:2.666667...2
17 frames:2.833333...2
18 frames:3.000000...3
19 frames:3.166667...3
20 frames:3.333333...3
21 frames:3.500000...3
22 frames:3.666667...3
23 frames:3.833333...3
24 frames:0.000000...0
25 frames:0.166667...0
26 frames:0.333333...0
27 frames:0.500000...0
28 frames:0.666667...0
29 frames:0.833333...0
30 frames:1.000000...1
31 frames:1.166667...1
32 frames:1.333333...1
33 frames:1.500000...1
34 frames:1.666667...1
35 frames:1.833333...1
36 frames:2.000000...2
37 frames:2.166667...2
38 frames:2.333333...2
39 frames:2.500000...2
40 frames:2.666667...2
41 frames:2.833333...2
42 frames:3.000000...3
43 frames:3.166667...3
44 frames:3.333333...3
45 frames:3.500000...3
46 frames:3.666667...3
47 frames:3.833333...3
と計算されていきます。つまり (/6)というのは「6フレームごと」という意味です。
Re: 館7章において
返信ありがとうございます。
3つ目は理解することができました!
すいません1,2つ目は質問が悪かったです。まとめて改めますと、
「calk_ch」で宣言しているのはわかるのですが「ch.cnt++」でなぜカウントを1ずつ加算していくのかがわかりません。
「++」で1ずつ加算されるのはわかるのですが・・・。また、「ch.」の存在も半ばあやふやです。それと同時に「ch.〇〇」という形でなぜキャラに関することが行われるのでしょうか??
文章が汚いですがお願いしますm(_ _)m
3つ目は理解することができました!
すいません1,2つ目は質問が悪かったです。まとめて改めますと、
「calk_ch」で宣言しているのはわかるのですが「ch.cnt++」でなぜカウントを1ずつ加算していくのかがわかりません。
「++」で1ずつ加算されるのはわかるのですが・・・。また、「ch.」の存在も半ばあやふやです。それと同時に「ch.〇〇」という形でなぜキャラに関することが行われるのでしょうか??
文章が汚いですがお願いしますm(_ _)m
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館7章において
構造体はどの程度理解されていますか?
ch.cntの理解には構造体の知識が必要不可欠です。
構造体の宣言、構造体の変数の定義、構造体メンバの変数の参照などなどの知識です。
あと「calk_ch→calc_ch」で構造体の宣言はされてませんし、構造体変数の定義もされていません。
なので他にも誤解があると思われます。
ちなみにcalcはカリキュレート(calculate=計算)の略ですので意味を理解して読みとくと理解力も違ってきますよ。
ch.cntの理解には構造体の知識が必要不可欠です。
構造体の宣言、構造体の変数の定義、構造体メンバの変数の参照などなどの知識です。
あと「calk_ch→calc_ch」で構造体の宣言はされてませんし、構造体変数の定義もされていません。
なので他にも誤解があると思われます。
ちなみにcalcはカリキュレート(calculate=計算)の略ですので意味を理解して読みとくと理解力も違ってきますよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 館7章において
現在何フレーム目かの情報を得るために、yusha さんが書きました:「ch.cnt++」でなぜカウントを1ずつ加算していくのかがわかりません。
例えば1.0/60.0ずつ加算すると浮動小数点計算の誤差が積もっていくし、
2ずつや10ずつ加算すると情報が冗長になってしまう。
-1ずつ加算してもいいかもしれないが、わかりにくい。
これらのことを考えると、多分1ずつ加算するのが最適なのだと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 館7章において
今回の場合、型の形→calc
型名 →chという風に解釈しています。
また、確かにcnt=count(数える)ということはわかるのですが、cntで数えろということはどこでも宣言してないと思われるのですがなぜPC側は数えると解釈できるのですか?
型名 →chという風に解釈しています。
また、確かにcnt=count(数える)ということはわかるのですが、cntで数えろということはどこでも宣言してないと思われるのですがなぜPC側は数えると解釈できるのですか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館7章において
やはり大きな誤解が潜んでいたいようです。
void calc_ch(){}は関数ですので、calc_chは関数名です。
構造体の宣言はstruct.hにある
ですね。
>また、確かにcnt=count(数える)ということはわかるのですが、cntで数えろということはどこでも宣言してないと思われるのですがなぜPC側は数えると解釈できるのですか?
calc_chは関数ですので、処理として ch.cnt++;で+1して数えてますよ。
void calc_ch(){}は関数ですので、calc_chは関数名です。
構造体の宣言はstruct.hにある
//キャラクターに関する構造体
typedef struct{
int flag; //フラグ
int cnt; //カウンタ
int power; //パワー
int point; //ポイント
int score; //スコア
int num; //残機数
int mutekicnt; //無敵状態とカウント
int shot_mode; //ショットモード
int money; //お金
int img; //画像
int slow; //スローかどうか
double x,y; //座標
}ch_t;
>また、確かにcnt=count(数える)ということはわかるのですが、cntで数えろということはどこでも宣言してないと思われるのですがなぜPC側は数えると解釈できるのですか?
calc_chは関数ですので、処理として ch.cnt++;で+1して数えてますよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 館7章において
PCは「ch.cnt(に割り当てられたメモリ領域)の値を1増やす」という命令を解釈して実行しますが、softya(ソフト屋) さんが書きました:>また、確かにcnt=count(数える)ということはわかるのですが、cntで数えろということはどこでも宣言してないと思われるのですがなぜPC側は数えると解釈できるのですか?
calc_chは関数ですので、処理として ch.cnt++;で+1して数えてますよ。
それが「数える」という操作であるとは解釈していないと思います。
人間が「ch.cntの値を増やす」ことを「数える」と解釈しています。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 館7章において
「calc_ch」と「ch」は(コンパイラにとっては)全く関係ない識別子です。yusha さんが書きました:あと一つ引っかかることがあるのですが、関数名を「calc_ch」として使用してるのに、なぜブロック内では「ch」で話が通るのですか??
「ch」で話が通るのは、別の場所で「ch」が宣言されているからです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 館7章において
別の場所で宣言とはstruct.hでの構造体のことですよね??
それで、型名「ch_t」となり「ch.構造体内で宣言したやつ」で使用できるわけですよね??
だとすると、_tの存在がまた気になります・・・。
それで、型名「ch_t」となり「ch.構造体内で宣言したやつ」で使用できるわけですよね??
だとすると、_tの存在がまた気になります・・・。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館7章において
typedefだけでは型の宣言ですのでメモリ実体を持ちません。代入できません計算もできません。
struct.hでの構造体は宣言実体定義していないので実態実体がありません。
ch_tの_tはDixqさんがtypdefしたよって意味でつけた印ですね。
コードを全部見ていないと思いますがch_tの型でchの実体を定義しているところを探してみてください。
struct.hでの構造体は宣言実体定義していないので実態実体がありません。
ch_tの_tはDixqさんがtypdefしたよって意味でつけた印ですね。
コードを全部見ていないと思いますがch_tの型でchの実体を定義しているところを探してみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館7章において
そうです。れが実体です。yusha さんが書きました:main内のch_t ch; ですか?
ただし、あるゆるcppファイルからグローバル変数として参照するためもう一工夫されています。
【補足】
あれ? 途中の章で実体は移動しているはずでは?
7章だと、そこに無いはずですよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館7章において
それです。それなら、calc_chからも参照できますよね。yusha さんが書きました:ということは「GV.h」でグローバル変数化した「GLOBAL ch_t ch; 」のことですか!!
あと第5章の「後は「main.cpp」「graph.cpp」「load.cpp」にある変数の定義部と、extern宣言を全て消してください。」がちゃんとされていないのでは?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 館7章において
ちゃんと出来てませんでした(×○×)取り敢えず直しました!
余談(?)かもしれませんが「GLOBAL ch_t ch; 」はプロトタイプ宣言とほぼ同義と考えても良いのでしょうか?
余談(?)かもしれませんが「GLOBAL ch_t ch; 」はプロトタイプ宣言とほぼ同義と考えても良いのでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館7章において
俗にいうプロトタイプ宣言は、関数プロトタイプ宣言のことで、これは実体ではなく関数の型だけを宣言するものです。
「GLOBAL ch_t ch; 」はGLOBALマクロによって切り替わる実体定義とexternによる実体参照を切り替えるものですので、一致する点は無いと思いますが。
「GLOBAL ch_t ch; 」はGLOBALマクロによって切り替わる実体定義とexternによる実体参照を切り替えるものですので、一致する点は無いと思いますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 館7章において
最初は勘違いも多いと思いますので、ちゃんと解消していけば良いだけですよ。
疑問があるのは、ちゃんと考えている証拠でもあります。
そうですね。今回ので多かった問題は、なぜこんな名前なのかはよく考えてもらった方が良いと思います。
なんとなく名前が付いているのではなく、解読するための手がかりが名前には込められています。
あとデバッガなどを使って、値の変化を調べるとか実際の動作を調べる事も日常化した方がより理解できるようになると思います。
それじゃあ。解決した場合は、解決チェックをお願いしますね。
疑問があるのは、ちゃんと考えている証拠でもあります。
そうですね。今回ので多かった問題は、なぜこんな名前なのかはよく考えてもらった方が良いと思います。
なんとなく名前が付いているのではなく、解読するための手がかりが名前には込められています。
あとデバッガなどを使って、値の変化を調べるとか実際の動作を調べる事も日常化した方がより理解できるようになると思います。
それじゃあ。解決した場合は、解決チェックをお願いしますね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。