Java實現(xiàn)斗地主與猜數(shù)字游戲詳細(xì)流程
斗地主小游戲之洗牌發(fā)牌
任務(wù)描述
編寫一個斗地主發(fā)牌洗牌的程序,要求按照斗地主的規(guī)則完成洗牌發(fā)牌的過程,牌面由花色色和數(shù)字(包括J,Q,K,A字母)組成,花色有紅桃,黑桃,方塊,梅花組成。還設(shè)有大王和小王。將這54張牌的順序打亂,有三位玩家參與游戲,每人輪流一次摸一張牌,剩余的三張作為底牌,程序結(jié)束,打印出每人手中的紙牌和底牌。
運行結(jié)果
任務(wù)目標(biāo)
- 學(xué)會分析"斗地主小游戲之洗牌發(fā)牌"程序的實現(xiàn)思路。
- 能夠根據(jù)思路獨立完成"斗地主小游戲之洗牌發(fā)牌"程序的代碼編寫,編譯及運行。
- 掌握ArrayList和HashMap集合的特點以及增強for循環(huán)的使用。
實現(xiàn)思路
①要實現(xiàn)紙牌程序,首先要在程序中添加54張牌,這些牌包括紅桃,黑桃,梅花,方塊各13張,加上大王和小王。
②將花色集合和數(shù)字集合這兩個集合進(jìn)行嵌套循環(huán),將花色與數(shù)字組合,形成52張牌,并且賦予編號,將組合后的牌放入HashMap集合中,集合的key值是編號,value值是組裝完成的紙牌,還有大王和小王,由于組裝規(guī)則不一致,需要單獨使用add()方法將這兩張紙牌加入到HashMap集合中。
③創(chuàng)建一個數(shù)字集合,用這個數(shù)字集合來替代紙牌完成洗牌和發(fā)牌的操作,由于一共有54張牌,所以創(chuàng)建集合的范圍為0-53。
④可以使用Collections類的shuffle()方法完成打亂數(shù)字集合的操作,實現(xiàn)洗牌的效果。由于只有三個人,所以可以使用for循環(huán),通過將數(shù)字與3取余的方法,將代表不同紙牌的數(shù)字分配給不同的人和底牌,實現(xiàn)發(fā)牌效果。
⑤洗牌發(fā)牌完成之后,可通過Collections類的sort()方法完成排序,之后通過增強for循環(huán)HashMap集合,根據(jù)數(shù)字查找對應(yīng)的紙牌字符串,并存入新創(chuàng)建的字符串集合中,最后展示字符串集合。
實現(xiàn)代碼
package Swing; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; public class DoudiZhu { public static void main(String[]args) { //準(zhǔn)備花色 ArrayList<String>color=new ArrayList<String >(); color.add("黑桃"); color.add("紅桃"); color.add("方塊"); color.add("梅花"); //準(zhǔn)備數(shù)字,用列表將紙牌從大到小排列 ArrayList<String >number=new ArrayList<String >(); for(int i=3;i<=10;i++){ number.add(i+""); } number.add("J"); number.add("Q"); number.add("K"); number.add("A"); number.add("2"); //定義一個map集合,用來將數(shù)字與每一張紙牌進(jìn)行對應(yīng) HashMap<Integer,String>map=new HashMap<Integer,String>(); //紙牌編號 int index=0; //循環(huán)紙牌數(shù)字 for(String thisNumber:number){ //循環(huán)紙牌花色 for(String thisColor:color){ //將花色與數(shù)字組合,形成52張牌,并賦予編號 map.put(index++,thisColor+thisNumber); } } map.put(index++,"小王"); map.put(index++,"大王"); //創(chuàng)建0-53的數(shù)字集合代表54張牌 ArrayList<Integer>cards=new ArrayList<Integer>(); for(int i=0;i<=53;i++){ cards.add(i); } //洗牌,使用Collections工具類的shuffle()方法 Collections.shuffle(cards); //創(chuàng)建三個玩家和底牌 ArrayList<Integer>iPlayer=new ArrayList<Integer>(); ArrayList<Integer>iPlayer2=new ArrayList<Integer>(); ArrayList<Integer>iPlayer3=new ArrayList<Integer>(); ArrayList<Integer>iSecretCards=new ArrayList<Integer>(); //遍歷這副洗好的牌,遍歷的過程中,將牌發(fā)到三個玩家和底牌中 for(int i=0;i<cards.size();i++){ if(i>=51){ //留取三個底牌 iSecretCards.add(cards.get(i)); ? }else{ if(i%3==0){//與3取余為0的發(fā)給玩家1 iPlayer.add(cards.get(i)); }else if(i%3==1){//與3取余為1的發(fā)給玩家2 iPlayer2.add(cards.get(i)); }else {//剩余的牌發(fā)給玩家3 iPlayer3.add(cards.get(i)); } } } //對每個人手中的牌進(jìn)行排序,使用的使Collections工具類中的sort()方法 Collections.sort(iPlayer); Collections.sort(iPlayer2); Collections.sort(iPlayer3); ArrayList<String>sPlayer=new ArrayList<String>(); ArrayList<String>sPlayer2=new ArrayList<String>(); ArrayList<String>sPlayer3=new ArrayList<String>(); ArrayList<String>sSectCards=new ArrayList<String>(); //循環(huán)主鍵,從map中獲取紙牌 for (Integer key:iPlayer){ sPlayer.add(map.get(key)); } for (Integer key:iPlayer2){ sPlayer2.add(map.get(key)); } for (Integer key:iPlayer3){ sPlayer3.add(map.get(key)); } for (Integer key:iSecretCards){ sSectCards.add(map.get(key)); } //將分發(fā)的牌顯示出來 System.out.println("玩家1:"+sPlayer); System.out.println("玩家2:"+sPlayer2); System.out.println("玩家3:"+sPlayer3); System.out.println("底牌:"+sSectCards); } }
猜數(shù)字游戲
任務(wù)描述
編寫一個猜數(shù)字游戲,這個游戲就是"你出個數(shù)字,我來猜",程序后臺預(yù)先生成一個0-9的隨機數(shù),用戶鍵盤錄入一個所猜的數(shù)字,如果輸入的數(shù)字與后臺預(yù)先生成的數(shù)字相同,則表示猜對了,這時,程序會打印出"恭喜,答對了",如果不相同,則比較輸入的數(shù)字和后臺預(yù)先生成的數(shù)字的大小,如果大了,打印"sorry,你猜大了!";如果小了,會打印"sorry,你猜小了";如果一直猜錯,則游戲一直進(jìn)行下去,直到數(shù)字猜對為止。
運行結(jié)果
任務(wù)目標(biāo)
- 學(xué)會分析"猜數(shù)字游戲"程序的實現(xiàn)思路。
- 根據(jù)思路獨立完成"猜數(shù)字游戲"的源代碼編寫,編譯和運行。
- 掌握在程序中使用if選擇結(jié)構(gòu)和while循環(huán)結(jié)構(gòu)語句進(jìn)行運算操作。
實現(xiàn)思路
①要實現(xiàn)這個功能,首先程序要在后臺預(yù)先生成一個0-9的隨機數(shù),生成隨機數(shù)可以使用Random類中的nextInt(int n)方法,其具體的定義如下:
public int nextInt(int n)
②要使用鍵盤輸入所猜的數(shù)字,可以使用Scanner類,可以讓用戶從鍵盤中輸入數(shù)字。
Scanner sc=new Scanner(System.in); int i=sc.nextInt();
③輸入數(shù)字后,需要比較鍵盤輸入的數(shù)字和后臺預(yù)先生成的數(shù)字,由于猜數(shù)字并非一定一次成功,很可能是多次進(jìn)行,因此可以通過while循環(huán)使程序能夠多次從鍵盤輸入,每次輸入都進(jìn)行猜數(shù)字對錯判斷。如果猜對了,跳出循環(huán),輸出"恭喜,你答對了!",游戲結(jié)束。
④如果猜錯,這時使用if....else語句判斷,將錯誤分為猜大了和猜小了兩種結(jié)果。如果猜大了,打印"sorry,你猜大了!"繼續(xù)下一次循環(huán);如果猜小了,打印"sorry,你猜小了!"繼續(xù)下一次循環(huán)。根據(jù)結(jié)果,給出提示,接著繼續(xù)猜數(shù)字,游戲繼續(xù)。
實現(xiàn)代碼
package math; import java.util.Random; import java.util.Scanner; public class CaishuZi { public static void main(String[] args) { int randomNumber = new Random().nextInt(10); System.out.println("隨機數(shù)已經(jīng)生成"); System.out.println("請輸入你所猜的數(shù)字"); Scanner sc =new Scanner(System.in); int enterNumber =sc.nextInt(); //通過while循環(huán),進(jìn)行猜數(shù)字對錯判斷 //猜對,跳出循環(huán),游戲結(jié)束 while(enterNumber!=randomNumber){ //猜錯了,根據(jù)結(jié)果,給出提示,接著猜數(shù)字,游戲繼續(xù) if(enterNumber>randomNumber){ //猜大了給出的提示 System.out.println("sorry,你猜大了"); }else{ //猜小了,給出的提示 System.out.println("sorry,你猜小了"); } //輸入猜的數(shù)字 System.out.println("請輸入你猜的數(shù)字"); enterNumber = sc.nextInt(); } System.out.println("恭喜你,答對了!"); } }
總結(jié)
通過這兩個實例讓我們學(xué)習(xí)了如何去分析一個小的項目,如何劃分實現(xiàn)項目步驟以及如何用代碼去實現(xiàn)這個項目,并且通過演練一些比較有趣的小游戲可以增加我們對開發(fā)語言的興趣,為我們以后大的項目開發(fā)積累經(jīng)驗,提升自身競爭力。
到此這篇關(guān)于Java實現(xiàn)斗地主與猜數(shù)字游戲詳細(xì)流程的文章就介紹到這了,更多相關(guān)Java游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JAVA8 List<List<Integer>> list中再裝一個list轉(zhuǎn)成一個list操
這篇文章主要介紹了JAVA8 List<List<Integer>> list中再裝一個list轉(zhuǎn)成一個list操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08ConcurrentHashMap?存儲結(jié)構(gòu)源碼解析
這篇文章主要為大家介紹了ConcurrentHashMap?存儲結(jié)構(gòu)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10SpringBoot攔截器與文件上傳實現(xiàn)方法與源碼分析
其實spring boot攔截器的配置方式和springMVC差不多,只有一些小的改變需要注意下就ok了。本文主要給大家介紹了關(guān)于如何在Springboot實現(xiàn)登陸攔截器與文件上傳功能,需要的朋友可以參考下2022-10-10Java8的Stream()與ParallelStream()的區(qū)別說明
這篇文章主要介紹了Java8的Stream()與ParallelStream()的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07