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

質問編集履歴

2

HTML,CSSのコードを追加しました。

2020/05/10 13:05

投稿

mu_tin
mu_tin

スコア1

title CHANGED
File without changes
body CHANGED
@@ -23,7 +23,98 @@
23
23
  ```
24
24
 
25
25
  ### 該当のソースコード
26
+ ```HTML
27
+ <!DOCTYPE html>
28
+ <html lang="ja">
29
+ <head>
30
+ <meta charset="utf-8">
31
+ <title>Slot Machine</title>
32
+ <link rel="stylesheet" href="css/styles.css">
26
33
 
34
+ </head>
35
+ <body>
36
+ <main></main>
37
+ <div id="spin">SPIN</div>
38
+ <div id="div"></div>
39
+ <script src="js/main.js"></script>
40
+ </body>
41
+ </html>
42
+ ```
43
+ ```CSS
44
+ body{
45
+ background:#bdc3c7;
46
+ font-size:16px;
47
+ font-weight:bold;
48
+ font-family:Arial,sans-serif;
49
+ }
50
+
51
+ main{
52
+ width:300px;
53
+ background:#ecf0f1;
54
+ padding:20px;
55
+ border:4px solid #fff;
56
+ border-radius:12px;
57
+ margin:16px auto;
58
+ display:flex;
59
+ justify-content:space-between;
60
+ }
61
+
62
+ .panel img{
63
+ width:90px;
64
+ height:110px;
65
+ margin-bottom:4px;
66
+
67
+ }
68
+
69
+ .stop{
70
+ cursor:pointer;
71
+ width:90px;
72
+ height:32px;
73
+ background:#ef454a;
74
+ box-shadow:0 4px 0 #d1483d;
75
+ border-radius:16px;
76
+ line-height:32px;
77
+ text-align:center;
78
+ font-size:14px;
79
+ color:#fff;
80
+ user-select:none;
81
+
82
+ }
83
+
84
+ #spin{
85
+ cursor:pointer;
86
+ width:280px;
87
+ height:36px;
88
+ background:#3498db;
89
+ box-shadow:0 4px 0 #2880b9;
90
+ border-radius:18px;
91
+ line-height:36px;
92
+ text-align:center;
93
+ color:#fff;
94
+ user-select:none;
95
+ margin:0 auto;
96
+
97
+ }
98
+
99
+ .unmatched{
100
+ opacity:0.5;
101
+ }
102
+
103
+ .inactive{
104
+ opacity:0.5;
105
+ }
106
+
107
+ .coins{
108
+ width:280px;
109
+ height:36px;
110
+ background:#ecf0f1;
111
+ border-radius: 4px;
112
+ border:4px solid #fff;
113
+ margin:20px auto;
114
+ text-align:center;
115
+ }
116
+ ```
117
+
27
118
  ```javascript
28
119
  'use strict';
29
120
 

1

発生している問題、試したことを詳しく記述した。

2020/05/10 13:04

投稿

mu_tin
mu_tin

スコア1

title CHANGED
File without changes
body CHANGED
@@ -1,17 +1,30 @@
1
1
  ### 前提・実現したいこと
2
+ ドットインストールのスロットマシンを作ろうのレッスンを参考にしました。
3
+ そこからアレンジして、揃った絵柄ごとに取得できるコイン枚数をswitch文で分岐させたいと思っています。
2
4
 
3
- ドットインストールの、スロットマシン作ろうのレッスンを参考にしました
5
+ getCash関数定義して、引数panels[0]を渡てい
4
- こから、アレンジして、絵柄ごとに取得できるコイン枚数をswitch文で分岐させたいと思っています。
6
+ そしてswitch文でpanels[0]の画像imagesの配列画像を比較して、一致した画像に応じてコイン枚数を変えようと思っています。
5
7
 
6
8
  ### 発生している問題・エラーメッセージ
