This is a fun little program I made of a fruit machine gambler, aka "slot machine". What mistakes am I making? How can I make this better OOP programming, less spaghetti?
var spin = false;
var value1, value2, value3, value4;
var holdFirst, holdSecond, holdThird, holdForth = false;
var first, second, third, forth;
// ******************* constructor
function getValue() {
var num = Math.random();
if(num < 0.2) {
this.card = '<i class="fa fa-anchor"></i>';
}
if(0.2 > num < 0.4 ) {
this.card = '<i class="fa fa-heart"></i>';
}
if(0.4 > num < 0.6){
this.card = '<i class="fa fa-lemon-o"></i>';
}
if(0.6 > num < 1){
this.card = '<i class="fa fa-car"></i>';
}
}
// ***************** initial
function getInitial() {
spin = true;
function startSpining() {
if(spin){
value1 = new getValue();
document.getElementById('value1').innerHTML = value1.card;
value2 = new getValue();
document.getElementById('value2').innerHTML = value2.card;
value3 = new getValue();
document.getElementById('value3').innerHTML = value3.card;
value4 = new getValue();
document.getElementById('value4').innerHTML = value4.card;
}
}
setTimeout(function(){
spin = false;
}, 1000);
setInterval(function(){
startSpining();
}, 10);
}
getInitial();
// ************** hold
function hold(el) {
$(el).toggleClass('active');
switch (el.name) {
case 'first':
holdFirst = !holdFirst;
break;
case 'second':
holdSecond = !holdSecond;
break;
case 'third':
holdThird = !holdThird;
break;
case 'forth':
holdForth = !holdForth;
break;
}
}
// **************** Get new
function getNew() {
var spin = true;
function startSpining(firstCard, secondCard, thirdCard, forthCard) {
this.someMethod = function (x) {
if(spin && !holdFirst){
x = new getValue();
}
};
if(spin && !holdFirst){
value1 = new getValue();
document.getElementById('value1').innerHTML = value1.card;
}
}
function startSpiningFirst() {
if(spin && !holdFirst){
value1 = new getValue();
document.getElementById('value1').innerHTML = value1.card;
}
}
function startSpiningSecond() {
if(spin && !holdSecond){
value2 = new getValue();
document.getElementById('value2').innerHTML = value2.card;
}
}
function startSpiningThird() {
if(spin && !holdThird){
value3 = new getValue();
document.getElementById('value3').innerHTML = value3.card;
}
}
function startSpiningForth() {
if(spin && !holdForth){
value4 = new getValue();
document.getElementById('value4').innerHTML = value4.card;
}
}
setTimeout(function(){
spin = false;
console.log(value1.card, value2.card, value3.card, value4.card);
}, 1000);
setInterval(function(){
startSpiningFirst();
startSpiningSecond();
startSpiningThird();
startSpiningForth();
}, 10);
}
ul>li {
margin: 20px;
width: 60px;
h2 {
font-size: 60px;
}
}
.active {
background: #ff5a5f !important;
}
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="https://code.jquery.com/jquery.min.js"></script>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<div class="jumbotron">
<h1 id="first"></h1>
<ul class="list-inline">
<li> <h2><i id="value1" class="fa"></i></h2> </li>
<li> <h2><i id="value2" class="fa"></i></h2> </li>
<li> <h2><i id="value3" class="fa"></i></h2> </li>
<li> <h2><i id="value4" class="fa"></i></h2> </li>
</ul>
<button class="btn btn-default" onclick="getNew()">Spin</button>
<div class="btn-group" role="group" aria-label="...">
<button type="button" name="first" onclick="hold(this)" class="btn btn-default">Hold First</button>
<button type="button" name="second" onclick="hold(this)" class="btn btn-default">Hold Second</button>
<button type="button" name="third" onclick="hold(this)" class="btn btn-default">Hold Third</button>
<button type="button" name="forth" onclick="hold(this)" class="btn btn-default">Hold Forth</button>
</div>
<h1 id="demo"></h1>
</body>
</html>