您的位置:首页 > 编程语言 > Java开发

java实现斗地主发牌系统

2020-04-23 18:16 686 查看

本文实例为大家分享了java实现斗地主发牌系统的具体代码,供大家参考,具体内容如下

玩家类

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;//点数
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; //初始化当前发牌的位置
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();
}

/**
* 发牌
*/
public void sendCards(){
//准备玩家
initPlayer();
//随机地主(索引)
int index = new Random().nextInt(players.size());
//设置为地主
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();

}

/**
* 显示发牌结果
*/
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】发牌***********");
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();
}

}

以上就是本文的全部内容,希望对大家的学习有所帮助

您可能感兴趣的文章:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 斗地主 发牌