mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-22 07:10:42 -08:00
Merge pull request #409 from millwardesque/main
Refactoring for Javascript WAR
This commit is contained in:
@@ -1,60 +1,95 @@
|
||||
// WAR
|
||||
//
|
||||
// Converted from BASIC to Javascript by Oscar Toledo G. (nanochess)
|
||||
// Original conversion from BASIC to Javascript by Oscar Toledo G. (nanochess)
|
||||
//
|
||||
|
||||
function print(str)
|
||||
{
|
||||
function print(str) {
|
||||
document.getElementById("output").appendChild(document.createTextNode(str));
|
||||
}
|
||||
|
||||
function input()
|
||||
{
|
||||
var input_element;
|
||||
var input_str;
|
||||
|
||||
return new Promise(function (resolve) {
|
||||
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_str = undefined;
|
||||
input_element.addEventListener("keydown", function (event) {
|
||||
if (event.keyCode == 13) {
|
||||
input_str = input_element.value;
|
||||
document.getElementById("output").removeChild(input_element);
|
||||
print(input_str);
|
||||
print("\n");
|
||||
resolve(input_str);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function tab(space)
|
||||
{
|
||||
var str = "";
|
||||
while (space-- > 0)
|
||||
function tab(space) {
|
||||
let str = "";
|
||||
while (space-- > 0) {
|
||||
str += " ";
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
var a = [, "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"];
|
||||
function input() {
|
||||
return new Promise(function (resolve) {
|
||||
const input_element = document.createElement("INPUT");
|
||||
|
||||
var l = [];
|
||||
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);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Main control section
|
||||
async function main()
|
||||
{
|
||||
async function askYesOrNo(question) {
|
||||
while (1) {
|
||||
print(question);
|
||||
const str = await input();
|
||||
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");
|
||||
@@ -62,72 +97,65 @@ async function main()
|
||||
print("\n");
|
||||
print("THIS IS THE CARD GAME OF WAR. EACH CARD IS GIVEN BY SUIT-#\n");
|
||||
print("AS S-7 FOR SPADE 7. ");
|
||||
while (1) {
|
||||
print("DO YOU WANT DIRECTIONS");
|
||||
str = await input();
|
||||
if (str == "YES") {
|
||||
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");
|
||||
break;
|
||||
}
|
||||
if (str == "NO")
|
||||
break;
|
||||
print("YES OR NO, PLEASE. ");
|
||||
}
|
||||
print("\n");
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
a1 = 0;
|
||||
b1 = 0;
|
||||
p = 0;
|
||||
let computerScore = 0;
|
||||
let playerScore = 0;
|
||||
|
||||
// Generate a random deck
|
||||
for (j = 1; j <= 52; j++) {
|
||||
do {
|
||||
l[j] = Math.floor(52 * Math.random()) + 1;
|
||||
for (k = 1; k < j; k++) {
|
||||
if (l[k] == l[j]) // Already in deck?
|
||||
break;
|
||||
}
|
||||
} while (j != 1 && k < j) ;
|
||||
}
|
||||
l[j] = 0; // Mark the end of the 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 (1) {
|
||||
m1 = l[++p]; // Take a card
|
||||
m2 = l[++p]; // Take a card
|
||||
print("\n");
|
||||
print("YOU: " + a[m1] + "\tCOMPUTER: " + a[m2] + "\n");
|
||||
n1 = Math.floor((m1 - 0.5) / 4);
|
||||
n2 = Math.floor((m2 - 0.5) / 4);
|
||||
if (n1 < n2) {
|
||||
a1++;
|
||||
print("THE COMPUTER WINS!!! YOU HAVE " + b1 + " AND THE COMPUTER HAS " + a1 + "\n");
|
||||
} else if (n1 > n2) {
|
||||
b1++;
|
||||
print("YOU WIN. YOU HAVE " + b1 + " AND THE COMPUTER HAS " + a1 + "\n");
|
||||
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 (l[p + 1] == 0) {
|
||||
print("\n");
|
||||
print("\n");
|
||||
print("WE HAVE RUN OUT OF CARDS. FINAL SCORE: YOU: " + b1 + " THE COMPUTER: " + a1 + "\n");
|
||||
print("\n");
|
||||
break;
|
||||
|
||||
if (deck.length === 0) {
|
||||
printGameOver(playerScore, computerScore);
|
||||
}
|
||||
while (1) {
|
||||
print("DO YOU WANT TO CONTINUE");
|
||||
str = await input();
|
||||
if (str == "YES")
|
||||
break;
|
||||
if (str == "NO")
|
||||
break;
|
||||
print("YES OR NO, PLEASE. ");
|
||||
else {
|
||||
shouldContinuePlaying = await askYesOrNo("DO YOU WANT TO CONTINUE");
|
||||
}
|
||||
if (str == "NO")
|
||||
break;
|
||||
}
|
||||
print("THANKS FOR PLAYING. IT WAS FUN.\n");
|
||||
print("\n");
|
||||
|
||||
Reference in New Issue
Block a user