随机发牌

随机发牌

成果如图上

运用的类和方法

运用的List集合
Random 随机生成

思维过程

先创造一个Card类将牌id 片面值 点数用getset方法生成
第二个创一个花色的类同上
第三个创一个玩家类玩家id 昵称 判断是够否是地主 和手中所有牌创建一个集合
测试类将点数和花色边成数组,之后创建一个牌点数加上花色将创建的牌加入集合再将大小王放进去,添加成员将id姓名赋值,将玩家添加集合,随机其中一个是地主,之后将遍历的所有牌发到三个玩家,将剩余的牌给地主。

代码


package exp;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class PokerGame {

	private static String[] names = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
	private static String[] flowers = {"❤","◇","♣","♠"}; 
	private static List<Card> allCards;
	private static int id = 0;
	/**声明存储玩家的引用*/
private List<Player> players;
	private Random r = new Random();
	
	static {
		allCards = new ArrayList<Card>();
		for (int i = 0; i < names.length; i++) {
for(int j = 0;j < flowers.length;j++) {
				id++;
				//创建一张牌
				Card c = new NormalCar(id, names[i], i + 1 , flowers[j]);
				//将创建的牌加入集合
				allCards.add(c);
				} 
		}
		allCards.add(new Card(++id, "小王",666));
		allCards.add(new Card(++id, "大王",888));
		
		System.out.println(allCards.size());
		allCards.forEach(c->System.out.println(c));
		}
	/**
	 * 添加成员
	 */
	
	public void initPlayer() {
		players = new ArrayList<Player>();
		Player p1 = new Player();
		p1.setId(1);
		p1.setNickname("艾希");
		
		Player p2 = new Player();
		p2.setId(2);
		p2.setNickname("奶妈");
		
		Player p3 = new Player();
		p3.setId(3);
		p3.setNickname("蛮王");
		//将玩家加入集合
		players.add(p1);
		players.add(p2);
		players.add(p3);
		//随机地主
		randomBoss();
		}
	
	/**
	 * 随机地主
	 * @param args
	 */
	public void randomBoss() {
		//随机地主的索引
		int i = r.nextInt(players.size());
		//设置指定索引的玩家为地主
		players.get(i).setBoss(true);
	}
	
	/**
	 * 发牌
	 */
	 public void sendCard() {
		//声明临时变量表示该谁抽取了
		int pos = 0;
		//遍历所有牌
		for(int i=0;i<allCards.size() - 3;i++) {
			
			Card card = allCards.get(i);
			
			Player player = players.get(pos);
			
			player.getCards().add(card);
			
			pos = pos == 0 ? 1 : pos == 1 ? 2 : 0;
			
		}
		//将剩余的牌给地主
		for (Player p : players) {
			if(p.isBoss()) {
				//获取最后三张牌
				List<Card> cards = allCards.subList(allCards.size()-3, allCards.size());
				//将最后三种牌给地主
				p.getCards().addAll(cards);
				}
		}
	}
	/**
	 * 显示所有牌
	 */
	public void show() {
		for (Player p : players) {
			System.out.println(p);
			}
	}
	/**
	 * 洗牌
	 */
	public void shuffleCard() {
		Collections.shuffle(allCards);
		Collections.shuffle(allCards);
		Collections.shuffle(allCards);
		}
	
	public static void main(String[] args) {
		PokerGame pg = new PokerGame();
		pg.initPlayer();
		pg.shuffleCard();
		pg.sendCard();
		pg.show();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值