Skip to content

Latest commit

 

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

Tubes1-IF2211StrategiAlgoritma-LKCJS

Tugas Besar 1 — IF2211 Strategi Algoritma
Pemanfaatan Algoritma Greedy dalam Pembuatan Bot Permainan Battlecode 2025
Semester II Tahun 2025/2026 — Institut Teknologi Bandung


👥 Author

Nama NIM
Aziza Dharma Putri 13524017
Suryani Mulia Utami 13524042
Alya Nur Rahma 13524081

Nama Kelompok: LKCJS


📁 Struktur Repository

Tubes1-IF2211StrategiAlgoritma-LKCJS/
├── src/
│   ├── mainbot/                        # Bot Utama
│   │   ├── Helpers/
│   │   │   ├── common.java
│   │   │   ├── message.java
│   │   │   ├── pathFinder.java
│   │   │   ├── roaming.java
│   │   │   └── target.java
│   │   ├── Towers/
│   │   │   └── TowerAction.java
│   │   ├── Units/
│   │   │   ├── Mopper.java
│   │   │   ├── Soldier.java
│   │   │   └── Splasher.java
│   │   ├── Util/
│   │   ├── RobotPlayer.java
│   │   ├── Tower.java
│   │   └── Unit.java
│   ├── alt1/                           # Bot Alternatif 1 — Adaptive Territory Control
│   │   ├── helpers/
│   │   │   ├── Comm.java
│   │   │   ├── MopperHelpers.java
│   │   │   ├── Navigation.java
│   │   │   ├── Sensing.java
│   │   │   ├── SoldierHelpers.java
│   │   │   └── SplasherHelpers.java
│   │   ├── towers/
│   │   │   └── TowerActions.java
│   │   ├── units/
│   │   │   ├── Mopper.java
│   │   │   ├── Soldier.java
│   │   │   └── Splasher.java
│   │   ├── util/
│   │   │   └── Constants.java
│   │   ├── Robot.java
│   │   ├── RobotPlayer.java
│   │   ├── Tower.java
│   │   └── Unit.java
│   └── alt2/                           # Bot Alternatif 2 — Priority-Based Greedy
│       ├── helpers/
│       │   ├── MopperHelpers.java
│       │   ├── Navigation.java
│       │   ├── Sensing.java
│       │   ├── SoldierHelpers.java
│       │   └── SplasherHelpers.java
│       ├── towers/
│       │   └── TowerActions.java
│       ├── units/
│       │   ├── Mopper.java
│       │   ├── Soldier.java
│       │   └── Splasher.java
│       ├── util/
│       │   └── Constants.java
│       ├── Robot.java
│       ├── RobotPlayer.java
│       ├── Tower.java
│       └── Unit.java
├── doc/
│   └── LKCJS.pdf                       # Laporan Tugas Besar
└── README.md

🤖 Deskripsi Singkat Algoritma Greedy

Ketiga bot mengimplementasikan algoritma greedy yang bekerja dengan prinsip yang sama: setiap turn, setiap robot mengevaluasi semua aksi yang mungkin menggunakan fungsi skor heuristik, lalu mengeksekusi aksi dengan skor tertinggi. Tidak ada backtracking — setiap keputusan bersifat lokal-optimal.

Fungsi skor umum yang digunakan:

score(action) = benefit - distancePenalty - riskPenalty + bonus

🟡 Bot Utama — Coordinated Communication Greedy

Strategi berbasis koordinasi antar unit dengan komunikasi eksplisit melalui sistem message. Soldier melaporkan ruin bermasalah ke Tower, Tower meneruskan ke Mopper/Splasher, dan Mopper melaporkan kembali setelah ruin bersih. Pemilihan jenis Tower dilakukan secara greedy berdasarkan kondisi resource saat itu.

Heuristik utama:

  • Soldier: task queue berbasis eksplorasi (exploreTargets) dan pembangunan tower
  • Mopper: bersihkan ruin kotor → bersihkan enemy paint → roam
  • Splasher: serang cluster enemy paint terbesar dalam jangkauan
  • Tower: spawn unit berdasarkan skor scoreSoldier, scoreMopper, scoreSplasher

Struktur package: mainbot


🔵 Bot Alternatif 1 — Adaptive Territory Control

Pendekatan task-based greedy selection. Setiap robot memiliki 5–6 task kandidat yang dinilai dengan skor independen setiap turn. Task dengan skor tertinggi langsung dieksekusi.

Heuristik utama:

  • Soldier: evaluasi 6 task setiap turn (REFILL, CLAIM_RUIN, TAINT_RUIN, SIEGE, PAINT_SRP, EXPLORE); pilih task dengan skor tertinggi; lakukan trailing paint di setiap tile yang dilewati
  • Mopper: swing mop ke arah dengan robot musuh terbanyak → drain robot musuh non-tower → hapus cat musuh terdekat ruin → maju ke enemy base jika tidak ada target visible
  • Splasher: hitung skor splash tiap tile (+12 enemy, +4 neutral, −3 ally, +30 enemy tower); serang tile skor tertinggi; navigasi agresif ke enemy tower tanpa penalti bahaya
  • Tower: hitung skor tiga-way (soldier/mopper/splasher) berdasarkan ruin, enemy paint, ronde, dan jumlah tower; spawn unit skor tertinggi; broadcast intel ke tower sekutu

Struktur package: alt1


🔴 Bot Alternatif 2 — Priority-Based Greedy

Pendekatan berbasis rasio unit dan wilayah kuadran. Tower memproduksi unit berdasarkan rasio Soldier:Mopper yang ada. Eksplorasi dilakukan dengan memilih kuadran peta terjauh dari posisi saat ini, ditambah jitter acak untuk menghindari pergerakan deterministik.

Heuristik utama:

  • Soldier: evaluasi 4 aksi (REFILL, CLAIM_RUIN, DENY_RUIN, EXPLORE) dengan formula baseScore − (distance × penalty); Soldier lebih memilih ruin terdekat untuk diklaim atau di-deny
  • Mopper: refill Soldier terdekat yang kritis → swing mop ke arah musuh terbanyak → hapus cat musuh dengan skor berbasis jarak dan bonus area ruin
  • Splasher: hitung kepadatan area tiap tile dalam jangkauan serangan; serang tile dengan jumlah tile non-ally terbanyak di area splash
  • Tower: spawn unit berdasarkan rasio Soldier:Mopper saat itu; serang musuh dengan HP terendah; upgrade jika chips > threshold

Struktur package: alt2


⚙️ Requirements

  • Java versi 21 (direkomendasikan: 21.0.7 x86_64)
  • Gradle (tersedia di repo engine)
  • OS: Windows / Linux / macOS

🚀 Cara Build dan Menjalankan

1. Clone repository engine

git clone https://github.com/Fariz36/STIMA-battle
cd STIMA-battle

2. Salin source bot ke direktori src/

Salin folder mainbot/, alt1/, dan alt2/ dari repo ini ke dalam folder src/ di dalam STIMA-battle/.

STIMA-battle/
└── src/
    ├── mainbot/
    ├── alt1/
    └── alt2/

3. Build project

# Di root STIMA-battle
./gradlew build

Windows: gunakan gradlew.bat build

4. Jalankan client

cd client
.\"Stima Battle Client"
# Jalankan aplikasi client yang tersedia

Setelah aplikasi terbuka:

  1. Pilih direktori STIMA-battle sebagai root directory (bukan STIMA-battle/src)
  2. Masuk ke tab Runner
  3. Pilih Team A dan Team B (misalnya mainbot vs alt1)
  4. Pilih map yang ingin diuji
  5. Klik Run

🔗 Tautan

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages