mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-21 23:00:43 -08:00
165 lines
4.7 KiB
JavaScript
165 lines
4.7 KiB
JavaScript
// WAR
|
|
//
|
|
// Original conversion from BASIC to Javascript by Oscar Toledo G. (nanochess)
|
|
//
|
|
|
|
function print(str) {
|
|
document.getElementById("output").appendChild(document.createTextNode(str));
|
|
}
|
|
|
|
function tab(space) {
|
|
let str = "";
|
|
while (space-- > 0) {
|
|
str += " ";
|
|
}
|
|
return str;
|
|
}
|
|
|
|
function input() {
|
|
return new Promise(function (resolve) {
|
|
const input_element = document.createElement("INPUT");
|
|
|
|
print("? ");
|
|
input_element.setAttribute("type", "text");
|
|
input_element.setAttribute("length", "50");
|
|
document.getElementById("output").appendChild(input_element);
|
|
input_element.focus();
|
|
input_element.addEventListener("keydown", function (event) {
|
|
if (event.keyCode == 13) {
|
|
const input_str = input_element.value;
|
|
document.getElementById("output").removeChild(input_element);
|
|
print(input_str);
|
|
print("\n");
|
|
resolve(input_str);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
async function askYesOrNo(question) {
|
|
while (1) {
|
|
print(question);
|
|
const str = (await input()).toUpperCase();
|
|
if (str === "YES") {
|
|
return true;
|
|
}
|
|
else if (str === "NO") {
|
|
return false;
|
|
}
|
|
else {
|
|
print("YES OR NO, PLEASE. ");
|
|
}
|
|
}
|
|
}
|
|
|
|
async function askAboutInstructions() {
|
|
const playerWantsInstructions = await askYesOrNo("DO YOU WANT DIRECTIONS");
|
|
if (playerWantsInstructions) {
|
|
print("THE COMPUTER GIVES YOU AND IT A 'CARD'. THE HIGHER CARD\n");
|
|
print("(NUMERICALLY) WINS. THE GAME ENDS WHEN YOU CHOOSE NOT TO\n");
|
|
print("CONTINUE OR WHEN YOU HAVE FINISHED THE PACK.\n");
|
|
}
|
|
print("\n");
|
|
print("\n");
|
|
}
|
|
|
|
function createGameDeck(cards, gameSize) {
|
|
const deck = [];
|
|
const deckSize = cards.length;
|
|
for (let j = 0; j < gameSize; j++) {
|
|
let card;
|
|
|
|
// Compute a new card index until we find one that isn't already in the new deck
|
|
do {
|
|
card = Math.floor(deckSize * Math.random());
|
|
} while (deck.includes(card));
|
|
deck.push(card);
|
|
}
|
|
return deck;
|
|
}
|
|
|
|
function computeCardValue(cardIndex) {
|
|
return Math.floor(cardIndex / 4);
|
|
}
|
|
|
|
function printGameOver(playerScore, computerScore) {
|
|
print("\n");
|
|
print("\n");
|
|
print(`WE HAVE RUN OUT OF CARDS. FINAL SCORE: YOU: ${playerScore} THE COMPUTER: ${computerScore}\n`);
|
|
print("\n");
|
|
}
|
|
|
|
function printTitle() {
|
|
print(tab(33) + "WAR\n");
|
|
print(tab(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n");
|
|
print("\n");
|
|
print("\n");
|
|
print("\n");
|
|
print("THIS IS THE CARD GAME OF WAR. EACH CARD IS GIVEN BY SUIT-#\n");
|
|
print("AS S-7 FOR SPADE 7. ");
|
|
}
|
|
|
|
function printCards(playerCard, computerCard) {
|
|
print("\n");
|
|
print(`YOU: ${playerCard}\tCOMPUTER: ${computerCard}\n`);
|
|
}
|
|
|
|
const cards = [
|
|
"S-2", "H-2", "C-2", "D-2",
|
|
"S-3", "H-3", "C-3", "D-3",
|
|
"S-4", "H-4", "C-4", "D-4",
|
|
"S-5", "H-5", "C-5", "D-5",
|
|
"S-6", "H-6", "C-6", "D-6",
|
|
"S-7", "H-7", "C-7", "D-7",
|
|
"S-8", "H-8", "C-8", "D-8",
|
|
"S-9", "H-9", "C-9", "D-9",
|
|
"S-10", "H-10", "C-10", "D-10",
|
|
"S-J", "H-J", "C-J", "D-J",
|
|
"S-Q", "H-Q", "C-Q", "D-Q",
|
|
"S-K", "H-K", "C-K", "D-K",
|
|
"S-A", "H-A", "C-A", "D-A"
|
|
];
|
|
|
|
// Main control section
|
|
async function main() {
|
|
printTitle();
|
|
await askAboutInstructions();
|
|
|
|
let computerScore = 0;
|
|
let playerScore = 0;
|
|
|
|
// Generate a random deck
|
|
const gameSize = cards.length; // Number of cards to shuffle into the game deck. Can be <= cards.length.
|
|
const deck = createGameDeck(cards, gameSize);
|
|
let shouldContinuePlaying = true;
|
|
|
|
while (deck.length > 0 && shouldContinuePlaying) {
|
|
const playerCard = deck.shift(); // Take a card
|
|
const computerCard = deck.shift(); // Take a card
|
|
printCards(cards[playerCard], cards[computerCard]);
|
|
|
|
const playerCardValue = computeCardValue(playerCard);
|
|
const computerCardValue = computeCardValue(computerCard);
|
|
if (playerCardValue < computerCardValue) {
|
|
computerScore++;
|
|
print("THE COMPUTER WINS!!! YOU HAVE " + playerScore + " AND THE COMPUTER HAS " + computerScore + "\n");
|
|
} else if (playerCardValue > computerCardValue) {
|
|
playerScore++;
|
|
print("YOU WIN. YOU HAVE " + playerScore + " AND THE COMPUTER HAS " + computerScore + "\n");
|
|
} else {
|
|
print("TIE. NO SCORE CHANGE.\n");
|
|
}
|
|
|
|
if (deck.length === 0) {
|
|
printGameOver(playerScore, computerScore);
|
|
}
|
|
else {
|
|
shouldContinuePlaying = await askYesOrNo("DO YOU WANT TO CONTINUE");
|
|
}
|
|
}
|
|
print("THANKS FOR PLAYING. IT WAS FUN.\n");
|
|
print("\n");
|
|
}
|
|
|
|
main();
|