UNPKG

@ztiknl/sara

Version:

Sentient Artificial Responsive Agent

360 lines (346 loc) 11.8 kB
// include prompt module const prompt = require('../prompt.js'); // include colors module const chalk = require('chalk'); module.exports = { rockpaperscissors: rps, tictactoe: ttt } function ttt() { return new Promise(resolve => { var board = {'1': ' ', '2': ' ', '3': ' ', '4': ' ', '5': ' ', '6': ' ', '7': ' ', '8': ' ', '9': ' '}; var gameopen = true; var draw = false; var winner; var winrow; var activeplayer; Math.random() < 0.5 ? activeplayer = 'player' : activeplayer = 'ai'; game(board); async function game() { if (activeplayer == 'player') { printboard(); board = await usermove(); activeplayer = 'ai'; } else { board = aimove(); activeplayer = 'player'; } checkboardstatus(board); } function printboard() { var place1 = chalk.white.bold(board['1']); var place2 = chalk.white.bold(board['2']); var place3 = chalk.white.bold(board['3']); var place4 = chalk.white.bold(board['4']); var place5 = chalk.white.bold(board['5']); var place6 = chalk.white.bold(board['6']); var place7 = chalk.white.bold(board['7']); var place8 = chalk.white.bold(board['8']); var place9 = chalk.white.bold(board['9']); if (winrow == '123') { if (winner == 'player') { var place1 = chalk.green.bold(board['1']); var place2 = chalk.green.bold(board['2']); var place3 = chalk.green.bold(board['3']); } else { var place1 = chalk.red.bold(board['1']); var place2 = chalk.red.bold(board['2']); var place3 = chalk.red.bold(board['3']); } } if (winrow == '456') { if (winner == 'player') { var place4 = chalk.green.bold(board['4']); var place5 = chalk.green.bold(board['5']); var place6 = chalk.green.bold(board['6']); } else { var place4 = chalk.red.bold(board['4']); var place5 = chalk.red.bold(board['5']); var place6 = chalk.red.bold(board['6']); } } if (winrow == '789') { if (winner == 'player') { var place7 = chalk.green.bold(board['7']); var place8 = chalk.green.bold(board['8']); var place9 = chalk.green.bold(board['9']); } else { var place7 = chalk.red.bold(board['7']); var place8 = chalk.red.bold(board['8']); var place9 = chalk.red.bold(board['9']); } } if (winrow == '147') { if (winner == 'player') { var place1 = chalk.green.bold(board['1']); var place4 = chalk.green.bold(board['4']); var place7 = chalk.green.bold(board['7']); } else { var place1 = chalk.red.bold(board['1']); var place4 = chalk.red.bold(board['4']); var place7 = chalk.red.bold(board['7']); } } if (winrow == '258') { if (winner == 'player') { var place2 = chalk.green.bold(board['2']); var place5 = chalk.green.bold(board['5']); var place8 = chalk.green.bold(board['8']); } else { var place2 = chalk.red.bold(board['2']); var place5 = chalk.red.bold(board['5']); var place8 = chalk.red.bold(board['8']); } } if (winrow == '369') { if (winner == 'player') { var place3 = chalk.green.bold(board['3']); var place6 = chalk.green.bold(board['6']); var place9 = chalk.green.bold(board['9']); } else { var place3 = chalk.red.bold(board['3']); var place6 = chalk.red.bold(board['6']); var place9 = chalk.red.bold(board['9']); } } if (winrow == '159') { if (winner == 'player') { var place1 = chalk.green.bold(board['1']); var place5 = chalk.green.bold(board['5']); var place9 = chalk.green.bold(board['9']); } else { var place1 = chalk.red.bold(board['1']); var place5 = chalk.red.bold(board['5']); var place9 = chalk.red.bold(board['9']); } } if (winrow == '357') { if (winner == 'player') { var place3 = chalk.green.bold(board['3']); var place5 = chalk.green.bold(board['5']); var place7 = chalk.green.bold(board['7']); } else { var place3 = chalk.red.bold(board['3']); var place5 = chalk.red.bold(board['5']); var place7 = chalk.red.bold(board['7']); } } console.log(chalk.yellow.bold(place1+'|'+place2+'|'+place3)); console.log(chalk.yellow.bold('-----------')); console.log(chalk.yellow.bold(place4+'|'+place5+'|'+place6)); console.log(chalk.yellow.bold('-----------')); console.log(chalk.yellow.bold(place7+'|'+place8+'|'+place9)); console.log(''); } async function usermove() { var options = getoptions(); let userchoice = await ask('Select a move ('+options.join(',')+') or (a)bort') if (userchoice == 'a' || userchoice == 'abort') { gameopen = false; } else { if (options.includes(Number(userchoice))) { board[userchoice] = ' X '; } else { console.log('invalid choice, try again') await usermove(); } } return board; } function aimove() { var options = getoptions(); var randomAnswer = options[Math.floor(Math.random() * options.length)]; board[randomAnswer] = ' O '; return board; } function getoptions() { var options = []; var i = 1; while (i < 10) { if (board[i] == ' ') { options.push(i); } i++; } return options; } function checkboardstatus(obj) { if ((board['1'] == ' X ' && board['2'] == ' X ' && board['3'] == ' X ') || (board['1'] == ' O ' && board['2'] == ' O ' && board['3'] == ' O ')) { gameopen = false; if (board['1'] == ' X ') { gameopen = false; winner = 'player'; } else { gameopen = false; winner = 'ai'; } winrow = '123'; } if ((board['4'] == ' X ' && board['5'] == ' X ' && board['6'] == ' X ') || (board['4'] == ' O ' && board['5'] == ' O ' && board['6'] == ' O ')) { gameopen = false; if (board['4'] == ' X ') { gameopen = false; winner = 'player'; } else { gameopen = false; winner = 'ai'; } winrow = '456'; } if ((board['7'] == ' X ' && board['8'] == ' X ' && board['9'] == ' X ') || (board['7'] == ' O ' && board['8'] == ' O ' && board['9'] == ' O ')) { gameopen = false; if (board['7'] == ' X ') { gameopen = false; winner = 'player'; } else { gameopen = false; winner = 'ai'; } winrow = '789'; } if ((board['1'] == ' X ' && board['4'] == ' X ' && board['7'] == ' X ') || (board['1'] == ' O ' && board['4'] == ' O ' && board['7'] == ' O ')) { gameopen = false; if (board['1'] == ' X ') { gameopen = false; winner = 'player'; } else { gameopen = false; winner = 'ai'; } winrow = '147'; } if ((board['2'] == ' X ' && board['5'] == ' X ' && board['8'] == ' X ') || (board['2'] == ' O ' && board['5'] == ' O ' && board['8'] == ' O ')) { gameopen = false; if (board['2'] == ' X ') { gameopen = false; winner = 'player'; } else { gameopen = false; winner = 'ai'; } winrow = '258'; } if ((board['3'] == ' X ' && board['6'] == ' X ' && board['9'] == ' X ') || (board['3'] == ' O ' && board['6'] == ' O ' && board['9'] == ' O ')) { gameopen = false; if (board['3'] == ' X ') { gameopen = false; winner = 'player'; } else { gameopen = false; winner = 'ai'; } winrow = '369'; } if ((board['1'] == ' X ' && board['5'] == ' X ' && board['9'] == ' X ') || (board['1'] == ' O ' && board['5'] == ' O ' && board['9'] == ' O ')) { gameopen = false; if (board['1'] == ' X ') { gameopen = false; winner = 'player'; } else { gameopen = false; winner = 'ai'; } winrow = '159'; } if ((board['3'] == ' X ' && board['5'] == ' X ' && board['7'] == ' X ') || (board['3'] == ' O ' && board['5'] == ' O ' && board['7'] == ' O ')) { gameopen = false; if (board['3'] == ' X ') { gameopen = false; winner = 'player'; } else { gameopen = false; winner = 'ai'; } winrow = '357'; } if (board['1'] != ' ' && board['2'] != ' ' && board['3'] != ' ' && board['4'] != ' ' && board['5'] != ' ' && board['6'] != ' ' && board['7'] != ' ' && board['8'] != ' ' && board['9'] != ' ') { gameopen = false; if (!winner) { draw = true; } } if (!gameopen) { if (!draw) { if (winner == 'player') { printboard(); resolve('You won!'); } else if (winner == 'ai') { printboard(); resolve('I won!'); } else { resolve('Stopped playing game'); } } else { printboard(); resolve('Draw, nobody wins'); } } else { game(); } } }) } function rps(input) { var userselection = input[1].toLowerCase(); var options = [ "rock", "paper", "scissors" ] var aiselection = options[Math.floor(Math.random() * options.length)]; var game_result; var win; var draw; if (userselection == 'rock' && aiselection == 'rock') { game_result = 'Rock vs rock, draw'; win = false; draw = true; } if (userselection == 'rock' && aiselection == 'paper') { game_result = 'Paper covers rock, you lose'; win = false; draw = false; } if (userselection == 'rock' && aiselection == 'scissors') { game_result = 'Rock crushes scissors, you win'; win = true; draw = false; } if (userselection == 'paper' && aiselection == 'paper') { game_result = 'Paper vs paper, draw'; win = false; draw = true; } if (userselection == 'paper' && aiselection == 'scissors') { game_result = 'Scissors cuts paper, you lose'; win = false; draw = false; } if (userselection == 'paper' && aiselection == 'rock') { game_result = 'Paper covers rock, you win'; win = true; draw = false; } if (userselection == 'scissors' && aiselection == 'scissors') { game_result = 'Scissors vs scissors, draw'; win = false; draw = true; } if (userselection == 'scissors' && aiselection == 'rock') { game_result = 'Rock crushes scissors, you lose'; win = false; draw = false; } if (userselection == 'scissors' && aiselection == 'paper') { game_result = 'Scissors cuts paper, you win'; win = true; draw = false; } result = [game_result]; result[1] = result[0]; return result; } async function ask(string) { let answer = await prompt.question(string) return answer; }