Arama butonu
Bu konudaki kullanıcılar: 1 misafir
28
Cevap
5356
Tıklama
0
Öne Çıkarma
C++ Satranç - Çok Karmaşık
C
13 yıl
Teğmen
Konu Sahibi

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();
}
}

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





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

C
13 yıl
Yarbay

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


Bu mesaja 1 cevap geldi.
C
13 yıl
Teğmen
Konu Sahibi

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


Bu mesaja 1 cevap geldi.
T
13 yıl
Yüzbaşı

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.


Bu mesaja 1 cevap geldi.
C
13 yıl
Teğmen
Konu Sahibi

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


Bu mesaja 1 cevap geldi.
G
13 yıl
Yüzbaşı

A
13 yıl
Yüzbaşı

iyi ki dünyayı kurtaracak projeyi yapın dememiş. :)


Bu mesaja 1 cevap geldi.
R
13 yıl
Yüzbaşı

o98rthg hxtazwe yaw5y





< Bu mesaj bu kişi tarafından değiştirildi rob dö şambır -- 30 Nisan 2013; 18:19:48 >
Bu mesaja 1 cevap geldi.
K
13 yıl
Çavuş

C
13 yıl
Teğmen
Konu Sahibi

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.


Bu mesaja 1 cevap geldi.
R
13 yıl
Yüzbaşı

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 >
Bu mesaja 1 cevap geldi.
C
13 yıl
Teğmen
Konu Sahibi

ben ne diyorum sen ne diyosun, bi . git ya


Bu mesaja 2 cevap geldi.
G
13 yıl
Yarbay

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.



D
13 yıl
Yüzbaşı

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.


Bu mesaja 2 cevap geldi.
C
13 yıl
Teğmen
Konu Sahibi

Konu guncellıgını koruyor, ustalardan kod hakkında yardm beklıyorum



G
13 yıl
Yarbay

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 >
Bu mesaja 1 cevap geldi.
C
13 yıl
Teğmen
Konu Sahibi

Konu guncellıgını koruyor, ustalardan kod hakkında yardm beklıyorum


Bu mesaja 1 cevap geldi.
H
13 yıl
Yüzbaşı

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.


Bu mesaja 1 cevap geldi.
C
13 yıl
Teğmen
Konu Sahibi

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


Bu mesaja 1 cevap geldi.
D
13 yıl
Yüzbaşı

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.


Bu mesaja 2 cevap geldi.