質問編集履歴

2

プログラムの修正とエラーの説明が途切れていたので修正

2021/11/20 13:56

投稿

tmk727
tmk727

スコア2

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- エラーメッセージはないのですが、うまく機能していない部分があり、一番下が光った状態か
13
+ エラーメッセージはないのですが、うまく機能していない部分があり、一番下が光った状態でその上ではなく2個上が光ってしまったり、謎に右端が縦にひってしまいます。またボタンを押して止めた部分の光が保持されません。じぶんでも修正を試みたのですがうまくいかなくて困っております。
14
14
 
15
15
 
16
16
 
@@ -24,8 +24,6 @@
24
24
 
25
25
 
26
26
 
27
-
28
-
29
27
  #include<string.h>
30
28
 
31
29
  #include<stdio.h>
@@ -34,15 +32,13 @@
34
32
 
35
33
 
36
34
 
37
- static unsigned char i; //カウンタ
35
+ unsigned char i; //カウンタ
38
-
36
+
39
- static unsigned char s_count; // つなげることに成功した回数(最大6回)
37
+ unsigned char s_count = 0; // つなげることに成功した回数(最大6回)
40
-
41
- unsigned char line_led[7]; //ラインの位置
38
+
42
-
43
-
44
-
39
+
40
+
45
- static unsigned char game_flag; //画面遷移の変数
41
+ unsigned char game_flag = 0; //画面遷移の変数
46
42
 
47
43
 
48
44
 
@@ -60,37 +56,37 @@
60
56
 
61
57
 
62
58
 
63
- void appear_bridge(){ //橋の出現
59
+ void appear_bridge(){ //橋の出現 caseのほうがいいのかな?
64
-
65
-
66
-
60
+
61
+
62
+
67
- if(s_count = 0){
63
+ if(s_count == 0){
68
-
64
+
69
- led[6] = line_led[6] |= 0x1f;
65
+ led[6] = 0x1f;
70
-
66
+
71
- }else if(s_count = 1){
67
+ }else if(s_count == 1){
72
-
68
+
73
- led[5] = line_led[5] |= 0x1f;
69
+ led[5] = 0xf1;
74
-
70
+
75
- }else if(s_count = 2){
71
+ }else if(s_count == 2){
76
-
72
+
77
- led[4] = line_led[4] |= 0x0f;
73
+ led[4] = 0x0f;
78
-
74
+
79
- }else if(s_count = 3){
75
+ }else if(s_count == 3){
80
-
76
+
81
- led[3] = line_led[3] |= 0x0f;
77
+ led[3] = 0x0f;
82
-
78
+
83
- }else if(s_count = 4){
79
+ }else if(s_count == 4){
84
-
80
+
85
- led[2] =line_led[2] |= 0x07;
81
+ led[2] = 0x07;
86
-
82
+
87
- }else if(s_count = 5){
83
+ }else if(s_count == 5){
88
-
84
+
89
- led[1] = line_led[1] |= 0x03;
85
+ led[1] = 0x03;
90
-
86
+
91
- }else if(s_count = 6){
87
+ }else if(s_count == 6){
92
-
88
+
93
- led[0] = line_led[0] |= 0x01;
89
+ led[0] = 0x01;
94
90
 
95
91
  }
96
92
 
@@ -102,33 +98,111 @@
102
98
 
103
99
  {
104
100
 
101
+ static unsigned char span_cnt = 0;
102
+
103
+ static unsigned char move_left = 0;
104
+
105
+
106
+
107
+ char height = 6 - s_count;
108
+
109
+
110
+
111
+ if (span_cnt++ > 10){ // 1s
112
+
113
+ span_cnt = 0;
114
+
105
- for (int i=5; i>0; i--) led[i] = line_led[i];
115
+ if(led[height] & 0b10000000) move_left = 0;
116
+
106
-
117
+ if(led[height] & 0b00000001) move_left = 1;
118
+
107
- line_led[i] = line_led[i] << 1;
119
+ if(move_left) led[height] = led[height] << 1;
108
-
109
- if(line_led[i] >= 128){
120
+
110
-
111
- line_led[i] = line_led[i] >> 1;
121
+ else led[height] = led[height] >> 1;
112
-
113
- }else if(line_led[i] == 1){
114
-
115
- line_led[i] = line_led[i] << 1;
116
122
 
117
123
  }
118
124
 
119
- }
125
+ }
120
-
121
-
122
-
126
+
127
+
128
+
123
- void fresh_all(){ //すべてのLEDを初期化 大地のみ残す
129
+ void fresh(){
124
-
130
+
125
- for (int i=0; i<7; i++){
131
+ for (i=0; i<8; i++) led[i] = 0;
132
+
133
+
134
+
126
-
135
+ }
136
+
137
+
138
+
139
+ void game(void)
140
+
141
+ {
142
+
127
- led[i] = 0;
143
+ led[7] = 0xff;
144
+
145
+ shift();
146
+
147
+ if(sw_flag){
148
+
149
+ sw_flag = 0;
150
+
151
+ char height = 6 - s_count;
152
+
153
+ if (led[height] = led[height+1] && led[height]){
154
+
155
+ s_count++;
128
156
 
129
157
  }
130
158
 
159
+ else{ // 失敗
160
+
161
+ game_flag = 0;
162
+
163
+ fresh();
164
+
165
+ return;
166
+
167
+ }
168
+
169
+ _sound(33, 1);
170
+
171
+ char chata = 5;// チャタリング対策
172
+
173
+ while(chata>0) chata--;
174
+
175
+ appear_bridge();
176
+
177
+ }
178
+
179
+ if(s_count == 6){ // クリア
180
+
181
+ _sound(33, 10);
182
+
183
+ game_flag = 0;
184
+
185
+ }
186
+
187
+ }
188
+
189
+
190
+
191
+ void title(void)
192
+
193
+ {
194
+
195
+ if(sw_flag){ //ボタン押されたらゲーム画面に遷移
196
+
131
- led[7] = 0xFF;
197
+ sw_flag = 0;
198
+
199
+ game_flag = 1;
200
+
201
+ s_count = 0;
202
+
203
+ appear_bridge();
204
+
205
+ }
132
206
 
133
207
  }
134
208
 
@@ -136,96 +210,28 @@
136
210
 
137
211
 
138
212
 
213
+
214
+
139
- void game(void)
215
+ void user_main(void)
140
-
216
+
141
- {
217
+ {
142
-
143
- fresh_all();
218
+
144
-
145
- appear_bridge();
146
-
147
- shift();
148
-
149
- if(sw_flag){
219
+ switch(game_flag){
150
-
151
- switch(sw){
220
+
152
-
153
- case 2:
221
+ case 0:
154
-
155
- if((line_led[i] && line_led[i - 1]) && (s_count < 6)){
222
+
156
-
157
- line_led[i] = line_led[i] && line_led[i-1];
223
+ title(); //初期画面に遷移(スタートしたときや失敗したとき)
158
-
159
- s_count++;
224
+
160
-
161
- i--;
225
+ break;
162
-
226
+
163
- }else{
227
+ case 1:
228
+
164
-
229
+ game(); //ゲーム画面に遷移
230
+
165
- game_flag--;
231
+ break;
166
-
167
-
168
-
169
- }
170
-
171
- led[i] = line_led[i];
172
-
173
-
174
232
 
175
233
  }
176
234
 
177
- }
178
-
179
- }
180
-
181
-
182
-
183
- void title(void)
184
-
185
- {
186
-
187
- if(sw_flag){ //ボタン押されたらゲーム画面に遷移
188
-
189
- sw &= sw_flag;
190
-
191
- if(sw >= 1){
192
-
193
- game_flag++;
194
-
195
- }
196
-
197
- sw_flag = 0;
198
-
199
- }
200
-
201
- }
202
-
203
-
204
-
205
-
206
-
207
-
208
-
209
- void user_main(void)
210
-
211
- {
212
-
213
- switch(game_flag){
214
-
215
- case 0:
216
-
217
- title(); //初期画面に繊維(スタートしたときや失敗したとき)
218
-
219
- break;
220
-
221
- case 1:
222
-
223
- game(); //ゲーム画面に遷移
224
-
225
- break;
226
-
227
- }
228
-
229
235
 
230
236
 
231
237
  }

1

タイトル

2021/11/20 13:56

投稿

tmk727
tmk727

スコア2

test CHANGED
@@ -1 +1 @@
1
- マイコンでのゲーム作り うまく動かず困っています
1
+ c言語 マイコンでのゲーム作り うまく動かず困っています
test CHANGED
File without changes