نحوه ساخت بازی سنگی ، کاغذی ، قیچی در جاوا (همراه با تصاویر)

فهرست مطالب:

نحوه ساخت بازی سنگی ، کاغذی ، قیچی در جاوا (همراه با تصاویر)
نحوه ساخت بازی سنگی ، کاغذی ، قیچی در جاوا (همراه با تصاویر)

تصویری: نحوه ساخت بازی سنگی ، کاغذی ، قیچی در جاوا (همراه با تصاویر)

تصویری: نحوه ساخت بازی سنگی ، کاغذی ، قیچی در جاوا (همراه با تصاویر)
تصویری: وارد کردن تصاویر به عنوان بافت در مدل SketchUp شما - نکات سریع SketchUp 2024, ممکن است
Anonim

سنگ ، کاغذ ، قیچی یک بازی دستی است که توسط دو نفر انجام می شود. هر دو نفر می گفتند "سنگ ، کاغذ ، قیچی" و سپس به طور همزمان یکی از سه شیء (سنگ ، کاغذ یا قیچی) را با دست دراز می کنند. برنده توسط تشکیلات دستی تعیین می شود. قیچی به کاغذ ، کاغذ به سنگ و سنگ به قیچی می زند. اگر هر دو بازیکن در یک فرم دست بازی کنند ، یک تساوی محسوب می شود. ما یک بازی ساده در جاوا برای شبیه سازی Rock ، Paper ، Scissors می نویسیم که در آن یک بازیکن کاربر و بازیکن دیگر کامپیوتر است.

مراحل

1585279 1 1
1585279 1 1

مرحله 1. کلاس اصلی را ایجاد کرده و آن را فراخوانی کنید

سنگ کاغذ قیچی

.

این کلاس خواهد بود که ما بازی را در آن خواهیم نوشت. شما می توانید نام دیگری را مانند آن انتخاب کنید

بازی

یا

اصلی

به در اعلان های متد برای سازنده و متد اصلی بنویسید.

کلاس عمومی RockPaperScissors {public RockPaperScissors () {} public static void main (String args) {}}

1585279 2 1
1585279 2 1

مرحله 2. یک شمارش برای حرکات دست (سنگ ، کاغذ یا قیچی) ایجاد کنید

ما می توانیم از رشته ها برای نشان دادن سنگ ، کاغذ یا قیچی استفاده کنیم ، اما یک شمارش به ما اجازه می دهد تا ثابت های خود را از پیش تعریف کنیم ، این بدان معناست که استفاده از شمارش طرح بهتری است. ما نوع enum خود را صدا می کنیم

حرکت

با ارزشها

سنگ

کاغذ

، و

قیچی

enum خصوصی حرکت {ROCK، PAPER، SCISSORS}

1585279 3 1
1585279 3 1

مرحله 3. دو کلاس خصوصی ایجاد کنید

کاربر

و

کامپیوتر

.

این کلاسها نماینده بازیکنان ما در بازی خواهد بود. شما می توانید این کلاس ها را عمومی کنید. این

کاربر

class آن کلاس خواهد بود که از کاربر می خواهد سنگ ، کاغذ یا قیچی بخواهد ، بنابراین ما باید یک

getMove ()

روش. این

کامپیوتر

کلاس نیز باید دارای یک باشد

getMove ()

روش به طوری که کامپیوتر نیز می تواند حرکت کند. ما متغیرهایی را در این روش ها قرار می دهیم و بعداً آنها را اجرا می کنیم. این

کاربر

کلاس به سازنده ای نیاز دارد که آن را تنظیم کند

اسکنر

شیء برای ورود ورودی کاربر قرار می دهیم

اسکنر

به عنوان یک فیلد خصوصی برای کاربر و سپس راه اندازی آن در سازنده. از آنجا که ما از

اسکنر

class ، ما باید یک دستور import برای آن در بالای کد خود بنویسیم. این

کامپیوتر

کلاس نیازی به سازنده ندارد ، بنابراین نیازی به نوشتن نداریم. هنگامی که ما شروع به

کامپیوتر

آبجکت ، ما فقط سازنده پیش فرض را فراخوانی می کنیم. اینجا چیزی است که ما داریم

سنگ کاغذ قیچی

کلاس به نظر می رسد در حال حاضر:

