ITJA - SATRANC OYUN SİSTEMİ (FULL SYSTEM - FULL UI)

  • Konuyu açan Konuyu açan ITJA
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 0
  • Gösterim Gösterim 132

ITJA

Yasaklanmış Üye
Cezalı
Mesaj
73
Beğeni
37
Puan
676
Ticaret Puanı
0
1776358515321.png



📋 Proje Özeti (GAME SOURCE TAFAFI) (AI YARDIMI İLE )



ÖzellikDetay
OyunMetin2 (MMORPG)
ModülSatranç Sistemi (Chess System)
DilC++
MimariClient-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ı




ModAçıklamaKod
PVP (Player vs Player)İki gerçek oyuncu arasındaCChessGame(pkWhite, pkBlack, false)
PvE (Player vs Bot)Oyuncu vs Yapay ZekaCChessGame(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)




SubheaderAmaçParametreler
CHESS_SUBHEADER_GC_INVITEDavet gönderszName (davet eden)
CHESS_SUBHEADER_GC_STARTOyun başlatBot flag, sıra, rakip adı
CHESS_SUBHEADER_GC_UPDATETaş yerleştirPozisyon (x,y), taş tipi
CHESS_SUBHEADER_GC_MOVEHareket bildirfrom(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ü
KaleDüz, engel kontrolü
VezirFil + Kale kombinasyonu
Şah1 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şenAçıklama
ChessWindowAna satranç pencere sınıfı
board_state8x8 tahta durumu (dict)
piecesTaş görselleri (UI.ImageBox)
selected_posSeçili kare koordinatı
is_my_turnSıra kontrolü
is_whiteOyuncu 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










ÖzellikDurumAçıklama
PvP (Player vs Player)✅ Aktifİki oyuncu arasında
PvE (Bot)✅ AktifBasit rastgele AI
Hamle Geçmişi⚠️ UI var, fonksiyon yokGörsel hazır, kod eksik
Süre Kontrolü⚠️ UI var, fonksiyon yokSaat göstergesi pasif
Taş Yeme✅ AktifServer tarafında kontrol
Piyon Terfisi❌ YokEksik özellik
Rok (Castling)❌ YokEksik özellik
Şah/Mat Kontrolü❌ YokEksik ö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.)

(#ifdef ENABLE_CHESS_SYSTEM)
Virustotal:

DİPNOT:
FİLESİNE SORUNSUZ KURULUP DENENMİŞTİR. BURADAN DİREK BUİLLER ALARAK DENEYEBİLİRSİNİZ!
 
Geri
Üst