diff --git a/index.htm b/index.htm
index 94f0890..e2ff28e 100644
--- a/index.htm
+++ b/index.htm
@@ -182,6 +182,9 @@
+
+
+
diff --git a/js/Blackjack.js b/js/Blackjack.js
index 4746181..bdc9cee 100644
--- a/js/Blackjack.js
+++ b/js/Blackjack.js
@@ -1,11 +1,86 @@
class Blackjack {
deck;
bank;
-
+ bet;
roundActive = false;
- constructor() {
- this.deck = new CardDeck();
- this.bank = new LunaBank();
+ constructor(vue) {
+ this.vue = vue;
+ this.deck = CardDeck.createAndShuffle(vue);
+ this.bank = LunaBank.createEmpty();
+ // this.bank = new LunaBank(vue);
+
+ this.dealer = Hand.createDealerHand();
+ this.player = Hand.create();
+ }
+
+ startRound() {
+ if (this.bet > this.bank.money) {
+ alertify.notify('Not enough money for bet.');
+ this.endRound();
+ }
+
+ this.bank.money -= this.bet;
+
+ this.roundActive = true;
+
+ this.player.pickCard(this.deck.takeOneCard());
+ this.dealer.pickCard(this.deck.takeOneCard());
+ this.player.pickCard(this.deck.takeOneCard());
+ this.dealer.pickCard(this.deck.takeOneCard());
+
+ if (this.dealer.hasBlackjack()) {
+ this.dealer.win();
+ }
+
+ if (this.player.points === 21) {
+ this.player.pass();
+ }
+
+ console.log('Round has started');
+ return true;
+ }
+
+ pass() {
+ if (this.dealer.points === this.player.points) {
+ this.roundActive = false;
+ alertify.notify('Draw!');
+ this.draw();
+ } else if (this.dealer.points > 21) {
+ this.roundActive = false;
+ alertify.notify('Dealer is plus, you win');
+ this.win();
+ } else if (this.dealer.points > this.player.points) {
+ this.roundActive = false;
+ alertify.notify('Dealer Wins');
+ } else if (this.dealer.points < 17) {
+ this.roundActive = false;
+ this.dealer.pickCard(this.deck.takeOneCard());
+ this.pass();
+ } else if (this.player.points > this.dealer.points && this.player.points < 22) {
+ this.roundActive = false;
+ alertify.notify('You win ' + this.bet * 1.5 + '!');
+ this.win();
+ }
+ }
+
+ draw() {
+ this.money = (parseInt(this.money) + parseInt(this.bet));
+ }
+
+ win() {
+ this.money += (parseInt(this.bet) * 2);
+ }
+
+ endRound() {
+ this.roundActive = false;
+ this.lastCard = null;
+ this.status = null;
+ this.dealersHand = [];
+ this.dealer.points = 0;
+ this.usersHand = [];
+ this.player.points = 0;
+
+ this.deck = CardDeck.createAndShuffle();
}
}
\ No newline at end of file
diff --git a/js/CardDeck.js b/js/CardDeck.js
index 332780a..fd95a3b 100644
--- a/js/CardDeck.js
+++ b/js/CardDeck.js
@@ -1,17 +1,17 @@
class CardDeck {
- cardBack;
+ cards;
- constructor(cardBack = 'img/cardBack_red5.png') {
+ constructor(vue) {
+ this.vue = vue;
this.generateDeck();
- this.cardBack = cardBack;
}
- create() {
- return new CardDeck();
+ static create(vue) {
+ return new CardDeck(vue);
}
- createAndShuffle() {
- let cardDeck = new CardDeck();
+ static createAndShuffle(vue) {
+ let cardDeck = new CardDeck(vue);
cardDeck.shuffle();
return cardDeck;
@@ -52,44 +52,44 @@ class CardDeck {
cardDeck.push(card);
});
- this.deck = cardDeck;
+ this.cards = cardDeck;
})
}
shuffle(runs = 1) {
- let cardCount = this.deck.length, t, i;
+ let cardCount = this.cards.length, t, i;
for (let run = 0; run === runs; run++) {
while (cardCount) {
i = Math.floor(Math.random() * cardCount--);
- t = this.deck[cardCount];
- this.deck[cardCount] = this.deck[i];
- this.deck[i] = t;
+ t = this.cards[cardCount];
+ this.cards[cardCount] = this.cards[i];
+ this.cards[i] = t;
}
}
}
cardsInStack() {
- return this.deck.length;
+ return this.cards.length;
}
deckIsEmpty() {
- return this.deck.length > 0 ? true : false;
+ return this.cards.length > 0;
}
- takeOneCard(cardsToDraw = 1) {
- if (this.cardsInStack() > 0) {
-
+ takeOneCard() {
+ if (this.cardsInStack() < 0) {
+ return false;
}
- return this.deck.shift();
+ return this.cards.shift();
}
takeCards(cardsToDraw) {
let drawnCards = [];
for (let run = 0; run === cardsToDraw; run++) {
- drawnCards.push(this.deck.shift());
+ drawnCards.push(this.cards.shift());
}
return drawnCards;
diff --git a/js/Hand.js b/js/Hand.js
index 17a3a02..f56d4d3 100644
--- a/js/Hand.js
+++ b/js/Hand.js
@@ -1,41 +1,36 @@
class Hand {
- drawCardToUser() {
- let vue = this;
+ cards;
+ points;
- let drawnCard = vue.cards.shift();
- vue.usersHand.push(drawnCard);
-
- if (drawnCard.ace && vue.handScore > 10) {
- drawnCard.points = 1;
- }
-
- if ((vue.handScore + drawnCard.points) > 21) {
- let aceCount = this.handIncludesAces(this.usersHand);
- console.log(aceCount + ' aces should be decreased in value');
- }
+ constructor() {
+ this.cards = [];
+ }
- vue.handScore += drawnCard.points;
+ static create() {
+ return new Hand();
}
- drawCardToDealer() {
- let vue = this;
+ static createDealerHand() {
+ let dealerHand = new Hand();
+ dealerHand.isDealer = true;
- let drawnCard = vue.cards.shift();
- vue.dealersHand.push(drawnCard);
+ return dealerHand;
+ }
- if (drawnCard.ace && vue.dealerScore > 10) {
+ /**
+ * Adds given Card to the hand
+ * @param {Card} drawnCard
+ */
+ pickCard(drawnCard) {
+ if (drawnCard.ace && this.points > 10) {
drawnCard.points = 1;
}
- if ((vue.dealerScore + drawnCard.points) > 21) {
- let aceCount = this.handIncludesAces(this.dealersHand);
- console.log(aceCount + ' aces should be decreased in value');
- }
-
- vue.dealerScore += drawnCard.points;
+ this.cards.push(drawnCard);
+ this.points = (this.points + drawnCard.points);
}
- handIncludesAces(hand) {
+ includesAces(hand) {
let aceCount = 0;
hand.forEach((card) => {
@@ -47,91 +42,11 @@ class Hand {
return aceCount;
}
- handHasBlackJack(score) {
- return score === 21;
- }
-
- isPlus(score) {
- return score > 21;
- }
-
- startRound() {
- if (this.bet > this.money) {
- alertify.notify('Not enough money for bet.');
- return false;
- }
-
- this.money -= this.bet;
-
- this.initiated = true;
- this.endRound();
-
- this.roundActive = true;
-
- this.drawCardToUser();
- this.drawCardToDealer();
- this.drawCardToUser();
- this.drawCardToDealer();
-
- if (this.handHasBlackJack(this.dealerScore)) {
- this.dealerWon();
- }
-
- if (this.handScore === 21) {
- this.pass();
- }
- }
-
- drawAnotherCard() {
- this.drawCardToUser();
-
- if (this.isPlus(this.handScore)) {
- alertify.notify('Hand is plus, you lose.')
- this.roundActive = false;
- }
+ hasBlackjack() {
+ return this.points === 21;
}
- pass() {
- if (this.dealerScore === this.handScore) {
- this.roundActive = false;
- alertify.notify('Draw!');
- this.draw();
- } else if (this.dealerScore > 21) {
- this.roundActive = false;
- alertify.notify('Dealer is plus, you win');
- this.win();
- } else if (this.dealerScore > this.handScore) {
- this.roundActive = false;
- alertify.notify('Dealer Wins');
- } else if (this.dealerScore < 17) {
- this.roundActive = false;
- this.drawCardToDealer();
- this.pass();
- } else if (this.handScore > this.dealerScore && this.handScore < 22) {
- this.roundActive = false;
- alertify.notify('You win ' + this.bet * 1.5 + '!');
- this.win();
- }
- }
-
- draw() {
- this.money = (parseInt(this.money) + parseInt(this.bet));
- }
-
- win() {
- this.money += (parseInt(this.bet) * 2);
- }
-
- endRound() {
- this.roundActive = false;
- this.lastCard = null;
- this.status = null;
- this.dealersHand = [];
- this.dealerScore = 0;
- this.usersHand = [];
- this.handScore = 0;
-
- this.cards = this.generateDeck();
- this.shuffleDeck();
+ isPlus() {
+ return this.points > 21;
}
}
\ No newline at end of file
diff --git a/js/LunaBank.js b/js/LunaBank.js
index df69fa1..638d378 100644
--- a/js/LunaBank.js
+++ b/js/LunaBank.js
@@ -1,37 +1,45 @@
class LunaBank {
- constructor(application) {
- this._application = application;
- }
+ money;
+ account;
- connect() {
- // TODO: Implement method
- return false;
+ constructor(vue, application) {
+ this.vue = vue;
+ this.application = application;
+ this.money = 0;
+ this.account = 0;
+
+ this.connect();
}
- get application() {
- return this._application;
+ static createEmpty() {
+ let bank = new LunaBank(null, 'Testing');
+ bank.money = 1000;
+ bank.account = 5000;
+
+ return bank;
}
- set application(application) {
- this._application = application;
+ connect() {
+ // TODO: Implement method
+ return false;
}
// TODO: re-write methods
- //
// checkUserStatus() {
- // let vue = this;
+ // let bank = this;
+ //
// axios.get('https://luna-development.net/bank/get')
// .then(function (response) {
- // vue.bank = Number(response.data.value);
- // vue.username = response.data.name;
- // vue.avatar = '/storage/avatars/' + response.data.avatar;
- // vue.bankIsActive = true;
- // vue.$forceUpdate;
- //
- // if (Number(vue.bank) <= Number(0)) {
- // vue.money = 5000;
+ // bank.account = Number(response.data.value);
+ // bank.username = response.data.name;
+ // bank.avatar = '/storage/avatars/' + response.data.avatar;
+ // bank.isOnline = true;
+ // bank.$forceUpdate;
+ //
+ // if (Number(bank.account) <= Number(0)) {
+ // bank.money = 5000;
// } else {
- // alertify.notify('Welcome back, ' + vue.username + '!', 'custom')
+ // alertify.notify('Welcome back, ' + bank.username + '!', 'custom')
// }
// })
// .catch(function (error) {
@@ -39,8 +47,8 @@ class LunaBank {
// alertify.notify("Can't connect to Luna Bank, are you logged in?", 'custom');
//
// // Removed default money here if bank empty / dead
- // vue.username = 'Gast';
- // vue.bankIsActive = false;
+ // bank.username = 'Gast';
+ // bank.isOnline = false;
// });
// }
//
diff --git a/js/app.js b/js/app.js
index aa1c646..7b5bde8 100644
--- a/js/app.js
+++ b/js/app.js
@@ -211,6 +211,143 @@ let app = new Vue({
this.cards = this.generateDeck();
this.shuffleDeck();
},
+
+ checkUserStatus() {
+ let vue = this;
+ axios.get('https://luna-development.net/bank/get')
+ .then(function (response) {
+ vue.bank = Number(response.data.value);
+ vue.username = response.data.name;
+ vue.avatar = '/storage/avatars/' + response.data.avatar;
+ vue.bankIsActive = true;
+ vue.$forceUpdate;
+
+ if (Number(vue.bank) <= Number(0)) {
+ vue.money = 5000;
+ } else {
+ alertify.notify('Welcome back, ' + vue.username + '!', 'custom')
+ }
+ })
+ .catch(function (error) {
+ console.log(error);
+ alertify.notify("Can't connect to Luna Bank, are you logged in?", 'custom');
+
+ // Removed default money here if bank empty / dead
+ vue.username = 'Gast';
+ vue.bankIsActive = false;
+ });
+ },
+
+ updateBankAccount() {
+ let vue = this;
+
+ if (vue.bankIsActive) {
+ axios.get('https://luna-development.net/bank/get')
+ .then(function (response) {
+ vue.bank = Number(response.data.value);
+ vue.username = response.data.name;
+ vue.avatar = '/storage/avatars/' + response.data.avatar;
+ vue.$forceUpdate;
+ })
+ .catch(function (error) {
+ console.log(error);
+ vue.username = 'Gast';
+ vue.bankIsActive = false;
+ vue.avatar = null;
+ });
+ }
+ },
+
+ transferToBank() {
+ let vue = this;
+
+ if (vue.toBank <= vue.money && vue.toBank > 0) {
+ let bankSave = vue.bank;
+ let moneySave = vue.money;
+ let toBankSave = vue.toBank;
+
+ vue.bank = Number(vue.bank) + Number(vue.toBank);
+ vue.money = Number(vue.money) - Number(vue.toBank);
+
+ axios.post('/bank/store', {
+ value: vue.bank,
+ app: 'BlackJack',
+ description: 'Deposit',
+ amount: toBankSave
+ }).then(function (response) {
+ // i'm the master of self-advertisement
+ // speaking of advertisement? check out the fresh servers at luna-development.net
+ alertify.notify('Successfully transfered ' + toBankSave + ' $ to your account.', 'custom');
+ }).catch(function (error) {
+ vue.bank = bankSave;
+ vue.money = moneySave;
+
+ alertify.notify('Error while process bank-transaction.', 'custom');
+ });
+
+ vue.toBank = undefined;
+ } else if (vue.toBank === undefined) {
+ return;
+ } else {
+ vue.toBank = undefined;
+ }
+ },
+
+ transferFromBank() {
+ let vue = this;
+
+ // Number() all over again
+ if (vue.toMoney <= vue.bank && vue.toMoney > 0) {
+ let bankSave = vue.bank;
+ let moneySave = vue.money;
+ let toMoneySave = vue.toMoney;
+
+ vue.bank = Number(vue.bank) - Number(vue.toMoney);
+ vue.money = Number(vue.money) + Number(vue.toMoney);
+
+ axios.post('/bank/store', {
+ value: vue.bank,
+ app: 'BlackJack',
+ description: 'Withdrawal',
+ amount: toMoneySave
+ }).then(function (response) {
+ // i'm the master of self-advertisement, speaking of advertisement?
+ // check out the fresh servers on luna-development.net
+ alertify.notify('Successfully got ' + toMoneySave + ' $ from your account', 'custom');
+ }).catch(function (error) {
+ vue.bank = bankSave;
+ vue.money = moneySave;
+
+ alertify.notify('Error while process bank-transaction.', 'custom');
+ });
+
+ vue.toMoney = undefined;
+ } else if (vue.toMoney === undefined || vue.toMoney <= 0) {
+ return;
+ } else {
+ vue.toMoney = undefined;
+ }
+ },
+
+ bankButtonEnter(button, direction) {
+ let vue = this;
+ console.log('protocol: ' + direction);
+
+ if (direction === 'from') {
+ vue.transferFromBank();
+ } else if (direction === 'to') {
+ vue.transferToBank();
+ } else {
+ alertify.notify('Error while process bank-transaction.', 'custom');
+ return;
+ }
+
+ document.getElementById(button).click();
+ },
+
+ isMoney(number) {
+ return new Intl.NumberFormat('de-DE', {style: 'decimal'}).format(number);
+ },
},
created() {
this.cardDeck = this.generateDeck();