123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- console.log('JavaScript Beginner Projects: Rock Paper Scissors Lizard Spock!');
- window.addEventListener('DOMContentLoaded', () => {
- _Setup();
- });
- // The general idea here is that these represent all the possible ways to
- // win for a given choice. So, for example, if you were to lookup "scissors",
- // you can see that it cuts paper and decapitates lizard.
- const _SHAPES = {
- scissors: {paper: 'cuts', lizard: 'decapitates'},
- paper: {rock: 'covers', spock: 'disproves'},
- rock: {lizard: 'crushes', scissors: 'crushes'},
- lizard: {spock: 'poisons', paper: 'eats'},
- spock: {scissors: 'smashes', rock: 'vaporizes'},
- };
- let _AIChoice = null;
- let _PlayerChoice = null;
- let _Score = [0, 0];
- // This sets up the choices by creating elements programmatically, and then
- // assigning the images to them and setting the onclick handler to handle
- // player choices.
- function _Setup() {
- for (const k in _SHAPES) {
- const div1 = document.createElement('div');
- const div2 = document.createElement('div');
- const img = document.createElement('img');
- img.src = k + '.png';
- div1.id = k;
- div1.className = 'base unselected';
- div1.appendChild(img);
- div1.onclick = (e) => {
- _Select(e);
- };
- div2.id = 'ai-' + k;
- div2.className = 'base unselected';
- div2.appendChild(div1);
- document.getElementById('selection').appendChild(div2);
- }
- _UpdateScore();
- }
- function _UpdateScore() {
- document.getElementById('score').innerText = _Score[0] + ':' + _Score[1];
- }
- // This is called when a player selects one of the choices, ie. rock, paper, etc...
- function _Select(evt) {
- for (const k in _SHAPES) {
- const node = document.getElementById(k);
- node.className = "base unselected";
- }
- evt.currentTarget.className = "base selected";
- _PlayerChoice = evt.currentTarget.id;
- _AIChoose(50);
- }
- function _AIChoose(delay) {
- for (const k in _SHAPES) {
- const node = document.getElementById(k);
- node.parentNode.className = "base unselected";
- }
- const possibleSelections = Object.keys(_SHAPES);
- const roll = Math.floor(Math.random() * possibleSelections.length);
- const choice = possibleSelections[roll];
- const node = document.getElementById(choice);
- node.parentNode.className = "base aiSelected";
- _AIChoice = choice;
- if (delay < 200) {
- setTimeout(() => {
- _AIChoose(delay + 5);
- }, delay);
- } else {
- _ResolveWinner();
- }
- }
- function _ResolveWinner() {
- let desc = '';
- if (_AIChoice == _PlayerChoice) {
- desc = 'Tie game.'
- } else if (_AIChoice in _SHAPES[_PlayerChoice]) {
- desc = 'Player Wins: ';
- desc += (_PlayerChoice + ' ' + _SHAPES[_PlayerChoice][_AIChoice] +
- ' ' + _AIChoice + '.');
- _Score[0] += 1;
- } else {
- desc = 'AI Wins: ';
- desc += (_AIChoice + ' ' + _SHAPES[_AIChoice][_PlayerChoice] +
- ' ' + _PlayerChoice + '.');
- _Score[1] += 1;
- }
- document.getElementById('description').innerText = desc;
- _UpdateScore();
- }
- function _IsWinner(player1, player2) {
- return player2 in _CHOICES[player1];
- }
|