Kaplumbağa ile Tavşan Yarışıyor [JAVA]
9 Ekim 2017 • ☕️ 3 dk okuma • 🏷 bilgisayar, yazılım
Yazar tarafından şu dillere çevrildi: English
Bilgisayar bilimleri ile alakalı bölümlerin çoğunda, programlama derslerinin öğrenilmesi aşamasında, ödevlerde ya da sınavlarda öğrencilere yöneltilen bir probleme benim geliştirdiğim çözümü aşağıda paylaşmak istiyorum. Program ile ilgili tüm açıklamalar aşığıda yer almaktadır.
Program Yönergesi
İki yarışmacı da 70 tane karelik bir yolun ilk karesinden yarışa başlayacaktır. Her kare yarış boyunca yarışmacıların bulunabileceği yerleri ifade etmektedir. 70. kareye ilk varan ya da geçen, yarışmayı kazanacaktır. Yarış kaygan bir zeminde olduğu için yarışmacılar zaman zaman kayabilmektedir. Saniyede bir kere rasgele sayı üretilerek yarışmacıların hangi hareketi gerçekleştireceği belirlenecektir. Şekil 7.34’de yarışmacıların hangi hareketi yüzde kaç olasıkla gerçekleştirdiği verilmiştir. Eğer yarışmacılardan biri 1 karesinden geriye kayarsa onu yine 1 karesine alın (-değerli kareler kullanmayın. )
Kaplumbağa için, üretilen sayı i,1 <= i<=5 için “fast plod” hareketi, 6<=i<=7 ise “slip” hareketi, 8<=i<=10 için ise “slow plod” hareketi gerçekleştirilecektir. Her saniyede ,tavşan ve kaplumbağanın 70 parçalık yoldaki yerleri H ve T harfleri ile gösterilmelidir. İkisi aynı kareye düşerse H Ve T yerine OUCH yazdırılmalıdır. Yarış sonunda kaplumbağa kazanırsa “TORTOISE WINS!!! YAY!!” mesajı ekrana yazılmalıdır. Eğer tavşan kazanırsa “Hare wins. Yuch” mesajı, beraberlik olursa “It’s a tie” mesajı ekrana yazdırılmalıdır.
- Kaplumbağa’nın hareket olasılıkları:
o Hızlı Hareket --- %50 --- 3 pozisyon sağa
o Geriye Kayma --- %20 --- 6 pozisyon sola
o Yavaş Hareket --- %30 --- 1 pozisyon sağa - Tavşa’nın hareket olasılıkları:
o Uyku Halinde --- %20 --- Hareket yok
o Büyük Hareket --- %20 --- 9 pozisyon sağa
o Büyük Kayma --- % 10 --- 12 pozisyon sola
o Küçük Hareket --- %30 --- 1 pozisyon sağa
o Küçük Kayma --- %20 --- 2 pozisyon sola
[JAVA] Program Kodları
TortoiseHare.java
/*
* coded by hkucuk
* */
public class TortoiseHare {
public static void main(String [] args){
int clock = 0; // Geçen zaman
Move move = new Move();
// Başlangıç için bir şeyler söyleyelim
System.out.print("\nLets Goooo\n----------------------------------------------------------------------\n\n");
// 70. kareye ulaşılana kadar yarışı devam ettirelim
while(move.getTortoisePosition() != 70 && move.getHarePosition() != 70){
move.actionTortoise(); // Kaplumbağa-yı hareket ettirelim =)
move.actionHare(); // Tavşan-ı hareket ettirelim =)
move.echoPositions(); // Kaplumbağa ve Tavşan'ın pozisyonunu yazdıralım
clock++; // Her adımda geçen süreyi arttıralım
}
System.out.print("\n----------------------------------------------------------------------\n");
if(move.getTortoisePosition() >= move.getHarePosition()){ // Kaplumbağa kazandı :D
System.out.print("\nTORTOISE WINS!!! YAY!!!\n");
}else{ // Tavşan kazandı :D
System.out.print("\nHare wins. Yuch\n");
}
// Geçen süreyi söyleyelim
System.out.printf("Elapsed Time : %d\n\n", clock);
}
}Move.java
import java.util.Random;
/*
* coded by hkucuk
* */
public class Move {
public int tortoisePosition = 1; // Kaplumbağanın pozisyonu
public int harePosition = 1; // Tavşanın pozisyonu
Random rand = new Random();
public void actionTortoise(){
int randomNumber = rand.nextInt(10) + 1;
if(randomNumber >= 1 && randomNumber <= 5) setTortoisePosition(3);
else if(randomNumber == 6 || randomNumber == 7) setTortoisePosition(0, 6);
else setTortoisePosition(1);
if(getTortoisePosition() < 1) restoreTortoisePosition(1); if(getTortoisePosition() > 70) restoreTortoisePosition(70);
}
public void setTortoisePosition(int positionRight){ this.tortoisePosition += positionRight; }
public void setTortoisePosition(int positionRight, int positionLeft){ this.tortoisePosition -= positionLeft; }
public void restoreTortoisePosition(int position){ this.tortoisePosition = position; }
public int getTortoisePosition(){ return this.tortoisePosition; }
public void actionHare(){
int randomNumber = rand.nextInt(10) + 1;
if(randomNumber == 3 || randomNumber == 4) setHarePosition(9);
else if(randomNumber == 5) setHarePosition(0, 12);
else if(randomNumber >= 6 && randomNumber <= 8) setHarePosition(1);
else if(randomNumber == 9 || randomNumber == 10) setHarePosition(0, 2);
if(getHarePosition() < 1) restoreHarePosition(1); if(getHarePosition() > 70) restoreHarePosition(70);
}
public void setHarePosition(int positionRight){ this.harePosition += positionRight; }
public void setHarePosition(int positionRight, int positionLeft){ this.harePosition -= positionLeft; }
public void restoreHarePosition(int position){ this.harePosition = position; }
public int getHarePosition(){ return this.harePosition; }
public void echoPositions(){
int counter;
// Pozisyonlar 1 ile 70 arasında olacağı için 1'den 70'e kadar her bir pozisyona bakıyoruz
for(counter = 1; counter <= 70; counter++){
// Eğer kaplumbağa ve tavşan aynı pozisyonda iseler uyarı veriyoruz
if(counter == getTortoisePosition() && counter == getHarePosition())
System.out.printf("OUCH!!!");
// Geçerli pozisyonda kaplumbağa varsa ekrana T yazdırıyoruz
else if(counter == getTortoisePosition())
System.out.printf("T");
// Geçerli pozisyonda tavşan varsa ekrana H yazdırıyoruz
else if(counter == getHarePosition())
System.out.printf("H");
else // Geçerli pozisyonda kimse yok ise boşluk bırakıyoruz
System.out.printf(" ");
}
System.out.printf("\n");
}
}