درس 14 از 33
در حال پیشرفت

بازی حدس اعداد (Guessing Game)

برای اینکه بازی حدس اعداد رو بهتر توضیح بدیم، از روش Given-When-Then استفاده می‌کنیم. این روش کمک می‌کنه تا منطق و رفتار بازی به صورت گام‌به‌گام و قابل فهم برای همه تعریف بشه.

سناریوی کلی بازی:

  • در این بازی، یک عدد تصادفی توسط شیء بازی (Game) تولید می‌شه.
  • سه بازیکن (Player) تلاش می‌کنن تا عدد هدف رو حدس بزنن.
  • بازی بررسی می‌کنه که کدوم بازیکن عدد رو درست حدس زده و نتیجه اعلام می‌شه.

1. موقعیت اولیه (Given):

  • بازی شروع می‌شه و یک عدد تصادفی بین 0 تا 9 تولید می‌شه.
  • هر بازیکن آماده است که عددی رو حدس بزنه.

2. وقتی که بازیکن‌ها حدس می‌زنن (When):

  • هر بازیکن یک عدد تصادفی رو به عنوان حدس خودش اعلام می‌کنه.
  • این اعداد توسط بازی ثبت می‌شن.

3. نتیجه بررسی می‌شه (Then):

  • بازی بررسی می‌کنه که آیا حدس هیچ‌کدوم از بازیکن‌ها با عدد هدف یکی هست یا نه.
  • اگر یک یا چند بازیکن درست حدس زده باشن:
    • نتیجه اعلام می‌شه.
    • بازی پایان پیدا می‌کنه.
  • اگر هیچ بازیکنی درست حدس نزده باشه:
    • بازیکن‌ها دوباره تلاش می‌کنن.

پیاده‌سازی در کد

1. ساخت کلاس Player

  • ابتدا نیاز داریم کلاسی به نام Player بسازیم. این کلاس نماینده یک بازیکن است که در هر نوبت یک عدد تصادفی بین 0 تا 9 حدس می‌زند. برای این منظور:

    • یک متغیر به نام number داخل این کلاس تعریف می‌کنیم تا عدد حدس زده‌شده را ذخیره کند.
    • یک متد به نام guess می‌نویسیم که وظیفه تولید عدد تصادفی را دارد.
				
					class Player {  
  int number;  // این متغیر عدد حدس زده شده توسط بازیکن را ذخیره می‌کند.

  void guess() {  
    double randomNumber = (Math.random() * 10);
    number = (int) randomNumber;  
    System.out.println("I'm guessing " + number);  
  }  
}

				
			

