generated from nighthawkcoders/student
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
8c4754a
commit 868f12c
Showing
4 changed files
with
307 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,125 @@ | ||
--- | ||
permalink: /arushicpt/ | ||
layout: base | ||
title: Stress Reliever | ||
search_exclude: true | ||
--- | ||
<head> | ||
|
||
<meta charset="UTF-8"> | ||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
<title>Zen Garden with Emotions</title> | ||
<style> | ||
body { | ||
margin: 0; | ||
padding: 0; | ||
background-color: #add8e6; /* Light blue background */ | ||
display: flex; | ||
justify-content: center; | ||
align-items: center; | ||
height: 100vh; | ||
} | ||
|
||
#zen-garden { | ||
width: 600px; | ||
height: 400px; | ||
background-color: #010101; /* Mind Color */ | ||
border: 10px solid #8b4513; /* Brown border */ | ||
position: relative; | ||
} | ||
|
||
.tools { | ||
position: absolute; | ||
top: 20px; | ||
left: 20px; | ||
} | ||
|
||
button { | ||
padding: 10px 20px; | ||
background-color: #4caf50; | ||
color: white; | ||
border: none; | ||
cursor: pointer; | ||
margin-right: 10px; | ||
} | ||
|
||
button:hover { | ||
background-color: #45a049; | ||
} | ||
|
||
/* Emotion style */ | ||
.emotion { | ||
width: 30px; | ||
height: 30px; | ||
background-color: rgb(255, 255, 255); /* Default color */ | ||
border-radius: 50%; | ||
position: absolute; | ||
} | ||
|
||
#emotion-count { | ||
position: absolute; | ||
top: 20px; | ||
right: 20px; | ||
color: black; | ||
font-size: 18px; | ||
} | ||
</style> | ||
</head> | ||
<body> | ||
<div class="tools"> | ||
<button onclick="clearSquare()">Relieve Stress</button> | ||
<button onclick="changeEmotionColor()">Change Emotions</button> | ||
</div> | ||
<div id="zen-garden" onclick="addEmotion(event)"> | ||
</div> | ||
<div id="emotion-count"></div> | ||
|
||
<script> | ||
let emotionCount = 0; | ||
function addEmotion(event) { | ||
// If clicked inside the zen garden | ||
if (event && event.target.id === "zen-garden") { | ||
const emotion = document.createElement('div'); | ||
emotion.className = 'emotion'; | ||
emotion.style.left = (event.clientX - event.target.offsetLeft) + 'px'; | ||
emotion.style.top = (event.clientY - event.target.offsetTop) + 'px'; | ||
document.getElementById('zen-garden').appendChild(emotion); | ||
emotionCount++; | ||
updateEmotionCount(); | ||
} | ||
} | ||
|
||
function clearSquare() { | ||
// Remove all emotions | ||
const zenGarden = document.getElementById('zen-garden'); | ||
while (zenGarden.firstChild) { | ||
zenGarden.removeChild(zenGarden.firstChild); | ||
} | ||
emotionCount = 0; | ||
updateEmotionCount(); | ||
} | ||
|
||
function changeEmotionColor() { | ||
// Change the color of all emotions | ||
const emotions = document.querySelectorAll('.emotion'); | ||
emotions.forEach(emotion => { | ||
emotion.style.backgroundColor = getRandomColor(); | ||
}); | ||
} | ||
|
||
function getRandomColor() { | ||
// Generate a random color | ||
const letters = '0123456789ABCDEF'; | ||
let color = '#'; | ||
for (let i = 0; i < 6; i++) { | ||
color += letters[Math.floor(Math.random() * 16)]; | ||
} | ||
return color; | ||
} | ||
|
||
function updateEmotionCount() { | ||
const countElement = document.getElementById('emotion-count'); | ||
countElement.textContent = "Emotions: " + emotionCount; | ||
} | ||
|
||
</script> |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,182 @@ | ||
--- | ||
permalink: /swim/ | ||
layout: base | ||
title: Swim | ||
search_exclude: true | ||
--- | ||
<html> | ||
<head> | ||
|
||
<title>GAME</title> | ||
<meta charset="UTF-8"> | ||
<style> | ||
html, body { | ||
height: 100%; | ||
margin: 0; | ||
} | ||
body { | ||
background: #007BA7; | ||
display: flex; | ||
align-items: center; | ||
justify-content: center; | ||
} | ||
|
||
|
||
</style> | ||
</head> | ||
<body> | ||
<h1>Water Polo | ||
</h1> | ||
<canvas width="700" height="500" id="game"></canvas> | ||
<script> | ||
const canvas = document.getElementById('game'); | ||
const context = canvas.getContext('2d'); | ||
const grid = 15; | ||
const paddleHeight = grid * 5; // 80 | ||
const maxPaddleY = canvas.height - grid - paddleHeight; | ||
var paddleSpeed = 6; | ||
var ballSpeed = 5; | ||
|
||
|
||
const leftPaddle = { | ||
// start in the middle of the game on the left side | ||
x: grid * 2, | ||
y: canvas.height / 2 - paddleHeight / 2, | ||
width: grid, | ||
height: paddleHeight, | ||
// paddle velocity | ||
dy: 0 | ||
}; | ||
const rightPaddle = { | ||
// start in the middle of the game on the right side | ||
x: canvas.width - grid * 3, | ||
y: canvas.height / 2 - paddleHeight / 2, | ||
width: grid, | ||
height: paddleHeight, | ||
// paddle velocity | ||
dy: 0 | ||
}; | ||
const ball = { | ||
// start in the middle of the game | ||
x: canvas.width / 2, | ||
y: canvas.height / 2, | ||
width: grid, | ||
height: grid, | ||
// keep track of when need to reset the ball position | ||
resetting: false, | ||
// ball velocity (start going to the top-right corner) | ||
dx: ballSpeed, | ||
dy: -ballSpeed | ||
}; | ||
// check for collision between two objects using axis-aligned bounding box (AABB) | ||
// @see https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection | ||
function collides(obj1, obj2) { | ||
return obj1.x < obj2.x + obj2.width && | ||
obj1.x + obj1.width > obj2.x && | ||
obj1.y < obj2.y + obj2.height && | ||
obj1.y + obj1.height > obj2.y; | ||
} | ||
// game loop | ||
function loop() { | ||
requestAnimationFrame(loop); | ||
context.clearRect(0,0,canvas.width,canvas.height); | ||
// move paddles by their velocity | ||
leftPaddle.y += leftPaddle.dy; | ||
rightPaddle.y += rightPaddle.dy; | ||
// prevent paddles from going through walls | ||
if (leftPaddle.y < grid) { | ||
leftPaddle.y = grid; | ||
} | ||
else if (leftPaddle.y > maxPaddleY) { | ||
leftPaddle.y = maxPaddleY; | ||
} | ||
if (rightPaddle.y < grid) { | ||
rightPaddle.y = grid; | ||
} | ||
else if (rightPaddle.y > maxPaddleY) { | ||
rightPaddle.y = maxPaddleY; | ||
} | ||
// draw paddles | ||
context.fillStyle = 'white'; | ||
context.fillRect(leftPaddle.x, leftPaddle.y, leftPaddle.width, leftPaddle.height); | ||
context.fillRect(rightPaddle.x, rightPaddle.y, rightPaddle.width, rightPaddle.height); | ||
// move ball by its velocity | ||
ball.x += ball.dx; | ||
ball.y += ball.dy; | ||
// prevent ball from going through walls by changing its velocity | ||
if (ball.y < grid) { | ||
ball.y = grid; | ||
ball.dy *= -1; | ||
} | ||
else if (ball.y + grid > canvas.height - grid) { | ||
ball.y = canvas.height - grid * 2; | ||
ball.dy *= -1; | ||
} | ||
// reset ball if it goes past paddle (but only if we haven't already done so) | ||
if ( (ball.x < 0 || ball.x > canvas.width) && !ball.resetting) { | ||
ball.resetting = true; | ||
// give some time for the player to recover before launching the ball again | ||
setTimeout(() => { | ||
ball.resetting = false; | ||
ball.x = canvas.width / 2; | ||
ball.y = canvas.height / 2; | ||
}, 400); | ||
} | ||
// check to see if ball collides with paddle. if they do change x velocity | ||
if (collides(ball, leftPaddle)) { | ||
ball.dx *= -1; | ||
// move ball next to the paddle otherwise the collision will happen again | ||
// in the next frame | ||
ball.x = leftPaddle.x + leftPaddle.width; | ||
} | ||
else if (collides(ball, rightPaddle)) { | ||
ball.dx *= -1; | ||
// move ball next to the paddle otherwise the collision will happen again | ||
// in the next frame | ||
ball.x = rightPaddle.x - ball.width; | ||
} | ||
// draw ball | ||
context.fillRect(ball.x, ball.y, ball.width, ball.height); | ||
// draw walls | ||
context.fillStyle = 'lightgrey'; | ||
context.fillRect(0, 0, canvas.width, grid); | ||
context.fillRect(0, canvas.height - grid, canvas.width, canvas.height); | ||
// draw dotted line down the middle | ||
for (let i = grid; i < canvas.height - grid; i += grid * 2) { | ||
context.fillRect(canvas.width / 2 - grid / 2, i, grid, grid); | ||
} | ||
} | ||
// listen to keyboard events to move the paddles | ||
document.addEventListener('keydown', function(e) { | ||
event.preventDefault(); | ||
// up arrow key | ||
if (e.which === 38) { | ||
rightPaddle.dy = -paddleSpeed; | ||
} | ||
// down arrow key | ||
else if (e.which === 40) { | ||
rightPaddle.dy = paddleSpeed; | ||
} | ||
// w key | ||
if (e.which === 87) { | ||
leftPaddle.dy = -paddleSpeed; | ||
} | ||
// a key | ||
else if (e.which === 83) { | ||
leftPaddle.dy = paddleSpeed; | ||
} | ||
}); | ||
// listen to keyboard events to stop the paddle if key is released | ||
document.addEventListener('keyup', function(e) { | ||
if (e.which === 38 || e.which === 40) { | ||
rightPaddle.dy = 0; | ||
} | ||
if (e.which === 83 || e.which === 87) { | ||
leftPaddle.dy = 0; | ||
} | ||
}); | ||
// start the game | ||
requestAnimationFrame(loop); | ||
</script> | ||
</body> | ||
</html> |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.