質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

732閲覧

Javascriptで確率を時間で変動させたい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2021/02/11 09:00

編集2021/02/11 09:12

Javascriptで確率を時間で変動させたいです。

Javascriptに関する質問です。大学でプログラミングの授業を受講中の初心者です。
マインスイーパをベースに追加要素を含んだゲームを制作しようとしています。

そのプログラムの一部に「開いたマスの周囲の毒ガス(マインスイーパにおける爆弾)の数をチェックし、**[毒ガスの数].jpgを表示する」**という文を書いています。

そのうち0.jpg(周囲に毒ガスがない)を表示予定の場合、経過時間別の確率でcoin.gifに変更するという文を追加したいです。

ex.
経過時間が30秒以内の場合・・・・・20%
30秒ー60秒の場合 ・・・ 10%
60秒以降の場合 ・・・・・ 5%

などです。要するに早くクリアすること+運要素で高スコアが目指せるマインスイーパです。
現在のコードを載せます。もしわかる方がいらっしゃればご教授願います。

(ちなみにその文が追加出来たら
→ coin.gif は一回限りクリックすることでスコアが1000入る
→ スコアは加算される
→ スコアによってクリア時のアラートを変更するを書き足していきます)

javascript

1<html> 2<head> 3 4<title>危険な宝探し</title> 5 6<SCRIPT LANGUAGE="JavaScript"> 7 8var bom_c; // 毒ガスの数。 9 10// -------------------------------- 11 12map = new Array(100); // 毒ガスの有無のマップ 13 14op_map = new Array(100); // あいているかどうか 15 16op_mapx = new Array(10); // あけるマップX 17 18op_mapy = new Array(10); // あけるマップY 19 20mis = new Array(100); // 右クリックし、毒ガスを表示されたかどうか 21 22var game_over = 0; 23 24function init_map() // マップを作る 25 26{ 27 28for( i=0;i<100; i++ ) { 29 30 map[i] = 0; 31 32 mis[i] = 0; // misも初期化 33 34 op_map[i] = 0; 35 36 document.images[i].src = "base.jpg"; // リセットしたときに置き直す 37 38} 39 40 // 地雷の数を決める 41 42 bom_c = Math.round(Math.random() * 5)+10; 43 44 document.ms.cnt.value=bom_c; // テキストボックスに毒ガスの数を書き込む 45 46 cnt = 0; 47 48 while(1) { 49 50 r = Math.round(Math.random() * 100); 51 52 if( map[r] == 0 ) { 53 54 map[r] = 99; 55 56 cnt++; 57 58 if( cnt == bom_c ) break; 59 60 } 61 62 } 63 for( x=0;x<10;x++ ) { 64 65 for( y=0;y<10;y++ ) { 66 67 tnum = y*10+x; 68 69 if( map[tnum] != 99 ) { 70 71 cnt = get_cnt(x,y); 72 73 map[tnum] = cnt; 74 75 } 76 77 } 78 79 } 80 81 82 83 game_over = 0; 84 85} 86 87// 何個回りにあるか 88 89function get_cnt(x,y) { 90 91 tmp_cnt = 0; 92 93 if( x > 0 ) { // 左端でないなら(左端ならしない) 94 95 num = y * 10 + ( x - 1 ); // 左をチェック 96 97 if( map[num] == 99 ) tmp_cnt++; 98 99 if( y > 0 ) { // 左上をチェック 100 101 num = ( y - 1 ) * 10 + x - 1; 102 103 if( map[num] == 99 ) tmp_cnt++; 104 105 } 106 107 if( y < 9 ) { // 左下をチェック 108 109 num = ( y + 1 ) * 10 + x - 1; 110 111 if( map[num] == 99 ) tmp_cnt++; 112 113 } 114 115 } 116 117 if( x < 9 ) { // 右端でないなら(右端ならしない) 118 119 num = y * 10 + ( x + 1 ); // 右をチェック 120 121 if( map[num] == 99 ) tmp_cnt++; 122 123 if( y > 0 ) { // 右上をチェック 124 125 num = ( y - 1 ) * 10 + x + 1; 126 127 if( map[num] == 99 ) tmp_cnt++; 128 129 } 130 131 if( y < 9 ) { // 右下をチェック 132 133 num = ( y + 1 ) * 10 + x + 1; 134 135 if( map[num] == 99 ) tmp_cnt++; 136 137 } 138 139 } 140 141 if( y > 0 ) { // 上端でないなら、真上をチェック(上端ならしない) 142 143 num = ( y - 1 ) * 10 + x; 144 145 if( map[num] == 99 ) tmp_cnt++; 146 147 } 148 149 if( y < 9 ) { // 下端でないなら、真下をチェック(下端ならしない) 150 151 num = ( y + 1 ) * 10 + x; 152 153 if( map[num] == 99 ) tmp_cnt++; 154 155 } 156 157 158 159 return( tmp_cnt ); 160 161} 162 163function put(x,y) // 置く 164 165{ 166 167 if( game_over == 1 ) { 168 169 alert("「やりなおし」ボタンで生き返りましょう!"); 170 171 } 172 173 174 175 num = y*10+x; 176 177 if( op_map[num] == 1 ) return; // 開いてたら戻る 178 179 open_map(x,y); // マップを開く 180 181 182 183 184 185 186 187 188 189 // 地雷を弾いた時 190 191 if( map[num] == 99 ) { 192 193 alert("帰らぬ人になった"); 194 195 game_over = 1; 196 197 open_bom(); 198 199 return; 200 201 } 202 203 204 205 // クリアチェック 206 207 cnt = 0; 208 209 for( i=0;i<100;i++ ) { 210 211 if( op_map[i] == 0 ) cnt++; // 開いてないマップの数をカウント 212 213 } 214 215 if( cnt == bom_c ) {    // 地雷の数と一致したらクリア 216 217 218 game_over = 1; 219 220 open_bom(); 221 222 return; 223 224 } 225 226 227 228} 229 230function open_bom() // 地雷を開く 231 232{ 233 234 for( i=0;i<100;i++ ) { 235 236 if( ( mis[i] == 1 ) && ( map[i] != 99 ) ){ // misが1かつmapが99でないとき 237 238 document.images[i].src = "100.jpg"; // 地雷×の画像に置き換える 239 240 } 241 242 if( map[i] == 99 ) { 243 244 document.images[i].src = "99.jpg"; 245 246 } 247 248 } 249 250 251 252} 253 254function open_map(x,y)  // 選択されたもののopen_mapの値を1し、画像を変える 255 256{ 257 258 op_cnt = 0; 259 260 op_cnt2 = 1; 261 262 263 264 op_mapx[0] = x; 265 266 op_mapy[0] = y; 267 268 269 270 num = y*10+x; 271 272 273 274 op_map[num] = 1; 275 276 wdata = map[num]+".jpg"; 277 278 document.images[num].src = wdata; 279 280 281 282 if( map[num] == 0 ) { 283 284 open_map2(); 285 286 } 287 288} 289 290function open_map2(x,y)   // クリックしたmapの周りのマップに 291 292// check()を実行させる 293 294{ 295 296 while( 1 ) { 297 298 loop = op_cnt; 299 300 op_cnt = op_cnt2; 301 302 for( i=loop; i<op_cnt;i++ ) { 303 304 305 if( op_mapx[i] > 0 ) { // 左をチェック 306 307 check( op_mapx[i]-1,op_mapy[i] ); 308 309 } 310 311 if( op_mapx[i] < 9 ) { // 右をチェック 312 313 check( op_mapx[i]+1,op_mapy[i] ); 314 315 } 316 317 if( op_mapy[i] > 0 ) { // 上をチェック 318 319 check( op_mapx[i],op_mapy[i]-1 ); 320 321 } 322 323 if( op_mapy[i] < 9 ) { // 下をチェック 324 325 check( op_mapx[i],op_mapy[i]+1 ); 326 327 } 328 329 } 330 331 if( op_cnt == op_cnt2 ) break; 332 333 } 334 335} 336 337function check(x,y) // 上下左右をチェックする 338 339 340 341{ 342 343 num = y*10+x; 344 345 if( op_map[num] == 1 ) return; 346 347 348 349 if( map[num] == 0 ) { // 0の時 350 351 op_mapx[op_cnt2]=x; 352 353 op_mapy[op_cnt2]=y; 354 355 op_cnt2++; // 取るところを増やす 356 357 } 358 359 360 // 0以外の時も開く。 361 362 if( map[num] != 99 ) { 363 364 op_map[num] = 1; 365 366 wdata = map[num]+".jpg"; 367 368 document.images[num].src = wdata; 369 370 } 371 372} 373 374 375function change(x,y) //右クリックしたとき、危険信号を表示 376 377{ 378 num = y*10+x; 379 380 if(op_map[num]==1){ // すでに開いているとき 381 382 return; // 中止 383 } 384 385 if(mis[num]==1){ // 地雷を表示しているとき、 386 387 document.images[num].src = "base.jpg"; // base.jpgを表示 388 389 mis[num] = 0; 390 391 return; 392 393 } 394 395 if(mis[num]==0){ // 地雷を表示してないときは、 396 document.images[num].src = "98.jpg"; // 危険信号を表示 397 398 mis[num] = 1; 399 400 } 401 402} 403 404// --> 405 406</SCRIPT> 407</head> 408 409<BODY BGCOLOR="#685426" 410 TEXT="#ffffdd" LINK="#88ffff" VLINK="#88ffcc" ALINK="#88ffcc" onLoad="init_map()"> 411 412 413<div align="center"> 414<font size=7 color=#FFF424> 415危険な宝探し</font><font size="4" color=#ffffff> 416 417<br>毒ガスを掘り当ててしまわないように宝を見つけよう!</font><font size="2" color=#ffffff> 418 419<br>ー 数字は周辺8マスにある毒ガスの数を表しています ー</font><font size="1" color=#ffffff><hr> 420 421 422<!--- ゲームの枠の定義 --> 423<table border="2"><tr><td> 424 425 426<script language="JavaScript"> //1行に10個のbase.jpgを書いた後に改行を入れる。 427 428<!-- 429 430for(i=0;i<10;i++) { 431 432 for(j=0;j<10;j++) { 433 434 document.write('<a href=JavaScript:put(',j,',',i,')><img src=base.jpg oncontextmenu="change(',j,',',i,');return false" border=0 width=32 height=32></a>'); 435 436 } 437 438 document.write("<br>\n"); 439 440} 441// --> 442</script> 443 444 445</td></tr></table> 446 447 448<form name=ms> 449 450地雷の数は<input type = text value="" alt="" name="cnt" size="5"><br><br> 451 452<input type = button value="リセット" onClick="init_map()"> 453 454</form> 455<hr>

使用画像一覧はこんな感じです。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

babu_babu_baboo

2021/02/12 10:03

まず、書き方が古い。古典文学の様です。デザイン部分はスタイルシートに任せましょう。変数もグローバルになっているのがちらほら見受けれれます。 見た目重視で画像を使いたのかもしれませんが、まずは文字でゲームができるようにしてはどうですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問