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

質問編集履歴

3

タイトルを変更

2019/12/08 11:48

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- メモリが読めません例外エラーの原因が知りたい
1
+ バッファオバーランの原因が知りたい
body CHANGED
File without changes

2

質問内容にその他の情報を追加しました。

2019/12/08 11:47

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -3,93 +3,213 @@
3
3
  またそのコメント部のコードをコメントにするとこんどはControl関数部の落下管理のBlock_Donw関数のmove->yの処理で同じ例外が発生しています、これは何をしたいのでしょうか?値を画面に出力してみたり色々試しましたがどうしても原因がわかりません。そもそもポインタの移動などはおこなっていないのでそもそもおかしいと思っています。
4
4
 
5
5
 
6
+ start.h
7
+ ```ここに言語を入力
6
8
 
9
+
10
+ /*シーン管理*/
11
+ enum class SceneType
12
+ {
13
+ Title,
14
+ Game,
15
+ GameOver,
16
+ Pause
17
+ };
18
+
19
+ extern SceneType nowScene;
20
+
21
+ class Scene
22
+ {
23
+ private:
24
+
25
+
26
+ std::unique_ptr<Title> t;
27
+ std::unique_ptr<Game> g;
28
+
29
+
30
+ public:
31
+
32
+ Scene();
33
+
34
+ void Update();
35
+ void Draw_Update();
36
+
37
+ ~Scene();
38
+ };
39
+
40
+ #endif
41
+ ```
42
+
43
+ start.cpp
7
44
  ```ここに言語を入力
8
45
 
46
+
9
47
  /*コンストラクタ*/
10
- Game::Game():
48
+ Scene::Scene():
49
+ // nowScene(Scene::Title),
50
+ t(std::make_unique<Title>()),
11
- Data_Block
51
+ g(std::make_unique<Game>())
12
- {
52
+ {
53
+
54
+ }
55
+
56
+ //SceneType nowScene = SceneType::Title;
57
+ SceneType nowScene = SceneType::Title;
58
+
59
+ /*計算*/
60
+ void Scene::Update()
61
+ {
62
+ switch(nowScene)
63
+ {
64
+ case SceneType::Title:
13
65
  {
14
- {
15
- {1,1,1,1},
66
+ t->Update();
16
- {0,0,0,0},
67
+ break;
17
- {0,0,0,0},
18
- {0,0,0,0},
19
- },
68
+ };
20
69
 
70
+ case SceneType::Game:
21
- {
71
+ {
22
- {0,0,0,1},
72
+ g->Update();
23
- {0,0,0,1},
73
+ break;
24
- {0,0,0,1},
25
- {0,0,0,1},
26
- },
74
+ }
27
75
 
28
- {
29
76
 
30
- {1,1,1,1},
31
- {0,0,0,0},
32
- {0,0,0,0},
33
- {0,0,0,0},
34
- },
77
+ }
35
78
 
36
- {
37
- {0,0,1,0},
38
- {0,0,1,0},
39
- {0,0,1,0},
40
- {0,0,1,0},
41
- },
79
+ }
42
- },
43
80
 
81
+ /*描画*/
82
+ void Scene::Draw_Update()
83
+ {
84
+ switch (nowScene)
85
+ {
86
+ case SceneType::Title:
44
87
  {
45
- {
88
+ t->Draw_Update();
46
- {1,1,0,0},
89
+ break;
47
- {1,1,0,0},
48
- {0,0,0,0},
49
- {0,0,0,0},
50
- },
90
+ };
51
91
 
92
+ case SceneType::Game:
52
- {
93
+ {
94
+ g->Draw_Update();
53
- {1,1,0,0},
95
+ break;
54
- {1,1,0,0},
55
- {0,0,0,0},
56
- {0,0,0,0},
57
- },
96
+ }
58
97
 
59
- {
60
98
 
61
- {1,1,0,0},
62
- {1,1,0,0},
63
- {0,0,0,0},
64
- {0,0,0,0},
65
- },
99
+ }
100
+ }
66
101
 
102
+ /*デストラクタ*/
103
+ Scene::~Scene()
67
- {
104
+ {
68
- {1,1,0,0},
69
- {1,1,0,0},
70
- {0,0,0,0},
71
- {0,0,0,0},
72
- },
73
- },
74
105
 
75
- {
76
- {
77
- {0,1,1,0},
78
- {1,1,0,0},
79
- {0,0,0,0},
80
- {0,0,0,0},
81
- },
106
+ }
82
107
 
83
- {
84
- {1,0,0,0},
85
- {1,1,0,0},
86
- {0,1,0,0},
87
- {0,0,0,0},
88
- },
89
108
 
109
+ ```
110
+
111
+
112
+ Game.h
113
+ ```ここに言語を入力
114
+ #ifndef ___GAME_h
115
+ #define ___GAME_h
116
+ #include <array>
117
+ #include <memory>
118
+ /*
119
+ 画面サイズ: 1280,720
120
+ ステージサイズ: 288,504
121
+ */
122
+
123
+ #define STAGE_X 12
124
+ #define STAGE_Y 21
125
+
126
+ #define STAGE_FRAME -1
127
+ #define CELL 24
128
+ #define STAGE_EMPTY 0
129
+
130
+ class Game
131
+ {
132
+ private:
133
+ /*画像情報*/
134
+ int Image_Block[8];//ブロック各種
135
+ int Image_gback_ground;//背景
136
+ int Image_frameY;//背景
137
+ int Image_frameX;//背景
138
+
139
+ /*データ*/
140
+ int Data_Block[8][4][4][4];
141
+
142
+ class Position
143
+ {
144
+ public:
145
+ int x;
146
+ int y;
147
+ Position(): x(0),y(0){ }
148
+
149
+ };
150
+
151
+ /*キー状態*/
152
+ enum class keyState
153
+ {
154
+
155
+ Left,
156
+ Right,
157
+ Down,
158
+ Rotation,
159
+ eHold,
160
+ Invalid,
161
+ Pause,
162
+
163
+ };
164
+
165
+ // std::array<std::array<int, 12>,21> stage = {{
166
+ int stage[STAGE_Y][STAGE_X] = {
167
+ {-1,0,0,0,0,0,0,0,0,0,0,-1},
168
+ //////////////////////行数の問題で割愛
169
+ {-1,0,0,0,0,0,0,0,0,0,0,-1},
170
+ {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
171
+ };
172
+
173
+ int blockHold; //ホールドしてるブロックを記録
174
+ keyState* key; //キー入力管理
175
+ keyState* keyAction; //キー入力管理
176
+ keyState* keyPause; //キー入力管理
177
+
178
+
179
+
180
+ //Position *move; //プレイヤ座標
181
+ std::unique_ptr<Position> move; //プレイヤ座標
182
+ int nRote; //回転
183
+ int nowNumber; //ブロック
184
+ const int color_index[7]; //色情報 
185
+
186
+ public:
187
+ Game();
188
+ void Update();
189
+ void Draw_Update();
190
+ ~Game();
191
+
192
+ private:
193
+
194
+
195
+ //割愛
196
+ };
197
+
198
+ #endif
199
+
200
+ ```
201
+ ```ここに言語を入力
202
+
203
+ /*コンストラクタ*/
204
+ Game::Game():
205
+ Data_Block
206
+ {
207
+ {
90
208
  {
91
-
209
+
92
- {0,1,1,0},
210
+ },
211
+              ////////////////文字数の関係で割愛
212
+ {
93
213
  {1,1,0,0},
94
214
  {0,0,0,0},
95
215
  {0,0,0,0},

1

提示コードを変更

2019/12/07 12:11

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -5,6 +5,247 @@
5
5
 
6
6
 
7
7
  ```ここに言語を入力
8
+
9
+ /*コンストラクタ*/
10
+ Game::Game():
11
+ Data_Block
12
+ {
13
+ {
14
+ {
15
+ {1,1,1,1},
16
+ {0,0,0,0},
17
+ {0,0,0,0},
18
+ {0,0,0,0},
19
+ },
20
+
21
+ {
22
+ {0,0,0,1},
23
+ {0,0,0,1},
24
+ {0,0,0,1},
25
+ {0,0,0,1},
26
+ },
27
+
28
+ {
29
+
30
+ {1,1,1,1},
31
+ {0,0,0,0},
32
+ {0,0,0,0},
33
+ {0,0,0,0},
34
+ },
35
+
36
+ {
37
+ {0,0,1,0},
38
+ {0,0,1,0},
39
+ {0,0,1,0},
40
+ {0,0,1,0},
41
+ },
42
+ },
43
+
44
+ {
45
+ {
46
+ {1,1,0,0},
47
+ {1,1,0,0},
48
+ {0,0,0,0},
49
+ {0,0,0,0},
50
+ },
51
+
52
+ {
53
+ {1,1,0,0},
54
+ {1,1,0,0},
55
+ {0,0,0,0},
56
+ {0,0,0,0},
57
+ },
58
+
59
+ {
60
+
61
+ {1,1,0,0},
62
+ {1,1,0,0},
63
+ {0,0,0,0},
64
+ {0,0,0,0},
65
+ },
66
+
67
+ {
68
+ {1,1,0,0},
69
+ {1,1,0,0},
70
+ {0,0,0,0},
71
+ {0,0,0,0},
72
+ },
73
+ },
74
+
75
+ {
76
+ {
77
+ {0,1,1,0},
78
+ {1,1,0,0},
79
+ {0,0,0,0},
80
+ {0,0,0,0},
81
+ },
82
+
83
+ {
84
+ {1,0,0,0},
85
+ {1,1,0,0},
86
+ {0,1,0,0},
87
+ {0,0,0,0},
88
+ },
89
+
90
+ {
91
+
92
+ {0,1,1,0},
93
+ {1,1,0,0},
94
+ {0,0,0,0},
95
+ {0,0,0,0},
96
+ },
97
+
98
+ {
99
+ {1,0,0,0},
100
+ {1,1,0,0},
101
+ {0,1,0,0},
102
+ {0,0,0,0},
103
+ },
104
+ },
105
+
106
+ {
107
+ {
108
+ {1,1,0,0},
109
+ {0,1,1,0},
110
+ {0,0,0,0},
111
+ {0,0,0,0},
112
+ },
113
+
114
+ {
115
+ {0,1,0,0},
116
+ {1,1,0,0},
117
+ {1,0,0,0},
118
+ {0,0,0,0},
119
+ },
120
+
121
+ {
122
+
123
+ {1,1,0,0},
124
+ {0,1,1,0},
125
+ {0,0,0,0},
126
+ {0,0,0,0},
127
+ },
128
+
129
+ {
130
+ {0,1,0,0},
131
+ {1,1,0,0},
132
+ {1,0,0,0},
133
+ {0,0,0,0},
134
+ },
135
+ },
136
+
137
+ {
138
+ {
139
+ {1,0,0,0},
140
+ {1,1,1,0},
141
+ {0,0,0,0},
142
+ {0,0,0,0},
143
+ },
144
+
145
+ {
146
+ {1,1,0,0},
147
+ {1,0,0,0},
148
+ {1,0,0,0},
149
+ {0,0,0,0},
150
+ },
151
+
152
+ {
153
+ {1,1,1,0},
154
+ {0,0,1,0},
155
+ {0,0,0,0},
156
+ {0,0,0,0},
157
+ },
158
+
159
+ {
160
+ {0,1,0,0},
161
+ {0,1,0,0},
162
+ {1,1,0,0},
163
+ {0,0,0,0},
164
+ },
165
+ },
166
+ {
167
+ {
168
+ {0,0,1,0},
169
+ {1,1,1,0},
170
+ {0,0,0,0},
171
+ {0,0,0,0},
172
+ },
173
+
174
+ {
175
+ {1,0,0,0},
176
+ {1,0,0,0},
177
+ {1,1,0,0},
178
+ {0,0,0,0},
179
+
180
+ },
181
+ {
182
+ {1,1,1,0},
183
+ {1,0,0,0},
184
+ {0,0,0,0},
185
+ {0,0,0,0},
186
+
187
+ },
188
+ {
189
+ {1,1,0,0},
190
+ {0,1,0,0},
191
+ {0,1,0,0},
192
+ {0,0,0,0},
193
+
194
+ },
195
+ },
196
+ {
197
+ {
198
+ {0,1,0,0},
199
+ {1,1,1,0},
200
+ {0,0,0,0},
201
+ {0,0,0,0},
202
+ },
203
+
204
+ {
205
+ {1,0,0,0},
206
+ {1,1,0,0},
207
+ {1,0,0,0},
208
+ {0,0,0,0},
209
+
210
+ },
211
+ {
212
+ {1,1,1,0},
213
+ {0,1,0,0},
214
+ {0,0,0,0},
215
+ {0,0,0,0},
216
+
217
+ },
218
+ {
219
+ {0,1,0,0},
220
+ {1,1,0,0},
221
+ {0,1,0,0},
222
+ {0,0,0,0},
223
+
224
+ },
225
+ },
226
+ },
227
+
228
+ move(new Position()),
229
+ key(new keyState),
230
+ keyAction(new keyState),
231
+ keyPause(new keyState),
232
+ nRote(0),
233
+ color_index{ 5,3,4,1,6,2,7 }
234
+ {
235
+
236
+ srand((unsigned int)time(NULL));
237
+ LoadDivGraph("Tetris/resource/Block_tmp_24px.png", 8, 4, 2, 24, 24, Image_Block);
238
+ Image_frameX = LoadGraph("Tetris/resource/Image_frameX.png");
239
+ Image_frameY = LoadGraph("Tetris/resource/Image_frameY.png");
240
+ // nowNumber = rand() % 7 == 0;
241
+ set_Rand();
242
+ move->x = 4;
243
+ move->y = 1;
244
+
245
+ }
246
+
247
+
248
+
8
249
  // -------------------------------------------------------------------------------
