show terminal header with link to sources

This commit is contained in:
Alexander Wunschik
2022-03-19 16:48:30 +01:00
parent 354c1f9ab3
commit 2d7a1b2a36
15 changed files with 616 additions and 175 deletions

View File

@@ -0,0 +1,117 @@
#!/usr/bin/env node
// ROCK, SCISSORS, PAPER
//
// Converted from BASIC to Javascript by Alexander Wunschik (mojoaxel)
import { println, tab, input } from '../../00_Common/javascript/common.mjs';
let userWins = 0;
let computerWins = 0;
let ties = 0;
// 30 INPUT "HOW MANY GAMES";Q
// 40 IF Q<11 THEN 60
// 50 PRINT "SORRY, BUT WE AREN'T ALLOWED TO PLAY THAT MANY.": GOTO 30
// 60 FOR G=1 TO Q
async function getGameCount() {
let gameCount = await input("HOW MANY GAMES");
if (gameCount > 10) {
println("SORRY, BUT WE AREN'T ALLOWED TO PLAY THAT MANY.");
return await getGameCount();
}
return gameCount;
}
// #90 PRINT "3=ROCK...2=SCISSORS...1=PAPER"
// #100 INPUT "1...2...3...WHAT'S YOUR CHOICE";K
// #110 IF (K-1)*(K-2)*(K-3)<>0 THEN PRINT "INVALID.": GOTO 90
async function getUserInput() {
println("3=ROCK...2=SCISSORS...1=PAPER");
const userChoice = await input("1...2...3...WHAT'S YOUR CHOICE");
if (userChoice < 1 || userChoice > 3) {
println("INVALID.");
return await getUserInput();
}
return userChoice;
}
async function game() {
// 10 PRINT TAB(21);"GAME OF ROCK, SCISSORS, PAPER"
// 20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
// 25 PRINT:PRINT:PRINT
println(tab(21), 'GAME OF ROCK, SCISSORS, PAPER');
println(tab(15), 'CREATIVE COMPUTING MORRISTOWN, NEW JERSEY');
println('\n\n');
let gameCount = await getGameCount();
async function playGame(gameNumber) {
// 70 PRINT: PRINT "GAME NUMBER";G
println("\nGAME NUMBER ", gameNumber);
const ROCK = 3;
const SCISSORS = 2;
const PAPER = 1;
const usersChoice = await getUserInput();
// 80 X=INT(RND(1)*3+1)
const computersChoice = Math.floor(Math.random()*3) + 1;
// 120 PRINT "THIS IS MY CHOICE..."
// 130 ON X GOTO 140,150,160
// 140 PRINT "...PAPER": GOTO 170
// 150 PRINT "...SCISSORS": GOTO 170
// 160 PRINT "...ROCK"
println("THIS IS MY CHOICE...",
computersChoice === PAPER ? "...PAPER" :
computersChoice === SCISSORS ? "...SCISSORS" :
"...ROCK");
// 170 IF X=K THEN 250
// 180 IF X>K THEN 230
// 190 IF X=1 THEN 210
// 200 PRINT "YOU WIN!!!":H=H+1: GOTO 260
// 210 IF K<>3 THEN 200
// 220 PRINT "WOW! I WIN!!!":C=C+1:GOTO 260
// 230 IF K<>1 OR X<>3 THEN 220
// 240 GOTO 200
// 250 PRINT "TIE GAME. NO WINNER."
if (computersChoice == usersChoice) {
println("TIE GAME. NO WINNER.");
ties++;
} else if (
(computersChoice == ROCK && usersChoice == SCISSORS) ||
(computersChoice == PAPER && usersChoice == ROCK) ||
(computersChoice == SCISSORS && usersChoice == PAPER)
) {
println("WOW! I WIN!!!");
computerWins++;
} else {
println("YOU WIN!!!");
userWins++;
}
}
for (let gameNumber = 1; gameNumber <= gameCount; gameNumber++) {
await playGame(gameNumber);
// 260 NEXT G
}
// 270 PRINT: PRINT "HERE IS THE FINAL GAME SCORE:"
// 280 PRINT "I HAVE WON";C;"GAME(S)."
// 290 PRINT "YOU HAVE WON";H;"GAME(S)."
// 300 PRINT "AND";Q-(C+H20);"GAME(S) ENDED IN A TIE."
println("\nHERE IS THE FINAL GAME SCORE:");
println(`I HAVE WON ${computerWins} GAME(S).`);
println(`YOU HAVE WON ${userWins} GAME(S).`);
println(`AND ${ties} GAME(S) ENDED IN A TIE.`);
// 310 PRINT: PRINT "THANKS FOR PLAYING!!"
println("\nTHANKS FOR PLAYING!!");
// 320 END
process.exit(0);
}
game();