首頁  >  文章  >  Java  >  Java如何實現斗地主與猜數字遊戲?

Java如何實現斗地主與猜數字遊戲?

PHPz
PHPz轉載
2023-04-26 13:28:17997瀏覽

斗地主小遊戲之洗牌發牌

任務描述

編寫一個斗地主發牌洗牌的程序,要求按照斗地主的規則完成洗牌發牌的過程,牌面由花色色和數字(包括J,Q,K,A字母)組成,花色有紅桃,黑桃,方塊,梅花組成。還設有大王和小王。將這54張牌的順序打亂,有三位玩家參與遊戲,每人輪流一次摸一張牌,剩餘的三張作為底牌,程序結束,打印出每人手中的紙牌和底牌。

運行結果 

Java如何實現斗地主與猜數字遊戲? 

任務目標

  • #學會分析"斗地主小遊戲之洗牌發牌"程序的實作思路。

  • 能夠依照思路獨立完成"斗地主小遊戲之洗牌發牌"程式的程式碼編寫,編譯運行。

  • 掌握ArrayList和HashMap集合的特徵以及增強for迴圈的使用。

實現思路

①要實現紙牌程序,首先要在程序中添加54張牌,這些牌包括紅桃,黑桃,梅花,方塊各13張,加上大王和小王。

②將花色集合和數字集合這兩個集合進行嵌套循環,將花色與數字組合,形成52張牌,並且賦予編號,將組合後的牌放入HashMap集合中,集合的key值是編號,value值是組裝完成的紙牌,還有大王和小王,由於組裝規則不一致,需要單獨使用add()方法將這兩張紙牌加入HashMap集合中。

③創建一個數字集合,用這個數字集合來取代紙牌完成洗牌和發牌的操作,由於一共有54張牌,所以創建集合的範圍為0-53。

④可以使用Collections類別的shuffle()方法完成打亂數字集合的操作,實現洗牌的效果。由於只有三個人,所以可以使用for循環,透過將數字與3取餘的方法,將代表不同紙牌的數字分配給不同的人和底牌,實現發牌效果。

⑤洗牌發牌完成之後,可透過Collections類別的sort()方法完成排序,之後透過增強for循環HashMap集合,根據數字查找對應的紙牌字符串,並存入新創建的字符串集合中,最後展示字串集合。

實作程式碼

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) {
         //准备花色
         ArrayList<String>color=new ArrayList<String >();
         color.add("黑桃");
         color.add("红桃");
         color.add("方块");
         color.add("梅花");
         //准备数字,用列表将纸牌从大到小排列
         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集合,用来将数字与每一张纸牌进行对应
         HashMap<Integer,String>map=new HashMap<Integer,String>();
         //纸牌编号
         int index=0;
         //循环纸牌数字
         for(String thisNumber:number){
             //循环纸牌花色
             for(String thisColor:color){
                 //将花色与数字组合,形成52张牌,并赋予编号
                 map.put(index++,thisColor+thisNumber);
             }
         }
         map.put(index++,"小王");
         map.put(index++,"大王");
         //创建0-53的数字集合代表54张牌
         ArrayList<Integer>cards=new ArrayList<Integer>();
         for(int i=0;i<=53;i++){
             cards.add(i);
         }
         //洗牌,使用Collections工具类的shuffle()方法
         Collections.shuffle(cards);
         //创建三个玩家和底牌
         ArrayList<Integer>iPlayer=new ArrayList<Integer>();
         ArrayList<Integer>iPlayer2=new ArrayList<Integer>();
         ArrayList<Integer>iPlayer3=new ArrayList<Integer>();
         ArrayList<Integer>iSecretCards=new ArrayList<Integer>();
         //遍历这副洗好的牌,遍历的过程中,将牌发到三个玩家和底牌中
         for(int i=0;i<cards.size();i++){
             if(i>=51){
                 //留取三个底牌
                 iSecretCards.add(cards.get(i));
 
             }else{
                 if(i%3==0){//与3取余为0的发给玩家1
                     iPlayer.add(cards.get(i));
                 }else if(i%3==1){//与3取余为1的发给玩家2
                     iPlayer2.add(cards.get(i));
                 }else {//剩余的牌发给玩家3
                     iPlayer3.add(cards.get(i));
                 }
             }
         }
         //对每个人手中的牌进行排序,使用的使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>();
         //循环主键,从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));
         }
         //将分发的牌显示出来
         System.out.println("玩家1:"+sPlayer);
         System.out.println("玩家2:"+sPlayer2);
         System.out.println("玩家3:"+sPlayer3);
         System.out.println("底牌:"+sSectCards);
     }
 }

猜數字遊戲

任務描述

寫一個猜數字遊戲,這個遊戲就是"你出個數字,我猜",程式後台預先產生一個0-9的隨機數,使用者鍵盤錄入一個所猜的數字,如果輸入的數字與後台預先產生的數字相同,則表示猜對了,這時,程式會列印出"恭喜,答對了",如果不相同,則比較輸入的數字和後台預先生成的數字的大小,如果大了,打印"sorry,你猜大了!";如果小了,會打印"sorry,你猜小了";如果一直猜錯,則遊戲一直進行下去,直到數字猜對為止。

運行結果

Java如何實現斗地主與猜數字遊戲?  

任務目標

  • #學會分析"猜數字遊戲"程式的實現想法。

  • 根據思路獨立完成"猜數字遊戲"的源代碼編寫,編譯運行。

  • 掌握在程式中使用if選擇結構和while循環結構語句進行運算運算。

實作想法

①要實現這個功能,首先程式要在後台預先產生一個0-9的隨機數,產生隨機數可以使用Random類別中的nextInt(int n)方法,其具體的定義如下:

 public int nextInt(int n)

②要使用鍵盤輸入所猜的數字,可以使用Scanner類,可以讓使用者從鍵盤輸入數字。

 Scanner sc=new Scanner(System.in);
 int i=sc.nextInt();

③輸入數字後,需要比較鍵盤輸入的數字和後台預先產生的數字,由於猜數字並非一定一次成功,很可能是多次進行,因此可以透過while循環使程式能夠多次從鍵盤輸入,每次輸入都進行猜數字對錯判斷。如果猜對了,跳出循環,輸出"恭喜,你答對了!",遊戲結束。

④如果猜錯,這時使用if....else語句判斷,將錯誤分為猜大了和猜小了兩種結果。如果你猜大了,列印"sorry,你猜大了!"繼續下一次循環;如果猜小了,打印"sorry,你猜小了!"繼續下一次循環。根據結果,給予提示,接著繼續猜數字,遊戲繼續。

實作程式碼

 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("随机数已经生成");
         System.out.println("请输入你所猜的数字");
         Scanner sc =new Scanner(System.in);
         int enterNumber =sc.nextInt();
         //通过while循环,进行猜数字对错判断
         //猜对,跳出循环,游戏结束
         while(enterNumber!=randomNumber){
             //猜错了,根据结果,给出提示,接着猜数字,游戏继续
             if(enterNumber>randomNumber){
                 //猜大了给出的提示
                 System.out.println("sorry,你猜大了");
             }else{
                 //猜小了,给出的提示
                 System.out.println("sorry,你猜小了");
             }
             //输入猜的数字
             System.out.println("请输入你猜的数字");
             enterNumber = sc.nextInt();
         }
         System.out.println("恭喜你,答对了!");
     }
 }

以上是Java如何實現斗地主與猜數字遊戲?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除