初心者です

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

初心者です

#1

投稿記事 by イケ » 16年前

はじめまして。
c言語をはじめたばかりの超初心者です。
質問なんですが、今HPを見ながらDXライブラリの勉強をしてて、ふたつ分からないことがありました。
ひとつは、ソースを短くするという項目に

(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE])

というのがありまして、関数ひとつひとつに、[!]がついている意味が分かりません。
自分が勉強不足な面もあるかと思いますが、もしかしたら基本的なことが
分かってないのかも知れません。

二つ目は、キャラを四方向に移動という項目に

[(ch.x%32+ch.y%32)/8+ch.muki*4];

があったのですが、自分の脳みそをフル稼働させてもさっぱりでしたw
基本は勉強したのですが、応用的なものは苦手なんです‥
よろしければ、分かりやすく教えてくださいm(_ _)m

kazuoni

Re:初心者です

#2

投稿記事 by kazuoni » 16年前

!は論理演算子の否定です。
以下のサイト等を見てみてください。
http://www.geocities.jp/ky_webid/c/012.html

http://dixq.net/g/#22
以上うまく説明できるか分かりませんが・・・

例えば+x方向(右)に歩かせるとします。
この時、muki=3です。
その時yの座標は32で割り切れるところにいます。
ゆえにch.y%32=0です。
ch.xですが、歩き始めるとインクリメントされていきます。
ch.xは0,1,2,3,....と1ずつ増加するということです。
この時画像を歩いているようにしたいのですが、
今回サンプルで用いている画像は右歩きに4枚の画像があります。
一区間32なのですから、一区間で一枚の画像の表示に使う区間は32/4=8です。
ゆえに8の倍数ごとに画像を切り替えればよいのです。
なので(ch.x%32+ch.y%32)/8としています。
今回の場合、ch.xを32で割った余りが
0~7のとき右歩き画像0番目
8~15のとき右歩き画像1番目
16~23のとき右歩き画像2番目
24~31のとき右歩き画像3番目

ch.muki*4はキャラチップ(char.png)を見たらわかるのですが、
配列に格納する時は
http://dixq.net/g/#17
のようになっています。
右向き画像は12~15です。
上でもう順番はできています。あと必要なのは?
12を足すことです。
ゆえにmuki*4は右歩きの時
3*4=12
となります。

non

Re:初心者です

#3

投稿記事 by non » 16年前

!は否定です。
aが0か1を取るとき
0のときに何か処理をしたいとき
if(a==0) と書けますよね。
これを、
if(!a)と書くことができます。
ifの()の中には条件式を書くわけですが、条件が成立したとき(TRUE)のとき0以外(通常は1)
不成立のとき(FALSE)0と考えます。ですから、
if(a==0) のとき aが0だった場合はa==0はTRUEなので if(1) になります。
a=0なので、!aは1です。
ですから、if(!a)と書けるわけです。

イケ

Re:初心者です

#4

投稿記事 by イケ » 16年前

なるほど。なんか分かったきがします。
ありがとうございました。

閉鎖

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