Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Su algoritmayi en kolay nasi becerebilirim


reyou

Öne çıkan mesajlar

mantigi cok basit ama az once yaziyim dedim biraz uzun oldu sanirim en kisa yolu ne olabilir?

10x10 karemiz var, bu karenin hergangi bir yerinde piyonumuz var satranctaki gibi, bunu 4 yone hareket ettirebiliyoruz en fazla 1 kare uzagina gidebilir fazlasina gidemez yani ortadaki bir piyon ise 8 farkli yone gidebilir; kenarda ise 5 farkli yone kosede ise 3 farkli yere. simdi her bir karenin numarasi var 1den 100 e kadar diyelim 12 numarali piyon 1,2,3,11,13,21,22,23 e gidebilir gibi bunu programlarken en kisa yoldan nasi kontrol edebilirim?
Link to comment
Sosyal ağlarda paylaş

ornegi yanlis vermisim simdi duzelttim yani 3 farkli cesitti bulunabilir piyon kosede, kenarda yada ortada bunlari kontrol ediyorum ilk sonrada sayilari birbirinden cikarip falan islem yapmaya calistidim

bu arada olmamis sanirim az once denedim patladim :D

lan ben algoritma-1 dersinden nasi gecmisim :P
Link to comment
Sosyal ağlarda paylaş

Kenar köşe orta diye niye ayırıyorsunuz ki? Zaten max-height ve max-width'ten daha fazla olamaz. 0'dan küçük olamaz. getPossibleMoves(x, y) function'ı tuple array'i döndürür.

[code]for i in [-1,0,1]:
tmp_x = x + i
for j in [-1,0,1]:
tmp_y = y + j
if 0 <= tmp_x <= max_width and 0 <= tmp_y <= max_height:
lst.append((tmp_x, tmp_y))[code]
Link to comment
Sosyal ağlarda paylaş

riglous said:

Kenar köşe orta diye niye ayırıyorsunuz ki? Zaten max-height ve max-width'ten daha fazla olamaz. 0'dan küçük olamaz. getPossibleMoves(x, y) function'ı tuple array'i döndürür.

[code]for i in [-1,0,1]:
tmp_x = x + i
for j in [-1,0,1]:
tmp_y = y + j
if 0 <= tmp_x <= max_width and 0 <= tmp_y <= max_height:
lst.append((tmp_x, tmp_y))[code]


nasi hesapliyosunki max with - height burda?

diyelim 12 numarali piyon icin 23 numara max deger ama 14 bunun icine girmiyor, senin yazdigin loop bu kosulu saglamiyor gibime geldi benim?
Link to comment
Sosyal ağlarda paylaş

Sıralı numaralardan çok iki boyutlu bi yapı kullanman lazım. Eğer halihazırda öyle bi şey yoksa bi genişlik ve yükseklik tanımlayıp, tek boyutlu sayının iki boyutlu yerini bulan bi fonksiyon yazacaksın. Örneğin n numaralı bi sayı w genişliğinde h yüksekliğinde bi alandaysa ve bulunduğu noktayı (x,y) olarak ifade edeceksek yerini şöyle hesaplayabiliriz:
x = n MOD w
y = n / h + 1
Örneğin 4x4 boyutundaki bi matriste 6 numaralı eleman
x = 6 MOD 4 = 2
y = 6 / 4 + 1 = 2'de olacak (2,2 noktası):

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

İndisler 1'den değil de 0'dan başlasın istersen de x=(n MOD w)-1 ve y=n/h şeklinde hesaplicaksın işte.
(x, y) noktasını belirledik. Bi elemanın bu noktadan gidebileceği noktalar kümesinin en genişi şu:

(x-1,y-1) (x,y-1) (x+1,y-1)
(x-1,y) (x,y) (x+1, y)
(x-1,y+1) (x,y+1) (x+1,y+1)


Burda daraltıcı faktör, noktaların oyun alanının içinde olup olmadıkları.
Dolayısı ile (x, y) -bilinmiyosa- bulduktan sonra, şu döngüyle halledersin (oyun alanının sol üst köşesi 0,0 noktası; sağ alt köşesi w-1,h-1 noktası kabul edersek):

for(int j=y-1; j<=y+1; j++)
for(int i=x-1; i<=x+1; i++)
if(j < 0 || j >= h || i < 0 || i >= w || (x==i && y==j)) ;
else gidilebilir.add(i, j);


Edit: Ha bi de gidilebilecek koordinatları buldun diyelim. Sonra bu koordinatlarda hangi sayılar olduğunu bulman gerekecek (hala tek sayı kullandığını farzedelim). Deminki işlemin tersi o da:
n = h*(y-1) + w
Yani 2,2 için n = 4*(2-1) + 2 = 6
Link to comment
Sosyal ağlarda paylaş

reyou said:

nasi hesapliyosunki max with - height burda?

diyelim 12 numarali piyon icin 23 numara max deger ama 14 bunun icine girmiyor, senin yazdigin loop bu kosulu saglamiyor gibime geldi benim?

Amerikayı yeniden keşfetme. Satranç tahtasını düşün. A B C ... kımsını index'lerle yapıyorsun sadece.
Link to comment
Sosyal ağlarda paylaş


// clicked position
int ClickedPosition = Convert.ToInt32(Request.Params[ClickedPosition]);
// position of user
int UserPosition = Convert.ToInt32(Request.Params[position]);

int yDistancePosition = UserPosition / 10;
int yDistanceClicked = ClickedPosition / 10;
int xDistancePosition = UserPosition % 10;
int xDistanceClicked = ClickedPosition % 10;


if (((xDistancePosition - xDistanceClicked) > 1) || ((xDistancePosition - xDistanceClicked) < -1))
{
Response.Write("Gecersiz bir hamle yaptiniz. X position");
}
else if (((yDistancePosition - yDistanceClicked) > 1) || ((yDistancePosition - yDistanceClicked) < -1))
{
Response.Write("Gecersiz bir hamle yaptiniz. Y position");
}
else
{
Response.Write("Basarili!");
}


bu sekilde hallettim :)
Link to comment
Sosyal ağlarda paylaş

bence ilerde adamakıllı kod yazmak istiosan işini classlar yazarak çözmeye alıs.

atıyorum Pawn die bi class yaz. Bu piyonun koordinatlarını tutan dgerler tut icinde.

int X,Y gibi.

daha sonra bi Pawn[][] tanımlayıp bu matrixin istedigin koordinatlarına senin piyonu veya piyonlarını yerlestir.

gidebilecegi koordinatları X ve Y den hesaplarsın zaten, ama gidecegin yerin de bos olup olmadıgı görmek istiosan, matrixte bu alanın boş (null) olup olmadıgını kontrol et vs..
Link to comment
Sosyal ağlarda paylaş

satranct tahtasi uzerinde her bir kare bir classin referencesi zaten, yani her bir kare bir kisi aslinda, adi soyadi vs si fln var ve tabiki position attributesi

yukarida yazdigim fonsyonu evet bu classin icine tasiyabilirim, o zaman classi tamamen izole etmis olurum, onun disinda class yapisini kullandim zaten,

tesekkurler tavsiye icin tabikide.
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...