~/projects/bonk

GAMES2025

Bonk

A real-time multiplayer Java game where players grapple around an arena and knock each other into a death zone, built with a custom client-server networking layer.

TIMELINE
May 2025 – Jun 2025
TEAM
2 people
CONTEXT
Class project
A Bonk match in progress: a blue and a red player on either side of the death ball, score 2 to 0.
13custom network packet types

Overview

Bonk is a team-based multiplayer game where players move around a physics-based arena, grapple to swing between platforms, and try to knock opposing players into a “death ball” to score points. It was built with Charlie Huang as a Java client-server application with hand-rolled networking and collision code, including custom data structures.

Features

  • Lobby screen with team selection and a ready-up flow before matches start
  • WASD movement plus a grapple ability bound to a key, synced across clients
  • Custom rigid-body collision detection for circles, rectangles, and platforms
  • Server-authoritative game state broadcast to clients over a custom packet protocol
  • Scoring and a game-over screen when a team/player wins
  • A cheat key for testing, gated behind a debug flag
  • Custom MyArrayList/MyHashMap/MyHashSet collection implementations used in place of the Java standard library equivalents

How it works

The game is split into client and server packages, each with their own controller classes. The server runs the authoritative simulation (player and death-ball physics, collisions, scoring) and pushes state updates to connected clients using a set of typed packet classes (e.g. UpdatePlayerPacket, UpdateDeathBallPacket, SetScorePacket) sent over a custom PacketManager. Clients render the game with Java Swing/AWT, interpolating (“lerping”) received positions for smoother movement between network updates.