البرمجة

لعبة تيك تاك تو في جافا

التحدي الذي تواجهه في لعبة “تيك تاك تو” التي قمت ببنائها باستخدام جافا يتمثل في تبديل التحكم بين دوال “validInputPlayerOne” و “validInputPlayerTwo” بشكل متكرر حتى يتم تحديد الفائز. في الوقت الحالي، أنت تقوم بتنفيذ الدوال بشكل تسلسلي في الدالة الرئيسية “main”، وهذا يؤدي إلى توقف البرنامج بعد تنفيذ كل دالة.

لحل هذه المشكلة وتمكين التبديل المتكرر بين دوال “validInputPlayerOne” و “validInputPlayerTwo” حتى يتم تحديد الفائز، يمكنك استخدام حلقة تكرارية مثل حلقة “while” في الدالة الرئيسية “main”. هذه الحلقة يمكن أن تستمر في تكرار استدعاء الدوال بين اللاعبين حتى يتم تحديد الفائز.

عليك تحديد شرط للخروج من الحلقة، مثلاً، عندما يتم تحديد الفائز أو عندما يتعب اللاعبون من اللعب. في كل دورة من الحلقة، يتم استدعاء دالة “validInputPlayerOne” لاعب واحد، ثم تحديث الحالة لوحة اللعب، ثم دالة “validInputPlayerTwo” للاعب الآخر، وهكذا.

الشيفرة المعدلة ستبدو تقريبًا كالتالي:

java
public static void main(String[] args) { tictactoe t = new tictactoe(); boolean gameOver = false; while (!gameOver) { t.validInputPlayerOne(); t.boardFill(); // Check for winner or tie if (t.checkWinner() || t.checkTie()) { gameOver = true; break; } t.validInputPlayerTwo(); t.boardFill(); // Check for winner or tie if (t.checkWinner() || t.checkTie()) { gameOver = true; break; } } }

وبهذا، يتمكن اللاعبون من التبديل بين الدوال بشكل متكرر حتى يتم تحديد الفائز أو يتم التعادل في اللعبة. يمكنك أيضًا إضافة دوال للتحقق من الفائز أو التعادل بناءً على حالة لوحة اللعب، ومن ثم استخدام هذه الدوال في حلقة “while” لتحديد متى يتم إنهاء اللعبة.

المزيد من المعلومات

بالطبع، دعني أكمل المقال لمساعدتك في فهم المفهوم بشكل أعمق.

لتحقيق التبديل المتكرر بين دوال “validInputPlayerOne” و “validInputPlayerTwo” بشكل أسهل وأكثر تنظيمًا، يمكنك أيضًا دمج هاتين الدالتين في دالة واحدة وتمرير معامل يحدد اللاعب الحالي. هذا سيسهل عملية التحكم والتبديل بين اللاعبين.

لنقم بإنشاء دالة جديدة تسميها، مثلاً، “takeTurn” وتأخذ معاملاً لتحديد اللاعب الحالي، حيث يمكن أن يكون قيمته 1 أو 2، تشير إلى اللاعب الأول أو الثاني على التوالي. هذه الدالة ستقوم بتنفيذ الخطوات التي كنت تقوم بها في الدوال “validInputPlayerOne” و “validInputPlayerTwo” وذلك بناءً على قيمة المعامل الممرر.

سنقوم أيضًا بتحديد شرط لنهاية اللعبة، وذلك عندما يتم تحديد الفائز أو عندما تمت ملء جميع الخانات دون فائز. سنقوم بتحقيق هذا بوضع شرط مناسب في حلقة “while” داخل الدالة الرئيسية “main”.

الآن، سنقوم بتحديث الشيفرة لتضم هذه التغييرات:

java
public class tictactoe { private static char board[][] = {{'1','2','3'}, {'4','5','6'}, {'7','8','9'}}; char p1Sym, p2Sym; public tictactoe() { p1Sym ='X'; p2Sym = 'O'; boardFill(); } void boardFill() { for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { System.out.print(board[i][j]); System.out.print(" | "); } System.out.println(); } } void takeTurn(int player) { int playerInput, correctedInput; char playerSymbol = (player == 1) ? p1Sym : p2Sym; boolean isSet = false; Scanner inputScanner = new Scanner(System.in); do { System.out.println("Player " + player + ", enter a number between 1-9: "); playerInput = inputScanner.nextInt(); if (playerInput < 1 || playerInput > 9) { System.out.println("This isn't a number between 1-9, try again: "); continue; } for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (board[i][j] == Character.forDigit(playerInput, 10)) { board[i][j] = playerSymbol; isSet = true; break; } } if (isSet) break; } if (!isSet) { System.out.println("This position is already taken, try again."); } } while (!isSet); } boolean checkWinner() { // Implement logic to check for a winner return false; } boolean checkTie() { // Implement logic to check for a tie return false; } public static void main(String[] args) { tictactoe t = new tictactoe(); boolean gameOver = false; int currentPlayer = 1; while (!gameOver) { t.takeTurn(currentPlayer); t.boardFill(); if (t.checkWinner() || t.checkTie()) { gameOver = true; // Add appropriate message for winner or tie } // Switch players currentPlayer = (currentPlayer == 1) ? 2 : 1; } } }

هذه التغييرات تجعل من السهل التبديل بين اللاعبين بشكل مستمر حتى يتم تحديد الفائز أو يتم التعادل في اللعبة. تذكر أنه يجب عليك تحديث دوال “checkWinner” و “checkTie” لتنفيذ المنطق المناسب للعثور على الفائز أو التعادل.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر