Labirent bir grid (matris) şeklinde tasarlanacak; labirentin ebatlarını ve ic değerlerini bir input dosyasından okuyacaksınız. Input dosyasının ilk satırı boyutları verecek, ikinci satır labirente giriş noktasını, ucuncu satırda labirentten cıkış noktasını, dorduncu satırdan itibaren de labirentin değerlerini okuyacaksınız. Input dosyasının ismi odvinp.txt olacak...


Visual C#.NET ile Labirent Uygulaması

PROBLEM

Bir labirent uygulaması yazacaksınız. Labirent bir grid (matris) şeklinde tasarlanacak; labirentin ebatlarını ve ic değerlerini bir input dosyasından okuyacaksınız. Input dosyasının ilk satırı boyutları verecek, ikinci satır labirente giriş noktasını, ucuncu satırda labirentten cıkış noktasını, dorduncu satırdan itibaren de labirentin değerlerini okuyacaksınız. Input dosyasının ismi odvinp.txt olacak. Odvinp.txt ye ornek verecek olursak: 5-5 lik bir labirentte, giriş noktasının 2. satır, 1. sutun ve cıkış noktasının 5.satır 4. sutun olduğunu varsayarsak. (Bu gosterimde 1leri duvar yada dolu, 0larıda boş ve gezinebilir varsayıyoruz.)

5,5
2,1
5,4
1 0 0 0 1
0 0 1 0 1
0 0 1 0 0
1 0 1 0 1
1 1 0 0 1

Labirentte hareket yonleri yukarı-sağ-sol-aşağı yonleridir, capraz hareket edilemeyecektir. Giriş noktasından başlayarak cıkış noktası yakalanmaya calışılacak ve boyle bir guzergah bulunabilirse guzergah noktalarını bir text dosyaya yazacaksınız, bu dosyanın ismi okul numaranızın son 4 hanesi.txt şeklinde olacak. Eğer bir guzergah bulunamaz ise bu dosyaya ‘uygun yol bulunamadı' yazılacak. Uygun yolda her nokta sadece 1 kere ziyaret edilmiş olunmalı. Yukarıdaki orneğin cıkış dosyası yan yana veya alt alta yazılı şekilde giriş ve cıkış noktalarıyla birlikte 2,1 2,2 1,2 1,3 1,4 2,4 3,4 4,4 5,4 şeklinde olacak.



Zip'li dosyayı indirmek icin tıklayın.

KAYNAK KODLAR


//
/// Sonuca giden asil yolu tutan sinif
/// mys isimli sinifimda tanimladigim alar arraylist inde tutuluyor.
//
public class actualRoad

}


//
/// Labirentin 1 ve 0 larini tutan yapim
//
public struct myarr


}
//
/// Bir cok islemi ve fonksiyonlari yaptigim sinifim
//
public class mys

}
//
/// Col getter i
//
public int Col

}
//
/// mevcut nokta getter ve setter i
//
public Point Current

set

} // end of point current

//
/// son nokta getter ve setter i
//
public Point EndP

set

} // end of EndP

//
/// boyutlarin atandigi method.
//
public void setLength(int Row,int Col)


//
/// Tarama isleminde en iyi yonu belirleyen method.
//
public void findBestWay()

else if ((current.X >= endP.X)&&(current.Y = endP.X)&&(current.Y >= endP.Y))

}

//
/// actual road a ekleme islemini yapan method
//
/// eklenecek nokta
public void addAR(Point p)


//
/// actual road tan silme islemini yapan method
//
public void removeAR()


//
/// ustunde bulunulan noktayi gidildi yapiyor. Birdaha gitmemek icin
//
public void makeVisited()


//
/// Noktanin duvarmi degilmi oldugunu belirliyor.
//
/// kontrol edilecek nokta
/// boolean sonuc
public bool isitWall(Point p)


//
/// stackten deger okuyor. Tikanma durumlarinda calisiyor.
//
/// 1=nokta var.0=stackte deger yok.Cikisada gidilemedi.
public byte readStack()

else
return 0;
}

