某所の以下のテトリスのコードなのですが、何点かわからない点があります。初歩的な質問も混ざっているかもしれません。理解できるというお方おりましたらご教授いただけると幸いです。
下記の左の数字は行番号で、ソースを読む際の目安にしていただければと思います(大体の番号です;)
ソース
http://zapanet.info/blog/item/1125
7 d=K-37?1:-1 // d:x方向の差分
★d=K-37がtrueなら1、falseなら-1を返すと私は読んだのですが、d=K-37がtrueというのはどういう意味か分かりません。どういう意味なのでしょうか?
10 f+=Z[h+E[i]+d]==S; // 移動先が空白かどうか
★fに配列Zの添字h+配列Eの添字i+dを足したものをfに代入。までは多分あっていると思うのですが、次の==Sの意味がわかりません。どうよめばよいのでしょうか?
17 v=Math.round(p/12); // 回転先の x 座標
18 w=p-v*12; // 回転先の y 座標
19 C[i]=w*12-v; // 回転先の座標計算
★なぜpを12で割って丸めているのでしょうか?17、18、19とどういう計算をしているのでしょうか?
24 t*!f?E=B[t]=C:0; // すべて空白なので回転決定
★t*fの否定がtrueならばEにB[t]を代入するのは分かりますが、Cはどこにはいるのでしょうか?=が2つ続いたときどう読めば良いでしょうか?
40 for(j=11;--j&&Z[i*12+j]==S;); // そろったラインを検索
★j=11から、1減らしたjかつ配列Z添字i*12+jがSになるまで・・・3つめの;の後ろがありませんが、これはどういう意味でしょうか?
そして、for()の後ろに;がありますが、それはどういう意味でしょうか?
43 for(j=++i*12;j>2*12;)Z[j]=Z[j---12] // 全体を一段下げる
★Z[j]=Z[j---12]の---12の意味は、12を2減らしたのを・・・であっていますか?
51 Z[5]!=S?setTimeout(Y,99):0; // 入り口にブロックがあったら終了
★配列Z添字5がSじゃなければset~、Sなら0を返すで読みはあっていますか?
59 for(K=t=P=i=0;i<240;){
★K、t、P、iに0をセット、iが240以下になるまで・・・これも2つめの;の後がないのですがどうなっているのでしょうか?
61 Z[240+i]=Z[i]=++i%12<2||i>228?S="□":" "; // 床と壁の設定、番兵にもなる
★Z[240+i]、Z[i]に++i%12を代入したものが2以下または、i>228がtrueなら"□"、falseなら" "を返す。で読みはあっていますか?
No.1ベストアンサー
- 回答日時:
7 d=K-37?1:-1
K-37がture だったら1、falseだったら-1を、dに代入する
ここでは条件(K-37)がNumber型なのではBoolean型に変更され評価される
数値が 0->false それ以外(0より下 or 0より上)->true
10 f+=Z[h+E[i]+d]==S;
Z[h+E[i]+d] == S の結果を fに加えたものが fに代入される
結果はBoolean(true or false)になるが、
+= によりString型の連結かNumber型の加算が行われ代入される
fの初期値がNumber型 (f=0) なのでここではおそらくNumber型による加算 true->1 false->0
17 v=Math.round(p/12); // ブロックの各位置
18 w=p-v*12; // 回転先の y 座標
19 C[i]=w*12-v; // 回転先の座標計算
全体の関係がちょっとよくわからないので不明
24 t*!f?E=B[t]=C:0; // すべて空白なので回転決定
t*fの否定がtrueならば、B[t]にCが代入され、更にEにも代入される
それ以外はとりあえず0を宣言
単純にCがEとB[t]に代入されると理解すれば良し
0宣言自体に意味はなく、構文として成り立たせるためだけに存在
40 for(j=11;--j&&Z[i*12+j]==S;);
3つ目の;の後ろは、forで一連の動作をループ中、一連の動作を行う毎の最後に何をするか
ここでは何もしないということ、
最後の;は、forの条件内で既にループさせたい動作が満たされていると思われるので(--jの部分)、
やることがないからforの終止として付けている
条件に使われるNumber型の評価は 7 と一緒
43 for(j=++i*12;j>2*12;)Z[j]=Z[j---12]
j---12は"j--"と"-12"で分ける
式だけの結果は j-12、式を終えるとj自体は j-1 になる
51 Z[5]!=S?setTimeout(Y,99):0; // 入り口にブロックがあったら終了
配列Z添字5がSじゃなければsetTimeoutによる時間軸処理を行うよう設定
そうでなければ0を宣言、0宣言に意味はなし
59 for(K=t=P=i=0;i<240;){
;の後がないのは40と同じ
61 Z[240+i]=Z[i]=++i%12<2||i>228?S="□":" "; // 床と壁の設定、番兵にもなる
++i%12が2未満または、i>228がtrueなら"□"、falseなら" "を、Z[240+i]とZ[i]に代入する
trueならば Sにも"□"が代入される
理解を深める為に、全体を通して覚えたほうがよいこと
・三項演算 A ? B : C
・forの使い方とその行われ方
・代入演算子(=)及び複合代入演算子(+= -=等)の動作と、
比較演算子{関係演算子(== !=等)}の動作の違い
どっか間違ってるかもしれませんが、
時間をかけて細かくデバッグのような形で確認しないと
これ以上はちょっとわからなそうなので以上です
どうもありがとうございました!すごいです・・・
だらだらと質問してすみませんでした。
とても分かりやすかったです、嬉しいです!
アドバイスを参考にじっくり理解してみようと思います
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Java Java 南京錠 2 2023/02/04 11:46
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- Visual Basic(VBA) vbaでセルに入力したときに,その横にあるセルを保護し入力不可にするマクロを作りたいです。 2 2022/04/24 20:59
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
テキストボックスの値を変数に...
-
jsp~jspにhiddenを使って変数...
-
[VBS]変数を定数に変換する方法...
-
エラーの意味は? Lvalue req...
-
processing エラーで、 "cannot...
-
だれがとけるの?
-
Variant型で宣言してるのにEmpt...
-
C言語 列挙型(enum型)変数について
-
整数xxxが大き過ぎますというエ...
-
EXCEL/VBA 変数の値をクリップ...
-
Visual Basic 2008 変数をDBへ...
-
複数の演算子を選択する場合の処理
-
C言語 exitで終了した関数の戻...
-
連立一次方程式の
-
条件演算子 ? :
-
プログラミングの問題です
-
切り上げ
-
【VBA】複合代入演算子
-
ExcelのVBAでをA列に第0〜19項...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エラーの意味は? Lvalue req...
-
VBAでダブルコーテーション入り...
-
EXCEL/VBA 変数の値をクリップ...
-
だれがとけるの?
-
C言語 列挙型(enum型)変数について
-
[VBS]変数を定数に変換する方法...
-
jsp~jspにhiddenを使って変数...
-
Variant型で宣言してるのにEmpt...
-
processing エラーで、 "cannot...
-
テキストボックスの値を変数に...
-
整数xxxが大き過ぎますというエ...
-
C言語 アロー演算子について質...
-
i++と++i ってどう違うのですか?
-
数値計算??
-
python の 連鎖代入の文法
-
インクリメント演算子の前置(+...
-
「%」を使って、偶数か奇数かを...
-
【VBA】複合代入演算子
-
VBA 1行で複数の代入を行った...
-
datagridviewに行...
おすすめ情報