خط به خط کد کلاس Player

  1. تعریف کلاس:
				
					class Player {
				
			

2. تعریف متغیر number  که حدس ها را توی خودش ذخیره می‌کنه.

				
					int number;
				
			

3. تعریف متد guess:

				
					void guess() {
				
			
  • این متد وظیفه تولید عدد تصادفی برای حدس زدن بازیکن را بر عهده دارد.
  • چون چیزی به خارج از متد برنمی‌گرداند، نوع بازگشتی آن void است.

4. تولید عدد تصادفی:
برای تولید عدد تصادفی از تابع Math.random() استفاده می‌کنیم. این تابع عددی اعشاری بین 0 و 1 تولید می‌کند مانند 0.22535523110193012 که با ضرب در 10 به بازه [0,10) تبدیل می‌شود مثلا 2.2535523110193012

				
					    double randomNumber = (Math.random() * 10);
				
			

خب عدد اعشار که به درد ما نمی‌خوره ما عدد صحیح می‌خواهیم.
یه راهی که به ما کمک می‌کنه تا قسمت اعشار را حذف کنیم اینکه عدد اعشار را در (int) ضرب کنیم که در مثال قبلی ما میشه 2.

				
					number = (int) randomNumber;
				
			

چاپ عدد حدس‌زده‌شده:

				
					System.out.println("I'm guessing " + number);

				
			

این خط عددی را که بازیکن حدس زده، در کنسول چاپ می‌کند.

2. ساخت کلاس GuessGame

در این بخش، می‌خواهیم کلاس اصلی بازی را بسازیم که به‌عنوان مغز بازی عمل می‌کند. این کلاس مسئولیت:

  • تولید عدد تصادفی هدف که اگر بازیکنی  بتونه حدس بزنه برنده میشه.
  • بررسی درست یا غلط بودن حدس بازیکن‌ها.

برای این منظور:

  • سه شیء از کلاس Player تعریف می‌کنیم (برای هر بازیکن یک شیء).
  • یک عدد تصادفی هدف تولید می‌کنیم که بازیکن‌ها باید آن را حدس بزنند.
  • یک حلقه بی‌نهایت (while) داریم که تا زمانی که بازیکنی عدد هدف را حدس بزند، ادامه می‌یابد.
  • نکته: چون قرار هست خود کامپیوتر حدس بزنه از حلقه استفاده می‌کنیم. تا حدسی که برای بازیکن میسازه با عدد تصادفی هدف برابر بشه.
				
					public class GuessGame {  
    Player p1 = new Player(); // ساخت بازیکن‌ها
    Player p2 = new Player();
    Player p3 = new Player();

  public void startGame() {  
    
    int guessp1 = 0;  
    int guessp2 = 0;  
    int guessp3 = 0;  

    boolean p1isRight = false;  // آیا بازیکن 1 درست حدس زده؟  
    boolean p2isRight = false;  
    boolean p3isRight = false;  

    int targetNumber = (int) (Math.random() * 10);  // عدد تصادفی هدف  
    System.out.println("I'm thinking of a number between 0 and 9...");  

    while (true) {  
      System.out.println("Number to guess is " + targetNumber);  

      p1.guess();  
      p2.guess();  
      p3.guess();  

      guessp1 = p1.number;  
      guessp2 = p2.number;  
      guessp3 = p3.number;  

      if (guessp1 == targetNumber) {  
        p1isRight = true;  
      }  
      if (guessp2 == targetNumber) {  
        p2isRight = true;  
      }  
      if (guessp3 == targetNumber) {  
        p3isRight = true;  
      }  

      if (p1isRight || p2isRight || p3isRight) {  
        System.out.println("We have a winner!");  
        System.out.println("Player one got it right? " + p1isRight);  
        System.out.println("Player two got it right? " + p2isRight);  
        System.out.println("Player three got it right? " + p3isRight);  
        System.out.println("Game is over.");  
        break;  
      } else {  
        System.out.println("Players will have to try again.");  
      }  
    }  
  }  
}

				
			

1. تعریف بازیکن‌ها:

				
					    Player p1 = new Player(); // ساخت بازیکن‌ها
    Player p2 = new Player();
    Player p3 = new Player();

				
			

سه بازیکن (object) از کلاس Player ساخته می‌شود.

متد startGame:

این متد شامل منطق اصلی بازی است. قدم به قدم آن را بررسی می‌کنیم:

2. تعریف متغیرهای حدس بازیکن‌ها:

				
					int guessp1;  
int guessp2;  
int guessp3;  

				
			

این متغیرها عددی که هر بازیکن حدس می‌زند را نگه می‌دارند.

3. تعریف متغیرهای بررسی برنده شدن:

				
					    boolean p1isRight = false;  // آیا بازیکن 1 درست حدس زده؟  
    boolean p2isRight = false;  
    boolean p3isRight = false;
				
			

این متغیرها مشخص می‌کنند که آیا بازیکن حدس صحیح زده است یا نه.

4. تولید عدد تصادفی هدف:

				
					int targetNumber = (int) (Math.random() * 10);
				
			

منطق بازی داخل حلقه:

1. چاپ عدد هدف:

				
					System.out.println("Number to guess is " + targetNumber);

				
			

برای اطلاع‌رسانی، عدد هدف در هر دور نمایش داده می‌شود.

2. فراخوانی متد guess برای هر بازیکن:

				
					p1.guess();  
p2.guess();  
p3.guess();

				
			

این متد برای هر بازیکن عدد تصادفی تولید می‌کند.

3. گرفتن عدد حدس‌زده‌شده:

				
					guessp1 = p1.number;  
guessp2 = p2.number;  
guessp3 = p3.number;
				
			

اعداد حدس زده‌شده توسط بازیکن‌ها ذخیره می‌شوند.

4. بررسی حدس صحیح:

				
					if (guessp1 == targetNumber) { p1isRight = true; }
if (guessp2 == targetNumber) { p2isRight = true; }
if (guessp3 == targetNumber) { p3isRight = true; }

				
			

در این بخش بررسی می‌شود که آیا عدد حدس زده‌شده با عدد هدف برابر است یا نه.

5. اعلام نتیجه بازی:

				
					if (p1isRight || p2isRight || p3isRight) {
    System.out.println("We have a winner!");
    ...
    break;
} else {
    System.out.println("Players will have to try again.");
}

				
			

اگر هر بازیکنی حدس درست بزند، بازی پایان می‌یابد؛ در غیر این صورت، بازیکن‌ها دوباره حدس می‌زنند.

3. ساخت کلاس GuessGame

کلاس GameLauncher به نوعی مرکز فرماندهی بازیه.

  • با new GuessGame()، یک شیء از کلاس بازی می‌سازیم. این شیء تمام بازیکن‌ها و منطق بازی رو مدیریت می‌کنه.

  • با صدا زدن متد startGame، بازی راه‌اندازی می‌شه.

				
					public class GameLauncher {  
  public static void main(String[] args) {  
    GuessGame game = new GuessGame();  
    game.startGame();  
  }  
}