forked from andrea/homework5
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1467668240 | |||
| d2fca8e7ae | |||
| 98917111a8 |
@@ -1,115 +0,0 @@
|
|||||||
# My proposal
|
|
||||||
|
|
||||||
- name: Chaewon Lee
|
|
||||||
- student ID: 20220552
|
|
||||||
- [URL](https://git.prototyping.id/20220552/homework5)
|
|
||||||
|
|
||||||
## Describe the game
|
|
||||||
|
|
||||||
```
|
|
||||||
what does the user have to accomplish? How do you win or lose? What type of interactions are possible?
|
|
||||||
```
|
|
||||||
|
|
||||||
**Orb.io** is a 3D survival game inspired by `.io-style` games, particularly [Slither.io](http://slither.com/io), reinterpreted in a _three-dimensional_ visual environment.
|
|
||||||
|
|
||||||
The player controls a glowing sphere moving through a dark space filled with smaller orbs. While the gameplay mechanics are based on classic snake-like systems, the game presents them using 3D rendering and spatial depth.
|
|
||||||
|
|
||||||
### Objective
|
|
||||||
|
|
||||||
The player's goal is to survive as long as possible while collecting glowing orbs to increase their score and grow in size.
|
|
||||||
|
|
||||||
### Core Mechanics
|
|
||||||
|
|
||||||
- The player moves continuously across a 3D environment (constrained to a flat plane for clarity and control).
|
|
||||||
- Small glowing orbs are scattered throughout the space.
|
|
||||||
- When the player collects an orb, their score increases and their body grows longer.
|
|
||||||
- The player leaves behind a trail of body segments that follow the head, forming a snake-like structure.
|
|
||||||
- As the player grows, navigation becomes more difficult due to increased length and space constraints.
|
|
||||||
|
|
||||||
### Win / Lose Conditions
|
|
||||||
|
|
||||||
- There is no fixed win condition. The game is endless, and success is measured by the player's score and survival time.
|
|
||||||
- The player loses if:
|
|
||||||
- They collide with their own body
|
|
||||||
- They hit obstacles or boundaries in the environment
|
|
||||||
|
|
||||||
### Player Interactions
|
|
||||||
|
|
||||||
The player can:
|
|
||||||
|
|
||||||
- Control movement using keyboard (`WASD` or `arrow keys`) or mouse input
|
|
||||||
- Collect orbs to grow and gain points
|
|
||||||
- Avoid collisions with their own body and obstacles
|
|
||||||
- Restart the game after losing
|
|
||||||
|
|
||||||
The gameplay loop is simple and repetitive:
|
|
||||||
`Play` → `Collect` → `Grow` → `Avoid` → `Fail` → `Restart`
|
|
||||||
|
|
||||||
The simplicity of the mechanics allows for immediate understanding, while increasing difficulty creates tension and replayability.
|
|
||||||
|
|
||||||
## How will the game look like?
|
|
||||||
|
|
||||||
```
|
|
||||||
What are the game elements (e.g. characters, world, interface) and how will they be implemented in code (e.g., modules, classes, objects, functions)? Feel free to use diagrams, flow-charts or any other visual representation to show your plan.
|
|
||||||
```
|
|
||||||
|
|
||||||
The game will feature a dark 3D environment with glowing spheres as the main visual elements, creating a clean and immersive experience.
|
|
||||||
|
|
||||||
<img src="environment.png" style="max-height: 300px;">
|
|
||||||
|
|
||||||
### Game Elements
|
|
||||||
|
|
||||||
- **Player**: glowing sphere with trailing body segments
|
|
||||||
- **Orbs**: collectible glowing spheres
|
|
||||||
- **Obstacles**: larger objects that cause collision
|
|
||||||
- **World**: bounded arena on a flat plane
|
|
||||||
- **UI**: score, best score, start and game over screens
|
|
||||||
|
|
||||||
### Code Structure
|
|
||||||
|
|
||||||
The game will be organized into simple modules:
|
|
||||||
|
|
||||||
`main.js`
|
|
||||||
├── `GameManager`
|
|
||||||
├── `Player`
|
|
||||||
├── `Orb`
|
|
||||||
├── `Obstacle`
|
|
||||||
└── `UI`
|
|
||||||
|
|
||||||
- **Player**: movement, growth, collision
|
|
||||||
- **Orb**: spawning and collection
|
|
||||||
- **Obstacle**: collision handling
|
|
||||||
- **GameManager**: game state, score, restart
|
|
||||||
- **UI**: display elements
|
|
||||||
|
|
||||||
### Gameplay Flow
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Technical Approach
|
|
||||||
|
|
||||||
- Built using **Three.js** for 3D rendering
|
|
||||||
- Movement constrained to a plane for simplicity
|
|
||||||
- Objects managed using classes and arrays
|
|
||||||
- Collision detection using distance checks
|
|
||||||
|
|
||||||
## challenges & features
|
|
||||||
|
|
||||||
### Expected Challenges
|
|
||||||
|
|
||||||
- 3D rendering (camera, lighting, materials)
|
|
||||||
- Implementing smooth body-following behavior
|
|
||||||
- Managing performance with multiple objects
|
|
||||||
- Balancing _visual effects_ and _performance_
|
|
||||||
|
|
||||||
### Relevant Course Concepts
|
|
||||||
|
|
||||||
- **Types and Variables**: used to store positions, score, and game state
|
|
||||||
- **Arrays and Objects**: used to manage body segments, orbs, and obstacles
|
|
||||||
- **Functions**: used to organize update, rendering, and interaction logic
|
|
||||||
- **Modules**: used to structure the project into components such as `Player`, `Orb`, and `GameManager`
|
|
||||||
- **Event Handling**: used to process user input (keyboard or mouse)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> This proposal was written with the assistance of ChatGPT for structuring and language support.
|
|
||||||
41
PROPOSAL_20256426.md
Normal file
41
PROPOSAL_20256426.md
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# My Proposal
|
||||||
|
|
||||||
|
- Name: Tomas Horsky
|
||||||
|
- Student ID: 20256426
|
||||||
|
- Email: tomashorsky@kaist.ac.kr
|
||||||
|
- URL to forked repository: https://git.prototyping.id/20256426/homework5
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
- [My Proposal](#my-proposal)
|
||||||
|
- [Table of Contents](#table-of-contents)
|
||||||
|
- [The Game](#the-game)
|
||||||
|
- [Optional Features](#optional-features)
|
||||||
|
- [Implementation and Challenges](#implementation-and-challenges)
|
||||||
|
|
||||||
|
## The Game
|
||||||
|
|
||||||
|
I want to create an endless vertical platform jumping game, similar to [Doodle Jump](https://doodlejump-2.io/). The goal of the game will be to jump on small platforms and get as high as possible without falling down.
|
||||||
|
|
||||||
|
The game will be controlled only by moving left and right, jumping will be handled automatically by the game periodically. The "map" of the game will be endless, and will be generated on the go, so every game will have unique platform arrangements. The higher the player goes, the more special platforms will appear, and the game will get harder. After the player dies, the score (height) will be saved to a leaderboard and will also be displayed during future games as a reference line.
|
||||||
|
|
||||||
|
The types of platforms will be:
|
||||||
|
1. **Basic platform**
|
||||||
|
2. **Moving platform**
|
||||||
|
3. **Spring platform** (the player's next jump will be 3× higher)
|
||||||
|
4. **One-time platform** (disappears after one jump)
|
||||||
|
5. **Combined platforms** (moving spring platform, one-time moving platform, etc.)
|
||||||
|
|
||||||
|
## Optional Features
|
||||||
|
|
||||||
|
After implementing the base game, I may add some of the following features:
|
||||||
|
- **Power-ups** – such as a jetpack (which boosts height) or an extra life
|
||||||
|
- **Monsters and shooting** – monsters will spawn on platforms, and players will be able to shoot them by pressing the *up arrow*, monsters will kill the player by touching them
|
||||||
|
- **Cosmetics** – players will be able to customize their character
|
||||||
|
- **Multiplayer** – an option for two players on one PC competing against each other
|
||||||
|
- **Camera control** – an option to control the game using a camera, which will track the player's hand movement to move left or right
|
||||||
|
|
||||||
|
## Implementation and Challenges
|
||||||
|
|
||||||
|
I want to learn [Svelte](https://svelte.dev/), so I will develop the game using it. From other features taught in class, I am planning to use the [p5.js](https://p5js.org/) library for rendering the game, event handling to get the player's input and definitely some higher-order functions.
|
||||||
|
|
||||||
|
I think the main challenge will be managing player movement and the upward movement of the game world so that everything feels smooth and responsive. Another challenge will be generating platforms in a way that makes the game progressively harder without becoming impossible.
|
||||||
BIN
environment.png
BIN
environment.png
Binary file not shown.
|
Before Width: | Height: | Size: 1002 KiB |
Reference in New Issue
Block a user