9
250
  // 計算
10
251
  // -------------------------------------------------------------------------------
@@ -46,7 +287,7 @@
46
287
 
47
288
 
48
289
 
49
- //////////////////////////////////////////////////
290
+
50
291
  /*ブロック落下と移動管理*/
51
292
  bool Game::Block_Down()
52
293
  {
@@ -61,8 +302,8 @@
61
302
  return false;
62
303
  }
63
304
  }
64
- ////////////////////////////////////////////////
65
305
 
306
+
66
307
  /*指定したピースの座標にブロックがあるかどうか?*/
67
308
  bool Game::get_isBlock(int n, int r, Position p)
68
309
  {
@@ -174,8 +415,9 @@
174
415
  /*落下管理*/
175
416
  if(Fps::now() % 10 == 0)
176
417
  {
177
- if(Block_Down() == true)
418
+ if (Block_Down() == true ){
178
- {
419
+
420
+
179
421
 
180
422
  //DrawFormatString(100, 100, GetColor(255, 255, 255), " %d, %d", move->x, move->y, true);
181
423
 
@@ -260,7 +502,7 @@
260
502
  {
261
503
  if (get_isBlock(nowNumber,nRote,p) == 1)
262
504
  {
263
- DrawGraph((move->x + p.x) * CELL,(move->y + p.y) * CELL, getDraw_Block(),true);////////////////////////////////////////////
505
+ //DrawGraph((move->x + p.x) * CELL,(move->y + p.y) * CELL, getDraw_Block(),true);////////////////////////////////////////////
264
506
  }
265
507
  }
266
508
  }