Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
111 commits
Select commit Hold shift + click to select a range
2fb7e46
Initial commit
zishankadri Aug 6, 2025
7a6b551
warm-up: add my name to README
zishankadri Aug 7, 2025
6186a3e
Merge pull request #1 from zishankadri/warmup/zishankadri
zishankadri Aug 7, 2025
f260bb4
warm-up: add my name to README
rxdiationx Aug 7, 2025
1297f9a
Merge pull request #2 from zishankadri/warmup/rxdiationx
zishankadri Aug 7, 2025
de46bf4
Fixes poetry.lock and adds pyscript
Sapient44 Aug 9, 2025
ac9f080
Merge pull request #3 from zishankadri/poetry_fix
zishankadri Aug 9, 2025
247bebf
Create a base framework for the app
zishankadri Aug 10, 2025
b650333
Merge branch 'main' into feature/base-framework
Shivk123 Aug 11, 2025
99f9648
Merge pull request #7 from zishankadri/feature/base-framework
Shivk123 Aug 11, 2025
c78ba78
Randomise initial block pos (#9)
Sapient44 Aug 11, 2025
f18d8d9
Add modular PyScript setup with src package in virtual filesystem
Shivk123 Aug 11, 2025
6eac7fb
Added __init__.py
Shivk123 Aug 11, 2025
f36fd45
fix: add type hints and docstring for close_modal to satisfy linter r…
Shivk123 Aug 11, 2025
c29416d
Merge pull request #13 from zishankadri/feature/modular-pyscript
Shivk123 Aug 11, 2025
34f6289
feat: Add save option
rxdiationx Aug 12, 2025
608fbce
feat: Add loading screen and continue button
rxdiationx Aug 12, 2025
0f7b87d
Add save-file feature and loading screen
rxdiationx Aug 12, 2025
3112581
refactor: move save_grid_code_to_file and create_visual_grid into uti…
zishankadri Aug 12, 2025
f3b599e
Moves Function Call for create_visual_grid
Shivk123 Aug 12, 2025
2704bcb
Merge pull request #15 from zishankadri/feature/save-file-and-loading…
Shivk123 Aug 12, 2025
625de32
Make initial modal message in index.html more concise
zishankadri Aug 12, 2025
e90c187
Set correct MIME type and improve timestamp formatting in save function
zishankadri Aug 12, 2025
bbe73ba
Improve UI layout and enhance user experience
zishankadri Aug 12, 2025
1692e72
Added timer logic
mhaxanali Aug 13, 2025
53dc722
fix: format frontend files
mhaxanali Aug 13, 2025
76255a6
fix: capitalization of characters
mhaxanali Aug 13, 2025
51ef14f
build: set up Tailwind CSS v4 and migrate styles from vanilla CSS
zishankadri Aug 13, 2025
187b5d3
Merge pull request #17 from zishankadri/feat/tailwind-setup
zishankadri Aug 13, 2025
a9d6d0c
Merge branch 'main' of https://github.com/zishankadri/code-jam-templa…
mhaxanali Aug 13, 2025
09a1669
Fix block lock logic to trigger on natural lock, refactor related code
zishankadri Aug 13, 2025
ee428c1
fix: Timer was not showing on screen
mhaxanali Aug 13, 2025
ba7a8a4
Merge pull request #18 from zishankadri/fix/block-locking
zishankadri Aug 13, 2025
fed4933
Merge branch 'main' into feature/timer
zishankadri Aug 13, 2025
51e8149
Merge pull request #16 from zishankadri/feature/timer
zishankadri Aug 13, 2025
5ead106
Fix index.html overwritten by recent branch merge
zishankadri Aug 13, 2025
e250dc0
Move input-focus handling to lock_visual_cells()
zishankadri Aug 13, 2025
ac9ae1f
Update README.md
zishankadri Aug 13, 2025
197b410
Rename assets/ to objects/
zishankadri Aug 14, 2025
3e39101
Merge branch 'main' of https://github.com/zishankadri/code-jam-template
zishankadri Aug 14, 2025
864f46e
Update docstring of lock_visual_cells()
zishankadri Aug 14, 2025
9005c8d
Restructure PyScript folder structure and config.js to match local setup
zishankadri Aug 14, 2025
e2823dd
Restructure project for multiple game modes; add menu screen in root …
zishankadri Aug 14, 2025
0e0d598
update folder names in index.html
zishankadri Aug 14, 2025
4e18f22
rename standard.py to patterns.py
zishankadri Aug 14, 2025
a4575ba
clear index.html and main.py for singleplayer game mode
zishankadri Aug 14, 2025
26da5c8
Initial singleplayer mode dump and temporary refactor
zishankadri Aug 15, 2025
03d7f9f
fix lock_visual_cells() logic
zishankadri Aug 15, 2025
68ea0fe
Adds all the parts of the standalone app fo code-editor
Sapient44 Aug 15, 2025
e81da79
cleanup: remove redundant loading code and other small changes
zishankadri Aug 15, 2025
18bc9d1
refactor: adapt singleplayer mode to new architecture
zishankadri Aug 15, 2025
95717ff
docs: add initial documentation folder with architecture.md and diagram
zishankadri Aug 15, 2025
033667b
refactor: complete singleplayer mode setup
zishankadri Aug 15, 2025
f8a5fa8
chore: add multiple authors to pyproject.toml
zishankadri Aug 15, 2025
aa60e3b
feat: setup Flask backend with PyScript frontend and auto-start Tailw…
Shivk123 Aug 15, 2025
66b4b7c
docs: update README for Flask setup
Shivk123 Aug 15, 2025
ccc2c6c
Merge pull request #21 from zishankadri/feature/flask-pyscript-setup
zishankadri Aug 15, 2025
2768f31
Removes timer from the code editor
Sapient44 Aug 15, 2025
a60c014
Adds a terminal window for the code output
Sapient44 Aug 16, 2025
943fde8
Add multi mode support for roguelike mode
rxdiationx Aug 16, 2025
972d2d7
fix: correct CSS output file path in mode/roguelike index.html
zishankadri Aug 16, 2025
67fc603
refactor: adapt roguelike mode to GridRenderer and Controller archite…
zishankadri Aug 16, 2025
a55a33f
docs: update architecture.md and diagram with dependency injection op…
zishankadri Aug 16, 2025
8f15e62
refactor: rename ui_renderer to ui_manager and GridRenderer to UIManager
zishankadri Aug 16, 2025
6100925
refactor: make code editor mode standalone to enable shared/ refactoring
zishankadri Aug 16, 2025
6781df5
refactor(shared): establish shared/ as base framework for all modes
zishankadri Aug 16, 2025
aefc5c9
refactor(roguelike,shared): adapt roguelike to shared/ and fix framew…
zishankadri Aug 16, 2025
4f25b9f
clean(roguelike): remove redundant loading screen code from index.html
zishankadri Aug 16, 2025
1e10d43
docs: update architecture.md
zishankadri Aug 16, 2025
f0557fe
chore: overall cleanup and frontend redesign
zishankadri Aug 16, 2025
b51bb6f
fix: Fix gameover modal
rxdiationx Aug 16, 2025
84366f3
feat(ui): improve UI, update button styling, add retro-btn-secondary
zishankadri Aug 16, 2025
0f8bda0
refactor(singleplayer): migrate to shared/ base framework
zishankadri Aug 17, 2025
fa8114d
Merge pull request #23 from zishankadri/experiment/multi-mode-support
zishankadri Aug 17, 2025
f562120
Adds the code running functionality
Sapient44 Aug 16, 2025
e9c25af
Changes file paths, to be according to standard of main branch
Sapient44 Aug 17, 2025
b0040ac
Merge pull request #22 from zishankadri/experiment/mode/codeeditor
zishankadri Aug 17, 2025
2dcfcfd
Delete obsolete code-editor folder after merging changes from PR #22
zishankadri Aug 17, 2025
84bffdf
fix(menu): add code-editor to menu screen and update CSS path in mode…
zishankadri Aug 17, 2025
cc76c9a
chore(singleplayer): rename renderer to ui_manager in block_generator…
zishankadri Aug 17, 2025
e98fb68
Cleanup: eliminate unnecessary comments
zishankadri Aug 17, 2025
73d2341
feat: Add bgm and button click sound
rxdiationx Aug 17, 2025
a80c517
feat(editor): redesign code editor UI and remove unnecessary dead cod…
zishankadri Aug 17, 2025
25fbee0
feat: Add bgm toggle and game over bgm
rxdiationx Aug 17, 2025
c51c626
refactor(code-editor): adapt Code Editor mode to shared framework
zishankadri Aug 17, 2025
397d135
feat(file-menu): add 'New File' option in code editor mode
zishankadri Aug 17, 2025
2fd72d1
feat(game-manager): add undo/redo support for grid state
zishankadri Aug 17, 2025
e0de628
fix: Track main.py
rxdiationx Aug 17, 2025
4011f1b
fix(ui): correct CSS styling for music toggle button
zishankadri Aug 17, 2025
a7ccd38
feat: Add place sound
rxdiationx Aug 17, 2025
7041d3e
fix(ui): center timer in header bar
zishankadri Aug 17, 2025
c8d096c
fix: Add correct sound
rxdiationx Aug 17, 2025
04286b0
fix: reduce bgm volume
rxdiationx Aug 17, 2025
15cffd4
chore: remove unused modes/roguelike/index.html
zishankadri Aug 18, 2025
2ef134a
Merge pull request #24 from zishankadri/feature/bgm-support
zishankadri Aug 18, 2025
006be7a
feat:Add place sound for code editor
rxdiationx Aug 18, 2025
beb72a1
Merge pull request #25 from zishankadri/feature/place-sound-for-editor
zishankadri Aug 18, 2025
ca4cf2c
chore(ui): rearrange menu
zishankadri Aug 18, 2025
e950965
fix: Add minor changes to welcome modals
rxdiationx Aug 18, 2025
54aeaeb
Change audio
rxdiationx Aug 18, 2025
bc4d26b
refactor: rename shared/ to engine/ and extract common files into sha…
zishankadri Aug 18, 2025
9316796
rename singleplayer to roguelike
zishankadri Aug 18, 2025
d23d011
rename singleplayer to roguelike
zishankadri Aug 18, 2025
4c876d5
fix: added block locking at bottom pointer
zishankadri Aug 18, 2025
f565d12
added __init__.py to shared/
zishankadri Aug 18, 2025
a2ac6e6
chore add ⬇️ in index.html
zishankadri Aug 18, 2025
932e09f
Merge pull request #27 from zishankadri/final-features
zishankadri Aug 18, 2025
aa6fd97
last
zishankadri Aug 18, 2025
ab8d860
Update README.md
zishankadri Aug 21, 2025
43dfd3c
Update README.md
zishankadri Aug 25, 2025
e201148
Add 'grand-gardenias/' from commit '43dfd3c2ec07ac2c77d390efabc6105d0…
janine9vn Sep 13, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions grand-gardenias/.github/workflows/lint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# GitHub Action workflow enforcing our code style.

name: Lint

# Trigger the workflow on both push (to the main repository, on the main branch)
# and pull requests (against the main repository, but from any repo, from any branch).
on:
push:
branches:
- main
pull_request:

# Brand new concurrency setting! This ensures that not more than one run can be triggered for the same commit.
# It is useful for pull requests coming from the main repository since both triggers will match.
concurrency: lint-${{ github.sha }}

jobs:
lint:
runs-on: ubuntu-latest

env:
# The Python version your project uses. Feel free to change this if required.
PYTHON_VERSION: "3.12"

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Python ${{ env.PYTHON_VERSION }}
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}

- name: Run pre-commit hooks
uses: pre-commit/action@v3.0.1
38 changes: 38 additions & 0 deletions grand-gardenias/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Files generated by the interpreter
__pycache__/
*.py[cod]

# Environment specific
.venv
venv
.env
env

# Unittest reports
.coverage*

# Logs
*.log

# PyEnv version selector
.python-version

# Built objects
*.so
dist/
build/

# IDEs
# PyCharm
.idea/
# VSCode
.vscode/
# MacOS
.DS_Store

# npm and tailwindcss
# Dependency directory
node_modules/

# Generated files
dist/
18 changes: 18 additions & 0 deletions grand-gardenias/.pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Pre-commit configuration.
# See https://github.com/python-discord/code-jam-template/tree/main#pre-commit-run-linting-before-committing

repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: check-toml
- id: check-yaml
- id: end-of-file-fixer
- id: trailing-whitespace
args: [--markdown-linebreak-ext=md]

- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.12.2
hooks:
- id: ruff-check
- id: ruff-format
7 changes: 7 additions & 0 deletions grand-gardenias/LICENSE.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Copyright 2021 Python Discord

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
142 changes: 142 additions & 0 deletions grand-gardenias/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
<p align="center">
<img src="docs/img/logo.svg" alt="Project Logo" width="200"/>
</p>

