java實現(xiàn)斗地主發(fā)牌系統(tǒng)
更新時間:2020年04月22日 14:13:02 作者:翻騰的茶葉蛋
這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)斗地主發(fā)牌系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了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)文章
Swagger異常定位紀(jì)實Swagger設(shè)計問題分析
這篇文章主要為大家介紹了Swagger異常定位紀(jì)實Swagger設(shè)計的問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-02-02
SpringBoot2.0.3打印默認(rèn)數(shù)據(jù)源為 HikariDataSource (null)問題
這篇文章主要介紹了SpringBoot2.0.3打印默認(rèn)數(shù)據(jù)源為 HikariDataSource (null)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
Java 如何將前端傳來的數(shù)字轉(zhuǎn)化為日期
這篇文章主要介紹了Java 如何將前端傳來的數(shù)字轉(zhuǎn)化為日期,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
netty服務(wù)端輔助類ServerBootstrap創(chuàng)建邏輯分析
這篇文章主要介紹了netty服務(wù)端輔助類ServerBootstrap創(chuàng)建邏輯分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
Thread線程的基礎(chǔ)知識及常見疑惑點總結(jié)
在本篇內(nèi)容里小編給大家分享的是關(guān)于Thread線程的基礎(chǔ)知識及常見疑惑點,對此有學(xué)習(xí)需求的朋友們可以學(xué)習(xí)參考下。2019-05-05

