Şimdi Ara

C++ Satranç - Çok Karmaşık

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
29
Cevap
0
Favori
5.356
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 12
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • Bayağı ilerledim hamleler vs hersey tamam ama şurda tıkandım.

    Karşı tarafın taşlarını nasıl alıcaz ???
    Şah'ı alındıgında nasıl oyunu bıtırıcez ??

    --------------------------------------------

    Bilg,sayar mühendisliği 1. sınıftayım, proje ödevi olarak C++ da satranç yapmam istendi 1 haftadır uğraşıyorum fakat 1 adım bile ilerleyemedim. Böyle bir proje yapan bir arkadaş varsa yardımcı olabılırse çok mutlu olurum.



    #include <stdio.h> 
    #include <conio.h>
    #include <stdlib.h>
    const char BOS = ' ';
    const char PIYON = 'p';
    const char AT = 'a';
    const char KALE = 'k';
    const char FIL = 'f';
    const char VEZIR = 'v';
    const char SAH = 's';

    char tahta[9][9];

    bool piyonHamle(int secilenSatir,int secilenSutun,int hedefSatir,int hedefSutun);
    bool hamleOyunAlanindami(int hedefSatir,int hedefSutun);

    void tahtaTemizle()
    {
    for(int i=1;i<=8;i++)
    {
    for(int j=1;j<=8;j++)
    {
    tahta[i][j] = BOS;
    }
    }
    tahta[1][1] = KALE; tahta[1][2] = AT; tahta[1][3] = FIL; tahta[1][4] = VEZIR;
    tahta[1][5] = SAH; tahta[1][6] = FIL; tahta[1][7] = AT; tahta[1][8] = KALE;
    tahta[2][1] = PIYON; tahta[2][2] = PIYON; tahta[2][3] = PIYON; tahta[2][4] = PIYON;
    tahta[2][5] = PIYON; tahta[2][6] = PIYON; tahta[2][7] = PIYON; tahta[2][8] = PIYON;
    tahta[8][1] = KALE; tahta[8][2] = AT; tahta[8][3] = FIL; tahta[8][4] = VEZIR;
    tahta[8][5] = SAH; tahta[8][6] = FIL; tahta[8][7] = AT; tahta[8][8] = KALE;
    tahta[7][1] = PIYON; tahta[7][2] = PIYON; tahta[7][3] = PIYON; tahta[7][4] = PIYON;
    tahta[7][5] = PIYON; tahta[7][6] = PIYON; tahta[7][7] = PIYON; tahta[7][8] = PIYON;
    }
    void tahtaYazdir()
    {
    system("cls");
    printf(" ");
    for(int i=0;i<8;i++)
    {
    printf(" %d",i+1);
    }
    printf("\n");
    printf("\n");
    for(int i=1;i<9;i++)
    {
    printf("%d ",i);
    for(int j=1;j<9;j++)
    {

    printf("%c ",tahta[i][j]);
    }
    printf("\n");

    }

    }
    void hamleIste()
    {
    int satirSecilen;
    int sutunSecilen;
    int satirHedef;
    int sutunHedef;
    printf("\ntasin satir ve sutun numarasini giriniz..............:");

    scanf("%d %d",&satirSecilen,&sutunSecilen);

    printf("\ntasinacak konumun satir ve sutun numarasini giriniz..:");

    scanf("%d %d",&satirHedef,&sutunHedef);

    if(!hamleOyunAlanindami(satirSecilen,satirSecilen))
    {
    printf("\n secim oyun alani disinda");
    getch();
    }



    if(!hamleOyunAlanindami(satirHedef,sutunHedef))
    {
    printf("\n hamle oyun alani disinda");
    getch();
    }

    switch(tahta[satirSecilen][sutunSecilen])
    {
    case PIYON:
    {

    if(!piyonHamle(satirSecilen,sutunSecilen,satirHedef,sutunHedef))
    {
    printf("\n hamle gerceklestirilemedi");
    getch();
    }
    break;
    }
    }

    }

    bool piyonHamle(int secilenSatir,int secilenSutun,int hedefSatir,int hedefSutun)
    {
    if( tahta[hedefSatir][hedefSutun]!=BOS)
    return false;

    if( hedefSatir-secilenSatir==1&&hedefSutun==secilenSutun)
    {
    tahta[secilenSatir][secilenSutun] = BOS;
    tahta[hedefSatir][secilenSutun] = PIYON;
    return true;
    }

    return false;
    }
    bool hamleOyunAlanindami(int hedefSatir,int hedefSutun)
    {
    if(hedefSatir>8||hedefSatir<1)
    return false;
    if(hedefSutun>8||hedefSutun<1)
    return false;

    return true;
    }

    int main()
    {

    tahtaTemizle();
    tahtaYazdir();
    while(true)
    {
    hamleIste();
    tahtaYazdir();
    }
    }



    < Bu mesaj bu kişi tarafından değiştirildi clfkaya -- 21 Aralık 2012; 1:39:23 >







  • 1. sınıfın 1. döneminde satranç yazılmasını istedi hoca ha? Saçmalıktan başka bir şey değil..
  • quote:

    Orijinalden alıntı: CThirty

    1. sınıfın 1. döneminde satranç yazılmasını istedi hoca ha? Saçmalıktan başka bir şey değil..

    Maalesef ki oyle, 1. sınıf 1. dönem
  • Sanırım aynı okuldayız yükseltme alıyorum bende. Satranç tek taraflı yapılacak. Yani amaç sadece taşların senin isteğin doğrultusunda hareket etmesi.

    1. sınıfa göre aşırı zor bir proje ödevi bence de. Geçen sene basit bir dosyalama ödevi verilmişti. Bu sene şansınıza ders aşırı zorlaştı. Allah yardımcınız olsun.

    Ödevi yarın yapmayı denicem yaparsam bir iki tüyo karalarım buraya.
    Not: Ödev C++'ta değil C'de.
  • quote:

    Orijinalden alıntı: TeaTone

    Sanırım aynı okuldayız yükseltme alıyorum bende. Satranç tek taraflı yapılacak. Yani amaç sadece taşların senin isteğin doğrultusunda hareket etmesi.

    1. sınıfa göre aşırı zor bir proje ödevi bence de. Geçen sene basit bir dosyalama ödevi verilmişti. Bu sene şansınıza ders aşırı zorlaştı. Allah yardımcınız olsun.

    Ödevi yarın yapmayı denicem yaparsam bir iki tüyo karalarım buraya.
    Not: Ödev C++'ta değil C'de.

    Çok iyi olur, umarım bende bir sonuca ulaşabılırım
  • iyi ki dünyayı kurtaracak projeyi yapın dememiş. :)
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • o98rthg hxtazwe yaw5y



    < Bu mesaj bu kişi tarafından değiştirildi rob dö şambır -- 30 Nisan 2013; 18:19:48 >
  • Hangi üni. de okuyorsun.
  • Saü deyim,
    İnternetten bulmasını bende biliyorum fakat, bir çok kişi internetten alacagı ıcın kopya ödev olacak o da sıfır olacak.
    Biraz özgünlük katmak mecburiyetindeyiz.
  • u n vbn dfzx tsert sre



    < Bu mesaj bu kişi tarafından değiştirildi rob dö şambır -- 30 Nisan 2013; 18:20:10 >
  • ben ne diyorum sen ne diyosun, bi . git ya
  • multiplayer yazilir da single player yapay zekasini mezun bilgisayar muhendisi de yazamaz. cunku cok farkli dallar. yapay zeka basli basina bir dal zaten.

    bence hoca senden 2 kisinin sirayla oynayabilecegi bir sey istiyordur.
  • quote:

    multiplayer yazilir da single player yapay zekasini mezun bilgisayar muhendisi de yazamaz. cunku cok farkli dallar.


    Yanılıyorsunuz birçok bilgisayar mühendisliği bölümünde yapay zeka diye teknik seçmeli ders bulunur. Yapay zeka bilgisayar biliminin bir araştırma alanı zaten farklı şeyler değiller o kadar.


    Eğer sizden bir yapay zeka oluşturmanız istenmiyor ise 1. sınıf için çok da zor bir ödev değil. Taşların konumlarını tutacaksın hafızada ve yapılan hareket legal mi diye kontrol ediceksin. İlk etapta zor görünebilir ancak biraz araştırma yaparsan halledilemeyecek bir şey değil.
  • Konu guncellıgını koruyor, ustalardan kod hakkında yardm beklıyorum
  • quote:

    Orijinalden alıntı: dogauzun

    quote:

    multiplayer yazilir da single player yapay zekasini mezun bilgisayar muhendisi de yazamaz. cunku cok farkli dallar.


    Yanılıyorsunuz birçok bilgisayar mühendisliği bölümünde yapay zeka diye teknik seçmeli ders bulunur. Yapay zeka bilgisayar biliminin bir araştırma alanı zaten farklı şeyler değiller o kadar.


    Eğer sizden bir yapay zeka oluşturmanız istenmiyor ise 1. sınıf için çok da zor bir ödev değil. Taşların konumlarını tutacaksın hafızada ve yapılan hareket legal mi diye kontrol ediceksin. İlk etapta zor görünebilir ancak biraz araştırma yaparsan halledilemeyecek bir şey değil.

    aslinda farkli dal derken tip ile muhendislik arasindaki fark gibi demek istemedim. baslibasina bir dal oldugundan bahsettim. yoksa yapay zeka dersi egitim teknolojileri bolumunde de veriliyor.

    yapay zeke 4 yillik mezununun direk yapabilecegi bir is degil. uzerinde detayli egitim almasi gerekiyor.



    < Bu mesaj bu kişi tarafından değiştirildi Guest-E41040413 -- 19 Aralık 2012; 21:46:48 >




  • Konu guncellıgını koruyor, ustalardan kod hakkında yardm beklıyorum
  • object orient yaklaşman gerekiyor kolay bir şekilde yapmak için. Her taş için ayrı bir class yazabilirsin. Bu class'lar; atıyorum "tas" denen bir abstact class'tan türerler. Grafikleride diğer özellikleride bu sınıfların içine yazarsın.
    Oyuncu taşa tıkladığında geçici bir instance'a al. Eğer boş bir yere yıklarsa taşın gidip gidemeyeceğini kontrol et. gidebiliyosa pozisyonunu değiştir vs vs..
    Nette vardır chess yazılımlar. Belli bir yere kadarını yaz sonra karşılaştır internetten buldukların ile. Tabi derdin öğrenmekse. Eğer dersi geçsem yeter diyosan indir bitane satranç programı kaktır gitsin.
  • quote:

    Orijinalden alıntı: hasan1980125

    object orient yaklaşman gerekiyor kolay bir şekilde yapmak için. Her taş için ayrı bir class yazabilirsin. Bu class'lar; atıyorum "tas" denen bir abstact class'tan türerler. Grafikleride diğer özellikleride bu sınıfların içine yazarsın.
    Oyuncu taşa tıkladığında geçici bir instance'a al. Eğer boş bir yere yıklarsa taşın gidip gidemeyeceğini kontrol et. gidebiliyosa pozisyonunu değiştir vs vs..
    Nette vardır chess yazılımlar. Belli bir yere kadarını yaz sonra karşılaştır internetten buldukların ile. Tabi derdin öğrenmekse. Eğer dersi geçsem yeter diyosan indir bitane satranç programı kaktır gitsin.

    Teşekkür ederim zaman ayırdıgınız için, zaten console app isteniyor.
    Tabiki amacım öğrenmek fakat ilk postta ki kadar yazabildim tıkandım.

    İnternette çok kaynak var fakat istenen ve benım yazdıgım kodla alakası yok :S




  • Benim aklıma gelen en basit çözüm şu şekilde:

    Her taşa bir numara vereceksin. örneğin beyaz piyonun numarası = 1 gibi. Bunu yaparken beyaz taşlara 10 dan küçük siyah taşlara da 10 dan büyük numara verirsen daha da kolay olur. Beyaz fil = 3, siyah fil = 13 gibi. Taşın numarası 10 dan büyük mü küçük mü diye bakarak rengini anlayabilirsin direk. Satranç tahtasını da 2 boyutlu bir array olarak tutarsın. Her kareye bir integer yazarsın. Eğer o karede bir taş varsa o taşın numarası yazar, kare boş ise 0 yazar. (bunun internette 64 bitlik integerlar kullanılarak yapılan gösterimleri de mevcut ancak onlar 1. sınıf için biraz fazla karmaşık olabilir.)

    Burdan itibaren 1 adet fonksiyon yazılır. Fonksiyon 2 adet parametre alır.

    Birinci parametre: Taşın gideceği kare
    İkinci parametre: Taşın hamleden önceki konumu


    fonksiyona gelen parametreler kullanıcıdan okunur. Taşın hamleden önceki konumuna bakılarak hangi taş hareket ettiriliyor öğrenilir. Taşın türüne göre gideceği kareye gitmesi mümkün mü kontrol edilir. Örneğin kale ise taş ilk konum arrayde tahta[x][y] pozisyonundaysa x ve y den 1 tanesi sabit kalmalı. Her taş için belirli kurallar var buna göre taşın oraya gitmesi mümkün mü diye bakılabilir. Daha sonra gideceği kare dolu mu diye bakarsın. Daha sonra o hareket yapıldıktan sonra herhangi bir taş şahın olduğu kareye hareket edebiliyor mu diye bakarsın(taş açmazda olabilir.) Tabi işin içinde özel hareketler falan da var roktur falan. Ancak bir proje ödevi de böyle olmalı zaten bitirdiğin zaman sana bir şeyler kattığını hissedebilmelisin.




  • 
Sayfa: 12
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.