软件编程
位置:首页>> 软件编程>> java编程>> java实现斗地主发牌系统

java实现斗地主发牌系统

作者:翻腾的茶叶蛋  发布时间:2023-06-11 01:48:40 

标签:java,斗地主,发牌

本文实例为大家分享了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();
}

}

来源:https://blog.csdn.net/TeaLeafEgg/article/details/81274433

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com