-
Notifications
You must be signed in to change notification settings - Fork 0
Complete Multiplayer Flow
Alea Farrel edited this page Jan 15, 2026
·
1 revision
Halaman ini menjelaskan alur lengkap sistem multiplayer Rapid Texter GUI dari awal sampai akhir, mencakup semua fase permainan.
Sistem multiplayer Rapid Texter memiliki beberapa fase utama:
โโโโโโโโโโโโโโโโ
โ ENTRY โ โ User memilih Create/Join Room
โโโโโโโโฌโโโโโโโโ
โผ
โโโโโโโโโโโโโโโโ
โ LOBBY โ โ Menunggu pemain, siap untuk mulai
โโโโโโโโฌโโโโโโโโ
โผ
โโโโโโโโโโโโโโโโ
โ GAME โ โ Race typing berlangsung
โโโโโโโโฌโโโโโโโโ
โผ
โโโโโโโโโโโโโโโโ
โ RESULTS โ โ Tampilkan hasil dan ranking
โโโโโโโโฌโโโโโโโโ
โผ
Play Again?
โ โ
Ya Tidak
โ โ
LOBBY EXIT

flowchart LR
subgraph ENTRY [" "]
A([Start: Menu Multiplayer])
B[/Input: Pilih Create atau Join/]
C{Create Room?}
end
subgraph CREATE_FLOW [" "]
D[Create Room]
E[Start TCP Server]
F[Start UDP Broadcast]
end
subgraph JOIN_FLOW [" "]
G[Scan for Rooms]
H[Select Room]
I[Connect via TCP]
J[Handshake HELLO]
K[Build Full Mesh]
end
subgraph LOBBY [" "]
L[Lobby State]
M{Host klik Start?}
N[Ready Check]
O[Countdown 3s]
end
subgraph GAME [" "]
P[Race Gameplay]
Q[Progress Updates setiap 50ms]
R{Selesai mengetik?}
S[Kirim FINISH]
T{Semua pemain selesai?}
end
subgraph RESULTS [" "]
U[Calculate Rankings]
V[Show Results]
W{Play Again?}
end
subgraph EXIT [" "]
X([End: Kembali ke menu])
end
A --> B
B --> C
C -->|Ya| D
D --> E
E --> F
F --> L
C -->|Tidak| G
G --> H
H --> I
I --> J
J --> K
K --> L
L --> M
M -->|Ya| N
N --> O
O --> P
M -->|Tidak| L
P --> Q
Q --> R
R -->|Ya| S
R -->|Tidak| P
S --> T
T -->|Tidak| P
T -->|Ya| U
U --> V
V --> W
W -->|Ya| L
W -->|Tidak| X
User memiliki dua opsi:
| Opsi | Aksi |
|---|---|
| Create Room | Menjadi host dan membuat room baru |
| Join Room | Menjadi guest dan bergabung ke room yang ada |
1. Create Room
2. Start TCP Server (port 52765)
3. Start UDP Broadcast (port 52766)
4. โ Masuk ke Lobby
๐ Detail: Create-Room-Flow
1. Scan for Rooms (UDP port 52766)
2. Select Room dari daftar
3. Connect via TCP (port 52765)
4. Handshake HELLO
5. Build Full Mesh
6. โ Masuk ke Lobby
๐ Detail: Join-Room-Flow dan Full-Mesh-Flow
Di lobby, pemain dapat:
- Melihat daftar pemain yang sudah bergabung
- Menunggu pemain lain
- (Host) Memilih teks untuk race
- (Host) Memulai game
Ketika host memulai game:
1. Host klik "Start Game"
2. Broadcast READY_CHECK ke semua peer
3. Setiap peer mengirim READY_RESPONSE
4. Tunggu sampai semua peer ready (timeout 5 detik)
5. Mulai countdown
1. Broadcast COUNTDOWN dengan nilai 3
2. Tampilkan countdown di semua client: 3... 2... 1...
3. Broadcast GAME_START
4. Race dimulai!
Loop:
1. User mengetik karakter
2. Hitung: position, wpm, accuracy, errors
3. Update progress lokal
4. Setiap 50ms, broadcast PROGRESS_UPDATE ke semua peer
5. Terima PROGRESS_UPDATE dari peer, update UI
6. Jika semua karakter diketik โ kirim FINISH
{
"type": "PROGRESS_UPDATE",
"uuid": "player-uuid",
"position": 45,
"wpm": 78,
"accuracy": 95.5,
"errors": 3
}{
"type": "FINISH",
"uuid": "player-uuid",
"wpm": 82,
"accuracy": 97.2,
"errors": 2,
"duration": 45.6
}Authority (biasanya host) menghitung ranking:
Sorting criteria (prioritas tinggi ke rendah):
1. WPM (descending) - lebih tinggi lebih baik
2. Accuracy (descending) - lebih tinggi lebih baik
3. Errors (ascending) - lebih sedikit lebih baik
4. Duration (ascending) - lebih cepat lebih baik
{
"type": "RACE_RESULTS",
"rankings": [
{
"position": 1,
"uuid": "player-1-uuid",
"name": "Player1",
"wpm": 92,
"accuracy": 98.5,
"errors": 1
},
{
"position": 2,
"uuid": "player-2-uuid",
"name": "Player2",
"wpm": 85,
"accuracy": 96.0,
"errors": 3
}
]
}- Tampilkan ranking dengan posisi 1st, 2nd, 3rd, dst
- Simpan ke MultiplayerHistoryManager
- Tampilkan halaman RaceResultsPage
flowchart LR
A[Race Selesai] --> B{Host?}
B -->|Ya| C[Klik Play Again]
C --> D[Broadcast PLAY_AGAIN_INVITE]
D --> E[Kembali ke Lobby]
B -->|Tidak| F[Terima PLAY_AGAIN_INVITE]
F --> G[Tampilkan Dialog]
G --> H{Accept?}
H -->|Ya| I[Kirim PLAY_AGAIN_RESPONSE accepted]
I --> J[Kembali ke Lobby]
H -->|Tidak| K[Kirim PLAY_AGAIN_RESPONSE declined]
K --> L[Keluar dari Room]
flowchart LR
A[Disconnect Detected] --> B{Dalam Game?}
B -->|Ya| C[Tandai hasLeft]
C --> D[Pertahankan Data]
D --> E{Semua Selesai?}
E -->|Ya| F[Lanjut ke Results]
E -->|Tidak| G[Lanjutkan Game]
B -->|Tidak| H[Hapus dari Daftar]
H --> I[Broadcast PLAYER_LEFT]
F --> J{Host yang Leave?}
J -->|Ya| K[Migrasi Authority]
K --> L[UUID Terendah jadi Authority]
J -->|Tidak| M[Selesai]
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ DISCONNECTED โ
โโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Create/Join Room
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ LOBBY โ
โ isInLobby = true, isInGame = false โ
โโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Start Game
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ IN_GAME โ
โ isInLobby = false, isInGame = true โ
โโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ All Players Finish
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ RESULTS โ
โ isInLobby = false, isInGame = false โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
Play Again Leave Room
โ โ
โผ โผ
LOBBY DISCONNECTED
Tip
Dokumentasi Lebih Lengkap
Untuk dokumentasi lebih lengkap tentang Rapid Texter termasuk mode single player, cara bermain, campaign mode, dan fitur lainnya, silakan kunjungi: