diff --git a/_notebooks/2023-06-13-Mario.ipynb b/_notebooks/2023-06-13-Mario.ipynb
new file mode 100644
index 0000000..33cae12
--- /dev/null
+++ b/_notebooks/2023-06-13-Mario.ipynb
@@ -0,0 +1,180 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "%%html\n",
+ "\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "application/javascript": "const canvas = document.querySelector('canvas');\nconst c = canvas.getContext('2d');\ncanvas.width = 600;\ncanvas.height = 576;\n\nlet gravity = 2;\n\nclass Player {\n constructor() {\n this.speed = 10;\n this.position = {\n x: 100,\n y: canvas.height - 100\n };\n this.velocity = {\n x: 0,\n y: 0\n };\n this.width = 30;\n this.height = 30;\n this.color = 'red';\n }\n draw() {\n c.fillStyle = this.color;\n c.fillRect(\n this.position.x,\n this.position.y,\n this.width,\n this.height\n );\n }\n update() {\n this.position.y += this.velocity.y;\n this.position.x += this.velocity.x;\n if (this.position.y + this.height >= canvas.height) {\n this.position.y = canvas.height - this.height;\n this.velocity.y = 0;\n } else if (this.position.y <= 0) {\n this.position.y = 0;\n this.velocity.y = 0;\n }\n if (this.position.x + this.width >= canvas.width) {\n this.position.x = canvas.width - this.width;\n this.velocity.x = 0;\n } else if (this.position.x <= 0) {\n this.position.x = 0;\n this.velocity.x = 0;\n }\n \n if (this.position.y + this.height < canvas.height) {\n this.velocity.y += gravity;\n }\n this.draw();\n }\n}\nlet player = new Player();\nfunction animate() {\n requestAnimationFrame(animate);\n c.clearRect(0, 0, canvas.width, canvas.height);\n player.update();\n}\nanimate();\nfunction handleKeyDown(event) {\n if (event.key === 'w' || event.key === 'W') {\n player.velocity.y = -30;\n } else if (event.key === 's' || event.key === 'S') {\n player.velocity.y = player.speed;\n } else if (event.key === 'ArrowLeft') {\n player.velocity.x = -player.speed;\n } else if (event.key === 'ArrowRight') {\n player.velocity.x = player.speed;\n }\n}\nfunction handleKeyUp(event) {\n if (\n event.key === 'w' ||\n event.key === 's' ||\n event.key === 'ArrowLeft' ||\n event.key === 'ArrowRight'\n ) {\n player.velocity.x = 0;\n }\n}\ndocument.addEventListener('keydown', handleKeyDown);\ndocument.addEventListener('keyup', handleKeyUp);\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "%%javascript\n",
+ "const canvas = document.querySelector('canvas');\n",
+ "const c = canvas.getContext('2d');\n",
+ "canvas.width = 600;\n",
+ "canvas.height = 576;\n",
+ "\n",
+ "let gravity = 2;\n",
+ "\n",
+ "class Player {\n",
+ " constructor() {\n",
+ " this.speed = 10;\n",
+ " this.position = {\n",
+ " x: 100,\n",
+ " y: canvas.height - 100\n",
+ " };\n",
+ " this.velocity = {\n",
+ " x: 0,\n",
+ " y: 0\n",
+ " };\n",
+ " this.width = 30;\n",
+ " this.height = 30;\n",
+ " this.color = 'red';\n",
+ " }\n",
+ " draw() {\n",
+ " c.fillStyle = this.color;\n",
+ " c.fillRect(\n",
+ " this.position.x,\n",
+ " this.position.y,\n",
+ " this.width,\n",
+ " this.height\n",
+ " );\n",
+ " }\n",
+ " update() {\n",
+ " this.position.y += this.velocity.y;\n",
+ " this.position.x += this.velocity.x;\n",
+ " if (this.position.y + this.height >= canvas.height) {\n",
+ " this.position.y = canvas.height - this.height;\n",
+ " this.velocity.y = 0;\n",
+ " } else if (this.position.y <= 0) {\n",
+ " this.position.y = 0;\n",
+ " this.velocity.y = 0;\n",
+ " }\n",
+ " if (this.position.x + this.width >= canvas.width) {\n",
+ " this.position.x = canvas.width - this.width;\n",
+ " this.velocity.x = 0;\n",
+ " } else if (this.position.x <= 0) {\n",
+ " this.position.x = 0;\n",
+ " this.velocity.x = 0;\n",
+ " }\n",
+ " \n",
+ " if (this.position.y + this.height < canvas.height) {\n",
+ " this.velocity.y += gravity;\n",
+ " }\n",
+ " this.draw();\n",
+ " }\n",
+ "}\n",
+ "let player = new Player();\n",
+ "function animate() {\n",
+ " requestAnimationFrame(animate);\n",
+ " c.clearRect(0, 0, canvas.width, canvas.height);\n",
+ " player.update();\n",
+ "}\n",
+ "animate();\n",
+ "function handleKeyDown(event) {\n",
+ " if (event.key === 'w' || event.key === 'W') {\n",
+ " player.velocity.y = -30;\n",
+ " } else if (event.key === 's' || event.key === 'S') {\n",
+ " player.velocity.y = player.speed;\n",
+ " } else if (event.key === 'ArrowLeft') {\n",
+ " player.velocity.x = -player.speed;\n",
+ " } else if (event.key === 'ArrowRight') {\n",
+ " player.velocity.x = player.speed;\n",
+ " }\n",
+ "}\n",
+ "function handleKeyUp(event) {\n",
+ " if (\n",
+ " event.key === 'w' ||\n",
+ " event.key === 's' ||\n",
+ " event.key === 'ArrowLeft' ||\n",
+ " event.key === 'ArrowRight'\n",
+ " ) {\n",
+ " player.velocity.x = 0;\n",
+ " }\n",
+ "}\n",
+ "document.addEventListener('keydown', handleKeyDown);\n",
+ "document.addEventListener('keyup', handleKeyUp);\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.10.9"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}