プロが教える店舗&オフィスのセキュリティ対策術

上から 1, 2, 3, 4 桁で、ナンバーズ 4 の円盤と同じ数字の並びを配列にしてみました
let num_1_digit = [ 1, 0, 9, 8, 7, 6, 5, 4, 3, 2 ];
let num_2_digit = [ 1, 8, 5, 2, 9, 6, 3, 0, 7, 4 ];
let num_3_digit = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 ];
let num_4_digit = [ 1, 4, 7, 0, 3, 6, 9, 2, 5, 8 ];

現在、作っている部分は以下です。
円盤は 1 秒間、約 3 回転している。
円盤が止まるまでは 約 0.2 秒。

let i = 0;
let d = new Date
while ( new Date() - d < 200 ) {

}

円盤が止まるまでは 約 0.2 秒は上記で概ね、良いと思いますが、
円盤の秒間、約 3 回転を表現する方法がわかりませんでした。

わかる方おりましたら、参考にさせて下さい。
宜しくお願い致します

A 回答 (3件)

面白そうだったので、作ってみました。



わたしはナンバーズ4の抽選を見たことが無いので、
合っているかどうかは分かりませんが、

https://ts4-net.com/husya.html

このサイトを参考に、

>みずほ銀行のお嬢さんが スイッチを押すと矢が発射され
>発射間隔は約1秒ぐらいで

という条件を付加しています。

<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>numbers4</title>
</head>
<body>
<button onclick="roulette()">ルーレットを回す</button>
<button onclick="arrow()">矢を放つ</button>
<p id="num0"></p>
<p id="num1"></p>
<p id="num2"></p>
<p id="num3"></p>
<script>
let num_digit = [[1, 0, 9, 8, 7, 6, 5, 4, 3, 2],
[1, 8, 5, 2, 9, 6, 3, 0, 7, 4],
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
[1, 4, 7, 0, 3, 6, 9, 2, 5, 8]];

let i = [0, 0, 0, 0]; // 初期値
const len = num_digit[0].length // 10個
const speed = 1000 / (3 * len); // 1秒に3回転
const timeLag = 200; // 0.2秒
let timer = []; // setIntervalする
let num = [];
num[0] = document.getElementById('num0');
num[1] = document.getElementById('num1');
num[2] = document.getElementById('num2');
num[3] = document.getElementById('num3');

function roulette() {
for (let j = 0; j < 4; j++) {
timer[j] = window.setInterval(function () {
i[j]++; // 1足して
i[j] %= len; //10で割った余り
num[j].textContent = num_digit[j][i[j]];
}, speed);
}
}

function arrow() {
for (let j = 0; j < 4; j++) {
setTimeout(function () {
window.clearInterval(timer[j]);
num[j].textContent = num_digit[j][i[j]];
}, timeLag + 1000 * j);
}
}
</script>
</body>
</html>
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

すごいですね !
参考に勉強致します !

お礼日時:2021/08/24 17:39

> このようなループは不可能ということですね。



そういう事、ですね。
大体、コンピュータ自体、計算が苦手な人間に代わり、計算を如何に早く終了するか、と言う事が主眼に設計されてます。
当然、単位時間毎にどれだけ大量の計算が行われるのか、と言うのが目的であって、貴方の言うように「時間に束縛されて計算する」ってのは本来の使用目的から言うと明らかにズレてるんですよ。
まぁ、大昔のPCだと例えばNEC-9801とかで前期型のマシンで動いてたゲームを後期型に持ってきて動かすとクロック数が違い過ぎてゲームが早回しになっちゃうような事があって、わざとwait命令(何秒間か停止させる)を挟んで、一定速度にする、なんつーテクニックもあった事もあったんですが、今のPCの環境だと推奨されません。
昔のPCだとシングルタスクだったんで、どっちみちゲームを起動すればPC丸ごとゲームに持っていかれたんで、wait命令を乱発しても他のソフトに影響は無かったんですが、今だとマルチタスク前提なんで、一つのソフトで「パフォーマンスをワザと落として」全体に影響を与える、と言うのは好まれないのです。

いずれにせよ、例えばこれはダイドードリンコの「当たり付き自販機」なんかでも同じなんですよ。貴方が硬貨入れて飲みたい缶のボタンを押した時点で全ての計算は終わってる。
結局貴方がその後「当たり」なのか「ハズレ」なのか待ってる時間は実は無駄で単なる演出です。ライトがピカピカ付いて光ってる部分が移動してても、これは「計算中」を表していない。もう結果は出てるのです。そういう演出、なだけですね。
同様に、コンピュータのおみくじなんかも、色々と演出されていますが、マジでスイッチ押した時点で結果は既に出てるのです。

写真: 桃太郎電鉄。
サイコロが転がる演出が成されてるが、これもコントローラのボタンが押された時点で「何の目が出るのか」は既に決定されている。「転がってる」のは演出であり、止まった目が「既に決定してる結果」と一致するようにプログラムされてるに過ぎない。
「ナンバーズ 4 の数列をランダムで出力す」の回答画像2
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2021/08/23 21:50

あー、分かった。

何やりたいか分かったわ。

この質問でしょ?

https://oshiete.goo.ne.jp/qa/12530217.html

なんでそんな事したいんだろ、とか不思議に思ってたんだけど、合点が行ったわ。
なるほど。

ところで、残念なお知らせがあります。
こういうのって確かにあるよね?ゲームとかで。
でもね。実際はね。
「一瞬に計算は終わってる」の。
上のリンクで #1さんが言ってるように乱数使って一瞬に計算してるんですよ。

でね。例えばルーレットみたいになってるとして。
時間かけて回ってるのは映像的な演出なんですよ。実際は内部的にはもう、例えばスタートボタン的なモノ押したら結果はすぐ出てるのね。

だからこのテのゲームってのは「内側のロジック」と「映像的な演出」ってのが分離してるんです。もう結果は最初っから決まってるんだけど、そうじゃなく見えるように演出してるだけなんですよ。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

このようなループは不可能ということですね。

お礼日時:2021/08/23 19:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!