I'm in the process of building an app based on the card game "War" for practice to better understand the MVC model. I would appreciate feedback on if I'm on the right track with my objects interactions so far regarding MVC and if there's any other glaring issues with my code you discover.
Here's my object of cards which is the model, not the full deck and using placeholders for now, followed by the View and controller.
var deckOfCards = {
player: [],
computer: [],
cards: [
{
cardValue: 1,
cardDisplay: "🂡"
},
{
cardValue: 2,
cardDisplay: "🂢"
},
{
cardValue: 3,
cardDisplay: "🂣"
},
{
cardValue: 4,
cardDisplay: "🂤"
},
{
cardValue: 5,
cardDisplay: "🂥"
},
{
cardValue: 6,
cardDisplay: "🂦"
},
var view = {
init: function () {
this.computerCard = document.getElementById("computer-card");
this.playerCard = document.getElementById("player-card");
this.outCome = document.getElementById("outcome-text");
this.gameOverOverlay = document.getElementById("gameover-overlay");
this.currentCardCount = document.getElementById("card-count");
this.shuffleBtn = document.getElementById("shuffle-btn");
this.shuffleBtn.addEventListener("click", function () {
this.style.visibility = "hidden";
controller.shuffle();
controller.deal(deckOfCards.cards);
controller.cardCount();
});
this.playCardBtn = document.getElementById("play-card-btn");
this.playCardBtn.addEventListener("click", function () {
controller.checkValues();
view.render();
controller.cardCount();
});
this.resetBtn = document.getElementById("reset-game");
this.resetBtn.addEventListener("click", function () {
view.gameOverOverlay.style.display = "none";
view.shuffleBtn.style.visibility = "visible";
controller.removeCards();
controller.clearPlayArea();
})
},
render: function () {
this.playerCard.innerHTML = deckOfCards.player[0].cardDisplay;
this.computerCard.innerHTML = deckOfCards.computer[0].cardDisplay;
},
gameOver: function (winner) {
this.gameOverOverlay.style.display = "block";
this.outCome.innerHTML = winner;
}
}
var controller = {
shuffle: function () {
deckOfCards.cards.sort(function () {
return 0.5 - Math.random();
})
},
deal: function (arr) {
for (var i = 0; i < 26; i++) {
deckOfCards.player.push(arr[i]);
}
for (var j = 26; j < 52; j++) {
deckOfCards.computer.push(arr[j])
}
console.log(deckOfCards.player)
console.log(deckOfCards.computer);
},
cardCount: function () {
view.currentCardCount.innerHTML = deckOfCards.player.length;
},
checkValues: function () {
var newCard,
playerCards = deckOfCards.player,
computerCards = deckOfCards.computer;
if (playerCards[0].cardValue > computerCards[0].cardValue) {
playerCards.push(computerCards[0]);
computerCards.shift();
newCard = playerCards.shift();
playerCards.push(newCard)
this.winner();
} else if (playerCards[0].cardValue < computerCards[0].cardValue) {
computerCards.push(playerCards[0]);
deckOfCards.player.shift();
newCard = computerCards.shift();
computerCards.push(newCard)
this.winner();
},
removeCards: function () {
deckOfCards.player = [];
deckOfCards.computer = [];
},
clearPlayArea: function () {
view.computerCard.innerHTML = " ";
view.playerCard.innerHTML = " ";
},
winner: function () {
if (deckOfCards.player.length === 0) {
view.gameOver("You Lose")
} else if (deckOfCards.computer.length === 0) {
view.gameOver("You Win");
}
},
init: function () {
view.init();
}
}
controller.init();
var view =
you don't close your list of cards or youdeckOfCards
object. \$\endgroup\$