利用java基础做一个斗地主发牌系统

 

package com.softeem.example;

import java.util.ArrayList;
import java.util.List;

/**
 * 玩家类
 * 
 */
public class Player {

	private String name;		//名字
	private boolean landowner;	//是否地主
	private List 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 getCards() {
		return cards;
	}
	public void setCards(List cards) {
		this.cards = cards;
	}

	@Override
	public String toString() {
		return name+"-是否地主:"+landowner+"->"+cards;
	}
	
	
	
}



package com.softeem.example;

/**
 * 牌类
 * 
 */
public class Card implements Comparable{

	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 list = new ArrayList<>();		//所有牌集合
	static List 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 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基础做一个斗地主发牌系统)