Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e5bdd0bbcd | |||
| 44879b07d6 | |||
| 0c7d639a52 | |||
| 65978f7ef7 | |||
| 7dad616c5a | |||
| 98458688f1 | |||
|
|
150e5424b5 |
BIN
IMG_5367_1.png
Normal file
BIN
IMG_5367_1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 840 KiB |
BIN
IMG_5367_2.png
Normal file
BIN
IMG_5367_2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.4 MiB |
BIN
IMG_5367_3.png
Normal file
BIN
IMG_5367_3.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 347 KiB |
@@ -1,148 +0,0 @@
|
|||||||
# Untitled Maze Game - ID30011 Midterm Project Proposal
|
|
||||||
|
|
||||||
- **Name:** Bumgyu Suh
|
|
||||||
- **Student ID:** 20240905
|
|
||||||
- **Repository URL:** https://git.prototyping.id/20240905/homework5
|
|
||||||
|
|
||||||
## Table of Contents
|
|
||||||
1. [Game Description and Mechanics](#game-description-and-mechanics)
|
|
||||||
- [Objective](#objective)
|
|
||||||
- [Core Mechanics](#core-mechanics)
|
|
||||||
- [Win / Lose Conditions](#win--lose-conditions)
|
|
||||||
- [Player Controls](#player-controls)
|
|
||||||
2. [Visual Design and Implementation](#visual-design-and-implementation)
|
|
||||||
- [Visual Style](#visual-style)
|
|
||||||
- [Game Elements](#game-elements)
|
|
||||||
- [Implementation](#implementation)
|
|
||||||
3. [Challenges and Features](#challenges-and-features)
|
|
||||||
- [Expected Challenges](#expected-challenges)
|
|
||||||
- [Features and Concepts Used](#features-and-concepts-used)
|
|
||||||
|
|
||||||
# Game Description and Mechanics
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
**Untitled Maze Game** is planned to be a **3D first-person maze game** made using [Babylon.js](https://www.babylonjs.com/), where the player is attempting to escape from a dungeon. The game is structured in levels. In each level, a **procedurally generated maze** is created, and the player must find the key to the exit in one of the chests in the level, and the exit to advance to the next level. The twist is, if the player opens a chest that the player has already opened before, the player dies and the game is over. The score is determined by how many levels the player wins, and how fast. The ultimate goal is to get the highest highscore.
|
|
||||||
|
|
||||||
## Objective
|
|
||||||
- Search through the chests of the level to find the exit key.
|
|
||||||
- Avoid opening chests that has already been opened before.
|
|
||||||
- Escape the maze by finding the exit with the exit key.
|
|
||||||
- Progress through as many levels as possible, as quickly as possible.
|
|
||||||
|
|
||||||
## Core Mechanics
|
|
||||||
- Each level generates a new maze with increasing size or complexity.
|
|
||||||
- The main challenge is **memory-based navigation** and **speed**:
|
|
||||||
- If the player opens a **chest that has already been opened before**, the player dies.
|
|
||||||
- This forces the player to remember previous paths and avoid repeating mistakes.
|
|
||||||
- The player also has an incentive to make decisions quick to complete the level in the shortest amount of time.
|
|
||||||
|
|
||||||
## Win / Lose Conditions
|
|
||||||
- **Win (per level):** Reach the exit of the maze with the key.
|
|
||||||
- **Lose:** Re-open a previously opened chest.
|
|
||||||
|
|
||||||
## Player Controls
|
|
||||||
- `W/A/S/D` keys for movement
|
|
||||||
- Mouse movement to control camera direction
|
|
||||||
- Left click with mouse while facing a chest to "open" chest
|
|
||||||
1. When correct chest with key: gives key right away
|
|
||||||
2. When chest without key: shows that it is the wrong chest
|
|
||||||
3. When chest that has already been opened: game over
|
|
||||||
- Automatic progression to next level when the "exit area" is reached
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Visual Design and Implementation
|
|
||||||
|
|
||||||
## Visual Style
|
|
||||||
|
|
||||||
The game will have a simple 3D dungeon-like appearance, with each wall being as large as the walkable space, similar to a maze built in Minecraft:
|
|
||||||
- Dark environment (dungeon setting)
|
|
||||||
- Walls forming a maze
|
|
||||||
- Minimal lighting to create atmosphere
|
|
||||||
- The player is represented through a **first-person camera** (no visible body)
|
|
||||||
|
|
||||||
## Game Elements
|
|
||||||
|
|
||||||
| Element | Description | Implementation |
|
|
||||||
|----------------|------------------------------------------|----------------|
|
|
||||||
| Player | First-Person View (cannot see oneself) | Camera object |
|
|
||||||
| Maze | Procedurally generated dungeon layout | 2D array → 3D meshes |
|
|
||||||
| Walls | Maze boundaries | Box meshes |
|
|
||||||
| Floor | Ground surface | Plane mesh |
|
|
||||||
| Exit | Goal area (highlighted ground) | Plane mesh highlighted in yellow |
|
|
||||||
| Chests | Special tracked cells | Box mesh |
|
|
||||||
| UI | Score (round count), instructions | Text overlay |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Implementation
|
|
||||||
|
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
### Maze Representation
|
|
||||||
The maze will be stored as a 2D array that stores ID corresponding to this:
|
|
||||||
- 0 = empty path
|
|
||||||
- 1 = wall
|
|
||||||
- 2 = not-yet opened chest without key
|
|
||||||
- 3 = already opened before chest
|
|
||||||
- 4 = chest with key
|
|
||||||
- 5 = starting point
|
|
||||||
- 6 = exit
|
|
||||||
|
|
||||||
This grid will be converted into 3D.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Procedural Generation
|
|
||||||
|
|
||||||
Each level:
|
|
||||||
1. Generate a new maze with walls and empty paths (0s and 1s in the array)
|
|
||||||
2. Identify dead-end cells, put chests in them
|
|
||||||
3. Make one of the chests the chest with the key
|
|
||||||
4. Make another "chest" (dead-end) the exit
|
|
||||||
5. Randomly place player in empty path position
|
|
||||||
|
|
||||||
These steps will be implemented as a sequence of functions using **functional programming**.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Maze Array Logic
|
|
||||||
|
|
||||||
States that need to be stored are stored in the level array (whether chest has been opened, whether the chest is the chest with the key).
|
|
||||||
|
|
||||||
- The game will store opened chests by turning the value in the array to 3.
|
|
||||||
- When the player opens a chest marked with 3, the game over screen shows.
|
|
||||||
- When the player reaches an "exit" space WITHOUT the key, the player is told to find the key first.
|
|
||||||
- When the player reaches an "exit" space WITH the key, the player proceeds to the next level.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Challenges and Features
|
|
||||||
|
|
||||||
## Expected Challenges
|
|
||||||
|
|
||||||
### 1. Procedural Maze Generation
|
|
||||||
Generating a valid and solvable maze for every level while keeping it balanced in difficulty.
|
|
||||||
|
|
||||||
### 2. Difficulty Scaling
|
|
||||||
Designing how the maze size increases over levels without making the game frustrating or too easy. Making the highscore meaningful to incentivize fast gameplay, which turns a boring memorization-based game into something more competitive in order to be fun.
|
|
||||||
|
|
||||||
### 3. Player Navigation Experience
|
|
||||||
Ensuring that the maze is readable enough for satisfying gameplay without visual confusion.
|
|
||||||
|
|
||||||
### 4. Learning to use the Babylon.js
|
|
||||||
Learning a completely new thing I have never used before effectively.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Features and Concepts Used
|
|
||||||
|
|
||||||
The implementation will use the following concepts learned in class:
|
|
||||||
|
|
||||||
- **JavaScript arrays** (maze array, chests' state)
|
|
||||||
- **Functional programming** (steps involved in maze generation)
|
|
||||||
- **Event handling** (keyboard and mouse input)
|
|
||||||
- **Using javascript libraries** (using [Babylon.js](https://www.babylonjs.com/))
|
|
||||||
- **Working with real-time** (stopwatch system for high score)
|
|
||||||
175
PROPOSAL_20265367.md
Normal file
175
PROPOSAL_20265367.md
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
# Game Proposal | Graphic Puzzle Game
|
||||||
|
|
||||||
|
- **Name**: Suhyun Lim
|
||||||
|
- **Student ID**: 20265367
|
||||||
|
- **Repository URL**: https://git.prototyping.id/20265367/homework5.git
|
||||||
|
|
||||||
|
## 1. Game Overview
|
||||||
|
|
||||||
|
This project proposes an educational puzzle game designed to improve the perceptual sensitivity of beginner designers.
|
||||||
|
The game focuses on enhancing the player's ability to recognize subtle visual differences in composition, alignment, typography, and graphic details.
|
||||||
|
|
||||||
|
The game is structured into two rounds, each targeting a different aspect of visual literacy.
|
||||||
|
|
||||||
|
- **Round 1: Tile Sliding Composition Puzzle**
|
||||||
|
The player rearranges fragmented image tiles to reconstruct the original reference design.
|
||||||
|
|
||||||
|
- **Round 2: Typeface Matching Challenge**
|
||||||
|
The player identifies and connects four matching pairs of alphabet letters that belong to the same font family.
|
||||||
|
|
||||||
|
The broader purpose of the game is not only entertainment, but also the cultivation of observational skills essential to graphic design practice. Through repeated play, users are expected to improve their ability to detect formal inconsistencies and typographic nuances.
|
||||||
|
|
||||||
|
The player wins by clearing both rounds within the time limit or target score. The player loses if time expires or too many mistakes are made.
|
||||||
|
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="IMG_5367_1.png" width="800">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Game Mechanics
|
||||||
|
|
||||||
|
The player interacts through **mouse clicks** and **dragging gestures**.
|
||||||
|
|
||||||
|
| Action | Description |
|
||||||
|
| :--- | :--- |
|
||||||
|
| **Slide Tile** | Click or drag adjacent tiles to reconstruct the target image. |
|
||||||
|
| **Compare Reference** | Observe the reference design and identify misplaced visual fragments. |
|
||||||
|
| **Select Letter** | Click two letters to attempt a font match. |
|
||||||
|
| **Connect Pair** | Successfully identify four correct font pairs. |
|
||||||
|
| **Hint Use** | Optional hint reveals one correct move with score penalty. |
|
||||||
|
|
||||||
|
|
||||||
|
### Round 1: Tile Sliding Puzzle
|
||||||
|
|
||||||
|
The player is shown a target composition (poster, layout, or logo-based image) and a shuffled tile board.
|
||||||
|
|
||||||
|
The objective is to restore the original arrangement by sliding tiles into the empty space.
|
||||||
|
This round trains:
|
||||||
|
|
||||||
|
- spatial organization awareness
|
||||||
|
- balance and hierarchy recognition
|
||||||
|
- sensitivity to alignment and negative space
|
||||||
|
|
||||||
|
|
||||||
|
### Round 2: Typeface Pair Matching
|
||||||
|
|
||||||
|
The player is shown multiple alphabet characters rendered in different fonts.
|
||||||
|
|
||||||
|
The objective is to identify four pairs of letters that share the same typeface characteristics.
|
||||||
|
|
||||||
|
Examples of recognition cues include:
|
||||||
|
|
||||||
|
- serif vs sans-serif
|
||||||
|
- stroke contrast
|
||||||
|
- terminal shape
|
||||||
|
- x-height proportion
|
||||||
|
- geometric vs humanist construction
|
||||||
|
|
||||||
|
This round trains typographic discrimination and detail recognition.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Core Systems
|
||||||
|
|
||||||
|
### 3.1 Puzzle Board System (Array-based Grid Logic)
|
||||||
|
|
||||||
|
The tile puzzle board will be implemented as a two-dimensional array.
|
||||||
|
|
||||||
|
Each tile object stores:
|
||||||
|
|
||||||
|
- currentRow
|
||||||
|
- currentCol
|
||||||
|
- targetRow
|
||||||
|
- targetCol
|
||||||
|
- imageFragment
|
||||||
|
- movable
|
||||||
|
Where 0 represents the empty slot.
|
||||||
|
|
||||||
|
The system checks whether adjacent tiles may move into the empty space and continuously verifies puzzle completion.
|
||||||
|
|
||||||
|
|
||||||
|
### 3.2 Typography Matching System (Object Comparison Logic)
|
||||||
|
Each letter card is stored as an object in an array.
|
||||||
|
|
||||||
|
Main properties:
|
||||||
|
|
||||||
|
- character
|
||||||
|
- fontFamily
|
||||||
|
- selected
|
||||||
|
- matched
|
||||||
|
- position
|
||||||
|
|
||||||
|
[
|
||||||
|
letter: "R",
|
||||||
|
fontFamily: "Helvetica",
|
||||||
|
selected: false,
|
||||||
|
matched: false
|
||||||
|
]
|
||||||
|
When two cards are selected, the system compares their fontFamily values.
|
||||||
|
|
||||||
|
If identical:
|
||||||
|
- pair remains visible
|
||||||
|
- score increases
|
||||||
|
|
||||||
|
If different:
|
||||||
|
- cards reset after delay
|
||||||
|
- mistake counter increases
|
||||||
|
|
||||||
|
|
||||||
|
### 3.3 Scoring and Progression System
|
||||||
|
The game rewards speed and accuracy.
|
||||||
|
**Score Sources**
|
||||||
|
- Puzzle completion bonus
|
||||||
|
- Fast matching bonus
|
||||||
|
- Consecutive correct streak bonus
|
||||||
|
- Remaining time bonus
|
||||||
|
**Penalties**
|
||||||
|
- Wrong font matches
|
||||||
|
- Hint usage
|
||||||
|
- Excessive move count
|
||||||
|
**Win Condition**
|
||||||
|
- Clear Round 1 and Round 2 successfully
|
||||||
|
**ose Condition**
|
||||||
|
- Timer reaches zero
|
||||||
|
- Mistake limit exceeded
|
||||||
|
|
||||||
|
### 3.4 Adaptive Difficulty Scaling
|
||||||
|
To maintain challenge and learning effectiveness, the game gradually increases difficulty.
|
||||||
|
|
||||||
|
**Round 1 Scaling**
|
||||||
|
- Grid size expands: 3×3 → 4×4
|
||||||
|
- More visually similar fragments used
|
||||||
|
- Consecutive correct streak bonus
|
||||||
|
- Less reference preview time
|
||||||
|
|
||||||
|
**Round 2 Scaling**
|
||||||
|
- Fonts become more visually similar
|
||||||
|
- More distractor letters appear
|
||||||
|
- Matching time shortens
|
||||||
|
|
||||||
|
This system encourages progressive perceptual training.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Educational Value
|
||||||
|
This game explores how interactive systems can support design literacy through play.
|
||||||
|
Rather than teaching design through lectures alone, it applies procedural learning: users repeatedly engage with perceptual tasks and improve through immediate feedback.
|
||||||
|
The project therefore combines entertainment, pedagogy, and visual cognition training in a game format.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. References
|
||||||
|
- sliding-puzzle.com: https://sliding-puzzle.com/impossible
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="IMG_5367_2.png" width="800">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
- Kern Type: https://type.method.ac/
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="IMG_5367_3.png" width="800">
|
||||||
|
</p>
|
||||||
BIN
ingame_chest.png
BIN
ingame_chest.png
Binary file not shown.
|
Before Width: | Height: | Size: 266 KiB |
BIN
maze_topview.png
BIN
maze_topview.png
Binary file not shown.
|
Before Width: | Height: | Size: 191 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 211 KiB |
Reference in New Issue
Block a user