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
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) {}}
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}
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) {}}
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]; }
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 (); }
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'; }
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; }
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; }}
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!"); }
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");
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 ++;
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 (); }
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 ("+"); }
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 (); }
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 (); }}