mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-23 07:29:02 -08:00
Ported FOOTBALL to Javascript
This commit is contained in:
9
37 Football/javascript/football.html
Normal file
9
37 Football/javascript/football.html
Normal file
@@ -0,0 +1,9 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>FOOTBALL</title>
|
||||
</head>
|
||||
<body>
|
||||
<pre id="output" style="font-size: 12pt;"></pre>
|
||||
<script src="football.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
504
37 Football/javascript/football.js
Normal file
504
37 Football/javascript/football.js
Normal file
@@ -0,0 +1,504 @@
|
||||
// FOOTBALL
|
||||
//
|
||||
// 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 player_data = [17,8,4,14,19,3,10,1,7,11,15,9,5,20,13,18,16,2,12,6,
|
||||
20,2,17,5,8,18,12,11,1,4,19,14,10,7,9,15,6,13,16,3];
|
||||
var aa = [];
|
||||
var ba = [];
|
||||
var ca = [];
|
||||
var ha = [];
|
||||
var ta = [];
|
||||
var wa = [];
|
||||
var xa = [];
|
||||
var ya = [];
|
||||
var za = [];
|
||||
var ms = [];
|
||||
var da = [];
|
||||
var ps = [, "PITCHOUT","TRIPLE REVERSE","DRAW","QB SNEAK","END AROUND",
|
||||
"DOUBLE REVERSE","LEFT SWEEP","RIGHT SWEEP","OFF TACKLE",
|
||||
"WISHBONE OPTION","FLARE PASS","SCREEN PASS",
|
||||
"ROLL OUT OPTION","RIGHT CURL","LEFT CURL","WISHBONE OPTION",
|
||||
"SIDELINE PASS","HALF-BACK OPTION","RAZZLE-DAZZLE","BOMB!!!!"];
|
||||
var p;
|
||||
var t;
|
||||
|
||||
function field_headers()
|
||||
{
|
||||
print("TEAM 1 [0 10 20 30 40 50 60 70 80 90");
|
||||
print(" 100] TEAM 2\n");
|
||||
print("\n");
|
||||
}
|
||||
|
||||
function separator()
|
||||
{
|
||||
str = "";
|
||||
for (x = 1; x <= 72; x++)
|
||||
str += "+";
|
||||
print(str + "\n");
|
||||
}
|
||||
|
||||
function show_ball()
|
||||
{
|
||||
print(tab(da[t] + 5 + p / 2) + ms[t] + "\n");
|
||||
field_headers();
|
||||
}
|
||||
|
||||
function show_scores()
|
||||
{
|
||||
print("\n");
|
||||
print("TEAM 1 SCORE IS " + ha[1] + "\n");
|
||||
print("TEAM 2 SCORE IS " + ha[2] + "\n");
|
||||
print("\n");
|
||||
if (ha[t] >= e) {
|
||||
print("TEAM " + t + " WINS*******************");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function loss_posession() {
|
||||
print("\n");
|
||||
print("** LOSS OF POSSESSION FROM TEAM " + t + " TO TEAM " + ta[t] + "\n");
|
||||
print("\n");
|
||||
separator();
|
||||
print("\n");
|
||||
t = ta[t];
|
||||
}
|
||||
|
||||
function touchdown() {
|
||||
print("\n");
|
||||
print("TOUCHDOWN BY TEAM " + t + " *********************YEA TEAM\n");
|
||||
q = 7;
|
||||
g = Math.random();
|
||||
if (g <= 0.1) {
|
||||
q = 6;
|
||||
print("EXTRA POINT NO GOOD\n");
|
||||
} else {
|
||||
print("EXTRA POINT GOOD\n");
|
||||
}
|
||||
ha[t] = ha[t] + q;
|
||||
}
|
||||
|
||||
// Main program
|
||||
async function main()
|
||||
{
|
||||
print(tab(32) + "FOOTBALL\n");
|
||||
print(tab(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n");
|
||||
print("\n");
|
||||
print("\n");
|
||||
print("\n");
|
||||
print("PRESENTING N.F.U. FOOTBALL (NO FORTRAN USED)\n");
|
||||
print("\n");
|
||||
print("\n");
|
||||
while (1) {
|
||||
print("DO YOU WANT INSTRUCTIONS");
|
||||
str = await input();
|
||||
if (str == "YES" || str == "NO")
|
||||
break;
|
||||
}
|
||||
if (str == "YES") {
|
||||
print("THIS IS A FOOTBALL GAME FOR TWO TEAMS IN WHICH PLAYERS MUST\n");
|
||||
print("PREPARE A TAPE WITH A DATA STATEMENT (1770 FOR TEAM 1,\n");
|
||||
print( "1780 FOR TEAM 2) IN WHICH EACH TEAM SCRAMBLES NOS. 1-20\n");
|
||||
print("THESE NUMBERS ARE THEN ASSIGNED TO TWENTY GIVEN PLAYS.\n");
|
||||
print("A LIST OF NOS. AND THEIR PLAYS IS PROVIDED WITH\n");
|
||||
print("BOTH TEAMS HAVING THE SAME PLAYS. THE MORE SIMILAR THE\n");
|
||||
print("PLAYS THE LESS YARDAGE GAINED. SCORES ARE GIVEN\n");
|
||||
print("WHENEVER SCORES ARE MADE. SCORES MAY ALSO BE OBTAINED\n");
|
||||
print("BY INPUTTING 99,99 FOR PLAY NOS. TO PUNT OR ATTEMPT A\n");
|
||||
print("FIELD GOAL, INPUT 77,77 FOR PLAY NUMBERS. QUESTIONS WILL BE\n");
|
||||
print("ASKED THEN. ON 4TH DOWN, YOU WILL ALSO BE ASKED WHETHER\n");
|
||||
print("YOU WANT TO PUNT OR ATTEMPT A FIELD GOAL. IF THE ANSWER TO\n");
|
||||
print("BOTH QUESTIONS IS NO IT WILL BE ASSUMED YOU WANT TO\n");
|
||||
print("TRY AND GAIN YARDAGE. ANSWER ALL QUESTIONS YES OR NO.\n");
|
||||
print("THE GAME IS PLAYED UNTIL PLAYERS TERMINATE (CONTROL-C).\n");
|
||||
print("PLEASE PREPARE A TAPE AND RUN.\n");
|
||||
}
|
||||
print("\n");
|
||||
print("PLEASE INPUT SCORE LIMIT ON GAME");
|
||||
e = parseInt(await input());
|
||||
for (i = 1; i <= 40; i++) {
|
||||
if (i <= 20) {
|
||||
aa[player_data[i - 1]] = i;
|
||||
} else {
|
||||
ba[player_data[i - 1]] = i - 20;
|
||||
}
|
||||
ca[i] = player_data[i - 1];
|
||||
}
|
||||
l = 0;
|
||||
t = 1;
|
||||
do {
|
||||
print("TEAM " + t + " PLAY CHART\n");
|
||||
print("NO. PLAY\n");
|
||||
for (i = 1; i <= 20; i++) {
|
||||
str = "" + ca[i + l];
|
||||
while (str.length < 6)
|
||||
str += " ";
|
||||
str += ps[i];
|
||||
print(str + "\n");
|
||||
}
|
||||
l += 20;
|
||||
t = 2;
|
||||
print("\n");
|
||||
print("TEAR OFF HERE----------------------------------------------\n");
|
||||
for (x = 1; x <= 11; x++)
|
||||
print("\n");
|
||||
} while (l == 20) ;
|
||||
da[1] = 0;
|
||||
da[2] = 3;
|
||||
ms[1] = "--->";
|
||||
ms[2] = "<---";
|
||||
ha[1] = 0;
|
||||
ha[2] = 0;
|
||||
ta[1] = 2;
|
||||
ta[2] = 1;
|
||||
wa[1] = -1;
|
||||
wa[2] = 1;
|
||||
xa[1] = 100;
|
||||
xa[2] = 0;
|
||||
ya[1] = 1;
|
||||
ya[2] = -1;
|
||||
za[1] = 0;
|
||||
za[2] = 100;
|
||||
p = 0;
|
||||
field_headers();
|
||||
print("TEAM 1 DEFEND 0 YD GOAL -- TEAM 2 DEFENDS 100 YD GOAL.\n");
|
||||
t = Math.floor(2 * Math.random() + 1);
|
||||
print("\n");
|
||||
print("THE COIN IS FLIPPED\n");
|
||||
routine = 1;
|
||||
while (1) {
|
||||
if (routine <= 1) {
|
||||
p = xa[t] - ya[t] * 40;
|
||||
separator();
|
||||
print("\n");
|
||||
print("TEAM " + t + " RECEIVES KICK-OFF\n");
|
||||
k = Math.floor(26 * Math.random() + 40);
|
||||
}
|
||||
if (routine <= 2) {
|
||||
p = p - ya[t] * k;
|
||||
}
|
||||
if (routine <= 3) {
|
||||
if (wa[t] * p >= za[t] + 10) {
|
||||
print("\n");
|
||||
print("BALL WENT OUT OF ENDZONE --AUTOMATIC TOUCHBACK--\n");
|
||||
p = za[t] - wa[t] * 20;
|
||||
if (routine <= 4)
|
||||
routine = 5;
|
||||
} else {
|
||||
print("BALL WENT " + k + " YARDS. NOW ON " + p + "\n");
|
||||
show_ball();
|
||||
}
|
||||
}
|
||||
if (routine <= 4) {
|
||||
while (1) {
|
||||
print("TEAM " + t + " DO YOU WANT TO RUNBACK");
|
||||
str = await input();
|
||||
if (str == "YES" || str == "NO")
|
||||
break;
|
||||
}
|
||||
if (str == "YES") {
|
||||
k = Math.floor(9 * Math.random() + 1);
|
||||
r = Math.floor(((xa[t] - ya[t] * p + 25) * Math.random() - 15) / k);
|
||||
p = p - wa[t] * r;
|
||||
print("\n");
|
||||
print("RUNBACK TEAM " + t + " " + r + " YARDS\n");
|
||||
g = Math.random();
|
||||
if (g < 0.25) {
|
||||
loss_posession();
|
||||
routine = 4;
|
||||
continue;
|
||||
} else if (ya[t] * p >= xa[t]) {
|
||||
touchdown();
|
||||
if (show_scores())
|
||||
return;
|
||||
t = ta[t];
|
||||
routine = 1;
|
||||
continue;
|
||||
} else if (wa[t] * p >= za[t]) {
|
||||
print("\n");
|
||||
print("SAFETY AGAINST TEAM " + t + " **********************OH-OH\n");
|
||||
ha[ta[t]] = ha[ta[t]] + 2;
|
||||
if (show_scores())
|
||||
return;
|
||||
print("TEAM " + t + " DO YOU WANT TO PUNT INSTEAD OF A KICKOFF");
|
||||
str = await input();
|
||||
p = za[t] - wa[t] * 20;
|
||||
if (str == "YES") {
|
||||
print("\n");
|
||||
print("TEAM " + t + " WILL PUNT\n");
|
||||
g = Math.random();
|
||||
if (g < 0.25) {
|
||||
loss_posession();
|
||||
routine = 4;
|
||||
continue;
|
||||
}
|
||||
print("\n");
|
||||
separator();
|
||||
k = Math.floor(25 * Math.random() + 35);
|
||||
t = ta[t];
|
||||
routine = 2;
|
||||
continue;
|
||||
}
|
||||
touchdown();
|
||||
if (show_scores())
|
||||
return;
|
||||
t = ta[t];
|
||||
routine = 1;
|
||||
continue;
|
||||
} else {
|
||||
routine = 5;
|
||||
continue;
|
||||
}
|
||||
} else if (str == "NO") {
|
||||
if (wa[t] * p >= za[t])
|
||||
p = za[t] - wa[t] * 20;
|
||||
}
|
||||
}
|
||||
if (routine <= 5) {
|
||||
d = 1;
|
||||
s = p;
|
||||
}
|
||||
if (routine <= 6) {
|
||||
str = "";
|
||||
for (i = 1; i <= 72; i++)
|
||||
str += "=";
|
||||
print(str + "\n");
|
||||
print("TEAM " + t + " DOWN " + d + " ON " + p + "\n");
|
||||
if (d == 1) {
|
||||
if (ya[t] * (p + ya[t] * 10) >= xa[t])
|
||||
c = 8;
|
||||
else
|
||||
c = 4;
|
||||
}
|
||||
if (c != 8) {
|
||||
print(tab(27) + (10 - (ya[t] * p - ya[t] * s)) + " YARDS TO 1ST DOWN\n");
|
||||
} else {
|
||||
print(tab(27) + (xa[t] - ya[t] * p) + " YARDS\n");
|
||||
}
|
||||
show_ball();
|
||||
if (d == 4)
|
||||
routine = 8;
|
||||
}
|
||||
if (routine <= 7) {
|
||||
u = Math.floor(3 * Math.random() - 1);
|
||||
while (1) {
|
||||
print("INPUT OFFENSIVE PLAY, DEFENSIVE PLAY");
|
||||
str = await input();
|
||||
if (t == 1) {
|
||||
p1 = parseInt(str);
|
||||
p2 = parseInt(str.substr(str.indexOf(",") + 1));
|
||||
} else {
|
||||
p2 = parseInt(str);
|
||||
p1 = parseInt(str.substr(str.indexOf(",") + 1));
|
||||
}
|
||||
if (p1 == 99) {
|
||||
if (show_scores())
|
||||
return;
|
||||
if (p1 == 99)
|
||||
continue;
|
||||
}
|
||||
if (p1 < 1 || p1 > 20 || p2 < 1 || p2 > 20) {
|
||||
print("ILLEGAL PLAY NUMBER, CHECK AND\n");
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (d == 4 || p1 == 77) {
|
||||
while (1) {
|
||||
print("DOES TEAM " + t + " WANT TO PUNT");
|
||||
str = await input();
|
||||
if (str == "YES" || str == "NO")
|
||||
break;
|
||||
}
|
||||
if (str == "YES") {
|
||||
print("\n");
|
||||
print("TEAM " + t + " WILL PUNT\n");
|
||||
g = Math.random();
|
||||
if (g < 0.25) {
|
||||
loss_posession();
|
||||
routine = 4;
|
||||
continue;
|
||||
}
|
||||
print("\n");
|
||||
separator();
|
||||
k = Math.floor(25 * Math.random() + 35);
|
||||
t = ta[t];
|
||||
routine = 2;
|
||||
continue;
|
||||
}
|
||||
while (1) {
|
||||
print("DOES TEAM " + t + " WANT TO ATTEMPT A FIELD GOAL");
|
||||
str = await input();
|
||||
if (str == "YES" || str == "NO")
|
||||
break;
|
||||
}
|
||||
if (str == "YES") {
|
||||
print("\n");
|
||||
print("TEAM " + t + " WILL ATTEMPT A FIELD GOAL\n");
|
||||
g = Math.random();
|
||||
if (g < 0.025) {
|
||||
loss_posession();
|
||||
routine = 4;
|
||||
continue;
|
||||
} else {
|
||||
f = Math.floor(35 * Math.random() + 20);
|
||||
print("\n");
|
||||
print("KICK IS " + f + " YARDS LONG\n");
|
||||
p = p - wa[t] * f;
|
||||
g = Math.random();
|
||||
if (g < 0.35) {
|
||||
print("BALL WENT WIDE\n");
|
||||
} else if (ya[t] * p >= xa[t]) {
|
||||
print("FIELD GOLD GOOD FOR TEAM " + t + " *********************YEA");
|
||||
q = 3;
|
||||
ha[t] = ha[t] + q;
|
||||
if (show_scores())
|
||||
return;
|
||||
t = ta[t];
|
||||
routine = 1;
|
||||
continue;
|
||||
}
|
||||
print("FIELD GOAL UNSUCCESFUL TEAM " + t + "-----------------TOO BAD\n");
|
||||
print("\n");
|
||||
separator();
|
||||
if (ya[t] * p < xa[t] + 10) {
|
||||
print("\n");
|
||||
print("BALL NOW ON " + p + "\n");
|
||||
t = ta[t];
|
||||
show_ball();
|
||||
routine = 4;
|
||||
continue;
|
||||
} else {
|
||||
t = ta[t];
|
||||
routine = 3;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
routine = 7;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
y = Math.floor(Math.abs(aa[p1] - ba[p2]) / 19 * ((xa[t] - ya[t] * p + 25) * Math.random() - 15));
|
||||
print("\n");
|
||||
if (t == 1 && aa[p1] < 11 || t == 2 && ba[p2] < 11) {
|
||||
print("THE BALL WAS RUN\n");
|
||||
} else if (u == 0) {
|
||||
print("PASS INCOMPLETE TEAM " + t + "\n");
|
||||
y = 0;
|
||||
} else {
|
||||
g = Math.random();
|
||||
if (g <= 0.025 && y > 2) {
|
||||
print("PASS COMPLETED\n");
|
||||
} else {
|
||||
print("QUARTERBACK SCRAMBLED\n");
|
||||
}
|
||||
}
|
||||
p = p - wa[t] * y;
|
||||
print("\n");
|
||||
print("NET YARDS GAINED ON DOWN " + d + " ARE " + y + "\n");
|
||||
|
||||
g = Math.random();
|
||||
if (g <= 0.025) {
|
||||
loss_posession();
|
||||
routine = 4;
|
||||
continue;
|
||||
} else if (ya[t] * p >= xa[t]) {
|
||||
touchdown();
|
||||
if (show_scores())
|
||||
return;
|
||||
t = ta[t];
|
||||
routine = 1;
|
||||
continue;
|
||||
} else if (wa[t] * p >= za[t]) {
|
||||
print("\n");
|
||||
print("SAFETY AGAINST TEAM " + t + " **********************OH-OH\n");
|
||||
ha[ta[t]] = ha[ta[t]] + 2;
|
||||
if (show_scores())
|
||||
return;
|
||||
print("TEAM " + t + " DO YOU WANT TO PUNT INSTEAD OF A KICKOFF");
|
||||
str = await input();
|
||||
p = za[t] - wa[t] * 20;
|
||||
if (str == "YES") {
|
||||
print("\n");
|
||||
print("TEAM " + t + " WILL PUNT\n");
|
||||
g = Math.random();
|
||||
if (g < 0.25) {
|
||||
loss_posession();
|
||||
routine = 4;
|
||||
continue;
|
||||
}
|
||||
print("\n");
|
||||
separator();
|
||||
k = Math.floor(25 * Math.random() + 35);
|
||||
t = ta[t];
|
||||
routine = 2;
|
||||
continue;
|
||||
}
|
||||
touchdown();
|
||||
if (show_scores())
|
||||
return;
|
||||
t = ta[t];
|
||||
routine = 1;
|
||||
} else if (ya[t] * p - ya[t] * s >= 10) {
|
||||
routine = 5;
|
||||
} else {
|
||||
d++;
|
||||
if (d != 5) {
|
||||
routine = 6;
|
||||
} else {
|
||||
print("\n");
|
||||
print("CONVERSION UNSUCCESSFUL TEAM " + t + "\n");
|
||||
t = ta[t];
|
||||
print("\n");
|
||||
separator();
|
||||
routine = 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user