- Mesaj
- 73
- Beğeni
- 37
- Puan
- 676
- Ticaret Puanı
- 0
Proje Özeti (GAME SOURCE TAFAFI) (AI YARDIMI İLE )
| Özellik | Detay |
|---|---|
| Oyun | Metin2 (MMORPG) |
| Modül | Satranç Sistemi (Chess System) |
| Dil | C++ |
| Mimari | Client-Server MMO yapısı |
Sistem Mimarisi
1. Temel Bileşenler
┌─────────────────────────────────────────┐
│ CChessManager │
│ (Singleton - Oyun Yöneticisi) │
├─────────────────────────────────────────┤
│ • Oyuncu davetleri (Invite) │
│ • Oyun eşleştirme (Matchmaking) │
│ • Bot oyunları (AI) │
│ • Oyuncu hareketleri (Move) │
│ • Çıkış yönetimi (Quit/Logout) │
└─────────────────────────────────────────┘
│
┌───────────┴───────────┐
▼ ▼
┌───────────────┐ ┌───────────────┐
│ CChessGame │◄─────►│ CChessGame │
│ (PVP Oyun) │ │ (Bot Oyun) │
└───────────────┘ └───────────────┘
│
▼
┌───────────────┐
│ 8x8 Board │
│ BYTE[8][8] │
└───────────────┘
Fonksiyonel Özellikler
A. Oyun Modları
| Mod | Açıklama | Kod |
|---|---|---|
| PVP (Player vs Player) | İki gerçek oyuncu arasında | CChessGame(pkWhite, pkBlack, false) |
| PvE (Player vs Bot) | Oyuncu vs Yapay Zeka | CChessGame(pkWhite, NULL, true) |
B. Davet Sistemi (Invitation Flow)
[Oyuncu A] ──Invite()──► [Sunucu] ──Paket► [Oyuncu B]
│
┌─────────┴─────────┐
▼ ▼
Accept() Decline()
│ │
Oyun Başlar İptal Mesajı
C. Paket Protokolü (Network)
| Subheader | Amaç | Parametreler |
|---|---|---|
| CHESS_SUBHEADER_GC_INVITE | Davet gönder | szName (davet eden) |
| CHESS_SUBHEADER_GC_START | Oyun başlat | Bot flag, sıra, rakip adı |
| CHESS_SUBHEADER_GC_UPDATE | Taş yerleştir | Pozisyon (x,y), taş tipi |
| CHESS_SUBHEADER_GC_MOVE | Hareket bildir | from(x,y) → to(x,y) |
Satranç Kuralları Uygulaması
Taş Tanımları (Enum)
BEYAZ: 1-6 │ SİYAH: 7-12
────────────┼────────────
1: Piyon │ 7: Piyon
2: At │ 8: At
3: Fil │ 9: Fil
4: Kale │ 10: Kale
5: Vezir │ 11: Vezir
6: Şah │ 12: Şah
Hareket Doğrulama (IsValidMove)
| Taş | Kurallar |
|---|---|
| Piyon | İleri 1 kare, başlangıçta 2 kare, çapraz yeme |
| At | "L" şekli (2+1 kare) |
| Fil | Çapraz, engel kontrolü |
| Kale | Düz, engel kontrolü |
| Vezir | Fil + Kale kombinasyonu |
| Şah | 1 kare her yöne |
Bot Yapay Zekası
// ExecuteBotMove() - Basit Rastgele AI
1. Siyah taşları tarar (7→0, 0→7)
2. Her taş için 3x3 grid dener (-1,+1)
3. İlk geçerli hamleyi yapar
4. Beyaz oyuncuya bildirir
Değerlendirme: Çok basit, strateji yok, sadece legal move üretiyor.
Teknik Detaylar
Bağımlılıklar
#include "stdafx.h" // Precompiled header
#include "char.h" // Karakter sınıfı
#include "packet.h" // Network paketleri
#include "desc.h" // Socket descriptor
#include "char_manager.h" // Oyuncu yönetimi
#include "utils.h" // Yardımcı fonksiyonlar
Veri Yapıları
| Yapı | Kullanım |
|---|---|
| std::map<DWORD, CChessGame*> | OyuncuID → Oyun eşleştirme |
| std::map<DWORD, DWORD> | Davet eden → Davet edilen |
| BYTE m_board[8][8] | Oyun tahtası durumu |
Özellik Tamamlama Durumu[/HEADING#include
Teme#includebaşlatma
[H#include]
Piyon, At, Fil, K#includeir, Şah hareket#includeADING]
#includentrolü (slid#includees)
[HEADING#includeDING]
Renk kontrolü (kendi t#includetme)
#includee PvE modları
Davet/Onay/Red sistemleri#includeork paket yönetimi[/B]
[B#includeEADING=1]
Kullanım Senaryosu
1. Oyuncu komut girer: "/chess invite Ahmet"
2. Sunucu CChessManager::Invite() çağırır
3. Ahmet'e davet paketi gönderilir
4. Ahmet "/chess accept Mehmet" yazarsa:
- CChessGame oluşturulur
- Her iki oyuncuya tahta gönderilir
- Beyaz (Mehmet) başlar
5. Hamleler MakeMove() ile işlenir
6. Bot oyununda: ExecuteBotMove() otomatik yanıt verir[#includentrolü=1]
Proje Amacı: Tam Entegre Satranç Sistemi (PYTHON PACK TARAFI)[/HEADING]┌─────────────────────────────────────────────────────────┐
│ METIN2 MMORPG │
├─────────────────────────────────────────────────────────┤
│ SERVER (C++) │ CLIENT (Python) │
│ ───────────── │ ─────────────── │
│ • chess.cpp / chess.h │ • uichess.py │
│ • Oyun mantığı │ • chesswindow.py │
│ • Bot AI │ • Arayüz/Görsel │
│ • Network paketleri │ • Kullanıcı etkileşim │
│ │ • game.py (tuş) │
│ │ • interfacemodule.py │
└─────────────────────────────────────────────────────────┘
Dosya Analizleri
1. uichess.py - Ana Satranç Penceresi Mantığı
| Bileşen | Açıklama |
|---|---|
| ChessWindow | Ana satranç pencere sınıfı |
| board_state | 8x8 tahta durumu (dict) |
| pieces | Taş görselleri (UI.ImageBox) |
| selected_pos | Seçili kare koordinatı |
| is_my_turn | Sıra kontrolü |
| is_white | Oyuncu rengi |
Ana Fonksiyonlar:
# Oyun Akışı
__OnInvite() → Davet gönder (CG_INVITE)
__OnStartBot() → Bot ile oyna (CG_START_BOT)
__OnSelectSlot() → Kare seç/hareket et (CG_MOVE)
__OnQuit() → Oyundan çık (CG_QUIT)
# Server'dan Gelen Cevaplar
OnInvite() → Davet geldi (GC_INVITE)
OnStart() → Oyun başladı (GC_START)
OnUpdateBoard() → Taş yerleştir (GC_UPDATE)
OnMove() → Hareket yapıldı (GC_MOVE)
2. chesswindow.py - UI Script (XML Benzeri)
┌────────────────────────────────────────┐
│ 640x480 Pencere │
├────────────────────────────────────────┤
│ ┌─────────┐ ┌─────────────────┐ │
│ │ │ │ Hamle Geçmişi │ │
│ │ 320x320│ │ (history) │ │
│ │ TAHTA │ ├─────────────────┤ │
│ │ │ │ SÜRE PANEL │ │
│ │ │ │ Siyah │ Beyaz │ │
│ │ │ │ 10:00 │ 10:00 │ │
│ └─────────┘ └─────────────────┘ │
│ │
│ [Davet] [Bot] [Çıkış] │
│ [________Oyuncu İsmi________] │
│ Durum: Beklemede │
└────────────────────────────────────────┘
UI Elemanları:
- board_grid: 8x8 satranç tahtası (40x40 kareler)
- history_panel: Hamle geçmişi (henüz aktif değil)
- clock_panel: Süre göstergesi (henüz aktif değil)
- invite_button / bot_button / quit_button: Kontrol butonları
3. game.py - Klavye Entegrasyonu
# Satır ~380: F7 tuşu ataması
onPressKeyDict[app.DIK_F7] = lambda : self.interface.ToggleChessWindow()
# Satır ~900: Server komutları
"chess_invite" : self.__Chess_OnInvite,
"chess_start" : self.__Chess_OnStart,
"chess_update" : self.__Chess_OnUpdate,
"chess_move" : self.__Chess_OnMove,
"chess_end" : self.__Chess_OnEnd,
4. interfacemodule.py - Arayüz Yöneticisi
# Satır ~45: Satranç penceresi tanımı
self.wndChess = None
# Satır ~200: Pencere oluşturma
def __MakeChessWindow(self):
self.wndChess = uichess.ChessWindow()
# Satır ~350: Toggle fonksiyonu
def ToggleChessWindow(self):
if self.wndChess.IsShow():
self.wndChess.Close()
else:
self.wndChess.Open()
# Satır ~800: Get fonksiyonu (game.py için)
def GetChessWindow(self):
return self.wndChess
Client-Server İletişim Akışı
┌─────────┐ CG_INVITE ┌─────────┐
│ Client │ ─────────────────► │ Server │
│ (F7) │ │ (C++) │
└─────────┘ └─────────┘
│ │
│ GC_INVITE (hedefe) │
│ ◄──────────────────────── │
│ │
│ CG_ACCEPT / CG_DECLINE │
│ ────────────────────────► │
│ │
│ GC_START (her ikisine) │
│ ◄──────────────────────── │
│ │
┌────┴────┐ ┌────┴────┐
│ Oyun │ CG_MOVE │ CChess │
│ Başlar │ ─────────────────► │ Game │
│ │ │ │
│ │ GC_MOVE (rakibe) │ │
│ │ ◄───────────────── │ │
│ │ + Bot AI yanıtı │ │
│ │ ◄───────────────── │ │
└─────────┘ └─────────┘
Sistem Özellikleri
| Özellik | Durum | Açıklama |
|---|---|---|
| PvP (Player vs Player) | Aktif | İki oyuncu arasında |
| PvE (Bot) | Aktif | Basit rastgele AI |
| Hamle Geçmişi | UI var, fonksiyon yok | Görsel hazır, kod eksik |
| Süre Kontrolü | UI var, fonksiyon yok | Saat göstergesi pasif |
| Taş Yeme | Aktif | Server tarafında kontrol |
| Piyon Terfisi | Yok | Eksik özellik |
| Rok (Castling) | Yok | Eksik özellik |
| Şah/Mat Kontrolü | Yok | Eksik özellik |
Görsel Özellikler (uichess.py)
# Taş Boyutlandırma (Satır ~150)
img.SetScale(28.0/float(w), 28.0/float(h)) # 28x28 içinde 40x40 kare
# Çoklu Path Desteği (Crash koruması)
self.path_list = [
"d:/ymir work/ui/chess/",
"ymir work/ui/chess/",
"ui/chess/",
]
# Güvenli Resim Yükleme
__SafeLoadBackground() # Eksik resimleri loglar, crash engelli
Tamamlanma Durumu
Network paket yapısı (CG_* / GC_*)
8x8 tahta görseli
12 taş tipi görseli (w/b_pawn, knight, bishop, rook, queen, king)
Kare seçim mekanizması
Temel hareket gönderimi
Bot oyunu desteği
Davet/Onay/Red sistemi.İndirme Linki (Chess sistemini söküp kullanabilirsiniz.)
Linkleri görebilmek için
giriş yap veya kayıt ol.
(#ifdef ENABLE_CHESS_SYSTEM)
Virustotal:
Linkleri görebilmek için
giriş yap veya kayıt ol.
DİPNOT:
Linkleri görebilmek için
giriş yap veya kayıt ol.
FİLESİNE SORUNSUZ KURULUP DENENMİŞTİR. BURADAN DİREK BUİLLER ALARAK DENEYEBİLİRSİNİZ!
UI var, fonksiyon yok
Yok