//
/// Ustunde bulunulan nokta son nokta mi
//
/// sayac
/// x yonu
/// y yonu
/// 2=evet cikis.1=hayir devam et aramaya
public byte isitFinal(sbyte cnt,sbyte wayX,sbyte wayY)



//
/// ustunde bulunulan noktanin etrafina bakiyor.
//
/// gidilecek yonu belirliyor.
/// x yonu
/// y yonu
/// sayici
public void lookAtSides(out sbyte way,out sbyte wayX,out sbyte wayY,out sbyte cnt)

cnt++;
}
break;
case 2:
if ((myArr[current.X+1,current.Y].val==0)&&(!myArr[current.X+1,current.Y].visited))

cnt++;
}
break;
case 3:
if ((myArr[current.X,current.Y-1].val==0)&&(!myArr[current.X,current.Y-1].visited))

cnt++;
}
break;
case 4:
if ((myArr[current.X-1,current.Y].val==0)&&(!myArr[current.X-1,current.Y].visited))

cnt++;
}
break;
}
}
}




//// yukarıdaki kodlar kullandıımız sınıfın kodları idi
/// şimdi de form kısmında yazdıımız kodlara bakalım.

//
/// Summary description for Form1.
//
public class frmLabirent : System.Windows.Forms.Form



//
/// Okunan matrisin etrafini birlerle cevirmek icin kullaniliyor.
//
public void surroundbyWall()

for (i=0;imyS.Row-2)
break;
}// end of while
rdr.Close();
controlP();
myGO.DrawImage(bmp,0,0);
pBox.Image = bmp;
}

//
/// Tarama isleminde ilerledikce resmide es zamanli olarak
/// boyamak icin kullanilan method.
//
/// hangi texture ile boyanacak.
/// hangi nokta boyanacak
private void copyPortion(sbyte way,Point p)

myGO.DrawImage(bmp,0,0);
pBox.Image = bmp;
}


private void pBox_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)


private void startP_Click(object sender, System.EventArgs e)


private void endP_Click(object sender, System.EventArgs e)


//
/// Formun yuklenmesinde resmi boyamak icin gereken
/// alt kucuk resimleri yukluyorum.
//
private void Form1_Load(object sender, System.EventArgs e)


//
/// label ve picture box i guncellemek icin
//
public void update2()

//
/// Taram isleminin baslangic noktasi
//

private void btnFind_Click(object sender, System.EventArgs e)

}
else

lblXY.Text = myS.Current.X.ToString(]","+myS.Current.Y.ToStrin g();
System.Threading.Thread.Sleep(250);
update2();
}
StreamWriter sr = File.CreateText(Directory.GetCurrentDirectory(]"/5051.txt");
if (goOn==2)

else if (goOn==0)

sr.WriteLine("--");
sr.WriteLine("5051 Mesut GURBUZ");
sr.Close();Labirent bir grid (matris) şeklinde tasarlanacak; labirentin ebatlarını ve ic değerlerini bir input dosyasından okuyacaksınız. Input dosyasının ilk satırı boyutları verecek, ikinci satır labirente giriş noktasını, ucuncu satırda labirentten cıkış noktasını, dorduncu satırdan itibaren de labirentin değerlerini okuyacaksınız. Input dosyasının ismi odvinp.txt olacak...


Visual C#.NET ile Labirent Uygulaması

PROBLEM

Bir labirent uygulaması yazacaksınız. Labirent bir grid (matris) şeklinde tasarlanacak; labirentin ebatlarını ve ic değerlerini bir input dosyasından okuyacaksınız. Input dosyasının ilk satırı boyutları verecek, ikinci satır labirente giriş noktasını, ucuncu satırda labirentten cıkış noktasını, dorduncu satırdan itibaren de labirentin değerlerini okuyacaksınız. Input dosyasının ismi odvinp.txt olacak. Odvinp.txt ye ornek verecek olursak: 5-5 lik bir labirentte, giriş noktasının 2. satır, 1. sutun ve cıkış noktasının 5.satır 4. sutun olduğunu varsayarsak. (Bu gosterimde 1leri duvar yada dolu, 0larıda boş ve gezinebilir varsayıyoruz.)

5,5
2,1
5,4
1 0 0 0 1
0 0 1 0 1
0 0 1 0 0
1 0 1 0 1
1 1 0 0 1

Labirentte hareket yonleri yukarı-sağ-sol-aşağı yonleridir, capraz hareket edilemeyecektir. Giriş noktasından başlayarak cıkış noktası yakalanmaya calışılacak ve boyle bir guzergah bulunabilirse guzergah noktalarını bir text dosyaya yazacaksınız, bu dosyanın ismi okul numaranızın son 4 hanesi.txt şeklinde olacak. Eğer bir guzergah bulunamaz ise bu dosyaya ‘uygun yol bulunamadı' yazılacak. Uygun yolda her nokta sadece 1 kere ziyaret edilmiş olunmalı. Yukarıdaki orneğin cıkış dosyası yan yana veya alt alta yazılı şekilde giriş ve cıkış noktalarıyla birlikte 2,1 2,2 1,2 1,3 1,4 2,4 3,4 4,4 5,4 şeklinde olacak.



Zip'li dosyayı indirmek icin tıklayın.

KAYNAK KODLAR


//
/// Sonuca giden asil yolu tutan sinif
/// mys isimli sinifimda tanimladigim alar arraylist inde tutuluyor.
//
public class actualRoad

}


//
/// Labirentin 1 ve 0 larini tutan yapim
//
public struct myarr


}
//
/// Bir cok islemi ve fonksiyonlari yaptigim sinifim
//
public class mys

}
//
/// Col getter i
//
public int Col

}
//
/// mevcut nokta getter ve setter i
//
public Point Current

set

} // end of point current

//
/// son nokta getter ve setter i
//
public Point EndP

set

} // end of EndP

//
/// boyutlarin atandigi method.
//
public void setLength(int Row,int Col)


//
/// Tarama isleminde en iyi yonu belirleyen method.
//
public void findBestWay()

else if ((current.X >= endP.X)&&(current.Y = endP.X)&&(current.Y >= endP.Y))

}

//
/// actual road a ekleme islemini yapan method
//
/// eklenecek nokta
public void addAR(Point p)


//
/// actual road tan silme islemini yapan method
//
public void removeAR()


//
/// ustunde bulunulan noktayi gidildi yapiyor. Birdaha gitmemek icin
//
public void makeVisited()


//
/// Noktanin duvarmi degilmi oldugunu belirliyor.
//
/// kontrol edilecek nokta
/// boolean sonuc
public bool isitWall(Point p)


//
/// stackten deger okuyor. Tikanma durumlarinda calisiyor.
//
/// 1=nokta var.0=stackte deger yok.Cikisada gidilemedi.
public byte readStack()

else
return 0;
}

//
/// Ustunde bulunulan nokta son nokta mi
//
/// sayac
/// x yonu
/// y yonu
/// 2=evet cikis.1=hayir devam et aramaya
public byte isitFinal(sbyte cnt,sbyte wayX,sbyte wayY)



//
/// ustunde bulunulan noktanin etrafina bakiyor.
//
/// gidilecek yonu belirliyor.
/// x yonu
/// y yonu
/// sayici
public void lookAtSides(out sbyte way,out sbyte wayX,out sbyte wayY,out sbyte cnt)

cnt++;
}
break;
case 2:
if ((myArr[current.X+1,current.Y].val==0)&&(!myArr[current.X+1,current.Y].visited))

cnt++;
}
break;
case 3:
if ((myArr[current.X,current.Y-1].val==0)&&(!myArr[current.X,current.Y-1].visited))

cnt++;
}
break;
case 4:
if ((myArr[current.X-1,current.Y].val==0)&&(!myArr[current.X-1,current.Y].visited))

cnt++;
}
break;
}
}
}




//// yukarıdaki kodlar kullandıımız sınıfın kodları idi
/// şimdi de form kısmında yazdıımız kodlara bakalım.

//
/// Summary description for Form1.
//
public class frmLabirent : System.Windows.Forms.Form



//
/// Okunan matrisin etrafini birlerle cevirmek icin kullaniliyor.
//
public void surroundbyWall()

