質問するログイン新規登録

質問編集履歴

2

追記

2018/05/14 09:00

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -91,4 +91,13 @@
91
91
  で個の戻り値で判断して1か4か5か7だったら
92
92
  moveを増やさないという感じで判定しています
93
93
 
94
- ざっとこんな感じです
94
+ ざっとこんな感じです
95
+
96
+ さらに追記
97
+
98
+ ブロックが重なってたらsquare[][]が3になります。
99
+ ですがここからブロックが重なってたらどうするかがわかりません。
100
+ 弾くにしても何マス弾けばいいかがわからないです。
101
+ ブロックごとに、このブロックがこうめり込んでたらブロックが全部表示できる位置まで
102
+ 戻すということも考えましたがブロックが7x回転後の形があるのでソースが長くなると思いやめました。
103
+ 何かいい判定方法はないでしょうか?

1

説明の追記

2018/05/14 09:00

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -16,4 +16,79 @@
16
16
  仕様にしたいのですがうまくいきません
17
17
  何かいい手はありますか?
18
18
  お知恵をお貸しください
19
- よろしくお願いします
19
+ よろしくお願いします
20
+
21
+ 追記
22
+
23
+ まずブロックの出現の方法ですが
24
+ こんな風に書いています
25
+
26
+ ```ここに言語を入力
27
+ int Tetrimino::ZTetrimino(int ypos, int xpos, int transform)
28
+ {
29
+
30
+ if (transform % 2 == 0)
31
+ {
32
+ for (i = 0; i < 2; i++)
33
+ {
34
+ for (j = 0; j < 3; j++)
35
+ {
36
+ a = ypos + i + move;
37
+ b = xpos + j;
38
+ if (a >= 0)
39
+ {
40
+ if(!((i==0 && j == 2) || (i == 1 && j == 0)))
41
+ square[a][b] = 2;
42
+ }
43
+ }
44
+ }
45
+
46
+ }
47
+ else
48
+ {
49
+ for (i = 0; i < 3; i++)
50
+ {
51
+ for (j = 0; j < 2; j++)
52
+ {
53
+ a = ypos + i + move;
54
+ b = xpos + j;
55
+ if (a >= 0)
56
+ {
57
+ if (!((i == 0 && j == 0) || (i == 2 && j == 1)))
58
+ square[a][b] = 2;
59
+ }
60
+ }
61
+ }
62
+ }
63
+ return 4; // Zの戻り値は4、Iは1のように順番に振り分けてる
64
+ //なので個の戻り値を拾って今なんのテトリミノか判断している
65
+
66
+ }
67
+ ```
68
+
69
+ 全部こんな感じです
70
+ 左上から順に2にしていくイメージです
71
+
72
+ ちなみにですがsquare[][]などの変数は継承元のクラスで静的に宣言しています
73
+
74
+ あとはfor文でsquare[i][j] == 0以上だったら"■"を0だったら" "を表示するでjのループが終わったら
75
+ 改行を挟むという感じです
76
+
77
+ main関数のメインループでmoveを増やしてそのあとtetriminoの戻り値でなんのブロックか判断して
78
+ その関数を呼び出す
79
+ moveでy軸が増えるのでy軸が一個増えた値でtetrimino関数スタート
80
+ で当たり判定関数があります
81
+ 当たり判定はsquare[][]の値が2の周りに1があれば0~7までの戻り値を返す
82
+ // return 0 = 判定なし
83
+ // return 1 = 下
84
+ // return 2 = 右
85
+ // return 3 = 左
86
+ // return 4 = 下と右
87
+ // return 5 = 下と左
88
+ // return 6 = 左と右
89
+ // return 7 = 下と左と右
90
+
91
+ で個の戻り値で判断して1か4か5か7だったら
92
+ moveを増やさないという感じで判定しています
93
+
94
+ ざっとこんな感じです