![見出し画像](https://assets.st-note.com/production/uploads/images/111970428/rectangle_large_type_2_243aeefcb58d893aad2c92c3b62feffe.png?width=1200)
【ワンピース】スロットゲームをプログラミングで作成(JavaScript)
JavaScriptを使ってワンピースのスロットゲームを作成してみました。
なかなか揃えるのが難しいです。皆さんもやってみてください!!
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>スロットゲーム</title>
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="stylesheet" media="screen" href="style.css">
</head>
<body>
<div class="slot">
<div id="slot-frame">
<ul class="reels">
<li class="reel"><img src="img/franky.png"></li>
<li class="reel"><img src="img/luffy.png"></li> <!-- index 7 -->
<li class="reel"><img src="img/nami.png"></li> <!-- index 6 -->
<li class="reel"><img src="img/zoro.png"></li> <!-- index 5 -->
<li class="reel"><img src="img/usopp.png"></li> <!-- index 4 -->
<li class="reel"><img src="img/sanji.png"></li> <!-- index 3 -->
<li class="reel"><img src="img/robin.png"></li> <!-- index 2 -->
<li class="reel"><img src="img/chopper.png"></li><!-- index 1 -->
<li class="reel"><img src="img/franky.png"></li> <!-- index 0 初期値 -->
<li class="reel"><img src="img/luffy.png"></li>
</ul>
<ul class="reels">
<li class="reel"><img src="img/sanji.png"></li>
<li class="reel"><img src="img/robin.png"></li>
<li class="reel"><img src="img/zoro.png"></li>
<li class="reel"><img src="img/luffy.png"></li>
<li class="reel"><img src="img/nami.png"></li>
<li class="reel"><img src="img/usopp.png"></li>
<li class="reel"><img src="img/chopper.png"></li>
<li class="reel"><img src="img/franky.png"></li>
<li class="reel"><img src="img/sanji.png"></li> <!-- index 0 初期値 -->
<li class="reel"><img src="img/robin.png"></li>
</ul>
<ul class="reels">
<li class="reel"><img src="img/robin.png"></li>
<li class="reel"><img src="img/sanji.png"></li>
<li class="reel"><img src="img/luffy.png"></li>
<li class="reel"><img src="img/usopp.png"></li>
<li class="reel"><img src="img/chopper.png"></li>
<li class="reel"><img src="img/franky.png"></li>
<li class="reel"><img src="img/nami.png"></li>
<li class="reel"><img src="img/zoro.png"></li>
<li class="reel"><img src="img/robin.png"></li> <!-- index 0 初期値 -->
<li class="reel"><img src="img/sanji.png"></li>
</ul>
</div>
</div>
<div>
<button type="button" class="stop-btn" data-val="0" disabled="true"></button>
<button type="button" class="stop-btn" data-val="1" disabled="true"></button>
<button type="button" class="stop-btn" data-val="2" disabled="true"></button>
</div>
<div>
<button type="button" id="start-btn">ゲームスタート</button>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="index.js"></script>
</body>
</html>
body {
text-align: center;
padding: 0;
margin: 0;
background-color: antiquewhite;
}
.slot {
width: 90%;
height: 500px;
overflow: hidden;
margin: auto;
margin-top: 10px;
border: solid 1px #333;
background-color: aliceblue;
}
#slot-frame {
height: 500px;
position: relative;
overflow: hidden;
border: solid 1px #333;
}
ul {
list-style: none;
}
.reels {
width: 31%;
position: absolute;
}
.reels:nth-child(1) {
left: 0;
}
.reels:nth-child(2) {
left: 33%;
}
.reels:nth-child(3) {
right: 0;
}
.reel {
height: 270px;
}
.reel img {
display: block;
margin: auto;
height: 270px;
}
.stop-btn {
display: inline-block;
padding: 35px 35px;
margin-top: 10px;
margin: 10px 70px;
background-color: rgb(237, 23, 23);
border-bottom: solid 4px #627295;
border-radius: 60px;
}
.stop-btn:active {
-webkit-transform: translateY(4px);
transform: translateY(4px);
border-bottom: none;
}
#start-btn {
display: inline-block;
padding: 20px 40px;
background-color: rgb(215, 97, 0);
color: #FFF;
border-bottom: solid 4px #627295;
border-radius: 10px;
font-size: 30px;
}
#start-btn:active {
-webkit-transform: translateY(4px);
transform: translateY(4px);
border-bottom: none;
}
let slot_frame = document.getElementById("slot-frame");
let reel = document.getElementsByClassName("reel");
let reels = document.getElementsByClassName("reels");
let start_btn = document.getElementById("start-btn");
let stop_btn = document.getElementsByClassName("stop-btn");
let sec = 100; //スロットのリール回転速度(実行毎秒数)
let stopReelFlag = []; //スロットのリール停止フラグ
let reelCounts = []; //どの画像をどの位置にさせるか
let slotFrameHeight; //フレームの大きさ
let slotReelsHeight; //リール(画像)全体の大きさ
let slotReelItemHeight; //リール(画像)1個の大きさ
let slotReelStartHeight;//画像の初期値
let Slot = {
init: function() { //初期化
stopReelFlag[0] = stopReelFlag[1] = stopReelFlag[2] = false;
//[false, false, false] 回転させていたら止まらない状態
reelCounts[0] = reelCounts[1] = reelCounts[2] = 0;
//[0, 0, 0] 最初に中央にくる画像の設定
},
start: function () { //クリックイベント
Slot.init();
for (let index = 0; index < 3; index++) {
Slot.animation(index); //スロット3つ動かす
}
},
stop: function (i) { //ストップボタンのクリックイベント
stopReelFlag[i] = true; //animateのループから抜け出せる
if (stopReelFlag[0] && stopReelFlag[1] && stopReelFlag[2]) {
start_btn.removeAttribute("disabled"); //スタートボタンの機能を機能させる
}
},
resetLocationInfo: function () { //最初の位置を設定
slotFrameHeight = slot_frame.offsetHeight;
//offsetHeight = height + padding(上下) + border(上下)
//console.log(slotFrameHeight); 502(=500 + 0 + 2)
slotReelsHeight = reels[0].offsetHeight;
//フレームの中にある画像全体の大きさ
//console.log(slotReelsHeight); 2700(=270px×10個)
slotReelItemHeight = reel[0].offsetHeight;
//フレームの中にある1つ分の画像全体の大きさ
//console.log(slotReelItemHeight); 270
slotReelStartHeight = -slotReelsHeight; // -2700
slotReelStartHeight = slotReelStartHeight + slotFrameHeight
//画像末端がフレームのトップ 画像末端がフレームの末端
- (slotFrameHeight / 2) + slotReelItemHeight * 3 / 2;
//画像末端がフレームの中央 画像1.5枚分下げる
for (let i = 0; i < reels.length; i++){
reels[i].style.top = String(slotReelStartHeight) + "px";
}
},
animation: function (index) { //スロットを動かす
if (reelCounts[index] >= 8) {
reelCounts[index] = 0;
}
//animate( CSSプロパティ, 速度, イージング関数名, アニメーション完了後に実行する関数 );
$('.reels').eq(index).animate({
'top': slotReelStartHeight + (reelCounts[index] * slotReelItemHeight)
//indexが増えるたびに、画像1つ分下がる
},{
duration: sec, //回転速度
easing: 'linear', //常に一定の速度
complete: function () {
if (stopReelFlag[index]) { //stopReelFlag[index]がtrueになるまでループ
return;
}
reelCounts[index]++;
Slot.animation(index);
}
});
},
};
window.onload = function () {
Slot.init();
Slot.resetLocationInfo();
start_btn.addEventListener("click", function(e){
e.target.setAttribute("disabled", true) //スタートボタンを無効化
Slot.start();
for(let i = 0; i < stop_btn.length; i++){
stop_btn[i].removeAttribute("disabled"); //ストップボタンを機能させる
}
});
for(let i = 0; i < stop_btn.length ; i++ ){
stop_btn[i].addEventListener("click", function (e) {
Slot.stop(e.target.getAttribute('data-val'));//どのボタンをストップさせるか
})
}
};
この記事が気に入ったらサポートをしてみませんか?