for (i=0;imyS.Row-2)
break;
}// end of while
rdr.Close();
controlP();
myGO.DrawImage(bmp,0,0);
pBox.Image = bmp;
}

//
/// Tarama isleminde ilerledikce resmide es zamanli olarak
/// boyamak icin kullanilan method.
//
/// hangi texture ile boyanacak.
/// hangi nokta boyanacak
private void copyPortion(sbyte way,Point p)

myGO.DrawImage(bmp,0,0);
pBox.Image = bmp;
}


private void pBox_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)


private void startP_Click(object sender, System.EventArgs e)


private void endP_Click(object sender, System.EventArgs e)


//
/// Formun yuklenmesinde resmi boyamak icin gereken
/// alt kucuk resimleri yukluyorum.
//
private void Form1_Load(object sender, System.EventArgs e)


//
/// label ve picture box i guncellemek icin
//
public void update2()

//
/// Taram isleminin baslangic noktasi
//

private void btnFind_Click(object sender, System.EventArgs e)

}
else

lblXY.Text = myS.Current.X.ToString(]","+myS.Current.Y.ToStrin g();
System.Threading.Thread.Sleep(250);
update2();
}
StreamWriter sr = File.CreateText(Directory.GetCurrentDirectory(]"/5051.txt");
if (goOn==2)

else if (goOn==0)

sr.WriteLine("--");
sr.WriteLine("5051 Mesut GURBUZ");
sr.Close();Labirent bir grid (matris) şeklinde tasarlanacak; labirentin ebatlarını ve ic değerlerini bir input dosyasından okuyacaksınız. Input dosyasının ilk satırı boyutları verecek, ikinci satır labirente giriş noktasını, ucuncu satırda labirentten cıkış noktasını, dorduncu satırdan itibaren de labirentin değerlerini okuyacaksınız. Input dosyasının ismi odvinp.txt olacak...


Visual C#.NET ile Labirent Uygulaması

PROBLEM

Bir labirent uygulaması yazacaksınız. Labirent bir grid (matris) şeklinde tasarlanacak; labirentin ebatlarını ve ic değerlerini bir input dosyasından okuyacaksınız. Input dosyasının ilk satırı boyutları verecek, ikinci satır labirente giriş noktasını, ucuncu satırda labirentten cıkış noktasını, dorduncu satırdan itibaren de labirentin değerlerini okuyacaksınız. Input dosyasının ismi odvinp.txt olacak. Odvinp.txt ye ornek verecek olursak: 5-5 lik bir labirentte, giriş noktasının 2. satır, 1. sutun ve cıkış noktasının 5.satır 4. sutun olduğunu varsayarsak. (Bu gosterimde 1leri duvar yada dolu, 0larıda boş ve gezinebilir varsayıyoruz.)

5,5
2,1
5,4
1 0 0 0 1
0 0 1 0 1
0 0 1 0 0
1 0 1 0 1
1 1 0 0 1

Labirentte hareket yonleri yukarı-sağ-sol-aşağı yonleridir, capraz hareket edilemeyecektir. Giriş noktasından başlayarak cıkış noktası yakalanmaya calışılacak ve boyle bir guzergah bulunabilirse guzergah noktalarını bir text dosyaya yazacaksınız, bu dosyanın ismi okul numaranızın son 4 hanesi.txt şeklinde olacak. Eğer bir guzergah bulunamaz ise bu dosyaya ‘uygun yol bulunamadı' yazılacak. Uygun yolda her nokta sadece 1 kere ziyaret edilmiş olunmalı. Yukarıdaki orneğin cıkış dosyası yan yana veya alt alta yazılı şekilde giriş ve cıkış noktalarıyla birlikte 2,1 2,2 1,2 1,3 1,4 2,4 3,4 4,4 5,4 şeklinde olacak.



Zip'li dosyayı indirmek icin tıklayın.

KAYNAK KODLAR


//
/// Sonuca giden asil yolu tutan sinif
/// mys isimli sinifimda tanimladigim alar arraylist inde tutuluyor.
//
public class actualRoad

}


//
/// Labirentin 1 ve 0 larini tutan yapim
//
public struct myarr


}
//
/// Bir cok islemi ve fonksiyonlari yaptigim sinifim
//
public class mys

}
//
/// Col getter i
//
public int Col

}
//
/// mevcut nokta getter ve setter i
//
public Point Current

set

} // end of point current

//
/// son nokta getter ve setter i
//
public Point EndP

set

} // end of EndP

//
/// boyutlarin atandigi method.
//
public void setLength(int Row,int Col)


//
/// Tarama isleminde en iyi yonu belirleyen method.
//
public void findBestWay()

else if ((current.X >= endP.X)&&(current.Y = endP.X)&&(current.Y >= endP.Y))

}

//
/// actual road a ekleme islemini yapan method
//
/// eklenecek nokta
public void addAR(Point p)


//
/// actual road tan silme islemini yapan method
//
public void removeAR()


//
/// ustunde bulunulan noktayi gidildi yapiyor. Birdaha gitmemek icin
//
public void makeVisited()


//
/// Noktanin duvarmi degilmi oldugunu belirliyor.
//
/// kontrol edilecek nokta
/// boolean sonuc
public bool isitWall(Point p)


//
/// stackten deger okuyor. Tikanma durumlarinda calisiyor.
//
/// 1=nokta var.0=stackte deger yok.Cikisada gidilemedi.
public byte readStack()

else
return 0;
}

//
/// Ustunde bulunulan nokta son nokta mi
//
/// sayac
/// x yonu
/// y yonu
/// 2=evet cikis.1=hayir devam et aramaya
public byte isitFinal(sbyte cnt,sbyte wayX,sbyte wayY)



//
/// ustunde bulunulan noktanin etrafina bakiyor.
//
/// gidilecek yonu belirliyor.
/// x yonu
/// y yonu
/// sayici
public void lookAtSides(out sbyte way,out sbyte wayX,out sbyte wayY,out sbyte cnt)

cnt++;
}
break;
case 2:
if ((myArr[current.X+1,current.Y].val==0)&&(!myArr[current.X+1,current.Y].visited))

cnt++;
}
break;
case 3:
if ((myArr[current.X,current.Y-1].val==0)&&(!myArr[current.X,current.Y-1].visited))

cnt++;
}
break;
case 4:
if ((myArr[current.X-1,current.Y].val==0)&&(!myArr[current.X-1,current.Y].visited))

cnt++;
}
break;
}
}
}




//// yukarıdaki kodlar kullandıımız sınıfın kodları idi
/// şimdi de form kısmında yazdıımız kodlara bakalım.

//
/// Summary description for Form1.
//
public class frmLabirent : System.Windows.Forms.Form



//
/// Okunan matrisin etrafini birlerle cevirmek icin kullaniliyor.
//
public void surroundbyWall()

for (i=0;imyS.Row-2)
break;
}// end of while
rdr.Close();
controlP();
myGO.DrawImage(bmp,0,0);
pBox.Image = bmp;
}

//
/// Tarama isleminde ilerledikce resmide es zamanli olarak
/// boyamak icin kullanilan method.
//
/// hangi texture ile boyanacak.
/// hangi nokta boyanacak
private void copyPortion(sbyte way,Point p)

myGO.DrawImage(bmp,0,0);
pBox.Image = bmp;
}


private void pBox_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)


private void startP_Click(object sender, System.EventArgs e)


private void endP_Click(object sender, System.EventArgs e)


//
/// Formun yuklenmesinde resmi boyamak icin gereken
/// alt kucuk resimleri yukluyorum.
//
private void Form1_Load(object sender, System.EventArgs e)


//
/// label ve picture box i guncellemek icin
//
public void update2()

//
/// Taram isleminin baslangic noktasi
//

private void btnFind_Click(object sender, System.EventArgs e)

}
else

lblXY.Text = myS.Current.X.ToString(]","+myS.Current.Y.ToStrin g();
System.Threading.Thread.Sleep(250);
update2();
}
StreamWriter sr = File.CreateText(Directory.GetCurrentDirectory(]"/5051.txt");
if (goOn==2)

else if (goOn==0)

sr.WriteLine("--");
sr.WriteLine("5051 Mesut GURBUZ");
sr.Close();
__________________