hkucuk

Kaplumbağa ile Tavşan Yarışıyor [JAVA]

October 9, 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");
	}
}