كيف تصنع لعبة حجر ، ورق ، مقص في جافا (بالصور)

جدول المحتويات:

كيف تصنع لعبة حجر ، ورق ، مقص في جافا (بالصور)
كيف تصنع لعبة حجر ، ورق ، مقص في جافا (بالصور)

فيديو: كيف تصنع لعبة حجر ، ورق ، مقص في جافا (بالصور)

فيديو: كيف تصنع لعبة حجر ، ورق ، مقص في جافا (بالصور)
فيديو: تثبيت جميع بلاجنز الاسكتش اب sketchup plugins 2024, أبريل
Anonim

Rock ، Paper ، Scissors هي لعبة يدوية يلعبها شخصان. سيقول كلا الشخصين "حجر ، ورق ، مقص" ثم يشكلان في نفس الوقت واحدًا من ثلاثة أشياء (صخرة أو ورقة أو مقص) بيد ممدودة. يتم تحديد الفائز من خلال تشكيلات اليد. المقص يدق الورق ، والورق يدق الصخور ، والصخر يدق المقص. إذا لعب كلا اللاعبين نفس تشكيل اليد ، فسيتم اعتباره تعادلًا. سنكتب لعبة بسيطة في Java لمحاكاة Rock و Paper و Scissors حيث يكون أحد اللاعبين هو المستخدم واللاعب الآخر هو الكمبيوتر.

خطوات

1585279 1 1
1585279 1 1

الخطوة الأولى. قم بإنشاء الفصل الرئيسي واتصل به

قرعة

.

سيكون هذا هو الفصل الذي سنكتب فيه اللعبة. يمكنك اختيار تسميته بشيء آخر مثل

لعبة

أو

الأساسية

. اكتب تعريفات الطريقة للمنشئ والطريقة الرئيسية.

فئة عامة RockPaperScissors {public RockPaperScissors () {} public static void main (String args) {}}

1585279 2 1
1585279 2 1

الخطوة الثانية: قم بعمل تعداد لإيماءات اليد (صخرة أو ورقة أو مقص)

يمكننا استخدام سلاسل لتمثيل الصخور أو الورق أو المقص ، لكن التعداد يسمح لنا بتعريف الثوابت مسبقًا مما يعني أن استخدام التعداد هو تصميم أفضل. سوف نطلق على نوع التعداد لدينا

نقل

مع القيم

صخر

ورق

، و

مقص

نقل التعداد الخاص {ROCK ، PAPER ، SCISSORS}

1585279 3 1
1585279 3 1

الخطوة الثالثة. قم بإنشاء فصلين خاصين

مستخدم

و

الحاسوب

.

ستمثل هذه الفئات لاعبينا في اللعبة. يمكنك اختيار جعل هذه الفئات عامة. ال

مستخدم

سيكون الفصل هو الفصل الذي يطالب المستخدم إما بالحجر أو الورق أو المقص ، لذلك سنحتاج إلى كتابة

هيا تحرك()

طريقة. ال

الحاسوب

سيحتاج الفصل أيضًا إلى

هيا تحرك()

حتى يتمكن الكمبيوتر أيضًا من اتخاذ خطوة. سنضع العناصر النائبة في هذه الأساليب وننفذها لاحقًا. ال

مستخدم

سيتطلب الفصل مُنشئًا يقوم بإعداد

الماسح الضوئي

كائن لتأخذ في مدخلات المستخدم. سنضع ملف

الماسح الضوئي

كحقل خاص للمستخدم ثم بدئه في المنشئ. نظرًا لأننا نستخدم ملف

الماسح الضوئي

class ، نحتاج إلى كتابة بيان الاستيراد الخاص به في الجزء العلوي من الكود الخاص بنا. ال

الحاسوب

لا يتطلب الفصل مُنشئًا ، لذلك لا نحتاج إلى كتابة واحد ؛ عندما نبدأ

الحاسوب

الكائن ، سنقوم فقط باستدعاء المُنشئ الافتراضي. إليك ما لدينا

قرعة

الصف يبدو مثل الآن:

استيراد java.util. Scanner ؛ فئة عامة RockPaperScissors {تعداد خاص نقل {ROCK، PAPER، SCISSORS} فئة خاصة مستخدم {private Scanner inputScanner؛ مستخدم عام () {inputScanner = new Scanner (System.in) ؛ } public Move getMove () {// TODO: تنفيذ هذا الأسلوب بإرجاع فارغ؛ }} كمبيوتر فئة خاصة {public Move getMove () {// TODO: تنفيذ هذا الأسلوب بإرجاع فارغ؛ }} RockPaperScissors () {} public static void main (String args) {}}

1585279 4 1
1585279 4 1

الخطوة 4. اكتب

هيا تحرك()

طريقة ل

الحاسوب

صف دراسي.

هذه الطريقة ستعيد بشكل عشوائي

نقل

. يمكننا الحصول على مجموعة من

نقل

التعداد عن طريق استدعاء

القيم()

طريقة:

نقل القيم ()

. لاختيار عشوائي

نقل

التعداد في مصفوفة القيم هذه ، نحتاج إلى إنشاء فهرس عشوائي يكون عددًا صحيحًا بين 0 وطول مصفوفة القيم لدينا. للقيام بذلك ، يمكننا استخدام

nextInt ()

طريقة

عشوائي

الفئة التي نحتاج إلى الاستيراد منها

java.util

. بعد أن نحصل على الفهرس العشوائي ، يمكننا إرجاع

نقل

من هذا الفهرس من مجموعة قيمنا.

التحرك العام getMove () {Move move = Move.values () ؛ عشوائي عشوائي = عشوائي جديد () ؛ مؤشر int = random.nextInt (التحركات.الطول) ؛ عودة التحركات [الفهرس] ؛ }

1585279 5 1
1585279 5 1

الخطوة 5. اكتب

هيا تحرك()

طريقة ل

مستخدم

صف دراسي.

هذه الطريقة ستعيد ملف

نقل

بما يتوافق مع ما يدخله المستخدم. نتوقع أن يكتب المستخدم إما "روك" أو "ورقة" أو "مقص". أولاً ، نحتاج إلى مطالبة المستخدم بإدخال:

System.out.print ("حجر أم ورق أم مقص؟")

. ثم استخدم ملف

السطر التالي()

طريقة

الماسح الضوئي

كائن للحصول على إدخال المستخدم كسلسلة. نحتاج الآن إلى التحقق مما إذا كان المستخدم قد أرسل نقلة صحيحة ، ولكن يمكننا أن نتسامح إذا أخطأ المستخدم في كتابة كلمة ما. لذلك سنتحقق فقط مما إذا كان الحرف الأول من إدخال المستخدم إما "R" (لموسيقى الروك) أو "P" (للورق) أو "S" (للمقص) ، ولن نهتم بالحالة لأن سنستخدم أولا

إلى الحالة العليا()

طريقة

سلسلة

class لجعل سلسلة إدخال المستخدم كلها أحرف كبيرة. إذا لم يقم المستخدم بإدخال إدخال صحيح عن بعد ، فسنقوم بمطالبة المستخدم مرة أخرى. بعد ذلك ، بناءً على ما أدخله المستخدم ، سنعود إلى الخطوة المقابلة.

public Move getMove () {// مطالبة المستخدم System.out.print ("روك أم ورق أم مقص؟") ؛ // احصل على إدخال المستخدم String userInput = inputScanner.nextLine () ؛ userInput = userInput.toUpperCase () ، char firstLetter = userInput.charAt (0) ، if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// أدخل المستخدم مفتاح إدخال صالحًا (الحرف الأول) {case 'R': return Move. ROCK؛ الحالة "P": إرجاع Move. PAPER ؛ الحالة 'S': إرجاع Move. SCISSORS ؛ }} // لم يقم المستخدم بإدخال إدخال صالح. موجه مرة أخرى. إرجاع getMove () ؛ }

1585279 6
1585279 6

الخطوة 6. اكتب أ

العب مرة أخرى()

طريقة ل

مستخدم

صف دراسي.

يجب أن يكون المستخدم قادرًا على لعب اللعبة مرارًا وتكرارًا. من أجل تحديد ما إذا كان المستخدم يريد اللعب مرة أخرى ، نحتاج إلى كتابة ملف

العب مرة أخرى()

طريقة إرجاع منطقية تخبر اللعبة ما إذا كان المستخدم قد قرر اللعب مرة أخرى أم لا. في هذه الطريقة ، نستخدم ملف

الماسح الضوئي

التي بدأناها سابقًا في المُنشئ للحصول على "نعم" أو "لا" من المستخدم. سنتحقق فقط مما إذا كان الحرف الأول هو "Y" لتحديد ما إذا كان المستخدم يريد اللعب مرة أخرى. أي إدخال آخر يعني أن المستخدم لا يريد اللعب مرة أخرى.

public boolean playAgain () {System.out.print ("هل تريد اللعب مرة أخرى؟")؛ String userInput = inputScanner.nextLine () ، userInput = userInput.toUpperCase () ، إرجاع userInput.charAt (0) == 'Y' ، }

1585279 7
1585279 7

الخطوة 7. قم بتوصيل

مستخدم

و

الحاسوب

الطبقات معًا في

قرعة

صف دراسي.

الآن بعد أن انتهينا من كتابة

مستخدم

و

الحاسوب

دروس ، يمكننا التركيز على العمل على لعبتنا الفعلية. قم بإنشاء حقول خاصة لـ

مستخدم

و

الحاسوب

فصول في

قرعة

صف دراسي. سنحتاج إلى الوصول إلى هذه الحقول للوصول إلى

هيا تحرك()

عندما نلعب اللعبة. في المنشئ لـ

قرعة

الفصل ، ابدأ هذه الحقول. سنحتاج أيضًا إلى تتبع النتيجة في

userScore

و

كمبيوتر

الحقول التي نحتاج إلى بدئها كـ 0 في المنشئ. نحتاج إلى تتبع عدد الألعاب أيضًا ، والذي سيكون أيضًا حقلًا بدأ كـ 0.

مستخدم خاص ؛ كمبيوتر خاص بالكمبيوتر ؛ userScore int الخاص ؛ كمبيوتر int الخاص numberOfGames عدد صحيح ؛ RockPaperScissors () العامة {user = new User ()؛ الكمبيوتر = كمبيوتر جديد () ؛ userScore = 0 ؛ computerScore = 0 ؛ numberOfGames = 0 ؛ }

1585279 8
1585279 8

الخطوة 8. قم بتوسيع

نقل

enum لتضمين طريقة تخبرنا عن أي حركة يفوز في كل حالة.

نحن بحاجة إلى كتابة أ

مقارنة الحركات ()

الطريقة التي تُرجع 0 إذا كانت الحركات هي نفسها ، 1 إذا كانت الحركة الحالية تتفوق على الحركة الأخرى ، و -1 إذا فقدت الحركة الحالية للحركة الأخرى. سيكون هذا مفيدًا لتحديد الفائز في اللعبة. لتنفيذ هذه الطريقة ، سنعيد القيمة 0 أولاً إذا كانت الحركات متشابهة وبالتالي لدينا التعادل. ثم اكتب تعليمة switch لإرجاع 1 أو -1.

تعداد خاص نقل {ROCK، PAPER، SCISSORS؛ / ** * يقارن هذه الحركة بحركة أخرى لتحديد التعادل أو الفوز أو * الخسارة. * *param otherMove * تحرك للمقارنة بـ *return 1 إذا كانت هذه الحركة تتفوق على الحركة الأخرى ، -1 إذا خسرت هذه الحركة * الحركة الأخرى ، 0 إذا كانت هذه الحركات تعادل * / public int ComparMoves (Move otherMove) {/ / Tie if (this == otherMove) ترجع 0 ؛ التبديل (هذا) {case ROCK: return (otherMove == SCISSORS؟ 1: -1) ؛ حالة PAPER: return (otherMove == ROCK؟ 1: -1) ؛ مقص الحالة: return (otherMove == PAPER؟ 1: -1) ؛ } // يجب ألا تصل إلى هنا مطلقًا إرجاع 0 ؛ }}

1585279 9
1585279 9

الخطوة 9. قم بإنشاء ملف

بدء اللعبة()

الطريقة في

قرعة

صف دراسي.

ستكون هذه الطريقة هي طريقة لعب اللعبة. ابدأ بوضع ملف

System.out.println

في الطريقة.

startGame العامة الفارغة () {System.out.println ("ROCK، PAPER، SCISSORS!")؛ }

1585279 10
1585279 10

الخطوة 10. الحصول على تحركات من المستخدم والكمبيوتر

في ال

بدء اللعبة()

الطريقة ، استخدم

هيا تحرك()

طرق من

مستخدم

الطبقة و

الحاسوب

فصل دراسي للحصول على المستخدم وتحركات الكمبيوتر.

نقل userMove = user.getMove () ، نقل computerMove = computer.getMove () ؛ System.out.println ("\ n لقد لعبت" + userMove + ".") ؛ System.out.println ("تم تشغيل الكمبيوتر" + computerMove + ". / n")؛

1585279 11
1585279 11

الخطوة 11. قارن بين الحركتين وحدد ما إذا كان المستخدم قد فاز أو فاز الكمبيوتر

استخدم ال

مقارنة الحركات ()

طريقة من

نقل

تعداد لتحديد ما إذا كان المستخدم فاز أم لا. إذا فاز المستخدم ، قم بزيادة نقاط المستخدم بمقدار 1. إذا خسر المستخدم ، قم بزيادة نقاط الكمبيوتر بمقدار 1. إذا كان هناك تعادل ، فلا تقم بزيادة أي من الدرجات. ثم قم بزيادة عدد الألعاب التي تلعبها واحدة.

int ComparMoves = userMove.compareMoves (computerMove) ؛ switch (ComparMoves) {حالة 0: // Tie System.out.println ("Tie!") ؛ استراحة؛ الحالة 1: // فوز المستخدم System.out.println (userMove + "beats" + computerMove + ". لقد فزت!") ؛ userScore ++ ؛ استراحة؛ الحالة -1: // فوز الكمبيوتر System.out.println (computerMove + "beats" + userMove + ". لقد خسرت.") ؛ computerScore ++ ؛ استراحة؛ } numberOfGames ++ ؛

1585279 12
1585279 12

الخطوة 12. اسأل ما إذا كان المستخدم يريد اللعب مرة أخرى

إذا أراد المستخدم اللعب مرة أخرى ، اتصل

بدء اللعبة()

تكرارا. خلاف ذلك ، اتصل

printGameStats ()

والتي ستطبع إحصائيات اللعبة. سنكتب هذه الطريقة في الخطوة التالية.

إذا (user.playAgain ()) {System.out.println () ، بدء اللعبة()؛ } else {printGameStats () ؛ }

1585279 13
1585279 13

الخطوة 13. اكتب

printGameStats ()

طريقة.

ستعرض هذه الطريقة إحصائيات اللعبة: عدد الانتصارات ، عدد الخسائر ، عدد الروابط ، عدد الألعاب التي تم لعبها ، ونسبة الألعاب التي فاز بها المستخدم. يتم احتساب النسبة المئوية للمباريات التي تم الفوز بها من خلال (# فوز + (# تعادل / 2)) / (# مباراة تم لعبها). تستخدم هذه الطريقة

System.out.printf

لطباعة نص منسق.

printGameStats () باطل خاص {int wins = userScore؛ خسائر كثافة العمليات = computerScore ؛ العلاقات int = numberOfGames - userScore - computerScore ؛ مضاعفة نسبة الوون = (الفوز + ((مزدوج) العلاقات) / 2) / numberOfGames ؛ // Line System.out.print ("+") ؛ شرطات مطبوعة (68) ؛ System.out.println ("+") ؛ // طباعة العناوين System.out.printf ("|٪ 6s |٪ 6s |٪ 6s |٪ 12s |٪ 14s | / n"، "WINS"، "LOSSES"، "TIES"، "GAMES PLAYED"، "PERCENTAGE وون")؛ // Line System.out.print ("|") ؛ شرطات مطبوعة (10) ؛ System.out.print ("+") ؛ شرطات مطبوعة (10) ؛ System.out.print ("+") ؛ شرطات مطبوعة (10) ؛ System.out.print ("+") ؛ شرطات مطبوعة (16) ؛ System.out.print ("+") ؛ شرطات مطبوعة (18) ؛ System.out.println ("|") ؛ // قيم الطباعة System.out.printf ("|٪ 6d |٪ 6d |٪ 6d |٪ 12d |٪ 13.2f ٪٪ | / n" ، انتصارات ، خسائر ، روابط ، numberOfGames ، نسبة مئوية * 100) ؛ // Line System.out.print ("+") ؛ شرطات مطبوعة (68) ؛ System.out.println ("+") ؛ }

1585279 14
1585279 14

الخطوة 14. ابدأ اللعبة في الفصل الرئيسي

في الفئة الرئيسية ، قم بتهيئة مثيل لـ

قرعة

الطبقة واستدعاء

بدء اللعبة()

طريقة.

main (String args) العامة الثابتة العامة {RockPaperScissors game = new RockPaperScissors ()؛ game.startGame () ، }

1585279 15
1585279 15

الخطوة 15. اختبر لعبتك

الآن بعد أن بذلنا كل الجهود في كتابة لعبة Rock ، Paper ، Scissors ، حان الوقت لتجميع واختبار كل شيء!

برنامج عينة

استيراد java.util. Random ؛ استيراد java.util. Scanner ؛ فئة عامة RockPaperScissors {مستخدم خاص؛ كمبيوتر خاص بالكمبيوتر ؛ userScore int الخاص ؛ كمبيوتر int الخاص numberOfGames عدد صحيح ؛ تعداد خاص نقل {ROCK، PAPER، SCISSORS؛ / ** * يقارن هذه الحركة بحركة أخرى لتحديد التعادل أو الفوز أو * الخسارة. * *param otherMove * تحرك للمقارنة بـ *return 1 إذا كانت هذه الحركة تتفوق على الحركة الأخرى ، -1 إذا خسرت هذه الحركة * الحركة الأخرى ، 0 إذا كانت هذه الحركات تعادل * / public int ComparMoves (Move otherMove) {/ / Tie if (this == otherMove) ترجع 0 ؛ التبديل (هذا) {case ROCK: return (otherMove == SCISSORS؟ 1: -1) ؛ حالة PAPER: return (otherMove == ROCK؟ 1: -1) ؛ مقص الحالة: return (otherMove == PAPER؟ 1: -1) ؛ } // يجب ألا تصل إلى هنا مطلقًا إرجاع 0 ؛ }} فئة خاصة User {private Scanner inputScanner؛ مستخدم عام () {inputScanner = new Scanner (System.in) ؛ } public Move getMove () {// مطالبة المستخدم System.out.print ("روك أم ورق أم مقص؟") ؛ // احصل على إدخال المستخدم String userInput = inputScanner.nextLine () ؛ userInput = userInput.toUpperCase () ، char firstLetter = userInput.charAt (0) ، if (firstLetter == 'R' || firstLetter == 'P' || firstLetter == 'S') {// أدخل المستخدم مفتاح إدخال صالحًا (الحرف الأول) {case 'R': return Move. ROCK؛ الحالة "P": إرجاع Move. PAPER ؛ الحالة 'S': إرجاع Move. SCISSORS ؛ }} // لم يقم المستخدم بإدخال إدخال صالح. موجه مرة أخرى. إرجاع getMove () ؛ } منطقية عامة playAgain () {System.out.print ("هل تريد اللعب مرة أخرى؟")؛ String userInput = inputScanner.nextLine () ، userInput = userInput.toUpperCase () ، إرجاع userInput.charAt (0) == 'Y' ، }} كمبيوتر فئة خاصة {public Move getMove () {Move move = Move.values ()؛ عشوائي عشوائي = عشوائي جديد () ؛ مؤشر int = random.nextInt (التحركات.الطول) ؛ عودة التحركات [الفهرس] ؛ }} RockPaperScissors () العامة {user = new User ()؛ الكمبيوتر = كمبيوتر جديد () ؛ userScore = 0 ؛ computerScore = 0 ؛ numberOfGames = 0 ؛ } startGame العامة الفارغة () {System.out.println ("ROCK، PAPER، SCISSORS!")؛ // الحصول على التحركات Move userMove = user.getMove () ؛ نقل computerMove = computer.getMove () ؛ System.out.println ("\ n لقد لعبت" + userMove + ".") ؛ System.out.println ("تم تشغيل الكمبيوتر" + computerMove + ". / n")؛ // قارن التحركات وحدد الفائز int قارنMoves = userMove.compareMoves (computerMove) ؛ switch (ComparMoves) {حالة 0: // Tie System.out.println ("Tie!") ؛ استراحة؛ الحالة 1: // فوز المستخدم System.out.println (userMove + "beats" + computerMove + ". لقد فزت!") ؛ userScore ++ ؛ استراحة؛ الحالة -1: // فوز الكمبيوتر System.out.println (computerMove + "beats" + userMove + ". لقد خسرت.") ؛ computerScore ++ ؛ استراحة؛ } numberOfGames ++ ؛ // اطلب من المستخدم اللعب مرة أخرى إذا (user.playAgain ()) {System.out.println () ؛ بدء اللعبة()؛ } else {printGameStats () ؛ }} / ** * يطبع إحصائيات اللعبة. تحسب العلاقات على أنها 1/2 فوز في * النسبة المئوية للفوز. * / private void printGameStats () {int wins = userScore؛ خسائر كثافة العمليات = computerScore ؛ العلاقات int = numberOfGames - userScore - computerScore ؛ مضاعفة نسبة الوون = (الفوز + ((مزدوج) العلاقات) / 2) / numberOfGames ؛ // Line System.out.print ("+") ؛ شرطات مطبوعة (68) ؛ System.out.println ("+") ؛ // طباعة العناوين System.out.printf ("|٪ 6s |٪ 6s |٪ 6s |٪ 12s |٪ 14s | / n"، "WINS"، "LOSSES"، "TIES"، "GAMES PLAYED"، "PERCENTAGE وون")؛ // Line System.out.print ("|") ؛ شرطات مطبوعة (10) ؛ System.out.print ("+") ؛ شرطات مطبوعة (10) ؛ System.out.print ("+") ؛ شرطات مطبوعة (10) ؛ System.out.print ("+") ؛ شرطات مطبوعة (16) ؛ System.out.print ("+") ؛ شرطات مطبوعة (18) ؛ System.out.println ("|") ؛ // قيم الطباعة System.out.printf ("|٪ 6d |٪ 6d |٪ 6d |٪ 12d |٪ 13.2f ٪٪ | / n" ، انتصارات ، خسائر ، روابط ، numberOfGames ، نسبة مئوية * 100) ؛ // Line System.out.print ("+") ؛ شرطات مطبوعة (68) ؛ System.out.println ("+") ؛ } طباعة باطلة خاصة (int numberOfDashes) {لـ (int i = 0؛ i <numberOfDashes؛ i ++) {System.out.print ("-")؛ }} public static void main (String args) {RockPaperScissors game = new RockPaperScissors ()؛ game.startGame () ، }}

موصى به: