Java дээр хад, цаас, хайч тоглоом хэрхэн хийх вэ (зурагтай)

Агуулгын хүснэгт:

Java дээр хад, цаас, хайч тоглоом хэрхэн хийх вэ (зурагтай)
Java дээр хад, цаас, хайч тоглоом хэрхэн хийх вэ (зурагтай)

Видео: Java дээр хад, цаас, хайч тоглоом хэрхэн хийх вэ (зурагтай)

Видео: Java дээр хад, цаас, хайч тоглоом хэрхэн хийх вэ (зурагтай)
Видео: Штукатурка стен - самое полное видео! Переделка хрущевки от А до Я. #5 2024, Дөрөвдүгээр сар
Anonim

Рок, цаас, хайч бол хоёр хүний тоглодог гар тоглоом юм. Хоёр хүн хоёулаа "чулуу, цаас, хайч" гэж хэлээд гараа сунгасан гурван объектын нэгийг (чулуу, цаас, хайч) нэгэн зэрэг бүрдүүлэх болно. Ялагчийг гар хийцийн тусламжтайгаар тодорхойлно. Хайч цаас цохиж, цаас чулуу цохино, рок хайч цохино. Хэрэв хоёр тоглогч ижил гараар тоглодог бол тэнцсэнд тооцогдоно. Бид нэг тоглогч нь хэрэглэгч, нөгөө тоглогч нь компьютер болох Rock, Paper, Scissors -ийг дуурайхын тулд Java дээр энгийн тоглоом бичих болно.

Алхам

1585279 1 1
1585279 1 1

Алхам 1. Үндсэн анги үүсгээд түүнийгээ дуудна уу

Хайч чулуу давуу

.

Энэ бол бидний тоглоом бичих анги байх болно. Гэх мэт өөр нэр өгөхөөр сонгож болно

Тоглоом

эсвэл

Үндсэн

. Бүтээгч болон үндсэн аргын талаархи мэдэгдлийг бичнэ үү.

нийтийн ангийн RockPaperScissors {public RockPaperScissors () {} public static void main (String args) {}}

1585279 2 1
1585279 2 1

Алхам 2. Гар дохио зангаа (чулуу, цаас, хайч) -д зориулж тоологдох тоо үүсгээрэй

Бид чулуулаг, цаас, хайч зэргийг дүрслэхдээ мөрүүдийг ашиглаж болох боловч тоолох нь тогтмолуудаа урьдчилан тодорхойлох боломжийг олгодог бөгөөд энэ нь тооллогыг ашиглах нь илүү сайн дизайн гэсэн үг юм. Бид enum төрөл гэж нэрлэх болно

Зөөх

үнэт зүйлсийн хамт

РОК

ЦААС

ба

ХАЙЧ

хувийн дугаарыг зөөх {ROCK, PAPER, SCISSORS}

1585279 3 1
1585279 3 1

Алхам 3. Хувийн хоёр анги үүсгэнэ үү

Хэрэглэгч

ба

Компьютер

.

Эдгээр ангиуд нь манай тоглогчдыг тоглоомд төлөөлөх болно. Та эдгээр ангиудыг олон нийтэд нээлттэй болгохоор сонгож болно. The

Хэрэглэгч

class нь хэрэглэгчийг чулуу, цаас эсвэл хайчаар өдөөх анги байх тул бид бичих хэрэгтэй болно.

getMove ()

арга. The

Компьютер

анги бас байх ёстой

getMove ()

Энэ арга нь компьютерийг хөдөлгөж чадна. Бид эдгээр аргыг орлуулагчдыг оруулж, дараа нь хэрэгжүүлэх болно. The

Хэрэглэгч

class нь

Сканнер

хэрэглэгчийн оролтыг авах объект. Бид үүнийг тавих болно

Сканнер

хэрэглэгчийн хувийн талбар болгож, дараа нь үүнийг бүтээгч дээр эхлүүлнэ үү. Бид үүнийг ашиглаж байгаа болохоор

Сканнер

class, бид кодынхоо дээд талд импортын мэдэгдэл бичих хэрэгтэй. The

Компьютер

анги нь бүтээгч шаарддаггүй тул бид үүнийг бичих шаардлагагүй болно; бид үүнийг эхлүүлэх үед

Компьютер

объект, бид зүгээр л анхдагч бүтээгчийг дуудах болно. Энд бидний юу байна

Хайч чулуу давуу

анги одоо иймэрхүү харагдаж байна:

