java實(shí)現(xiàn)斗地主發(fā)牌系統(tǒng)
本文實(shí)例為大家分享了java實(shí)現(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;//點(diǎn)數(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(); //隨機(jī)地主(索引) 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("請(qǐng)輸入正確的指令!"); 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(); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Security跳轉(zhuǎn)頁面失敗問題解決
這篇文章主要介紹了Spring Security跳轉(zhuǎn)頁面失敗問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01詳解lombok @Getter @Setter 使用注意事項(xiàng)
這篇文章主要介紹了詳解lombok @Getter @Setter 使用注意事項(xiàng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11解決springboot中mongodb不啟動(dòng)及Dao不能被掃描到的問題
這篇文章主要介紹了解決springboot中mongodb不啟動(dòng)及Dao不能被掃描到的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05Java 入門圖形用戶界面設(shè)計(jì)之復(fù)選框
圖形界面(簡(jiǎn)稱GUI)是指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。與早期計(jì)算機(jī)使用的命令行界面相比,圖形界面對(duì)于用戶來說在視覺上更易于接受,本篇精講Java語言中關(guān)于圖形用戶界面的復(fù)選框2022-02-02SpringBoot+WebSocket實(shí)現(xiàn)IM及時(shí)通訊的代碼示例
項(xiàng)目中碰到需要及時(shí)通訊的場(chǎng)景,使用springboot集成websocket,即可實(shí)現(xiàn)簡(jiǎn)單的及時(shí)通訊,本文介紹springboot如何集成websocket、IM及時(shí)通訊需要哪些模塊、開發(fā)和部署過程中遇到的問題、以及實(shí)現(xiàn)小型IM及時(shí)通訊的代碼,需要的朋友可以參考下2023-10-10Java Web項(xiàng)目中使用Socket通信多線程、長(zhǎng)連接的方法
很多時(shí)候在javaweb項(xiàng)目中我們需要用到Socket通信來實(shí)現(xiàn)功能,在web中使用Socket我們需要建立一個(gè)監(jiān)聽程序,在程序啟動(dòng)時(shí),啟動(dòng)socket監(jiān)聽。接下來通過本文給大家介紹Java Web項(xiàng)目中使用Socket通信多線程、長(zhǎng)連接的方法,感興趣的朋友一起學(xué)習(xí)2016-04-04java HashMap和HashTable的區(qū)別詳解
這篇文章主要介紹了java HashMap和HashTable的區(qū)別詳解的相關(guān)資料,需要的朋友可以參考下2016-12-12