java新手抽牌_Java第三季 简易扑克游戏 新手来报道

感觉我写的和大部分别人手记写的区别就是 可以更改 玩家数 总发牌数

还能运行

正常运行

AAffA0nNPuCLAAAAAElFTkSuQmCC

类型异常和重复ID

AAffA0nNPuCLAAAAAElFTkSuQmCC

更改玩家数和发牌数

AAffA0nNPuCLAAAAAElFTkSuQmCC

下面是代码

import java.util.ArrayList;

import java.util.List;

/**

* 玩家类

*

* @author WuHongFei

*

*/

public class WanJia {

private Integer id;// 玩家ID

private String name;// 玩家姓名

// 玩家手牌

public List shouPai = new ArrayList();

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

import java.util.ArrayList;

import java.util.Collection;

import java.util.Collections;

import java.util.HashMap;

import java.util.InputMismatchException;

import java.util.List;

import java.util.Map;

import java.util.Random;

import java.util.Scanner;

public class YouXi {

/**

* 玩家数 和 发牌数 可以更改 游戏一样可以进行

*/

// 常量玩家数

private final int WANJIASHU = 3;

// 常量 总计发牌数

private final int FAPAISHU = 12;

private String[] dianShu = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" };

private String[] huaSe = { "方片", "梅花", "红桃", "黑桃" };

// 存储一个新的扑克集合

private Map newPuKe = new HashMap();

// 存储新扑克每张的序号

List xuHao = new ArrayList();

// 存储洗牌后的每张牌的序号

List newXuHao = new ArrayList();

// 玩家ID和 玩家对象 集合

private Map mapWanJia = new HashMap();

// 将完加对象单独保存在List 集合中 方便发牌是使用

private List wanJiaDuiXiang = new ArrayList();

/**

* 生成新的扑克

*

* @param args

*/

public void chuangJianPuKe() {

System.out.println("----------创建扑克----------");

int i = 0; // 从0开始给扑克编号

// for each 遍历花色数组

for (String dianshu : dianShu) {

// for each 遍历点数数组

for (String huase : huaSe) {

// 将点数字符串连接到花色字符串末尾 形成扑克牌字符

String puKePai = huase.concat(dianshu);

// 以扑克编号为键,以扑克牌字符串为 值 添加到 新扑克 集合中

newPuKe.put(i, puKePai);

// 将扑克编号添加到 序号集合

xuHao.add(i);

// 编号+1

i++;

}

}

System.out.println("---------创建扑克成功----------");

// 将新扑克集合的 值(扑克字符) 保存为一个新的集合

Collection puke = newPuKe.values();

// 打印 新扑克集合的值(扑克字符)

System.out.println("为:" + puke);

}

/**

* 洗牌

*

* @param args

*/

public void xiPai() {

System.out.println("----------开始洗牌----------");

Random random = new Random();

// 循环结束条件 序号集合元素为null是 返回true 假如非运算符 为false 结束循环

while (!(xuHao.isEmpty())) {

// 生成0到序号集合长度-1的随机整形数

int i = random.nextInt(xuHao.size());

// 取出序号集合中 i 位置的元素 添加到新序号集合中

newXuHao.add(xuHao.get(i));

// 删除 i 位置上元素 序号集合的长度 也减一

xuHao.remove(i);

}

System.out.println("----------洗牌结束----------");

}

/**

* 创建玩家

*

* @param args

*/

public void chuangJianWanJia() {

System.out.println("----------创建玩家----------");

for (int i = 0; i < WANJIASHU; i++) {

System.out.println("请输入第" + (i + 1) + "为玩家的ID和姓名");

while (true) {

try {

Scanner input = new Scanner(System.in);

System.out.println("------请输入ID:");

int id = input.nextInt();

// 查看玩家ID是否已经存在,存在通过判断提示已存在,不存在返回null

WanJia key = mapWanJia.get(id);

if (key == null) {

System.out.println("------请输入姓名:");

String name = input.next();

// 创建玩家对象,

WanJia wj = new WanJia();

wj.setId(id);

wj.setName(name);

// 将完加对象单独保存在List 集合中 方便发牌是使用

wanJiaDuiXiang.add(wj);

// 添加玩家ID和 玩家对象的键值对

mapWanJia.put(id, wj);

break;

} else {

System.out.println("****该玩家ID已经被占用!****");

continue;

}

} catch (InputMismatchException e) {

System.out.println("****请输入整数型的ID!****");

}

}

}

// 遍历 玩家对象集合 打印玩家 名称

for (WanJia wanJia : wanJiaDuiXiang) {

System.out.println("------欢迎玩家:" + wanJia.getName());

}

}

/**

* 开始发牌

*

* @param args

*/

public void faPai() {

System.out.println("----------开始发牌----------");

int n = 0;// 临时变量 循环遍历玩家对象时 使用

for (int i = 0; i < FAPAISHU; i++) {

// 将洗牌后的序号 传递到 第n+1个 玩家对象 的 手牌集合中

wanJiaDuiXiang.get(n).shouPai.add(newXuHao.get(i));

// 打印 谁拿了牌

System.out.println("------玩家:" + wanJiaDuiXiang.get(n).getName() + "-拿牌");

// 发一张牌 n 加1

n++;

// 当n增加到 与玩家数相等时 初始化为 0

if (n == WANJIASHU) {

n = 0;

}

}

System.out.println("----------发牌结束----------");

}

/**

* 开始游戏

*

* @param args

*/

public void kaiShuiYouXi() {

System.out.println("----------开始游戏----------");

for (WanJia wj : wanJiaDuiXiang) {

// 给玩家的手牌排序

Collections.sort(wj.shouPai);

// 打印玩家的最大手牌

System.out.println("玩家:" + wj.getName() + "最大手牌为:" + newPuKe.get(wj.shouPai.get(wj.shouPai.size() - 1)));

}

// 临时变量 第一位玩家ID

int wanJiaID = 0;

// 假设第一位玩家的手牌的最大牌 是所有玩家中排数最大的

Integer zuiDaWanJia = wanJiaDuiXiang.get(wanJiaID).shouPai.get(wanJiaDuiXiang.get(wanJiaID).shouPai.size() - 1);

// 循环遍历 所有玩家

for (int i = 0; i < WANJIASHU; i++) {

// 所有玩家的最大手牌和 第一位玩家的手牌去比较 如果比第一位大 替换第一位玩家 这位玩家在和剩下的玩家比较

if (zuiDaWanJia < wanJiaDuiXiang.get(i).shouPai.get(wanJiaDuiXiang.get(i).shouPai.size() - 1)) {

zuiDaWanJia = wanJiaDuiXiang.get(i).shouPai.get(wanJiaDuiXiang.get(i).shouPai.size() - 1);

// 初始假设最大玩家ID

wanJiaID = i;

}

}

// 打印哪位玩家获胜

System.out.println("----------玩家:" + wanJiaDuiXiang.get(wanJiaID).getName() + "获胜!----------");

}

/**

* 展示玩家手牌

*

* @param args

*/

public void zhanShiShouPai() {

System.out.println("------玩家的各自手牌为:");

for (WanJia wj : wanJiaDuiXiang) {

System.out.print(wj.getName() + ":");

for (Integer sp : wj.shouPai) {

System.out.print(newPuKe.get(sp) + " ");

}

System.out.println();

}

}

public static void main(String[] args) {

YouXi yx = new YouXi();

yx.chuangJianPuKe();

yx.xiPai();

yx.chuangJianWanJia();

yx.faPai();

yx.kaiShuiYouXi();

yx.zhanShiShouPai();

}

}

就是这样了 不知道还有什么问题,大家帮忙看看!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值