iwantcoding.com
🔥 Daily 👥 Rooms 🏆 Top Log in Sign up

Bootcamp

Game dev one-day bootcamp: pick an engine, scaffold, sprite + input + physics + audio + UI, ship a playable build.

Game dev — bootcamp

EXAMPLE
# ===== 0-30 min: pick the engine =====
# For a fast first day:
# - Godot 4 (open source, gentle learning curve)
# - Unity 6 (mainstream, C#)
# - Phaser 3 (web-only, JS)
# - GameMaker (drag-drop + GML scripting)

# Examples below use Godot 4 with GDScript.

# ===== 30-60 min: scaffold =====
# Download Godot. Create a new project.
# Create the main scene:
# - Node2D (root) named 'Main'
# - CharacterBody2D as 'Player' with:
#   - Sprite2D (assign a texture)
#   - CollisionShape2D (rectangle)
# - StaticBody2D platforms with CollisionShape2D

# Save as main.tscn. Set as main scene.

# ===== 60-120 min: input + movement =====
# Project Settings -> Input Map -> add 'left', 'right', 'jump' actions.

# player.gd attached to Player:
extends CharacterBody2D

const SPEED = 200.0
const JUMP = 400.0
const GRAVITY = 980.0

func _physics_process(delta):
    velocity.x = Input.get_axis('left', 'right') * SPEED
    if not is_on_floor():
        velocity.y += GRAVITY * delta
    if Input.is_action_just_pressed('jump') and is_on_floor():
        velocity.y = -JUMP
    move_and_slide()

# ===== 120-180 min: enemies + collisions =====
# Add an Enemy (Area2D + Sprite2D + CollisionShape2D).
# enemy.gd:
extends Area2D

@export var speed: float = 80.0
var direction := 1.0

func _process(delta):
    position.x += direction * speed * delta

func _on_body_entered(body):
    if body.name == 'Player':
        body.die()

# In editor: connect body_entered signal to _on_body_entered.

# Player's die():
func die():
    queue_free()
    get_tree().reload_current_scene()

# ===== 180-240 min: score + UI =====
# CanvasLayer with Label child.
# Singleton (AutoLoad) game_state.gd:
extends Node

signal score_changed(new_score: int)

var score: int = 0

func add_score(amount: int) -> void:
    score += amount
    score_changed.emit(score)

# UI script:
func _ready():
    GameState.score_changed.connect(_on_score_changed)

func _on_score_changed(new_score):
    $Label.text = 'Score: %d' % new_score

# ===== 240-300 min: audio =====
# AudioStreamPlayer node + drag-drop a sound asset.
# Trigger in code: $JumpSound.play()

# Pool short sounds; use AudioStreamPlayer2D for spatial sounds.

# ===== 300-360 min: level design =====
# TileMap + TileSet for platforms.
# Multiple levels via separate .tscn files; reload via get_tree().change_scene_to_file().

# ===== 360-420 min: export =====
# Project -> Export. Add a preset (Web, Android, Windows, macOS, Linux).
# For Web: download HTML5 export templates.
# Output: index.html + .wasm + .pck.

# Host on itch.io for free; takes the HTML5 build.

# ===== 420-480 min: polish =====
# - Particle effects (CPUParticles2D) on jumps, deaths
# - Camera2D following the player
# - Background music
# - Title + game over screens
# - Best score in user:// directory

# ===== Patterns to internalise =====
# - Fixed timestep (Godot does this for _physics_process)
# - Signals for loose coupling between nodes
# - AutoLoad / global script for state
# - Scenes as reusable units; instance instead of duplicate
# - Always profile early; phones / web are slower than your dev machine

# ===== Pitfalls =====
# - Heavy script in _process (move to _physics_process or signals)
# - Forgetting to use export templates for the target platform
# - Mixing units (pixels vs meters)
# - Skipping pause + audio mute (users expect them)

Why it matters

A one-day game dev bootcamp: scaffold, player, enemy, score, audio, level, export. Godot is the friendliest start; the same shape works in Unity / Phaser / Bevy. Ship a playable build on itch.io and you have your first game out the door.

Tip: Tweak the snippet with Try it Yourself », then sit the quiz at the bottom of the page.

Example

Example
// 30-day game-dev bootcamp in the lesson body.
Try it Yourself »

Discussion

Loading…