java.util. Scanner импортлох; нийтийн ангийн RockPaperScissors {private enum Move {ROCK, PAPER, SCISSORS} private class User {private Scanner inputScanner; нийтийн Хэрэглэгч () {inputScanner = шинэ сканнер (System.in); } public Move getMove () {// TODO: Энэ аргыг буцаах null хэрэгжүүлэх; }} хувийн ангийн компьютер {public Move getMove () {// TODO: Энэ аргыг буцааж өгөх null; }} public RockPaperScissors () {} public static void main (String args) {}}

1585279 4 1
1585279 4 1

Алхам 4.

getMove ()

-д зориулсан арга

Компьютер

анги.

Энэ арга нь санамсаргүй байдлаар буцаагдах болно

Зөөх

. Бид массив авах боломжтой

Зөөх

руу залгах замаар тоологдох болно

утга ()

арга:

Move.values ()

. Санамсаргүй байдлаар сонгох

Зөөх

Энэ утгын массив дахь тооллогын хувьд бид 0 болон утгуудын массивын хоорондох бүхэл тоо болох санамсаргүй индекс үүсгэх хэрэгтэй. Үүнийг хийхийн тулд бид

nextInt ()

-ийн арга

Санамсаргүй

Бидний импортлох ёстой анги

java.util

. Санамсаргүй индексийг авсны дараа бид буцааж өгч болно

Зөөх

тэр утгыг манай утгын массиваас.

public Move getMove () {Move move = Move.values (); Random random = new Random (); int index = random.nextInt (moves.length); буцах алхам [индекс]; }

1585279 5 1
1585279 5 1

Алхам 5.

getMove ()

-д зориулсан арга

Хэрэглэгч

анги.

Энэ арга нь a

Зөөх

хэрэглэгчийн оруулсан мэдээлэлтэй тохирч байна. Бид хэрэглэгчийг "рок", "цаас" эсвэл "хайч" гэж бичихийг хүлээх болно. Нэгдүгээрт, бид хэрэглэгчийг оруулахыг шаардах ёстой.

System.out.print ("Рок, цаас эсвэл хайч?")

. Дараа нь

nextLine ()

-ийн арга

Сканнер

хэрэглэгчийн оролтыг тэмдэгт мөр болгон авах объект. Хэрэглэгч зөв алхам хийсэн эсэхийг шалгах шаардлагатай байна, гэхдээ хэрэглэгч үг алдаатай бичсэн бол бид зөөлөн хандаж чадна. Тиймээс бид хэрэглэгчийн оруулсан эхний үсэг нь "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) {тохиолдол 'R': Move. ROCK буцаах; тохиолдол 'P': Move. PAPER -ийг буцаана; тохиолдолд 'S': Move. SCISSORS; }} // Хэрэглэгч зөв оролт оруулаагүй байна. Дахин санал болгоорой. getMove () буцаах; }

1585279 6
1585279 6

Алхам 6. a гэж бичнэ үү

ахин тоглох()

-д зориулсан арга

Хэрэглэгч

анги.

Хэрэглэгч тоглоомыг дахин дахин тоглох чадвартай байх ёстой. Хэрэглэгч дахин тоглохыг хүсч байгаа эсэхийг тодорхойлохын тулд бид a бичих хэрэгтэй

ахин тоглох()

Хэрэглэгч дахин тоглохоор шийдсэн эсэхээс үл хамааран тоглоомыг хэлдэг логикийг буцаах арга. Энэ аргын хувьд бид

Сканнер

Өмнө нь бид хэрэглэгчээс "Тийм" эсвэл "Үгүй" гэж авахын тулд бүтээгч дээр санаачилж байсан. Хэрэглэгч дахин тоглохыг хүсч байгаа эсэхийг тодорхойлохын тулд бид зөвхөн эхний үсэг нь "Y" эсэхийг шалгана. Бусад оролт нь хэрэглэгч дахин тоглохыг хүсэхгүй байна гэсэн үг юм.

public boolean playAgain () {System.out.print ("Та дахин тоглохыг хүсч байна уу?"); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); userInput.charAt (0) == 'Y' буцах; }

1585279 7
1585279 7

Алхам 7.

Хэрэглэгч

ба

Компьютер

дахь ангиуд хамтдаа

Хайч чулуу давуу

анги.

Одоо бид зохиол бичиж дууслаа

Хэрэглэгч

ба

Компьютер

хичээл, бид өөрсдийн жинхэнэ тоглоом дээрээ ажиллахад анхаарлаа төвлөрүүлж чадна. Хувийн талбаруудыг үүсгэх

Хэрэглэгч

ба

Компьютер

дахь ангиуд

Хайч чулуу давуу

анги. Нэвтрэхийн тулд бид эдгээр талбаруудад хандах шаардлагатай болно

getMove ()

Бид тоглоом тоглож байх үеийн арга. Бүтээгч дээр

Хайч чулуу давуу

анги, эдгээр талбаруудыг эхлүүлнэ үү. Бид мөн оруулсан оноогоо хянах шаардлагатай болно

userScore

ба

компьютерийн оноо

талбарууд, бид бүтээгч дээр 0 гэж эхлүүлэх хэрэгтэй. Бид тоглолтын тоог хянаж байх ёстой бөгөөд энэ нь бас 0 гэж эхлүүлсэн талбар болно.

хувийн хэрэглэгчийн хэрэглэгч; хувийн компьютер; хувийн int userScore; хувийн int computerScore; хувийн int numberOfGames; нийтийн RockPaperScissors () {user = new User (); компьютер = шинэ компьютер (); userScore = 0; computerScore = 0; numberOfGames = 0; }

1585279 8
1585279 8

Алхам 8.

Зөөх

тохиолдол бүрт аль алхам нь хожиж байгааг бидэнд хэлэх аргыг оруулахын тулд enum.

Бид a бичих хэрэгтэй

харьцуулахMoves ()

Хэрэв хөдөлгөөн ижил бол 0, одоогийн хөдөлгөөн нөгөө хөдөлгөөнийг давж байвал 1, одоогийн хөдөлгөөн нөгөө хөдөлгөөнд хожигдвол -1 буцаана. Энэ нь тоглоомын ялагчийг тодорхойлоход хэрэгтэй болно. Энэ аргыг хэрэгжүүлэхийн тулд, хэрэв хөдөлгөөнүүд ижил байвал бид тэнцсэн бол эхлээд 0 -ийг буцаана. Дараа нь 1 эсвэл -1 -ийг буцаахын тулд шилжүүлэгчийн мэдэгдэл бичнэ үү.

private enum Move {ROCK, PAPER, хайч; /** * Энэ алхамыг оноо, ялалт, * хожигдлыг тодорхойлох өөр алхамтай харьцуулж үзнэ. * * @param otherMove *, хэрэв энэ алхам нь нөгөө алхамыг давж байвал * @буцах 1 -тэй харьцуулахын тулд шилжих, хэрэв энэ алхам * нөгөө алхамд хожигдвол -1, хэрэв эдгээр хөдөлгөөн тэнцвэл * 0 / public int comparMoves (Move otherMove) { / / Хэрэв (энэ == otherMove) 0 буцаах бол зангиа; switch (this) {case ROCK: return (otherMove == SCISSORS? 1: -1); тохиолдол PAPER: буцах (otherMove == ROCK? 1: -1); кейс хайч: буцах (otherMove == PAPER? 1: -1); } // Энд хэзээ ч хүрч болохгүй 0 -ийг буцаана; }}

1585279 9
1585279 9

Алхам 9. a үүсгэх

тоглоом эхлэх()

дахь арга

Хайч чулуу давуу

анги.

Энэ арга нь тоглоом тоглох болно. Энгийн зүйлээс эхэлье

System.out.println

аргад.

public void startGame () {System.out.println ("ROCK, PAPER, хайч!"); }

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. Хоёр алхамыг харьцуулж үзээд хэрэглэгч хожсон уу эсвэл компьютер хожсон эсэхийг тодорхойл

Ашиглах

харьцуулахMoves ()

-аас авсан арга

Зөөх

enum to хэрэглэгч ялсан эсэхийг олж мэдэх. Хэрэв хэрэглэгч ялсан бол хэрэглэгчийн оноог 1 -ээр нэмэгдүүл. Хэрэв хэрэглэгч хожигдсон бол компьютерын оноог 1 -ээр нэм. Хэрэв тэнцсэн бол онооны аль нэгийг нь бүү нэм. Дараа нь тоглосон тоглоомын тоог нэгээр нэмэгдүүлэх.

int comparMoves = userMove.compareMoves (computerMove); switch (comparMoves) {case 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 ()

Энэ нь тоглоомын статистикийг хэвлэх болно. Дараагийн алхамд бид энэ аргыг бичих болно.

if (user.playAgain ()) {System.out.println (); тоглоом эхлэх(); } өөр {printGameStats (); }

1585279 13
1585279 13

Алхам 13. Үүнийг бичнэ үү

printGameStats ()

арга.

Энэ арга нь тоглоомын статистикийг харуулах болно: хожлын тоо, хожигдлын тоо, тэнцсэн тоо, тоглосон тоглоомын тоо, хэрэглэгчийн хожсон тоглоомын хувь. Ялсан тоглолтын хувийг (# ялалт + (# тэнцсэн/2))/(# тоглосон тоглоом) -оор тооцоолно. Энэ аргыг ашигладаг

System.out.printf

форматтай текстийг хэвлэх.

private void printGameStats () {int wins = userScore; int алдагдал = computerScore; int tie = numberOfGames - userScore - computerScore; давхар хувь Вон = (ялалт + ((давхар) тэнцсэн) / 2) / тооOfGames; // Шугам System.out.print ("+"); printDashes (68); System.out.println ("+"); // Гарчиг хэвлэх System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "ЯЛАГДАХ", "АЛДАЛТ", "ХАМРАГДАХ", "ТОГЛООМОО", "ХУВЬ" Ялсан "); // Шугамын 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, хувьWon * 100); // Шугам 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. Тоглоомоо туршиж үзээрэй

Рок, цаас, хайч тоглоомыг бичихийн тулд бид бүх хүчин чармайлтаа туулсан тул одоо бүгдийг эмхэтгэж, туршиж үзэх цаг боллоо!

Хөтөлбөрийн жишээ

java.util. Random импортлох; java.util. Scanner импортлох; нийтийн ангийн RockPaperScissors {хувийн хэрэглэгчийн хэрэглэгч; хувийн компьютер; хувийн int userScore; хувийн int computerScore; хувийн int numberOfGames; private enum Move {ROCK, PAPER, хайч; /** * Энэ алхамыг оноо, ялалт, * хожигдлыг тодорхойлох өөр алхамтай харьцуулж үзнэ. * * @param otherMove * шилжих, хэрэв энэ алхам нөгөө алхамыг давж байвал * @буцах 1 -тэй харьцуулах, хэрэв энэ алхам * нөгөө алхамд хожигдвол -1, хэрэв эдгээр хөдөлгөөн тэнцвэл * 0 / public int comparMoves (Move otherMove) { / / Хэрэв (энэ == otherMove) 0 буцаах бол зангиа; switch (this) {case ROCK: return (otherMove == SCISSORS? 1: -1); тохиолдолд PAPER: буцах (otherMove == ROCK? 1: -1); кейс хайч: буцах (otherMove == PAPER? 1: -1); } // Энд хэзээ ч хүрч болохгүй 0 -ийг буцаана; }} хувийн ангийн Хэрэглэгч {хувийн сканнер inputScanner; нийтийн Хэрэглэгч () {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) {тохиолдол 'R': Move. ROCK буцаах; тохиолдол 'P': Move. PAPER -ийг буцаана; case 'S': Move. SCISSORS; }} // Хэрэглэгч зөв оролт оруулаагүй байна. Дахин санал болгоорой. getMove () буцаах; } public boolean playAgain () {System.out.print ("Та дахин тоглохыг хүсч байна уу?"); String userInput = inputScanner.nextLine (); userInput = userInput.toUpperCase (); userInput.charAt (0) == 'Y' буцах; }} хувийн ангийн компьютер {public Move getMove () {Move move = Move.values (); Random random = new Random (); int index = random.nextInt (moves.length); буцах алхам [индекс]; }} нийтийн RockPaperScissors () {user = new User (); компьютер = шинэ компьютер (); userScore = 0; computerScore = 0; numberOfGames = 0; } public void startGame () {System.out.println ("ROCK, PAPER, хайч!"); // Хөдөлгөөнийг авах Move userMove = user.getMove (); ComputerMove = computer.getMove () -г зөөх; System.out.println ("\ nТа" + userMove + "тоглосон."); System.out.println ("Компьютер тоглосон" + computerMove + ". / N"); // Хөдөлгөөнийг харьцуулж, ялагчийг тодорхойлох int comparMoves = userMove.compareMoves (computerMove); switch (comparMoves) {case 0: // 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 (); тоглоом эхлэх(); } өөр {printGameStats (); }} /*** Тоглоомын статистик мэдээллийг хэвлэнэ. Харилцан холболтыг 1/2 ялалт * хувь хүртсэн хувиар тооцдог. */ private void printGameStats () {int wins = userScore; int алдагдал = computerScore; int tie = numberOfGames - userScore - computerScore; давхар хувь Вон = (ялалт + ((давхар) тэнцсэн) / 2) / тооOfGames; // Шугам System.out.print ("+"); printDashes (68); System.out.println ("+"); // Гарчиг хэвлэх System.out.printf ("| %6s | %6s | %6s | %12s | %14s | / n", "WINS", "LOSSES", "TIES", "GAMES PLAYED", "PERCENTAGE") Ялсан "); // Шугамын 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, хувьWon * 100); // Шугам 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 тоглоом = шинэ RockPaperScissors (); game.startGame (); }}

Зөвлөмж болгож буй: