mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-07 13:20:53 -08:00
347 lines
12 KiB
JavaScript
347 lines
12 KiB
JavaScript
// BUG
|
|
//
|
|
// Converted from BASIC to Javascript by Oscar Toledo G. (nanochess)
|
|
//
|
|
|
|
function print(str)
|
|
{
|
|
document.getElementById("output").appendChild(document.createTextNode(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);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function tab(space)
|
|
{
|
|
let str = "";
|
|
while (space-- > 0)
|
|
str += " ";
|
|
return str;
|
|
}
|
|
|
|
function waitNSeconds(n) {
|
|
return new Promise(resolve => setTimeout(resolve, n*1000));
|
|
}
|
|
|
|
function scrollToBottom() {
|
|
window.scrollTo(0, document.body.scrollHeight);
|
|
}
|
|
|
|
function draw_head()
|
|
{
|
|
print(" HHHHHHH\n");
|
|
print(" H H\n");
|
|
print(" H O O H\n");
|
|
print(" H H\n");
|
|
print(" H V H\n");
|
|
print(" HHHHHHH\n");
|
|
}
|
|
|
|
function drawFeelers(feelerCount, character) {
|
|
for (let z = 1; z <= 4; z++) {
|
|
print(tab(10));
|
|
for (let x = 1; x <= feelerCount; x++) {
|
|
print(character + " ");
|
|
}
|
|
print("\n");
|
|
}
|
|
}
|
|
|
|
function drawNeck() {
|
|
for (let z = 1; z <= 2; z++)
|
|
print(" N N\n");
|
|
}
|
|
|
|
function drawBody(computerTailCount) {
|
|
print(" BBBBBBBBBBBB\n");
|
|
for (let z = 1; z <= 2; z++)
|
|
print(" B B\n");
|
|
if (computerTailCount === 1)
|
|
print("TTTTTB B\n");
|
|
print(" BBBBBBBBBBBB\n");
|
|
}
|
|
|
|
function drawFeet(computerFeetCount) {
|
|
for (let z = 1; z <= 2; z++) {
|
|
print(tab(5));
|
|
for (let x = 1; x <= computerFeetCount; x++)
|
|
print(" L");
|
|
print("\n");
|
|
}
|
|
}
|
|
|
|
function drawBug(playerFeelerCount, playerHeadCount, playerNeckCount, playerBodyCount, playerTailCount, playerFeetCount, feelerCharacter) {
|
|
if (playerFeelerCount !== 0) {
|
|
drawFeelers(playerFeelerCount, feelerCharacter);
|
|
}
|
|
if (playerHeadCount !== 0)
|
|
draw_head();
|
|
if (playerNeckCount !== 0) {
|
|
drawNeck();
|
|
}
|
|
if (playerBodyCount !== 0) {
|
|
drawBody(playerTailCount)
|
|
}
|
|
if (playerFeetCount !== 0) {
|
|
drawFeet(playerFeetCount);
|
|
}
|
|
for (let z = 1; z <= 4; z++)
|
|
print("\n");
|
|
}
|
|
|
|
// Main program
|
|
async function main()
|
|
{
|
|
print(tab(34) + "BUG\n");
|
|
print(tab(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n");
|
|
print("\n");
|
|
print("\n");
|
|
print("\n");
|
|
let playerFeelerCount = 0;
|
|
let playerHeadCount = 0;
|
|
let playerNeckCount = 0;
|
|
let playerBodyCount = 0;
|
|
let playerFeetCount = 0;
|
|
let playerTailCount = 0;
|
|
|
|
let computerFeelerCount = 0;
|
|
let computerHeadCount = 0;
|
|
let computerNeckCount = 0;
|
|
let computerBodyCount = 0;
|
|
let computerTailCount = 0;
|
|
let computerFeetCount = 0;
|
|
|
|
print("THE GAME BUG\n");
|
|
print("I HOPE YOU ENJOY THIS GAME.\n");
|
|
print("\n");
|
|
print("DO YOU WANT INSTRUCTIONS");
|
|
const instructionsRequired = await input();
|
|
if (instructionsRequired.toUpperCase() !== "NO") {
|
|
print("THE OBJECT OF BUG IS TO FINISH YOUR BUG BEFORE I FINISH\n");
|
|
print("MINE. EACH NUMBER STANDS FOR A PART OF THE BUG BODY.\n");
|
|
print("I WILL ROLL THE DIE FOR YOU, TELL YOU WHAT I ROLLED FOR YOU\n");
|
|
print("WHAT THE NUMBER STANDS FOR, AND IF YOU CAN GET THE PART.\n");
|
|
print("IF YOU CAN GET THE PART I WILL GIVE IT TO YOU.\n");
|
|
print("THE SAME WILL HAPPEN ON MY TURN.\n");
|
|
print("IF THERE IS A CHANGE IN EITHER BUG I WILL GIVE YOU THE\n");
|
|
print("OPTION OF SEEING THE PICTURES OF THE BUGS.\n");
|
|
print("THE NUMBERS STAND FOR PARTS AS FOLLOWS:\n");
|
|
print("NUMBER\tPART\tNUMBER OF PART NEEDED\n");
|
|
print("1\tBODY\t1\n");
|
|
print("2\tNECK\t1\n");
|
|
print("3\tHEAD\t1\n");
|
|
print("4\tFEELERS\t2\n");
|
|
print("5\tTAIL\t1\n");
|
|
print("6\tLEGS\t6\n");
|
|
print("\n");
|
|
print("\n");
|
|
}
|
|
|
|
let gameInProgress = true;
|
|
while (gameInProgress) {
|
|
let dieRoll = Math.floor(6 * Math.random() + 1);
|
|
let partFound = false;
|
|
print("YOU ROLLED A " + dieRoll + "\n");
|
|
switch (dieRoll) {
|
|
case 1:
|
|
print("1=BODY\n");
|
|
if (playerBodyCount === 0) {
|
|
print("YOU NOW HAVE A BODY.\n");
|
|
playerBodyCount = 1;
|
|
partFound = true;
|
|
} else {
|
|
print("YOU DO NOT NEED A BODY.\n");
|
|
}
|
|
break;
|
|
case 2:
|
|
print("2=NECK\n");
|
|
if (playerNeckCount === 0) {
|
|
if (playerBodyCount === 0) {
|
|
print("YOU DO NOT HAVE A BODY.\n");
|
|
} else {
|
|
print("YOU NOW HAVE A NECK.\n");
|
|
playerNeckCount = 1;
|
|
partFound = true;
|
|
}
|
|
} else {
|
|
print("YOU DO NOT NEED A NECK.\n");
|
|
}
|
|
break;
|
|
case 3:
|
|
print("3=HEAD\n");
|
|
if (playerNeckCount === 0) {
|
|
print("YOU DO NOT HAVE A NECK.\n");
|
|
} else if (playerHeadCount === 0) {
|
|
print("YOU NEEDED A HEAD.\n");
|
|
playerHeadCount = 1;
|
|
partFound = true;
|
|
} else {
|
|
print("YOU HAVE A HEAD.\n");
|
|
}
|
|
break;
|
|
case 4:
|
|
print("4=FEELERS\n");
|
|
if (playerHeadCount === 0) {
|
|
print("YOU DO NOT HAVE A HEAD.\n");
|
|
} else if (playerFeelerCount === 2) {
|
|
print("YOU HAVE TWO FEELERS ALREADY.\n");
|
|
} else {
|
|
print("I NOW GIVE YOU A FEELER.\n");
|
|
playerFeelerCount ++;
|
|
partFound = true;
|
|
}
|
|
break;
|
|
case 5:
|
|
print("5=TAIL\n");
|
|
if (playerBodyCount === 0) {
|
|
print("YOU DO NOT HAVE A BODY.\n");
|
|
} else if (playerTailCount === 1) {
|
|
print("YOU ALREADY HAVE A TAIL.\n");
|
|
} else {
|
|
print("I NOW GIVE YOU A TAIL.\n");
|
|
playerTailCount++;
|
|
partFound = true;
|
|
}
|
|
break;
|
|
case 6:
|
|
print("6=LEG\n");
|
|
if (playerFeetCount === 6) {
|
|
print("YOU HAVE 6 FEET ALREADY.\n");
|
|
} else if (playerBodyCount === 0) {
|
|
print("YOU DO NOT HAVE A BODY.\n");
|
|
} else {
|
|
playerFeetCount++;
|
|
partFound = true;
|
|
print("YOU NOW HAVE " + playerFeetCount + " LEGS.\n");
|
|
}
|
|
break;
|
|
}
|
|
dieRoll = Math.floor(6 * Math.random() + 1) ;
|
|
print("\n");
|
|
scrollToBottom();
|
|
await waitNSeconds(1);
|
|
|
|
print("I ROLLED A " + dieRoll + "\n");
|
|
switch (dieRoll) {
|
|
case 1:
|
|
print("1=BODY\n");
|
|
if (computerBodyCount === 1) {
|
|
print("I DO NOT NEED A BODY.\n");
|
|
} else {
|
|
print("I NOW HAVE A BODY.\n");
|
|
partFound = true;
|
|
computerBodyCount = 1;
|
|
}
|
|
break;
|
|
case 2:
|
|
print("2=NECK\n");
|
|
if (computerNeckCount === 1) {
|
|
print("I DO NOT NEED A NECK.\n");
|
|
} else if (computerBodyCount === 0) {
|
|
print("I DO NOT HAVE A BODY.\n");
|
|
} else {
|
|
print("I NOW HAVE A NECK.\n");
|
|
computerNeckCount = 1;
|
|
partFound = true;
|
|
}
|
|
break;
|
|
case 3:
|
|
print("3=HEAD\n");
|
|
if (computerNeckCount === 0) {
|
|
print("I DO NOT HAVE A NECK.\n");
|
|
} else if (computerHeadCount === 1) {
|
|
print("I DO NOT NEED A HEAD.\n");
|
|
} else {
|
|
print("I NEEDED A HEAD.\n");
|
|
computerHeadCount = 1;
|
|
partFound = true;
|
|
}
|
|
break;
|
|
case 4:
|
|
print("4=FEELERS\n");
|
|
if (computerHeadCount === 0) {
|
|
print("I DO NOT HAVE A HEAD.\n");
|
|
} else if (computerFeelerCount === 2) {
|
|
print("I HAVE 2 FEELERS ALREADY.\n");
|
|
} else {
|
|
print("I GET A FEELER.\n");
|
|
computerFeelerCount++;
|
|
partFound = true;
|
|
}
|
|
break;
|
|
case 5:
|
|
print("5=TAIL\n");
|
|
if (computerBodyCount === 0) {
|
|
print("I DO NOT HAVE A BODY.\n");
|
|
} else if (computerTailCount === 1) {
|
|
print("I DO NOT NEED A TAIL.\n");
|
|
} else {
|
|
print("I NOW HAVE A TAIL.\n");
|
|
computerTailCount = 1;
|
|
partFound = true;
|
|
}
|
|
break;
|
|
case 6:
|
|
print("6=LEGS\n");
|
|
if (computerFeetCount === 6) {
|
|
print("I HAVE 6 FEET.\n");
|
|
} else if (computerBodyCount === 0) {
|
|
print("I DO NOT HAVE A BODY.\n");
|
|
} else {
|
|
computerFeetCount++;
|
|
partFound = true;
|
|
print("I NOW HAVE " + computerFeetCount + " LEGS.\n");
|
|
}
|
|
break;
|
|
}
|
|
if (playerFeelerCount === 2 && playerTailCount === 1 && playerFeetCount === 6) {
|
|
print("YOUR BUG IS FINISHED.\n");
|
|
gameInProgress = false;
|
|
}
|
|
if (computerFeelerCount === 2 && computerBodyCount === 1 && computerFeetCount === 6) {
|
|
print("MY BUG IS FINISHED.\n");
|
|
gameInProgress = false;
|
|
}
|
|
if (!partFound)
|
|
continue;
|
|
print("DO YOU WANT THE PICTURES");
|
|
const showPictures = await input();
|
|
if (showPictures.toUpperCase() === "NO")
|
|
continue;
|
|
print("*****YOUR BUG*****\n");
|
|
print("\n");
|
|
print("\n");
|
|
drawBug(playerFeelerCount, playerHeadCount, playerNeckCount, playerBodyCount, playerTailCount, playerFeetCount, "A");
|
|
print("*****MY BUG*****\n");
|
|
print("\n");
|
|
print("\n");
|
|
drawBug(computerFeelerCount, computerHeadCount, computerNeckCount, computerBodyCount, computerTailCount, computerFeetCount, "F");
|
|
for (let z = 1; z <= 4; z++)
|
|
print("\n");
|
|
}
|
|
print("I HOPE YOU ENJOYED THE GAME, PLAY IT AGAIN SOON!!\n");
|
|
scrollToBottom();
|
|
}
|
|
|
|
main();
|