mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-25 04:15:45 -08:00
Spaces tend to cause annoyances in a Unix-style shell environment. This change fixes that.
316 lines
9.4 KiB
JavaScript
316 lines
9.4 KiB
JavaScript
// BULLFIGHT
|
|
//
|
|
// Converted from BASIC to Javascript by Oscar Toledo G. (nanochess)
|
|
//
|
|
|
|
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)
|
|
str += " ";
|
|
return str;
|
|
}
|
|
|
|
var a;
|
|
var b;
|
|
var c;
|
|
var l;
|
|
var t;
|
|
var as;
|
|
var bs;
|
|
var d = [];
|
|
var ls = [, "SUPERB", "GOOD", "FAIR", "POOR", "AWFUL"];
|
|
|
|
function af(k)
|
|
{
|
|
return Math.floor(Math.random() * 2 + 1);
|
|
}
|
|
|
|
function cf(q)
|
|
{
|
|
return df(q) * Math.random();
|
|
}
|
|
|
|
function df(q)
|
|
{
|
|
return (4.5 + l / 6 - (d[1] + d[2]) * 2.5 + 4 * d[4] + 2 * d[5] - Math.pow(d[3], 2) / 120 - a);
|
|
}
|
|
|
|
function setup_helpers()
|
|
{
|
|
b = 3 / a * Math.random();
|
|
if (b < 0.37)
|
|
c = 0.5;
|
|
else if (b < 0.5)
|
|
c = 0.4;
|
|
else if (b < 0.63)
|
|
c = 0.3;
|
|
else if (b < 0.87)
|
|
c = 0.2;
|
|
else
|
|
c = 0.1;
|
|
t = Math.floor(10 * c + 0.2);
|
|
print("THE " + as + bs + " DID A " + ls[t] + " JOB.\n");
|
|
if (4 <= t) {
|
|
if (5 != t) {
|
|
// Lines 1800 and 1810 of original program are unreachable
|
|
switch (af(0)) {
|
|
case 1:
|
|
print("ONE OF THE " + as + bs + " WAS KILLED.\n");
|
|
break;
|
|
case 2:
|
|
print("NO " + as + b + " WERE KILLED.\n");
|
|
break;
|
|
}
|
|
} else {
|
|
if (as != "TOREAD")
|
|
print(af(0) + " OF THE HORSES OF THE " + as + bs + " KILLED.\n");
|
|
print(af(0) + " OF THE " + as + bs + " KILLED.\n");
|
|
}
|
|
}
|
|
print("\n");
|
|
}
|
|
|
|
// Main program
|
|
async function main()
|
|
{
|
|
print(tab(34) + "BULL\n");
|
|
print(tab(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n");
|
|
print("\n");
|
|
print("\n");
|
|
print("\n");
|
|
l = 1;
|
|
print("DO YOU WANT INSTRUCTIONS");
|
|
str = await input();
|
|
if (str != "NO") {
|
|
print("HELLO, ALL YOU BLOODLOVERS AND AFICIONADOS.\n");
|
|
print("HERE IS YOUR BIG CHANCE TO KILL A BULL.\n");
|
|
print("\n");
|
|
print("ON EACH PASS OF THE BULL, YOU MAY TRY\n");
|
|
print("0 - VERONICA (DANGEROUS INSIDE MOVE OF THE CAPE)\n");
|
|
print("1 - LESS DANGEROUS OUTSIDE MOVE OF THE CAPE\n");
|
|
print("2 - ORDINARY SWIRL OF THE CAPE.\n");
|
|
print("\n");
|
|
print("INSTEAD OF THE ABOVE, YOU MAY TRY TO KILL THE BULL\n");
|
|
print("ON ANY TURN: 4 (OVER THE HORNS), 5 (IN THE CHEST).\n");
|
|
print("BUT IF I WERE YOU,\n");
|
|
print("I WOULDN'T TRY IT BEFORE THE SEVENTH PASS.\n");
|
|
print("\n");
|
|
print("THE CROWD WILL DETERMINE WHAT AWARD YOU DESERVE\n");
|
|
print("(POSTHUMOUSLY IF NECESSARY).\n");
|
|
print("THE BRAVER YOU ARE, THE BETTER THE AWARD YOU RECEIVE.\n");
|
|
print("\n");
|
|
print("THE BETTER THE JOB THE PICADORES AND TOREADORES DO,\n");
|
|
print("THE BETTER YOUR CHANCES ARE.\n");
|
|
}
|
|
print("\n");
|
|
print("\n");
|
|
d[5] = 1;
|
|
d[4] = 1;
|
|
d[3] = 0;
|
|
a = Math.floor(Math.random() * 5 + 1);
|
|
print("YOU HAVE DRAWN A " + ls[a] + " BULL.\n");
|
|
if (a > 4) {
|
|
print("YOU'RE LUCKY.\n");
|
|
} else if (a < 2) {
|
|
print("GOOD LUCK. YOU'LL NEED IT.\n");
|
|
print("\n");
|
|
}
|
|
print("\n");
|
|
as = "PICADO";
|
|
bs = "RES";
|
|
setup_helpers();
|
|
d[1] = c;
|
|
as = "TOREAD";
|
|
bs = "ORES";
|
|
setup_helpers();
|
|
d[2] = c;
|
|
print("\n");
|
|
print("\n");
|
|
z = 0;
|
|
while (z == 0) {
|
|
d[3]++;
|
|
print("PASS NUMBER " + d[3] + "\n");
|
|
if (d[3] >= 3) {
|
|
print("HERE COMES THE BULL. TRY FOR A KILL");
|
|
while (1) {
|
|
str = await input();
|
|
if (str != "YES" && str != "NO")
|
|
print("INCORRECT ANSWER - - PLEASE TYPE 'YES' OR 'NO'.\n");
|
|
else
|
|
break;
|
|
}
|
|
z1 = (str == "YES") ? 1 : 2;
|
|
if (z1 != 1) {
|
|
print("CAPE MOVE");
|
|
}
|
|
} else {
|
|
print("THE BULL IS CHARGING AT YOU! YOU ARE THE MATADOR--\n");
|
|
print("DO YOU WANT TO KILL THE BULL");
|
|
while (1) {
|
|
str = await input();
|
|
if (str != "YES" && str != "NO")
|
|
print("INCORRECT ANSWER - - PLEASE TYPE 'YES' OR 'NO'.\n");
|
|
else
|
|
break;
|
|
}
|
|
z1 = (str == "YES") ? 1 : 2;
|
|
if (z1 != 1) {
|
|
print("WHAT MOVE DO YOU MAKE WITH THE CAPE");
|
|
}
|
|
}
|
|
gore = 0;
|
|
if (z1 != 1) {
|
|
while (1) {
|
|
e = parseInt(await input());
|
|
if (e >= 3) {
|
|
print("DON'T PANIC, YOU IDIOT! PUT DOWN A CORRECT NUMBER\n");
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
if (e == 0)
|
|
m = 3;
|
|
else if (e == 1)
|
|
m = 2;
|
|
else
|
|
m = 0.5;
|
|
l += m;
|
|
f = (6 - a + m / 10) * Math.random() / ((d[1] + d[2] + d[3] / 10) * 5);
|
|
if (f < 0.51)
|
|
continue;
|
|
gore = 1;
|
|
} else {
|
|
z = 1;
|
|
print("\n");
|
|
print("IT IS THE MOMENT OF THE TRUTH.\n");
|
|
print("\n");
|
|
print("HOW DO YOU TRY TO KILL THE BULL");
|
|
h = parseInt(await input());
|
|
if (h != 4 && h != 5) {
|
|
print("YOU PANICKED. THE BULL GORED YOU.\n");
|
|
gore = 2;
|
|
} else {
|
|
k = (6 - a) * 10 * Math.random() / ((d[1] + d[2]) * 5 * d[3]);
|
|
if (h != 4) { // Bug in original game, it says J instead of H
|
|
if (k > 0.2)
|
|
gore = 1;
|
|
} else {
|
|
if (k > 0.8)
|
|
gore = 1;
|
|
}
|
|
if (gore == 0) {
|
|
print("YOU KILLED THE BULL!\n");
|
|
d[5] = 2;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (gore) {
|
|
if (gore == 1)
|
|
print("THE BULL HAS GORED YOU!\n");
|
|
kill = false;
|
|
while (1) {
|
|
if (af(0) == 1) {
|
|
print("YOU ARE DEAD.\n");
|
|
d[4] = 1.5;
|
|
kill = true;
|
|
break;
|
|
}
|
|
print("YOU ARE STILL ALIVE.\n");
|
|
print("\n");
|
|
print("DO YOU RUN FROM THE RING");
|
|
while (1) {
|
|
str = await input();
|
|
if (str != "YES" && str != "NO")
|
|
print("INCORRECT ANSWER - - PLEASE TYPE 'YES' OR 'NO'.\n");
|
|
else
|
|
break;
|
|
}
|
|
z1 = (str == "YES") ? 1 : 2;
|
|
if (z1 != 2) {
|
|
print("COWARD\n");
|
|
d[4] = 0;
|
|
kill = true;
|
|
break;
|
|
}
|
|
print("YOU ARE BRAVE. STUPID, BUT BRAVE.\n");
|
|
if (af(0) == 1) {
|
|
d[4] = 2;
|
|
kill = false;
|
|
break;
|
|
}
|
|
print("YOU ARE GORED AGAIN!\n");
|
|
}
|
|
if (kill)
|
|
break;
|
|
continue;
|
|
}
|
|
}
|
|
print("\n");
|
|
print("\n");
|
|
print("\n");
|
|
if (d[4] == 0) {
|
|
print("THE CROWD BOOS FOR TEN MINUTES. IF YOU EVER DARE TO SHOW\n");
|
|
print("YOUR FACE IN A RING AGAIN, THEY SWEAR THEY WILL KILL YOU--\n");
|
|
print("UNLESS THE BULL DOES FIRST.\n");
|
|
} else {
|
|
if (d[4] == 2) {
|
|
print("THE CROWD CHEERS WILDLY!\n");
|
|
} else if (d[5] == 2) {
|
|
print("THE CROWD CHEERS!\n");
|
|
print("\n");
|
|
}
|
|
print("THE CROWD AWARDS YOU\n");
|
|
if (cf(0) < 2.4) {
|
|
print("NOTHING AT ALL.\n");
|
|
} else if (cf(0) < 4.9) {
|
|
print("ONE EAR OF THE BULL.\n");
|
|
} else if (cf(0) < 7.4) {
|
|
print("BOTH EARS OF THE BULL!\n");
|
|
print("OLE!\n");
|
|
} else {
|
|
print("OLE! YOU ARE 'MUY HOMBRE'!! OLE! OLE!\n");
|
|
}
|
|
print("\n");
|
|
print("ADIOS\n");
|
|
print("\n");
|
|
print("\n");
|
|
print("\n");
|
|
}
|
|
}
|
|
|
|
|
|
main();
|