您好,登錄后才能下訂單哦!
小編這次要給大家分享的是java如何實現簡易撲克牌游戲,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
游戲功能描述
1、創(chuàng)建一副撲克牌:
包括四種花色:黑桃,紅桃,梅花,方片
包括十三種點數:2-10,J,Q,K,A
2、創(chuàng)建兩名玩家(or多名)
玩家至少要有ID,姓名,手牌等屬性,手牌為撲克牌的集合
3、將創(chuàng)建好的撲克牌進行隨機洗牌
4、從洗牌后的撲克牌的第一張開始,發(fā)給每個玩家,按照一人一張的方式,每人發(fā)兩張(or多張)
5、比較兩名玩家手中的撲克牌,比較規(guī)則為:取兩人各自手中點數最大的牌進行比較,點數大的贏;若兩人各自的點數最大的牌相等,則再按照花色比較。
代碼
//Card.java
package card; public class Card{ private String color; private String number; public Card(String color, String number) { this.color = color; this.number = number; } public String getColor() { return color; } public String getNumber() { return number; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (!(obj instanceof Card)) return false; Card other = (Card) obj; if (color == null) { if (other.color != null) return false; } else if (!color.equals(other.color)) return false; if (number == null) { if (other.number != null) return false; } else if (!number.equals(other.number)) return false; return true; } }
//Cards.java
package card; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Cards { private List<Card> list = new ArrayList<Card>(); //創(chuàng)建一副撲克牌 public Cards(){ System.out.println("-----------------創(chuàng)建撲克牌------------------"); String[] color = {"黑桃", "紅桃", "梅花", "方片"}; String[] number = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J","Q","K", "A"}; for(int i=0;i<color.length;i++) for(int j=0;j<number.length;j++){ list.add(new Card(color[i], number[j])); } System.out.println("----------------撲克牌創(chuàng)建成功!---------------"); } //獲取一副撲克牌 public List<Card> getList() { return list; } //洗牌(打亂) public void shufCards(){ System.out.println("----------------開始洗牌------------------------"); Collections.shuffle(list); System.out.println("----------------洗牌結束------------------------"); } //展示一副撲克牌 public void showCards(){ System.out.print("當前的撲克牌為:"); System.out.print("[ "); for(int i=0;i<list.size();i++){ System.out.print(list.get(i).getColor() + list.get(i).getNumber()+ " "); } System.out.println(" ]"); } }
//Player.java
package card; import java.util.ArrayList; import java.util.List; public class Player { private int id; private String name; private List<Card> handCards = new ArrayList<Card>(); public Player(int id, String name){ this.id = id; this.name = name; } public List<Card> getHandCards() { return handCards; } public void setHandCards(Card card) { handCards.add(card); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
//CardComparator.java(自定義排序規(guī)則)
package card; import java.util.Comparator; public class CardComparator implements Comparator<Card> { @Override public int compare(Card c1, Card c2) { // 構建花色和牌值數組,通過比對,計算得到某張牌的價值(大?。? String[] color = {"方片", "梅花", "紅桃", "黑桃"}; String[] number = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J","Q","K", "A"}; //由于比較規(guī)則是先比較牌值,如果相等再比較花色(黑紅梅方),所以將牌值賦予較高的權值 int valueOfC1 = 0; int valueOfC2 = 0; for(int i=0;i<number.length;i++){ if(c1.getNumber().equals(number[i])) valueOfC1 += i*10; if(c2.getNumber().equals(number[i])) valueOfC2 += i*10; } for(int i=0;i<color.length;i++){ if(c1.getColor().equals(color[i])) valueOfC1 += i; if(c2.getColor().equals(color[i])) valueOfC2 += i; } if( valueOfC1 > valueOfC2 ) return -1; if( valueOfC1 < valueOfC2 ) return 1; return 0; } }
//PlayDemo.java
package card; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; public class PlayDemo { //創(chuàng)建玩家 //要對玩家ID的異常處理,要求用戶只能輸入整數ID,否則需要重新輸入 public Player setPlayer(){ int id=0; String name=""; Scanner console = new Scanner(System.in); boolean ready = true; do{ try{ System.out.println("輸入ID:"); id = console.nextInt(); ready = true; }catch(Exception e){ System.out.println("請輸入整數類型的ID!"); ready = false; console.nextLine(); } }while(ready==false); System.out.println("輸入姓名:"); name = console.next(); return new Player(id, name); } public static void main(String[] args) { //測試簡易撲克牌程序 PlayDemo game = new PlayDemo(); //(1)創(chuàng)建一副牌 Cards cards = new Cards(); //(2)展示新的撲克牌 cards.showCards(); //(3)洗牌 cards.shufCards(); //(4)創(chuàng)建玩家 System.out.println("--------------創(chuàng)建兩個(or多個)玩家就可以開始游戲啦!-------------"); List<Player> p = new ArrayList<Player>(); for(int i=0;i<2;i++) { System.out.println("請輸入第"+(i+1)+"位玩家的ID和姓名:"); p.add(game.setPlayer()); } for(int i=0;i<p.size();i++) { System.out.println("歡迎玩家:"+p.get(i).getName()); } //(5)撲克牌比大小游戲開始啦~ int count = 0; System.out.println("------------------開始發(fā)牌---------------------"); //設定每人分別拿兩張(or多張) for(int i=0; i<2;i++){ //玩家輪流拿牌 for(int j=0; j< p.size(); j++){ System.out.println(">玩家"+p.get(j).getName()+"拿牌"); p.get(j).setHandCards(cards.getList().get(count)); count++; } } System.out.println("------------------發(fā)牌結束!--------------------"); System.out.println("------------------開始游戲 ---------------------"); for(int i=0;i<p.size();i++){ System.out.print("玩家"+p.get(i).getName()+"的手牌為:[ "); for(int j=0;j<p.get(i).getHandCards().size();j++){ Card cur = p.get(i).getHandCards().get(j); System.out.print(cur.getColor()+cur.getNumber()+" "); } System.out.println(" ]"); } //排序得到每個玩家最大的手牌(排序規(guī)則自定義) for(int i=0;i<p.size();i++){ Collections.sort(p.get(i).getHandCards(), new CardComparator()); } List<Card> maxCard = new ArrayList<Card>(); for(int i=0;i<p.size();i++){ Card maxCur = p.get(i).getHandCards().get(0); System.out.println("玩家"+p.get(i).getName()+"最大的手牌為:"+ maxCur.getColor()+maxCur.getNumber()); maxCard.add(maxCur); } //得到最后的勝者 List<Card> temp = new ArrayList<Card>(); temp.addAll(maxCard); Collections.sort(temp, new CardComparator()); for(int i=0;i<p.size();i++){ if(maxCard.get(i).equals(temp.get(0))) System.out.println("恭喜玩家:"+p.get(i).getName()+"獲勝!"); } } }
游戲運行截圖
還有一個地方需要優(yōu)化,即不能輸入重復的ID和姓名,可以重寫Player的equals方法,將用戶的輸入與已有的輸入相比較,不滿足要求則需要重新輸入,不過就先不加了。
看完這篇關于java如何實現簡易撲克牌游戲的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。