Ported BULLFIGHT to Javascript

This commit is contained in:
nanochess
2021-02-26 22:10:52 -06:00
parent 528b4d7a4a
commit 5c82481fba
3 changed files with 327 additions and 3 deletions

View File

@@ -21,7 +21,7 @@
330 PRINT
340 PRINT "THE CROWD WILL DETERMINE WHAT AWARD YOU DESERVE"
350 PRINT "(POSTHUMOUSLY IF NECESSARY)."
360 PRINT "THE BRAVER YOU ARE, THE BETTER THE AWARD YOU RECIEVE."
360 PRINT "THE BRAVER YOU ARE, THE BETTER THE AWARD YOU RECEIVE."
370 PRINT
380 PRINT "THE BETTER THE JOB THE PICADORES AND TOREADORES DO,"
390 PRINT "THE BETTER YOUR CHANCES ARE."
@@ -112,7 +112,7 @@
1190 PRINT "YOU PANICKED. THE BULL GORED YOU."
1220 GOTO 970
1230 K=(6-A)*10*RND(1)/((D(1)+D(2))*5*D(3))
1240 IF J=4 THEN 1290
1240 IF H=4 THEN 1290
1250 IF K>.2 THEN 960
1260 PRINT "YOU KILLED THE BULL!"
1270 D(5)=2
@@ -125,7 +125,7 @@
1340 IF D(4)<>0 THEN 1390
1350 PRINT "THE CROWD BOOS FOR TEN MINUTES. IF YOU EVER DARE TO SHOW"
1360 PRINT "YOUR FACE IN A RING AGAIN, THEY SWEAR THEY WILL KILL YOU--"
1370 PRINT "UNLES THE BULL DOES FIRST."
1370 PRINT "UNLESS THE BULL DOES FIRST."
1380 GOTO 1580
1390 DEF FNC(Q)=FND(Q)*RND(1)
1395 DEF FND(Q)=(4.5+L/6-(D(1)+D(2))*2.5+4*D(4)+2*D(5)-D(3)^2/120-A)

View File

@@ -0,0 +1,9 @@
<html>
<head>
<title>BULLFIGHT</title>
</head>
<body>
<pre id="output" style="font-size: 12pt;"></pre>
<script src="bullfight.js"></script>
</body>
</html>

View File

@@ -0,0 +1,315 @@
// 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();