Jinsi ya Kutengeneza Mchezo wa Mwamba, Karatasi, Mkasi katika Java (na Picha)

Orodha ya maudhui:

Jinsi ya Kutengeneza Mchezo wa Mwamba, Karatasi, Mkasi katika Java (na Picha)
Jinsi ya Kutengeneza Mchezo wa Mwamba, Karatasi, Mkasi katika Java (na Picha)

Video: Jinsi ya Kutengeneza Mchezo wa Mwamba, Karatasi, Mkasi katika Java (na Picha)

Video: Jinsi ya Kutengeneza Mchezo wa Mwamba, Karatasi, Mkasi katika Java (na Picha)
Video: Cheki jama alivyo paa na ndege ya kichawi utashangaa 2024, Mei
Anonim

Mwamba, Karatasi, Mikasi ni mchezo wa mkono uliochezwa na watu wawili. Watu wote wawili wangeweza kusema "mwamba, karatasi, mkasi" na kisha wakati huo huo kuunda moja ya vitu vitatu (mwamba, karatasi, au mkasi) kwa mkono ulionyoshwa. Mshindi amedhamiriwa na muundo wa mikono. Mikasi hupiga karatasi, mwamba hupiga mwamba, na mkasi hupiga mkasi. Ikiwa wachezaji wote wanacheza muundo sawa wa mkono, inachukuliwa kuwa tie. Tutaandika mchezo rahisi katika Java kuiga Mwamba, Karatasi, Mkasi ambapo mchezaji mmoja ni mtumiaji na mchezaji mwingine ni kompyuta.

Hatua

1585279 1 1
1585279 1 1

Hatua ya 1. Unda darasa kuu na uiita

RockPaperSiku

.

Hili litakuwa darasa ambalo tutaandika mchezo. Unaweza kuchagua kuita jina lingine kama vile

Mchezo

au

Kuu

. Andika katika matamko ya njia ya mjenzi na njia kuu.

darasa la umma RockPaperScissors {public RockPaperScissors () {} public static void main (Kamba args) {}}

1585279 2 1
1585279 2 1

Hatua ya 2. Unda hesabu ya ishara za mikono (mwamba, karatasi, au mkasi)

Tungeweza kutumia kamba kuwakilisha mwamba, karatasi, au mkasi, lakini hesabu inaturuhusu kutofautisha msimamo wetu ambayo inamaanisha kuwa kutumia hesabu ni muundo bora. Tutaita aina yetu ya enum

Hoja

na maadili

MWAMBA

PAPA

na

Mikasi

enum ya kibinafsi Sogeza {ROCK, PAPER, SCISSORS}

1585279 3 1
1585279 3 1

Hatua ya 3. Unda darasa mbili za kibinafsi

Mtumiaji

na

Kompyuta

.

Madarasa haya yatawakilisha wachezaji wetu kwenye mchezo. Unaweza kuchagua kuyafanya madarasa haya kuwa ya umma. The

Mtumiaji

darasa litakuwa darasa ambalo linamsukuma mtumiaji kwa mwamba, karatasi, au mkasi, kwa hivyo tutahitaji kuandika

kupataMove ()

njia. The

Kompyuta

darasa pia litahitaji kuwa na

kupataMove ()

ili kompyuta iweze pia kusonga. Tutaweka washika nafasi katika njia hizi na kuzitekeleza baadaye. The

Mtumiaji

darasa litahitaji mjenzi anayeanzisha

Skana

kitu cha kuingiza pembejeo ya mtumiaji. Tutaweka

Skana

kama uwanja wa kibinafsi kwa mtumiaji na kisha uianzishe kwa mjenzi. Kwa kuwa tunatumia

Skana

darasa, tunahitaji kuandika taarifa ya kuagiza juu yake kwa nambari yetu. The

Kompyuta

darasa halihitaji mjenzi, kwa hivyo hatuitaji kuandika moja; tunapoanzisha

Kompyuta

kitu, tutakuwa tu tukimwita mjenzi chaguo-msingi. Hapa kuna nini yetu

RockPaperSiku

darasa linaonekana kama sasa:

kuagiza java.util. Scanner; darasa la umma RockPaperScissors {enum ya kibinafsi Hamisha {ROCK, PAPER, SCISSORS} darasa la kibinafsi Mtumiaji {Private Scanner inputScanner; Mtumiaji wa umma () {inputScanner = Scanner mpya (System.in); } songa umma GetMove () {// TODO: Tekeleza njia hii kurudi bure; }} darasa la faragha Kompyuta {public Move getMove () {// TODO: Tekeleza njia hii kurudi bure; }} RockPaperScissors ya umma () {} hadhi kuu ya umma (String args) {}}

1585279 4 1
1585279 4 1

Hatua ya 4. Andika

kupataMove ()

Njia ya

Kompyuta

darasa.

Njia hii itarudi bila mpangilio

Hoja

. Tunaweza kupata safu ya

Hoja

hesabu kwa kupiga simu

maadili ()

njia:

Thamani za hoja ()

. Kuchagua nasibu

Hoja

hesabu katika safu hii ya maadili, tunahitaji kutoa faharisi isiyo ya kawaida ambayo ni nambari kati ya 0 na urefu wa safu ya maadili yetu. Ili kufanya hivyo, tunaweza kutumia

ijayoInt ()

njia ya

Bila mpangilio

darasa ambalo tunahitaji kuagiza kutoka

java.util

. Baada ya kupata faharisi isiyo ya kawaida, tunaweza kurudisha

Hoja

ya faharisi hiyo kutoka kwa safu yetu ya maadili.

songa umma GetMove () {Sogeza hatua = Songa.thamani (); Bila mpangilio random = new Random (); int index = random.nextInt (moves.length); hoja za kurudi [index]; }

1585279 5 1
1585279 5 1

Hatua ya 5. Andika

kupataMove ()

Njia ya

Mtumiaji

darasa.

Njia hii itarudi

Hoja

inalingana na kile mtumiaji ana pembejeo. Tutatarajia mtumiaji aandike "mwamba", "karatasi", au "mkasi". Kwanza, tunahitaji kushawishi mtumiaji kwa pembejeo:

Printa ya Mfumo ("Mwamba, karatasi, au mkasi?")

. Kisha tumia

NextLine ()

njia ya

Skana

kitu kupata pembejeo ya mtumiaji kama kamba. Tunahitaji sasa tunahitaji kuangalia ikiwa mtumiaji amewasilisha hoja halali, lakini tunaweza kuwa wenye huruma ikiwa mtumiaji ameandika neno vibaya. Kwa hivyo tutaangalia tu ikiwa herufi ya kwanza ya uingizaji wa mtumiaji ni "R" (kwa mwamba), "P" (kwa karatasi), au "S" (kwa mkasi), na hatutajali kesi hiyo kwa sababu tutatumia kwanza

toUpperCase ()

njia ya

Kamba

darasa kutengeneza kamba ya kuingiza mtumiaji kila kitu kikuu. Ikiwa mtumiaji hajaingiza pembejeo sahihi ya mbali, tutamshawishi mtumiaji tena. Kisha, kulingana na kile mtumiaji ameweka, tutarudi hoja inayofanana.

songa umma GetMove () {// Shawishi mtumiaji System.out.print ("Mwamba, karatasi, au mkasi?"); // Pata uingizaji wa mtumiaji Kamba ya mtumiajiInput = inputScanner.nextLine (); mtumiajiInput = userInput.toUpperCase (); char kwanzaLetter = userInput.charAt (0); ikiwa (kwanzaLetter == 'R' || barua ya kwanza == 'P' || barua ya kwanza == 'S') {// Mtumiaji ameingiza swichi halali ya kuingiza (Barua ya kwanza) {kesi 'R': kurudi Hoja. ROCK; kesi 'P': kurudi Hoja. PAPER; kesi 'S': kurudi Hoja. SCISSORS; }} // Mtumiaji hajaingiza ingizo halali. Haraka tena. kurudi GetMove (); }

1585279 6
1585279 6

Hatua ya 6. Andika a

cheza tena()

Njia ya

Mtumiaji

darasa.

Mtumiaji anapaswa kucheza mchezo tena na tena. Ili kubaini ikiwa mtumiaji anataka kucheza tena, tunahitaji kuandika faili ya

cheza tena()

Njia ambayo inarudi boolean akiambia mchezo ikiwa mtumiaji ameamua kucheza tena au la. Kwa njia hii, tunatumia

Skana

kwamba hapo awali tulianzisha kwa mjenzi kupata "Ndio" au "Hapana" kutoka kwa mtumiaji. Tutaangalia tu ikiwa herufi ya kwanza ni 'Y' ili kubaini ikiwa mtumiaji anataka kucheza tena. Ingizo lingine lolote litamaanisha kuwa mtumiaji hataki kucheza tena.

play boolean ya ummaPata tena () {System.out.print ("Je! unataka kucheza tena?"); Kamba ya mtumiajiInput = inputScanner.nextLine (); mtumiajiInput = userInput.toUpperCase (); kurudi userInput.charAt (0) == 'Y'; }

1585279 7
1585279 7

Hatua ya 7. Unganisha faili ya

Mtumiaji

na

Kompyuta

darasa pamoja

RockPaperSiku

darasa.

Sasa kwa kuwa tumemaliza kuandika

Mtumiaji

na

Kompyuta

darasa, tunaweza kuzingatia kufanya kazi kwenye mchezo wetu halisi. Unda uwanja wa kibinafsi kwa

Mtumiaji

na

Kompyuta

darasa katika

RockPaperSiku

darasa. Tutahitaji kupata uwanja huu kufikia faili ya

kupataMove ()

wakati tunacheza mchezo. Katika mjenzi wa

RockPaperSiku

darasa, anzisha hizi shamba. Tutahitaji pia kufuatilia alama katika

mtumiajiScore

na

kompyutaScore

mashamba, ambayo tunahitaji kuanzisha kama 0 katika mjenzi. Tunahitaji kufuatilia idadi ya michezo pia, ambayo pia itakuwa uwanja ulioanzishwa kama 0.

Mtumiaji wa kibinafsi; kompyuta binafsi ya Kompyuta; binafsi int userScore; faragha int computerScore; nambari ya kibinafsi ya kibinafsiOfGames; umma RockPaperScissors () {user = new User (); kompyuta = Kompyuta mpya (); mtumiajiScore = 0; kompyutaScore = 0; idadiOfGames = 0; }

1585279 8
1585279 8

Hatua ya 8. Panua faili ya

Hoja

enum kujumuisha njia ambayo inatuambia ni hoja gani inashinda katika kila kesi.

Tunahitaji kuandika

linganishaMoves ()

njia ambayo inarudi 0 ikiwa hoja ni sawa, 1 ikiwa hoja ya sasa inapiga hatua nyingine, na -1 ikiwa hoja ya sasa inapoteza kwa hoja nyingine. Hii itakuwa muhimu kwa kuamua mshindi kwenye mchezo. Ili kutekeleza njia hii, kwanza tutarudi 0 ikiwa harakati ni sawa na kwa hivyo tuna tie. Kisha andika taarifa ya kubadili kwa kurudi 1 au -1.

enum ya kibinafsi Sogeza {ROCK, PAPER, SCISSORS; / ** * Inalinganisha hoja hii na hatua nyingine ya kuamua tai, kushinda, au * hasara. * * @param otherMove * hoja kulinganisha na * @rejea 1 ikiwa hoja hii itapiga hatua nyingine, -1 ikiwa hoja hii itapotea kwa * hoja nyingine, 0 ikiwa hatua hizi zinafungwa * / public int compareMoves (Sogeza otherMove) {/ / Funga ikiwa (hii == otherMove) kurudi 0; kubadili (hii) {kesi ROCK: kurudi (otherMove == SCISSORS? 1: -1); PAPER ya kesi: kurudi (nyingineMove == ROCK? 1: -1); mkasi wa kesi: kurudi (otherMove == PAPER? 1: -1); } // Haipaswi kufika hapa kurudi 0; }}

1585279 9
1585279 9

Hatua ya 9. Unda faili ya

kuanzaGame ()

njia katika

RockPaperSiku

darasa.

Njia hii itakuwa kucheza kwa mchezo. Anza kwa kuweka rahisi

Mfumo.out.println

katika njia.

startGame batili ya umma () {System.out.println ("ROCK, PAPER, SCISSORS!"); }

1585279 10
1585279 10

Hatua ya 10. Pata hatua kutoka kwa mtumiaji na kompyuta

Ndani ya

kuanzaGame ()

njia, tumia

kupataMove ()

njia kutoka kwa

Mtumiaji

darasa na

Kompyuta

darasa kupata mtumiaji na harakati za kompyuta.

Hoja userMove = user.getMove (); Songa kompyutaMove = kompyuta.getMove (); System.out.println ("\ nUlicheza" + userMove + "."); System.out.println ("Kompyuta ilicheza" + kompyutaSonga + ". / N");

1585279 11
1585279 11

Hatua ya 11. Linganisha hatua mbili na uamue ikiwa mtumiaji alishinda au kompyuta ilishinda

Tumia faili ya

linganishaMoves ()

njia kutoka kwa

Hoja

enum kuamua ikiwa mtumiaji alishinda au la. Ikiwa mtumiaji alishinda, ongezea alama ya mtumiaji kwa 1. Ikiwa mtumiaji alipoteza, ongezea alama ya kompyuta kwa 1. Ikiwa kulikuwa na tie, usiongeze alama yoyote. Kisha ongeza idadi ya michezo iliyochezwa na moja.

kulinganishaMoves = userMove.compareMoves (computerMove); badilisha (linganishaMoves) {kesi 0: // Funga Mfumo.out.println ("Funga!"); kuvunja; kesi 1: // Mtumiaji alishinda System.out.println (userMove + "beats" + computerMove + ". Umeshinda!"); mtumiajiScore ++; kuvunja; kesi -1: // Kompyuta inashinda System.out.println (computerMove + "beats" + userMove + ". Umepoteza."); kompyutaScore ++; kuvunja; } nambariOfGames ++;

1585279 12
1585279 12

Hatua ya 12. Uliza ikiwa mtumiaji anataka kucheza tena

Ikiwa mtumiaji anataka kucheza tena, piga simu

kuanzaGame ()

tena. Vinginevyo, piga simu

magazetiGameStats ()

ambayo itachapisha takwimu za mchezo. Tutaandika njia hii katika hatua inayofuata.

ikiwa (user.playAgain ()) {System.out.println (); kuanzaGame (); } mwingine {printGameStats (); }

1585279 13
1585279 13

Hatua ya 13. Andika

magazetiGameStats ()

njia.

Njia hii itaonyesha takwimu za mchezo: idadi ya mafanikio, idadi ya hasara, idadi ya mahusiano, idadi ya michezo iliyochezwa, na asilimia ya michezo iliyoshindwa na mtumiaji. Asilimia ya michezo iliyoshindwa imehesabiwa na (# wins + (# ties / 2)) / (# michezo iliyochezwa). Njia hii hutumia

Mfumo.out.printf

kuchapisha maandishi yaliyopangwa.

binafsi batili printGameStats () {int wins = userScore; hasara ndani = kompyutaScore; mahusiano kati = idadiOfGames - userScore - ComputerScore; asilimia mbiliWon = (wins + ((double) ties) / 2) / numberOfGames; // Line System.out.print ("+"); chapaDashi (68); System.out.println ("+"); // Vichwa vya kuchapisha System.out.printf ("|% 6s |% 6s |% 6s |% 12s |% 14s | / n", "WINS", "HASARA", "VIFUNGO", "MICHEZO ILICHEZWA", "ASILIMIA IMESHINWA "); // Mstari wa Mfumo.out.print ("|"); magazetiDashi (10); Rangi ya Mfumo.out ("+"); magazetiDashi (10); Rangi ya Mfumo.out ("+"); magazetiDashi (10); Rangi ya Mfumo.out ("+"); chapaDashi (16); Rangi ya Mfumo.out ("+"); chapaDashi (18); System.out.println ("|"); // Thamani za kuchapisha System.out.printf ("|% 6d |% 6d |% 6d |% 12d |% 13.2f %% | / n", mafanikio, hasara, mahusiano, idadiOfGames, asilimiaWon * 100); // Line System.out.print ("+"); chapaDashi (68); System.out.println ("+"); }

1585279 14
1585279 14

Hatua ya 14. Anza mchezo katika darasa kuu

Katika darasa kuu, anza mfano wa

RockPaperSiku

darasa na piga simu

kuanzaGame ()

njia.

static public void main (Kamba args) {RockPaperScissors mchezo = mpya RockPaperScissors (); mchezo. StartGame (); }

1585279 15
1585279 15

Hatua ya 15. Jaribu mchezo wako

Sasa kwa kuwa tumepitia juhudi zote za kuandika mchezo wa Rock, Karatasi, Mkasi, ni wakati wa kukusanya na kujaribu kila kitu nje!

Mfano wa Programu

kuagiza java.util. Random; kuagiza java.util. Scanner; darasa la umma RockPaperScissors {mtumiaji wa kibinafsi; kompyuta binafsi ya Kompyuta; binafsi int userScore; faragha int computerScore; nambari ya kibinafsi ya kibinafsiOfGames; enum ya kibinafsi Sogeza {ROCK, PAPER, SCISSORS; / ** * Inalinganisha hoja hii na hatua nyingine ya kuamua tai, kushinda, au * hasara. * * @param otherMove * hoja kulinganisha na * @rejea 1 ikiwa hoja hii itapiga hatua nyingine, -1 ikiwa hoja hii itapotea kwa * hoja nyingine, 0 ikiwa hatua hizi zinafungwa * / public int compareMoves (Sogeza otherMove) {/ / Funga ikiwa (hii == otherMove) kurudi 0; kubadili (hii) {kesi ROCK: kurudi (otherMove == SCISSORS? 1: -1); PAPER ya kesi: kurudi (nyingineMove == ROCK? 1: -1); mkasi wa kesi: kurudi (otherMove == PAPER? 1: -1); } // Haipaswi kufika hapa kurudi 0; }} Mtumiaji wa darasa la faragha {Private Scanner inputScanner; Mtumiaji wa umma () {inputScanner = Scanner mpya (System.in); } songa umma GetMove () {// Shawishi mtumiaji System.out.print ("Mwamba, karatasi, au mkasi?"); // Pata uingizaji wa mtumiaji Kamba ya mtumiajiInput = inputScanner.nextLine (); mtumiajiInput = userInput.toUpperCase (); char kwanzaLetter = userInput.charAt (0); ikiwa (kwanzaLetter == 'R' || barua ya kwanza == 'P' || barua ya kwanza == 'S') {// Mtumiaji ameingiza swichi halali ya kuingiza (Barua ya kwanza) {kesi 'R': kurudi Hoja. ROCK; kesi 'P': kurudi Hoja. PAPER; kesi 'S': kurudi Hoja. SCISSORS; }} // Mtumiaji hajaingiza ingizo halali. Haraka tena. kurudi GetMove (); } mchezo wa boolean wa ummaPata tena () {System.out.print ("Je! unataka kucheza tena?"); Kamba ya mtumiajiInput = inputScanner.nextLine (); mtumiajiInput = userInput.toUpperCase (); kurudi userInput.charAt (0) == 'Y'; }} darasa la faragha Kompyuta {public Move getMove () {Move moves = Move.values (); Bila mpangilio random = new Random (); int index = random.nextInt (moves.length); hoja za kurudi [index]; }} RockPaperScissors ya umma () {user = new User (); kompyuta = Kompyuta mpya (); mtumiajiScore = 0; kompyutaScore = 0; idadiOfGames = 0; } batili ya umma ya kuanzaGame () {System.out.println ("ROCK, PAPER, SCISSORS!"); // Pata hoja Hoja userMove = user.getMove (); Songa kompyutaMove = kompyuta.getMove (); System.out.println ("\ nUlicheza" + userMove + "."); System.out.println ("Kompyuta ilicheza" + kompyutaSonga + ". / N"); // Linganisha hatua na ujue mshindi int kulinganishaMoves = userMove.compareMoves (computerMove); badilisha (linganishaMoves) {kesi 0: // Funga Mfumo.out.println ("Funga!"); kuvunja; kesi 1: // Mtumiaji alishinda System.out.println (userMove + "beats" + computerMove + ". Umeshinda!"); mtumiajiScore ++; kuvunja; kesi -1: // Kompyuta inashinda System.out.println (computerMove + "beats" + userMove + ". Umepoteza."); kompyutaScore ++; kuvunja; } nambariOfGames ++; // Muulize mtumiaji acheze tena ikiwa (user.playAgain ()) {System.out.println (); kuanzaGame (); } mwingine {printGameStats (); }} / ** * Printa takwimu za mchezo. Hukokotoa mahusiano kama 1/2 kushinda katika * asilimia alishinda. * / binafsi batili printGameStats () {int wins = userScore; hasara ndani = kompyutaScore; mahusiano kati = idadiOfGames - userScore - ComputerScore; asilimia mbiliWon = (wins + ((double) ties) / 2) / numberOfGames; // Line System.out.print ("+"); chapaDashi (68); System.out.println ("+"); // Vichwa vya kuchapisha System.out.printf ("|% 6s |% 6s |% 6s |% 12s |% 14s | / n", "WINS", "HASARA", "VIFUNGO", "MICHEZO ILICHEZWA", "ASILIMIA IMESHINWA "); // Mstari wa Mfumo.out.print ("|"); magazetiDashi (10); Rangi ya Mfumo.out ("+"); magazetiDashi (10); Rangi ya Mfumo.out ("+"); magazetiDashi (10); Rangi ya Mfumo.out ("+"); chapaDashi (16); Rangi ya Mfumo.out ("+"); chapaDashi (18); System.out.println ("|"); // Thamani za kuchapisha System.out.printf ("|% 6d |% 6d |% 6d |% 12d |% 13.2f %% | / n", mafanikio, hasara, mahusiano, idadiOfGames, asilimiaWon * 100); // Line System.out.print ("+"); chapaDashi (68); System.out.println ("+"); } vitupu vya uchapishaji batili vya faragha (int numberOfDashes) {for (int i = 0; i <numberOfDashes; i ++) {System.out.print ("-"); }} hadhi kuu ya umma iliyo wazi (Kamba args) {RockPaperScissors mchezo = mpya RockPaperScissors (); mchezo. StartGame (); }}

Ilipendekeza: