mirror of
https://gitea.smigz.com/smiggiddy/odin-codeprojects.git
synced 2024-12-25 22:10:43 -05:00
feat: tictactoe finished
This commit is contained in:
parent
a01c1a8e87
commit
c8ce75acd1
6 changed files with 157 additions and 9 deletions
|
@ -0,0 +1,69 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<title>TicTacToe</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="title">
|
||||
<h1 class="title-text">
|
||||
Rock, Paper, Scissors!
|
||||
</h1>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="item">
|
||||
<button class="card-title">
|
||||
<img src="static/rock.png" alt="" class="card-image" data-item="rock">
|
||||
</button>
|
||||
</div>
|
||||
<div class="item">
|
||||
<button class="card-title">
|
||||
<img src="static/paper.png" alt="" class="card-image" data-item="rock">
|
||||
</button>
|
||||
</div>
|
||||
<div class="item">
|
||||
<button class="card-title">
|
||||
<img src="static/scissors.png" alt="" class="card-image" data-item="rock">
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="results">
|
||||
<div class="score">
|
||||
<h1 class="title-text">
|
||||
SCORE:
|
||||
</h1>
|
||||
<table class="scoreboard">
|
||||
<tr>
|
||||
<th>Player</th>
|
||||
<th>Win</th>
|
||||
<th>Loss</th>
|
||||
<th>Tie</th>
|
||||
</tr>
|
||||
<tr class="user-row">
|
||||
<td>User</td>
|
||||
<td class="user-win">0</td>
|
||||
<td class="user-loss">0</td>
|
||||
<td class="user-tie">0</td>
|
||||
</tr>
|
||||
<tr class="cpu-row">
|
||||
<td>Computer</td>
|
||||
<td class="cpu-win">0</td>
|
||||
<td class="cpu-loss">0</td>
|
||||
<td class="cpu-tie">0</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<script src="tictactoe.js"></script>
|
||||
</body>
|
||||
</html>
|
BIN
tictactoe/static/paper.png
Normal file
BIN
tictactoe/static/paper.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
BIN
tictactoe/static/rock.png
Normal file
BIN
tictactoe/static/rock.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 207 KiB |
BIN
tictactoe/static/scissors.png
Normal file
BIN
tictactoe/static/scissors.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.2 KiB |
39
tictactoe/style.css
Normal file
39
tictactoe/style.css
Normal file
|
@ -0,0 +1,39 @@
|
|||
.container {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.title {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.item {
|
||||
min-height: 250px;
|
||||
min-width: 250px;
|
||||
padding: 20px;
|
||||
gap: 40px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.card-image {
|
||||
height: 200px;
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
body {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
button {
|
||||
cursor: pointer;
|
||||
}
|
|
@ -17,15 +17,19 @@ else if its a tie , it should prompt the user to pick a new answer
|
|||
until a winner is picked
|
||||
*/
|
||||
|
||||
let rpc = ["rock", "paper", "scissors"]
|
||||
// index 0 = wins, index 1 = loss
|
||||
// index 2 = ties
|
||||
let CPUScore = [0,0,0];
|
||||
let userScore = [0,0,0];
|
||||
|
||||
let usersChoice = () => {
|
||||
let userChoice = prompt("Rock, Paper, or Scissors? ");
|
||||
return userChoice.toLocaleLowerCase();
|
||||
let playRound = (choice) => {
|
||||
let uc = choice.target.dataset.item;
|
||||
cpc = getCPUChoice();
|
||||
getResults(uc, cpc);
|
||||
}
|
||||
|
||||
let getCPUChoice = () => {
|
||||
// Generate a random number between 0 and 2
|
||||
let rpc = ["rock", "paper", "scissors"];
|
||||
let choice = Math.floor(Math.random() * 3);
|
||||
|
||||
return rpc[choice];
|
||||
|
@ -33,17 +37,53 @@ let getCPUChoice = () => {
|
|||
|
||||
function getResults(playerSelection, cpuSelection) {
|
||||
if (playerSelection === cpuSelection) {
|
||||
updateScore('tie')
|
||||
return "tie";
|
||||
} else if (playerSelection == "rock" && cpuSelection == "scissors" ||
|
||||
playerSelection == "paper" && cpuSelection == "rock" ||
|
||||
playerSelection == "scissors" && cpuSelection == "paper") {
|
||||
updateScore('user');
|
||||
return `You Win! ${playerSelection} beats ${cpuSelection}`;
|
||||
} else {
|
||||
updateScore('cpu');
|
||||
return `You Lose! ${cpuSelection} beats ${playerSelection}`;
|
||||
}
|
||||
}
|
||||
|
||||
uc = usersChoice();
|
||||
cpc = getCPUChoice();
|
||||
console.log(uc, cpc);
|
||||
console.log(getResults(uc, cpc));
|
||||
function updateScore(winner) {
|
||||
if (winner === 'user') {
|
||||
userScore[0] += 1;
|
||||
CPUScore[1] += 1;
|
||||
} else if (winner === 'cpu') {
|
||||
CPUScore[0] += 1;
|
||||
userScore[1] += 1;
|
||||
} else {
|
||||
CPUScore[2] += 1;
|
||||
userScore[2] += 1;
|
||||
}
|
||||
|
||||
// Need a better way to target multiple elements, but this works for now
|
||||
let userScoreDiv = document.querySelector('.user-row');
|
||||
let cpuScoreDiv = document.querySelector('.cpu-row');
|
||||
userScoreDiv.querySelector('.user-win').textContent = userScore[0];
|
||||
userScoreDiv.querySelector('.user-loss').textContent = userScore[1];
|
||||
userScoreDiv.lastElementChild.textContent = userScore[2];
|
||||
cpuScoreDiv.querySelector('.cpu-win').textContent = CPUScore[0];
|
||||
cpuScoreDiv.querySelector('.cpu-loss').textContent = CPUScore[1];
|
||||
cpuScoreDiv.lastElementChild.textContent = CPUScore[2];
|
||||
|
||||
if (userScore[0] === 5 || CPUScore === 5) {
|
||||
let showWinner = document.querySelector('.score .title-text');
|
||||
if(userScore[0] === 5){
|
||||
showWinner.textContent = `YOU WON!`;
|
||||
} else if(CPUScore[0] === 5) {
|
||||
showWinner.textContent = `YOU LOST!`;
|
||||
}
|
||||
console.log('Game Over');
|
||||
}
|
||||
// userScoreDiv.textContent = userScore; //`Your Score: ${userScore} | CPU Score: ${CPUScore}`;
|
||||
// console.log(userScore, CPUScore);
|
||||
}
|
||||
|
||||
let choice = document.querySelectorAll('button');
|
||||
choice.forEach( (c) => c.addEventListener('click', playRound));
|
Loading…
Reference in a new issue