java實現(xiàn)斗地主發(fā)牌系統(tǒng)
更新時間:2020年04月22日 14:13:02 作者:翻騰的茶葉蛋
這篇文章主要為大家詳細介紹了java實現(xiàn)斗地主發(fā)牌系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了java實現(xiàn)斗地主發(fā)牌系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
玩家類
package com.softeem.example; import java.util.ArrayList; import java.util.List; /** * 玩家類 * */ public class Player { private String name; //名字 private boolean landowner; //是否地主 private List<Card> cards = new ArrayList<>(); //手中的所有牌 public Player() { // TODO Auto-generated constructor stub } public Player(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isLandowner() { return landowner; } public void setLandowner(boolean landowner) { this.landowner = landowner; } public List<Card> getCards() { return cards; } public void setCards(List<Card> cards) { this.cards = cards; } @Override public String toString() { return name+"-是否地主:"+landowner+"->"+cards; } }
牌類
package com.softeem.example; /** * 牌類 * */ public class Card implements Comparable<Card>{ private int num;//點數(shù) private String name;//牌面 private String flower;//花色 public Card() { // TODO Auto-generated constructor stub } public Card(int num, String name, String flower) { super(); this.num = num; this.name = name; this.flower = flower; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public String getFlower() { return flower; } public void setFlower(String flower) { this.flower = flower; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int compareTo(Card c) { return this.num - c.num; } @Override public String toString() { return name+"-"+flower+"-"+num; } }
package com.softeem.example; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; import java.util.Scanner; public class PokerGame { static List<Card> list = new ArrayList<>(); //所有牌集合 static List<Player> players = new ArrayList<>(); //玩家集合 static int position; //初始化當(dāng)前發(fā)牌的位置 static String[] flowers = {"紅桃","方片","梅花","黑桃"}; static String[] names = {"3","4","5","6","7","8","9","10","J","Q","K","A","2","小王","大王"}; /** * 初始化所有牌面和玩家 */ static{ int i = 0; //遍歷所有的牌面值(除大小王:大小王無花色) for (; i < names.length - 2; i++) { for (int j = 0; j < flowers.length; j++) { list.add(new Card(i, names[i], flowers[j])); } } list.add(new Card(i++, names[names.length-2], null)); list.add(new Card(i++, names[names.length-1], null)); } /** * 初始化玩家 */ public void initPlayer(){ players.clear(); players.add(new Player("蓋倫")); players.add(new Player("艾希")); players.add(new Player("瑪爾扎哈")); } /** * 洗牌 */ public void shuffle(){ //索引重置 position = 0; Collections.shuffle(list); Collections.shuffle(list); Collections.shuffle(list); start(); } /** * 發(fā)牌 */ public void sendCards(){ //準(zhǔn)備玩家 initPlayer(); //隨機地主(索引) int index = new Random().nextInt(players.size()); //設(shè)置為地主 players.get(index).setLandowner(true); Card now = null; while(position < list.size() - 3){ //獲取最上面的一張牌 now = list.get(position); if(position % 3 == 0){ players.get(0).getCards().add(now); }else if(position % 3 == 1){ players.get(1).getCards().add(now); }else{ players.get(2).getCards().add(now); } position++; } //獲取集合中的最后三張牌 List<Card> last = list.subList(list.size()-3, list.size()); //將最后三張牌給地主 players.get(index).getCards().addAll(last); //顯示 show(); } /** * 顯示發(fā)牌結(jié)果 */ public void show(){ //排序 Collections.sort(players.get(0).getCards()); Collections.sort(players.get(1).getCards()); Collections.sort(players.get(2).getCards()); players.stream().forEach(p->System.out.println(p)); start(); } public void start(){ System.out.println("***********歡樂斗地主***********"); System.out.println("***********【1】洗牌***********"); System.out.println("***********【2】發(fā)牌***********"); Scanner sc = new Scanner(System.in); String i = sc.nextLine(); if(!i.matches("^\\d{1}$")){ System.out.println("請輸入正確的指令!"); start(); return; } switch(i){ case "1": shuffle(); break; case "2": sendCards(); break; default: System.out.println("指令不正確"); start(); break; } } public static void main(String[] args) { new PokerGame().start(); } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Security跳轉(zhuǎn)頁面失敗問題解決
這篇文章主要介紹了Spring Security跳轉(zhuǎn)頁面失敗問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-01-01詳解lombok @Getter @Setter 使用注意事項
這篇文章主要介紹了詳解lombok @Getter @Setter 使用注意事項,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11解決springboot中mongodb不啟動及Dao不能被掃描到的問題
這篇文章主要介紹了解決springboot中mongodb不啟動及Dao不能被掃描到的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05SpringBoot+WebSocket實現(xiàn)IM及時通訊的代碼示例
項目中碰到需要及時通訊的場景,使用springboot集成websocket,即可實現(xiàn)簡單的及時通訊,本文介紹springboot如何集成websocket、IM及時通訊需要哪些模塊、開發(fā)和部署過程中遇到的問題、以及實現(xiàn)小型IM及時通訊的代碼,需要的朋友可以參考下2023-10-10Java Web項目中使用Socket通信多線程、長連接的方法
很多時候在javaweb項目中我們需要用到Socket通信來實現(xiàn)功能,在web中使用Socket我們需要建立一個監(jiān)聽程序,在程序啟動時,啟動socket監(jiān)聽。接下來通過本文給大家介紹Java Web項目中使用Socket通信多線程、長連接的方法,感興趣的朋友一起學(xué)習(xí)2016-04-04java HashMap和HashTable的區(qū)別詳解
這篇文章主要介紹了java HashMap和HashTable的區(qū)別詳解的相關(guān)資料,需要的朋友可以參考下2016-12-12