واردات java.util. Scanner؛ کلاس عمومی RockPaperScissors {private enum Move {ROCK، PAPER، SCISSORS} کلاس خصوصی کاربر {private Scanner inputScanner؛ public user () {inputScanner = اسکنر جدید (System.in) ؛ } public move getMove () {// TODO: پیاده سازی این متد return null؛ }} کلاس خصوصی کامپیوتر {public Move getMove () {// TODO: پیاده سازی این متد return null؛ }} Public RockPaperScissors () {} public static void main (String args) {}}

1585279 4 1
1585279 4 1

مرحله 4. عبارت را بنویسید

getMove ()

روش برای

کامپیوتر

کلاس

این روش تصادفی را برمی گرداند

حرکت

به ما می توانیم آرایه ای از

حرکت

شمارش با تماس با

ارزش های()

روش:

Move.values ()

به برای انتخاب تصادفی

حرکت

با شمارش در این آرایه مقادیر ، ما باید یک شاخص تصادفی ایجاد کنیم که یک عدد صحیح بین 0 و طول آرایه مقادیر ما باشد. برای انجام این کار ، می توانیم از

nextInt ()

روش از

تصادفی

کلاس که باید از آن وارد کنیم

java.util

به پس از به دست آوردن شاخص تصادفی ، می توانیم نشانگر را برگردانیم

حرکت

از آن شاخص از آرایه مقادیر ما.

عمومی Move getMove () {Move moves = Move.values ()؛ تصادفی تصادفی = جدید تصادفی ()؛ int index = random.nextInt (moves.length)؛ حرکتهای بازگشت [فهرست] ؛ }

1585279 5 1
1585279 5 1

مرحله 5. عبارت را بنویسید

getMove ()

روش برای

کاربر

کلاس

این روش a را برمی گرداند

حرکت

مربوط به آنچه کاربر وارد کرده است ما انتظار داریم که کاربر یا "سنگ" ، "کاغذ" یا "قیچی" بنویسد. ابتدا ، باید کاربر را برای ورودی درخواست کنیم:

System.out.print ("سنگ ، کاغذ یا قیچی؟")

به سپس از

nextLine ()

روش از

اسکنر

object برای دریافت ورودی کاربر به عنوان یک رشته. اکنون باید بررسی کنیم که آیا کاربر یک حرکت معتبر ارائه کرده است یا خیر ، اما اگر کاربر کلمه ای را اشتباه نوشته باشد ، می توانیم نرم باشیم. بنابراین ما فقط بررسی می کنیم که آیا حرف اول ورودی کاربر یا "R" (برای سنگ) ، "P" (برای کاغذ) ، یا "S" (برای قیچی) است ، و ما به مورد توجه نمی کنیم زیرا ما ابتدا از

toUpperCase ()

روش از

رشته

کلاس برای ایجاد رشته ورودی کاربر همه بزرگ. اگر کاربر ورودی صحیح از راه دور را وارد نکرده باشد ، مجدداً از کاربر درخواست می کنیم. سپس ، بسته به آنچه کاربر وارد کرده است ، یک حرکت مربوطه را برمی گردانیم.

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') {// کاربر یک کلید ورودی معتبر وارد کرده است (firstLetter) {case 'R': return Move. ROCK؛ case 'P': return Move. PAPER؛ case 'S': return Move. SCISSORS؛ }} // کاربر ورودی معتبری وارد نکرده است. دوباره بیاموز. بازگشت getMove ()؛ }

1585279 6
1585279 6

مرحله 6. a را بنویسید

دوباره بازی کن()

روش برای

کاربر

کلاس

کاربر باید بتواند بازی را بارها و بارها انجام دهد. برای تعیین اینکه آیا کاربر می خواهد دوباره بازی کند ، باید a بنویسیم

دوباره بازی کن()

متدی که یک بول را باز می گرداند و به بازی می گوید که آیا کاربر تصمیم گرفته است دوباره بازی کند یا خیر. در این روش از ما استفاده می کنیم

اسکنر

که قبلاً در سازنده برای دریافت "بله" یا "نه" از کاربر اقدام کرده بودیم. ما فقط بررسی می کنیم که آیا حرف اول "Y" است یا خیر تا مشخص شود آیا کاربر می خواهد دوباره بازی کند یا خیر. هرگونه ورودی دیگر به این معنی است که کاربر نمی خواهد دوباره بازی کند.

public boolean playAgain () {System.out.print ("آیا می خواهید دوباره بازی کنید؟")؛ رشته userInput = inputScanner.nextLine ()؛ userInput = userInput.toUpperCase ()؛ بازگشت userInput.charAt (0) == 'Y'؛ }

1585279 7
1585279 7

مرحله 7. اتصال

کاربر

و

کامپیوتر

کلاسها با هم در

سنگ کاغذ قیچی

کلاس

اکنون که نوشتن آن را به پایان رسانده ایم

کاربر

و

کامپیوتر

کلاس ها ، ما می توانیم روی کار روی بازی واقعی خود تمرکز کنیم. ایجاد زمینه های خصوصی برای

کاربر

و

کامپیوتر

کلاس ها در

سنگ کاغذ قیچی

کلاس برای دسترسی به این موارد ، باید به این فیلدها دسترسی پیدا کنیم

getMove ()

روش هایی که در حال بازی کردن هستیم در سازنده برای

سنگ کاغذ قیچی

کلاس ، این زمینه ها را راه اندازی کنید. ما همچنین باید نمره را در ردیابی کنیم

userScore

و

رایانه نمره

فیلدها ، که باید آنها را به صورت 0 در سازنده شروع کنیم. ما همچنین باید تعداد بازی ها را نیز پیگیری کنیم ، که همچنین میدانی به عنوان 0 خواهد بود.

کاربر خصوصی کاربر ؛ رایانه شخصی خصوصی ؛ int int userScore؛ private int computerScore؛ private int numberOfGames؛ Public RockPaperScissors () {user = new user ()؛ کامپیوتر = کامپیوتر جدید ()؛ userScore = 0 ؛ امتیاز کامپیوتر = 0 ؛ numberOfGames = 0؛ }

1585279 8
1585279 8

مرحله 8. تمدید کنید

حرکت

enum شامل روشی است که به ما می گوید کدام حرکت در هر مورد برنده است.

ما باید a بنویسیم

compareMoves ()

متدی که اگر حرکتها یکسان باشد ، 1 اگر حرکت فعلی حرکت دیگر را شکست دهد 1 و اگر حرکت فعلی به حرکت دیگر ببازد -1 باز می گرداند. این برای تعیین برنده در بازی مفید خواهد بود. برای پیاده سازی این روش ، در صورتی که حرکات یکسان باشند و بنابراین یک تساوی داریم ، ابتدا 0 را برمی گردانیم. سپس یک عبارت switch برای بازگشت 1 یا -1 بنویسید.

enum خصوصی حرکت {ROCK، PAPER، SCISSORS؛ /** * این حرکت را با حرکت دیگر با تعیین تساوی ، برد یا * باخت مقایسه می کند. * *param otherMove * برای مقایسه با *return 1 حرکت کنید اگر این حرکت بر حرکت دیگر غلبه کند ، -1 اگر این حرکت به حرکت دیگر بیفتد ، 0 اگر این حرکتها به هم متصل شوند * / public int compareMoves (Move otherMove) { / / tie if (this == otherMove) 0 را برگردانید ؛ switch (this) {case ROCK: return (otherMove == SCISSORS 1: -1)؛ case PAPER: return (otherMove == ROCK؟ 1: -1)؛ مورد SCISSORS: return (otherMove == PAPER؟ 1: -1)؛ } // هرگز نباید به اینجا برسید return 0؛ }}

1585279 9
1585279 9

مرحله 9. ایجاد a

شروع بازی()

روش در

سنگ کاغذ قیچی

کلاس

این روش اجرای بازی خواهد بود. کار را با قرار دادن یک جمله ساده شروع کنید

System.out.println

در روش

public void startGame () {System.out.println ("ROCK، PAPER، SCISSORS!")؛ }

1585279 10
1585279 10

مرحله 10. حرکتهایی را از کاربر و رایانه دریافت کنید

در

شروع بازی()

روش ، استفاده از

getMove ()

روش هایی از

کاربر

کلاس و

کامپیوتر

کلاس برای جابجایی کاربر و حرکت کامپیوتر.

انتقال userMove = user.getMove ()؛ انتقال computerMove = computer.getMove ()؛ System.out.println ("\ n" + userMove + "را بازی کردید.")؛ System.out.println ("کامپیوتر پخش شد" + computerMove + ". / n") ؛

1585279 11
1585279 11

مرحله 11. دو حرکت را مقایسه کنید و تعیین کنید که کاربر برنده شد یا کامپیوتر

استفاده کنید

compareMoves ()

روش از

حرکت

enum to تعیین اینکه آیا کاربر برنده است یا خیر. اگر کاربر برنده شد ، نمره کاربر را 1 افزایش دهید. اگر کاربر شکست خورد ، امتیاز کامپیوتر را 1 افزایش دهید. اگر تساوی وجود داشت ، هیچ یک از نمرات را افزایش ندهید. سپس تعداد بازی های انجام شده را یک نفر افزایش دهید.

int compareMoves = userMove.compareMoves (computerMove) ؛ switch (compareMoves) {case 0: // Tie System.out.println ("کراوات!") ؛ زنگ تفريح؛ مورد 1: // کاربر برنده System.out.println (userMove + "ضربه" + computerMove + ". شما برنده شدید!") ؛ userScore ++ ؛ زنگ تفريح؛ case -1: // Computer برنده System.out.println (computerMove + "beats" + userMove + ". شما باختید.")؛ computerScore ++؛ زنگ تفريح؛ } numberOfGames ++؛

1585279 12
1585279 12

مرحله 12. از کاربر بخواهید دوباره بازی کند یا خیر

اگر کاربر می خواهد دوباره بازی کند ، تماس بگیرید

شروع بازی()

از نو. در غیر اینصورت تماس بگیرید

printGameStats ()

که آمار بازی را چاپ می کند. این روش را در مرحله بعد می نویسیم.

if (user.playAgain ()) {System.out.println ()؛ شروع بازی()؛ } else {printGameStats ()؛ }

1585279 13
1585279 13

مرحله 13. عبارت را بنویسید

printGameStats ()

روش.

این روش آمار بازی را نشان می دهد: تعداد برد ، تعداد باخت ، تعداد تساوی ، تعداد بازی های انجام شده و درصد بازی های برنده توسط کاربر. درصد بازی های برنده توسط (# برد + (# تساوی/2))/(# بازی انجام شده) محاسبه می شود. این روش استفاده می کند

System.out.printf

برای چاپ متن فرمت شده

خصوصی void printGameStats () {int برنده = userScore؛ int تلفات = computerScore؛ int links = numberOfGames - userScore - computerScore؛ درصد دو برنده = (برنده + ((دو برابر) پیوندها) / 2) / numberOfGames ؛ // Line System.out.print ("+") ؛ printDashes (68) ؛ System.out.println ("+") ؛ // چاپ عناوین System.out.printf ("|٪ 6s |٪ 6s |٪ 6s |٪ 12s |٪ 14s | / n"، "WINS"، "LOSSES"، "TIES"، "GAMES PLAYED"، "PERCENTAGE برنده شد")؛ // Line System.out.print ("|")؛ printDashes (10) ؛ System.out.print ("+") ؛ printDashes (10) ؛ System.out.print ("+") ؛ printDashes (10)؛ System.out.print ("+") ؛ printDashes (16)؛ System.out.print ("+") ؛ printDashes (18) ؛ System.out.println ("|") ؛ // مقادیر چاپ System.out.printf ("|٪ 6d |٪ 6d |٪ 6d |٪ 12d |٪ 13.2f ٪٪ | / n" ، برد ، باخت ، تساوی ، numberOfGames ، درصد برنده * 100) ؛ // Line System.out.print ("+")؛ printDashes (68) ؛ System.out.println ("+") ؛ }

1585279 14
1585279 14

مرحله 14. بازی را در کلاس اصلی شروع کنید

در کلاس اصلی ، نمونه ای از

سنگ کاغذ قیچی

کلاس و تماس بگیرید

شروع بازی()

روش.

public static void main (String args) {بازی RockPaperScissors = جدید RockPaperScissors ()؛ game.startGame ()؛ }

1585279 15
1585279 15

مرحله 15. بازی خود را آزمایش کنید

اکنون که ما تمام تلاش خود را برای نگارش بازی Rock، Paper، Scissors انجام داده ایم ، وقت آن رسیده که همه چیز را کامپایل و آزمایش کنیم!

نمونه برنامه

واردات java.util. Random؛ واردات java.util. Scanner؛ کلاس عمومی RockPaperScissors {کاربر خصوصی کاربر؛ رایانه شخصی خصوصی ؛ int int userScore؛ private int computerScore؛ private int numberOfGames؛ enum خصوصی حرکت {ROCK، PAPER، SCISSORS؛ /** * این حرکت را با حرکت دیگر با تعیین تساوی ، برد یا باخت مقایسه می کند. * *param otherMove * برای مقایسه با *return 1 حرکت کنید اگر این حرکت بر حرکت دیگر غلبه کند ، -1 اگر این حرکت به حرکت دیگر بیفتد ، 0 اگر این حرکتها به هم متصل شوند * / public int compareMoves (Move otherMove) { / / tie if (this == otherMove) 0 را برگردانید ؛ switch (this) {case ROCK: return (otherMove == SCISSORS 1: -1)؛ case PAPER: return (otherMove == ROCK؟ 1: -1)؛ مورد SCISSORS: return (otherMove == PAPER؟ 1: -1)؛ } // هرگز نباید به اینجا برسید return 0؛ }} کلاس خصوصی کاربر {private Scanner inputScanner؛ public user () {inputScanner = اسکنر جدید (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') {// کاربر یک کلید ورودی معتبر وارد کرده است (firstLetter) {case 'R': return Move. ROCK؛ case 'P': return Move. PAPER؛ case 'S': return Move. SCISSORS؛ }} // کاربر ورودی معتبری وارد نکرده است. دوباره بیاموز. بازگشت getMove ()؛ } public boolean playAgain () {System.out.print ("آیا می خواهید دوباره بازی کنید؟")؛ رشته userInput = inputScanner.nextLine ()؛ userInput = userInput.toUpperCase ()؛ بازگشت userInput.charAt (0) == 'Y'؛ }} کلاس خصوصی کامپیوتر {public Move getMove () {Move moves = Move.values ()؛ تصادفی تصادفی = جدید تصادفی ()؛ int index = random.nextInt (moves.length)؛ حرکتهای بازگشت [فهرست] ؛ }} Public RockPaperScissors () {user = new user ()؛ کامپیوتر = کامپیوتر جدید ()؛ userScore = 0 ؛ امتیاز کامپیوتر = 0 ؛ numberOfGames = 0؛ } public void 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 (compareMoves) {case 0: // Tie System.out.println ("کراوات!") ؛ زنگ تفريح؛ مورد 1: // کاربر برنده System.out.println (userMove + "ضربه" + computerMove + ". شما برنده شدید!") ؛ userScore ++ ؛ زنگ تفريح؛ case -1: // Computer برنده System.out.println (computerMove + "beats" + userMove + ". شما باختید.")؛ computerScore ++؛ زنگ تفريح؛ } numberOfGames ++؛ // از کاربر بخواهید دوباره بازی کند اگر (user.playAgain ()) {System.out.println ()؛ شروع بازی()؛ } else {printGameStats ()؛ }} /*** آمار بازی را چاپ می کند. تساوی را 1/2 برد در * درصد برنده محاسبه می کند. */ private void printGameStats () {int برنده = userScore ؛ int تلفات = computerScore؛ int links = numberOfGames - userScore - computerScore؛ درصد دو برنده = (برنده + ((دو برابر) پیوندها) / 2) / numberOfGames ؛ // Line System.out.print ("+")؛ printDashes (68) ؛ System.out.println ("+") ؛ // چاپ عناوین System.out.printf ("|٪ 6s |٪ 6s |٪ 6s |٪ 12s |٪ 14s | / n"، "WINS"، "LOSSES"، "TIES"، "GAMES PLAYED"، "PERCENTAGE برنده شد")؛ // Line System.out.print ("|")؛ printDashes (10) ؛ System.out.print ("+") ؛ printDashes (10) ؛ System.out.print ("+") ؛ printDashes (10) ؛ System.out.print ("+") ؛ printDashes (16)؛ System.out.print ("+") ؛ printDashes (18) ؛ System.out.println ("|") ؛ // مقادیر چاپ System.out.printf ("|٪ 6d |٪ 6d |٪ 6d |٪ 12d |٪ 13.2f ٪٪ | / n" ، برد ، باخت ، تساوی ، numberOfGames ، درصد برنده * 100) ؛ // Line System.out.print ("+")؛ printDashes (68) ؛ System.out.println ("+") ؛ } private void printDashes (int numberOfDashes) {for (int i = 0؛ i <numberOfDashes؛ i ++) {System.out.print ("-")؛ }} public static void main (String args) {RockPaperScissors game = new RockPaperScissors ()؛ game.startGame ()؛ }}

توصیه شده: