Oyun Modülü
Modern web tabanlı oyunlar için "Headless Game Backend" altyapısı.
Oyun Modülü (apps/game-starter), çok oyunculu oyunlar için gereken liderlik tabloları, gerçek zamanlı lobi yönetimi ve sanal ekonomi gibi kritik özellikleri sunar. RapidCore, oyun motorunuz (Unity, Phaser, vb.) ile web dünyası arasında güçlü bir köprü görevi görür.
Oyun Motoru Entegrasyonu (Unity & Phaser)
RapidCore, oyununuz için bir Headless Game Backend olarak çalışır. Oyun içinden REST API veya WebSocket kullanarak sunucuyla haberleşebilirsiniz.
API İstekleri
Oyun içinden bir oyuncunun verilerini şu şekilde çekebilirsiniz:
// Unity (C#) Örneği
IEnumerator GetPlayerData(string playerId) {
using (UnityWebRequest webRequest = UnityWebRequest.Get("https://api.rapidcore.io/game/player/" + playerId)) {
yield return webRequest.SendWebRequest();
if (webRequest.result == UnityWebRequest.Result.Success) {
Debug.Log("Veri Alındı: " + webRequest.downloadHandler.text);
}
}
}
Oyun motoru içinde her karede (Every Frame) API isteği atmaktan kaçının. Verileri yerelde (Local Cache) tutun ve sadece kritik anlarda (Seviye sonu, satın alma) sunucuya gönderin.
Real-time Lobi ve Senkronizasyon
Çok oyunculu deneyim için Supabase Realtime kanallarını (Channels) kullanıyoruz. Bu sayede oyuncular, diğerlerinin durumlarını anlık olarak görebilir.
Lobi Yapılandırması
Lobi durumunu takip etmek için apps/game-starter/src/lib/lobby.ts içinde şu yapıyı kullanın:
const lobbyChannel = supabase.channel('lobby-01')
.on('presence', { event: 'sync' }, () => {
const state = lobbyChannel.presenceState();
console.log('Aktif Oyuncular:', state);
})
.subscribe();
Düşük Gecikme (Low-latency)
WebSocket bağlantılarında paket boyutunu küçültmek için verileri JSON yerine Protocol Buffers formatında göndermeyi düşünebilirsiniz.
Sanal Ekonomi ve Envanter Kontrolü
Güvenli bir ekonomi sistemi, oyununuzun sürdürülebilirliği için şarttır.
- Güvenli Cüzdan: Oyuncu altınları (Gold) ve elmasları (Gem), sunucu tarafında (Server-side) doğrulanmadan asla güncellenmez.
- Satın Alma Akışı: Stripe üzerinden alınan paketlerin envantere eklenme süreci şu şemadaki gibidir:
graph TD
A[Oyuncu] -->|Stripe Checkout| B(Ödeme Onayı);
B -->|Webhook| C{Sunucu Doğrulama};
C -->|Başarılı| D[Envantere Ekle];
C -->|Hata| E[Log & İptal];
D -->|Realtime| F[HUD Güncelleme];
Edge Function İle Güvenlik (Anti-Cheat)
Hileleri önlemek için skorlar ve ödüller asla istemci (Client) tarafında hesaplanmamalıdır.
Neden Edge Functions?
Vercel Edge Functions, isteği kullanıcıya en yakın noktada işleyerek gecikmeyi azaltırken sunucu güvenliği sağlar.
Skor Doğrulama Örneği
// apps/game-starter/api/verify-score.ts
export default async function handler(req: Request) {
const { score, hash } = await req.json();
const isValid = verifySignature(score, hash); // Sunucu anahtarıyla doğrulama
if (!isValid) return new Response("Hile tespit edildi!", { status: 403 });
await db.leaderboard.update(score);
return new Response("Skor kaydedildi.");
}
Game-Specific UI Bileşenleri
Tailwind v4 kullanarak oyununuza özel HUD ve skor tabloları hazırlayabilirsiniz.
- HUD: Can barı, mühimmat göstergesi gibi bileşenler
packages/uiiçinde mevcuttur. - Envanter Slotları: Modern ve cam efektli (Glassmorphism) slotlar için
inventory-slotsınıfını kullanın:
<div class="inventory-slot hover:border-pink-500 transition-all">
<img src="/sword.png" alt="Kılıç" />
</div>
HUD bileşenlerini fixed pozisyonunda ve en yüksek z-index değerinde tutarak oyun sahnesinin üzerinde her zaman görünür olmasını sağlayın.