9
+ ```
10
+ 上記の考えで行うと、以下のようなエラーメッセージが出ます。
11
+ main.js:74 Uncaught ReferenceError: images is not defined
12
+ at getCash (main.js:74)
13
+ at checkResult (main.js:124)
14
+ at keydownStop (main.js:163)
15
+ at HTMLDocument.<anonymous> (main.js:185)
16
+ getCash @ main.js:74
17
+ checkResult @ main.js:124
18
+ keydownStop @ main.js:163
19
+ (anonymous) @ main.js:185
7
20
 
21
+ スロットの画像自体は表示されているので、images は定義されていると思うのですが、何がいけないのでしょうか。
22
+
8
23
  ```
9
- getCash関数を定義してswitch文で分岐させたいのですが、うまくいきません。
10
- ```
11
24
 
12
25
  ### 該当のソースコード
13
26
 
14
- ```javascript
27
+ ```javascript
15
28
  'use strict';
16
29
 
17
30
  {
@@ -137,11 +150,103 @@
137
150
  if(panels[0].isMatched(panels[1],panels[2])){
138
151
  getCash(panels[0]);
139
152
  }
140
-
153
+ };
154
+
155
+
156
+ let cash = 10;
157
+ let coins = document.getElementById('div');
158
+ coins.textContent = `コイン枚数:${cash}`;
159
+ coins.classList.add('coins');
160
+
161
+ function haveCash(){
162
+ cash--;
163
+ coins.textContent = `コイン枚数:${cash}`;
141
164
  };
165
+
166
+ function keydownSpin(){
167
+ spin.classList.add('inactive');
168
+ panels.forEach(panel => {
169
+ panel.activate();
170
+ panel.spin();
171
+ });
172
+ };
142
173
 
174
+ let panelsLeft = 3;
175
+
176
+
177
+ function keydownStop(i){
178
+ if(i.stop.classList.contains('inactive')){
179
+ return;
180
+ };
181
+ i.stop.classList.add('inactive');
182
+ clearTimeout(i.timeoutId);
143
183
 
184
+ panelsLeft --;
144
185
 
186
+ if(panelsLeft === 0){
187
+ spin.classList.remove('inactive');
188
+ panelsLeft = 3;
189
+ checkResult(panels[0],panels[1],panels[2]);
190
+
191
+ };
192
+ };
145
193
 
194
+ const panels = [
195
+ new Panel(),
196
+ new Panel(),
197
+ new Panel(),
198
+ ];
146
199
 
200
+ const spin = document.getElementById('spin');
201
+
202
+ document.addEventListener('keydown',(e)=>{
203
+
204
+ switch(e.keyCode){
205
+
206
+ case 100:
207
+ keydownStop(panels[0]);
208
+ break;
209
+
210
+ case 101:
211
+ keydownStop(panels[1]);
212
+ break;
213
+
214
+ case 102:
215
+ keydownStop(panels[2]);
216
+ break;
217
+
218
+ case 96:
219
+ if(cash == 0 || spin.classList.contains('inactive')){
220
+ return;
221
+ }else{
222
+ keydownSpin();
223
+ haveCash();
224
+ }
225
+ break;
226
+ };
227
+
228
+ });
229
+
230
+ };
231
+
147
- ```
232
+ ```
233
+
234
+ ### 試したこと
235
+
236
+ 1)getCash関数をPanelクラス内で定義したら、今度はgetCashが定義されていないことになった。
237
+ Uncaught ReferenceError: getCash is not defined
238
+ at checkResult (main.js:166)
239
+ at keydownStop (main.js:205)
240
+ at HTMLDocument.<anonymous> (main.js:223)
241
+ checkResult @ main.js:166
242
+ keydownStop @ main.js:205
243
+ (anonymous) @ main.js:223
244
+
245
+ 2)imagesをPanelクラス外で、新たに定義した。
246
+ エラーメッセージは出ないが、コインを取得できなかった(getCash関数が動いてない?)
247
+
248
+
249
+
250
+ ### 補足情報(FW/ツールのバージョンなど)
251
+
252
+ ここにより詳細な情報を記載してください。