简单的打扑克游戏

本文介绍了一款使用Java编程语言实现的斗地主游戏模拟器。该模拟器能够生成并洗混一副包含54张牌的标准扑克牌组,然后发牌给三位玩家,每位玩家17张牌,剩余3张作为底牌。模拟器还实现了随机选择地主的功能,并为每位玩家的手牌进行排序,便于查看。通过分析代码,读者可以了解到如何在Java中使用集合类进行游戏逻辑的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;

/*

  • 需求:
    模拟斗地主(3人玩,留3张底牌)

完成功能如下:

1,有牌 A,2~K(黑红梅方四种牌)以及小王,大王54张牌。

2, 集合中存好一副牌之后进行洗牌(讲牌打乱顺序)、发牌(3人每人17张,地主要3张底牌)操作。

3,将每人手中的牌进行排序

4,看牌。(也就是打印输出牌人手中的牌)

打牌人:赌神、赌圣、我 ♣ ♦ ♥ ♠

*/
public class Brand {

public static void main(String[] args) {
	// TODO 自动生成的方法存根
	BrandList brand = new BrandList();
	brand.addBrand();
	
}

}
// 牌的集合
class BrandList {
// 有牌 A,2~K(黑红梅方四种牌)以及小王,大王54张牌
String str[] = { “3”, “4”, “5”, “6”, “7”, “8”, “9”, “10”, “J”, “Q”,
“K”, “A”, “2” };
// String str1 [] = {“大王”,“小王”};
char car[] = { ‘♣’, ‘♦’, ‘♥’, ‘♠’ };
public void addBrand() {// 将牌加入到集合里面
LinkedList list = new LinkedList<>();
// 添加大王和小王
list.add(“大王”);
list.add(“小王”);

	// 添加牌 A,2~K(黑红梅方四种牌)
	int index = 0;
	for (int i = index; i < str.length; i++) {
		for (int j = index; j < car.length; j++) {
			list.add(car[j] + str[i]);
		}
	}
	// 打乱牌
	Collections.shuffle(list);

	// 定义三个打牌的人
	LinkedList<Object> link = new LinkedList<>();
	LinkedList<Object> linke = new LinkedList<>();
	LinkedList<Object> linked = new LinkedList<>();

	// 遍历集合发牌,每人发17张
	int listsize = list.size();//54张牌
	while(listsize>3){//给玩家一发牌
		if (listsize % 3 == 0) {
			link.add(list.get(0));
			list.remove(0);
			listsize--;
		} else if (listsize % 3 == 1) {//给玩家二发牌
			linke.add(list.get(0));
			list.remove(0);
			listsize--;
		} else {//给玩家三发牌
			linked.add(list.get(0));
			list.remove(0);
			listsize--;
		}
	}
	/*
	 * 随机生成一名地主
	 * 将三名玩家装进一个玩家集合,并在其中抽取一位地主
	 */
	Vector<Object> vector = new Vector<>();
	vector.add(link);
	vector.add(linke);
	vector.add(linked);
	//随机生成0、1、2三个数,0代表link为地主,1代表linke为地主,2代表linked为地主
	int luck = (int)(Math.random()*3);
	//System.out.println(luck);
	switch (luck) {
	case 0:
		System.out.println("地主是:"+"赌神");
		link.add(list.get(0));
		link.add(list.get(1));
		link.add(list.get(2));
		break;
	case 1:
		System.out.println("地主是:"+"赌圣");
		linke.add(list.get(0));
		linke.add(list.get(1));
		linke.add(list.get(2));
		break;
	default:
		System.out.println("地主是:"+"我");
		linked.add(list.get(0));
		linked.add(list.get(1));
		linked.add(list.get(2));
		break;
	}
	
	System.out.println("赌神:");
	Licensing(link);
	System.out.println("");
	System.out.println("赌圣:");
	Licensing(linke);
	System.out.println("");
	System.out.println("我:");
	Licensing(linked);
	System.out.println("");
	
	
}
//给牌排序
@SuppressWarnings({ "rawtypes", "unchecked" })
public void Licensing(LinkedList l){
	for(int i=0;i<str.length;i++){
		for(int j=0;j<car.length;j++){
			if(l.contains(car[j]+str[i])){
				l.addFirst(car[j]+str[i]);
			}
		}
	}
	if(l.contains("大王")){
		l.addFirst("大王");
	}
	if(l.contains("小王")){
		l.addFirst("小王");
	}
	List subList = l.subList(0, (l.size()/2));
	System.out.print("[");
	for (Object object : subList) {
		System.out.print(object+",");
	}
	System.out.print("]");
	
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值