# 👾 Tetris Bugs: The Code Editor You Never Asked For

Built by **Grand Gardenias** for Python Discord's Summer CodeJam 2025. Challenge theme: **Wrong Tool for the Job** using **Python in the Browser** via [Pyscript](https://pyscript.net/).

---

## 🎯 The Concept

Instead of typing code like a normal human, you now have to **catch falling code blocks** and arrange them into working programs.

## 🎮 Game Modes (Choose Your Suffering)

### 1. 🏗️ Tetris Code Editor

- New File
- Export/Save
- Undo/Redo
- Run Code
- Terminal Output
- Code Falls from Sky

### 2. ⚡ CodeRush Mode

- 5-minute timer counting down
- Questions show up on the left
- Solve as many as you can before time’s up
- Your score = how many problems you solved before the end

### 3. 🗡️ Roguelike Mode

- We provide the CORRECT solution
- Arrange the blocks properly to "clear" lines like Tetris
- Wrong arrangements stack up
- Reach the top = GAME OVER

### 4. We could not finish the multiplayer mode, but it is documented in [docs/goals.md](docs/goals.md)

## 🛠️ Tech Stack

- **PyScript**
- **TailwindCSS**

## 📦 Requirements

- Python 3.13+
- Node.js & npm

## ⚙️ Setup Instructions

1. Clone the repository:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I appreciate how easy your app is to run, I really like adding docker as an option to full-stack projects. When there is a frontend and backend component, building and running can be nicely automated and simplified this way.

A really rough example of a Dockerfile (emphasis on rough) that could work for something like this is as follows:

FROM node:22-alpine as frontend
RUN mkdir /frontend-build
COPY ./frontend /frontend
WORKDIR /frontend

RUN npm install
RUN npm run build

FROM python:3.13-slim-bookworm

RUN mkdir /app
COPY --from=frontend /frontend /app

RUN python3 -m pip install poetry
RUN poetry config virtualenvs.create false

COPY . /app/
COPY backend /app/
COPY README.md /app/

WORKDIR /app

RUN python3 -m poetry install

CMD ["python3", "-m", "http.server"]

Then run docker build -t grand-gardenias ., followed by docker run grand-gardenias -p 8000:8000

```shell
git clone https://github.com/zishankadri/tetris-bugs.git
cd tetris-bugs
```
3. Start a local Server:
```shell
cd frontend
npm install
npm run build
python -m http.server
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nitpick/out of scope for a brief code jam, but be mindful of how this app is run. I see that multiplayer may be a future feature and this run method allows for path traversal, so could be risky to expose to the internet.

```

3. **Open Your Browser** to `http://localhost:8000`
4. 💡 For Contributors: Run `npm run dev` to auto-update Tailwind while you code.

## 🎉 Achievement Unlocked
**Congratulations! You now have the most unique answer to "What IDE do you use?"**

*"Oh, I use Tetris."*

## Video Presentation
[code-editor.webm](https://github.com/user-attachments/assets/cf059496-4f29-4d98-a95a-8969f91b333e)

<details>
<summary>⚡ CodeRush Video Presentation </summary>
https://drive.google.com/file/d/1t6_92z2R_ntOok2yyzjklHpKyxoKZl_g/view
</details>

<details>
<summary>🗡️ Roguelike (BETA) Video Presentation </summary>

[roguelike.webm](https://github.com/user-attachments/assets/ffc35054-e3de-4e12-ac63-f1e3520f2ee8)
</details>

## 📸 Screenshots
<details>
<summary>Preview Images 📸</summary>
<img width="1314" height="655" alt="code-editor" src="https://github.com/user-attachments/assets/d3d61ead-39b7-44e8-b62f-207709f3b1b6" />
<img width="1360" height="676" alt="code-editor" src="https://github.com/user-attachments/assets/b8d619c7-280e-4e5e-b9b6-c59bfa21ccf9" />
<img width="1360" height="768" alt="code-rush" src="https://github.com/user-attachments/assets/6f6c9027-1017-43cc-95ef-c971d493ccb7" />
<img width="1360" height="676" alt="roguelike" src="https://github.com/user-attachments/assets/4142aa8b-012b-4f29-85a0-8624e1ef33e5" />
<img width="1311" height="655" alt="menu" src="https://github.com/user-attachments/assets/1220ca0c-c8a3-49f1-a50d-1bd76965e989" />

</details>

## 🎯 Wrong Tool for the Job

✅ Using Tetris as an IDE
✅ Spatial reasoning for coding problems

With some tweaks and backend, this could be a useful tool as a coding qualifier, as we doubt any LLM alone could pass this test.

## 🤝 Credits

(in order of contributed LOC):

<table>
<tr>
<th></th>
<th>Name</th>
<th>Contributions</th>
</tr>
<tr>
<td><a href="https://github.com/zishankadri"><img src="https://github.com/zishankadri.png" alt="Luffy" width="64"></a></td>
<td><a href="https://github.com/zishankadri">Luffy</a></td>
<td>Lead developer, Project architecture, Ideation, Frontend</td>
</tr>
<tr>
<td><a href="https://github.com/rxdiationx"><img src="https://github.com/rxdiationx.png" alt="rxdiationx" width="64"></a></td>
<td><a href="https://github.com/rxdiationx">rxdiationx</a></td>
<td>Base of CodeRush, sound effects/music, loading screen, Sourcing of problems</td>
</tr>
<tr>
<td><a href="https://github.com/Sapient44"><img src="https://github.com/Sapient44.png" alt="Sapient44" width="64"></a></td>
<td><a href="https://github.com/Sapient44">Sapient44</a></td>
<td>Terminal and code execution, Modifications in roguelike mode, Sourcing of audio</td>
</tr>
<tr>
<td><a href="https://github.com/Shivk123"><img src="https://github.com/Shivk123.png" alt="Shivk123" width="64"></a></td>
<td><a href="https://github.com/Shivk123">Shivk123</a></td>
<td>Meeting facilitation, Initial file structure, Set up Flask backend</td>
</tr>
<tr>
<td><a href="https://github.com/mhasanali2010"><img src="https://github.com/mhasanali2010.png" alt="mhasanali2010" width="64"></a></td>
<td><a href="https://github.com/mhasanali2010">mhasanali2010</a></td>
<td>timer logic, pause screen</td>
</tr>
</table>
Empty file.
21 changes: 21 additions & 0 deletions grand-gardenias/backend/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Define paths
from pathlib import Path

from flask import Flask, render_template

template_dir = Path(__file__).resolve().parent.parent / "frontend"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This path is re-used in run.py, could be better off as a constant in something like settings.py, would maybe be nice to have it configurable with an env var as well.

static_dir = template_dir # if your CSS/JS/config are in frontend/

app = Flask(
__name__,
template_folder=template_dir,
static_folder=static_dir, # serve static files from frontend/
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of these comments may be a bit overboard. If the code is self explanatory, I would avoid comments like this. My best advice here is to focus on the why for code comments. If no explanation for the "why" is needed/helpful, the comment can probably be discarded.

I.e static_folder=static_dir is very explicit in what it does, so the inline comment is not necessary. However, the next comment serve at root so /config.json works does provide some utility as it explains why you have written the code this way, not just what it does. That could provide important context to a future user. Although a good commit message could serve the same utility.

static_url_path="", # serve at root so /config.json works
)


@app.route("/")
def home() -> None:
"""Render the main page."""
# Render the index.html file from the frontend directory
return render_template("index.html")
40 changes: 40 additions & 0 deletions grand-gardenias/backend/run.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import shutil
import subprocess
import sys
from pathlib import Path

from flask.cli import main as flask_main

DEFAULT_ARG_COUNT = 2 # Avoid magic number
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a magic number. Good example of where a comment can help explain the why ;)



def main() -> None:
"""Run the Flask application and start the frontend development server."""
frontend_dir = Path(__file__).parent.parent / "frontend"

# Locate npm safely
npm_path = shutil.which("npm")
if npm_path is None:
print("npm not found in PATH.")
sys.exit(1)

# Start npm dev server
try:
subprocess.Popen( # noqa: S603
[npm_path, "run", "dev"],
cwd=frontend_dir,
)
print("Frontend dev server started.")
except OSError as err:
print(f"Failed to start frontend: {err}")

sys.argv.insert(1, "--app=backend.app")

if len(sys.argv) == DEFAULT_ARG_COUNT:
sys.argv.append("run")

flask_main()


if __name__ == "__main__":
main()
23 changes: 23 additions & 0 deletions grand-gardenias/docs/architecture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Project Architecture

*(See ![Architecture Diagram](img/architecture-diagram.svg) for visual reference.)*

**Goal:** Avoid circular imports, enable reuse across modes, separate concerns.

## Layers

1. **Objects Layer** — self-contained game entities (no external knowledge).
2. **Core Game Management** — orchestrates state, no DOM access.
3. **Support Modules** — UI Manager, controls, block generators.

**Entry Point:** `main` wires components together and selects the mode.

## Dependency Rules

- Objects → no outward dependencies.
- Game Manager → can talk to objects & support modules, but no cycles.
- UI Manager → DOM Manipulation.
- Controls → interact with Game Manager and objects only.
- `main` → composition root, no logic.

Modes can add their own files, but they must follow the same rules.
13 changes: 13 additions & 0 deletions grand-gardenias/docs/goals.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# MULTIPLAYER

![multiplayer screen](img/multiplayer.svg)

## THE CONCEPT OF 👾 Bugs

Occasionally, instead of the actual code blocks, the player will receive bugs from a number of pre-defined weapons in a class named 'Bugs' e.g. Bugs.beetle(). I originally thought of Bugs.bomb (), which on placing will immediately disappear from the player's own screen, but a bomb will appear at the same spot on the enemy's screen touching which will require the enemy to do over that one block, giving us a 'time advantage'. This will make so much sense if we create a 'time-based winner' game. (Open to suggestions this is just an example I have in mind for now.)

![bugs](img/special-block.svg)

## Bugs.beetle()

![bugs](img/bugs.svg)
3 changes: 3 additions & 0 deletions grand-gardenias/docs/img/architecture-diagram.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions grand-gardenias/docs/img/bugs.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading