手记

Java入门第三季 简易扑克游戏

运行结果:
--------------创建扑克牌------------
------------创建扑克牌成功----------
为:[2方块, 2梅花, 2红桃, 2黑桃, 3方块, 3梅花, 3红桃, 3黑桃, 4方块, 4梅花, 4红桃, 4黑桃, 5方块, 5梅花, 5红桃, 5黑桃, 6梅花, 6方块, 6黑桃, 6红桃, 7梅花, 7方块, 7黑桃, 7红桃, 8梅花, 8方块, 8黑桃, 8红桃, 9梅花, 9方块, 9黑桃, 9红桃, 10红桃, 10黑桃, 10方块, 10梅花, J红桃, J黑桃, J方块, J梅花, Q红桃, Q黑桃, Q方块, Q梅花, k红桃, k黑桃, k方块, k梅花, A黑桃, A红桃, A梅花, A方块]

--------------开始洗牌------------
--------------洗牌结束------------
为:[6黑桃, A方块, 7梅花, J梅花, 3方块, 9方块, k梅花, 8黑桃, 2梅花, 5黑桃, 2红桃, 4方块, 9黑桃, 6红桃, 2方块, 9梅花, k方块, 5红桃, 9红桃, 7黑桃, A红桃, 10方块, Q方块, 4黑桃, 6梅花, 4梅花, 10黑桃, 5梅花, A黑桃, Q黑桃, 8梅花, 3梅花, J方块, k黑桃, 8红桃, 8方块, J黑桃, Q红桃, 7红桃, J红桃, 3黑桃, A梅花, Q梅花, 7方块, 3红桃, 6方块, 2黑桃, 10梅花, 5方块, 4红桃, 10红桃, k红桃]

--------------创建玩家------------
请输入第1位玩家的ID和姓名
请输入ID:
1
请输入姓名:
小明
请输入第2位玩家的ID和姓名
请输入ID:
2
请输入姓名:
小红
请输入第3位玩家的ID和姓名
请输入ID:
3
请输入姓名:
小潘
----欢迎玩家:小明参加游戏---
----欢迎玩家:小红参加游戏---
----欢迎玩家:小潘参加游戏---

-----------开始发牌---------
---玩家小明拿牌
---玩家小红拿牌
---玩家小潘拿牌
---玩家小明拿牌
---玩家小红拿牌
---玩家小潘拿牌
---玩家小明拿牌
---玩家小红拿牌
---玩家小潘拿牌
---玩家小明拿牌
---玩家小红拿牌
---玩家小潘拿牌
----------发牌结束----------

----------开始游戏----------
玩家 :小明最大手牌为: k梅花
玩家 :小红最大手牌为: A方块
玩家 :小潘最大手牌为: 9方块

--------玩家:小红胜利---------

------------玩家手牌---------
--玩家:小明 5黑桃 6黑桃 J梅花 k梅花
--玩家:小红 2红桃 3方块 8黑桃 A方块
--玩家:小潘 2梅花 4方块 7梅花 9方块

代码:
玩家类:WanJia
package com.hxf.puke;
import java.util.List;
import java.util.ArrayList;
/
玩家类

  • */
    public class WanJia {
    //定义玩家id和姓名
    private int id;
    private String name;
    public List<Integer> shoupai;

    public WanJia(){

    }

    public WanJia(int id, String name){
    this.id = id;
    this.name = name;
    this.shoupai = new ArrayList<Integer>();
    }

    public int getId(){
    return id;
    }
    public String getName(){
    return name;
    }

    public void setName(String name){
    this.name = name;
    }

    @Override
    public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    return result;
    }

    @Override
    public boolean equals(Object obj) {
    if (this == obj)
    return true;
    if (obj == null)
    return false;
    if (!(obj instanceof WanJia))
    return false;
    WanJia other = (WanJia) obj;
    if (name == null) {
    if (other.name != null)
    return false;
    } else if (!name.equals(other.name))
    return false;
    return true;
    }

}

游戏类:YouXi
package com.hxf.puke;

import java.util.*;

public class YouXi {
private final int WANJIARENSHU = 3;//定义玩家人数
private final int FAPAISHU = 12;//定义发牌数量

private String[] DianShu = {"2","3","4","5","6","7","8","9","10","J","Q","k","A"};//定义牌的点数
private String[] HuaShe = {"方块","梅花","红桃","黑桃"};//定义牌的花色

private Map<Integer, String> newPuKe;//定义扑克牌

private List<Integer> XuHao;//定义扑克牌序号
private List<Integer> newXuHao;//定义洗牌后扑克牌序号

private Map<Integer, WanJia> ampWanJia;//定义玩家
private List<WanJia> WanJiaDuiXiang; 

private Scanner console;
private Random  random;
public YouXi(){
    newPuKe = new HashMap<Integer, String>();
    XuHao = new ArrayList<Integer>();
    newXuHao = new ArrayList<Integer>();
    ampWanJia = new HashMap<Integer, WanJia>();
    WanJiaDuiXiang = new ArrayList<WanJia>();
    console = new Scanner(System.in);
    random = new Random();//实例化
}

/*
 * 创建扑克牌
 * CreatePuKe()
 */
public void CreatePuKe(){
    System.out.println("--------------创建扑克牌------------");
    int i=0;
    for(String huase:DianShu){
        for(String dianshu:HuaShe){
            String temp = huase.concat(dianshu);
            newPuKe.put(i,temp);
            XuHao.add(i);
            i++;
        }
    }
    System.out.println("------------创建扑克牌成功----------");
    //显示扑克牌
    System.out.println("为:"+newPuKe.values());
}

/*
 * 洗牌
 * 
 */
public void XiPai(){
    System.out.println("--------------开始洗牌------------");
    while(!(XuHao.isEmpty())){//判断是否为空
        //获取随机数
        int rand = random.nextInt(XuHao.size());
        //然后获取把xuhao集合的值保存在newxuhao里面
        newXuHao.add(XuHao.get(rand));
        XuHao.remove(rand);
    }
    System.out.println("--------------洗牌结束------------");
    String pk="[";
    int i=0 ;
    for(;i<newXuHao.size();i++){

        if(i == newXuHao.size()-1)pk+= newPuKe.get(newXuHao.get(i));
        else pk+= newPuKe.get(newXuHao.get(i))+", ";
    }
    pk+="]";
    //把字符数组变为字符串
    System.out.println("为:"+pk);

}

/*
 * 创建玩家 
 * CreateWanJia()
 */
public void CreateWanJia(){
    System.out.println("--------------创建玩家------------");
    for(int i = 0; i<WANJIARENSHU; i++){
        System.out.println("请输入第"+(i+1)+"位玩家的ID和姓名");
        while(true){
            try {
                System.out.println("请输入ID:");
                int id = console.nextInt();
                WanJia temp = ampWanJia.get(id);
                if(temp!= null){
                    System.out.println("输入ID已存在!请重新输入");
                    continue;
                }
                String name = "";
                while(true){
                    System.out.println("请输入姓名:");
                     name = console.next();
                    if(!Test(name)){
                        System.out.println("输入用户名已存在!请重新输入");
                        console.nextLine();
                        continue;
                    }else{
                        break;
                    }

                }

                WanJia wj = new WanJia(id, name);
                ampWanJia.put(id,wj);
                WanJiaDuiXiang.add(wj);
                break;
            }catch(InputMismatchException e) {
                System.out.println("输入ID类型只能是整形");
                console.nextLine();
            }
        }
    }
    //打印玩家
    for(WanJia wj:WanJiaDuiXiang){
        System.out.println("----欢迎玩家:"+wj.getName()+"参加游戏---");
    }
}

/*
 * 开始发牌
 * FaPai()
 * 
 */
public void FaPai(){
    System.out.println("-----------开始发牌---------");

    for(int i=0;i<FAPAISHU;i++){
        int n=i%WANJIARENSHU;
        WanJiaDuiXiang.get(n).shoupai.add(newXuHao.get(i));
        System.out.println("---玩家"+WanJiaDuiXiang.get(n).getName()+"拿牌");

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

    /*测试展现牌*/
/*  for(WanJia wj:WanJiaDuiXiang){
        Collections.sort(wj.shoupai);
        System.out.print("--玩家:"+wj.getName());
        for(Integer sp:wj.shoupai){
            System.out.print(newPuKe.get(sp)+" ");
        }
        System.out.println();
    }
*/
}
/*
 * 比较玩家牌大小
 * Open brand
 */
public void OpenPuKe(){
    System.out.println("----------开始游戏----------");
    Integer max =0;
    String name = "";
    int n=0;
    for(WanJia wj:WanJiaDuiXiang){
        Collections.sort(wj.shoupai);
        System.out.println("玩家  :"+wj.getName()+"最大手牌为: "+newPuKe.get(wj.shoupai.get((wj.shoupai.size()-1))));
        max = max> wj.shoupai.get((wj.shoupai.size()-1))?max:wj.shoupai.get((wj.shoupai.size()-1));
        if(max == wj.shoupai.get((wj.shoupai.size()-1))){
            name = wj.getName();

        }

    }
    System.out.println();
    System.out.println("--------玩家:"+name+"胜利---------");
}

//显示玩家牌
public void show(){

    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 boolean Test(String name){

    WanJia wj = new WanJia();
    wj.setName(name);
    if(WanJiaDuiXiang.contains(wj)){
        return false;
    }else{
        return true;
    }
}

public static void main(String[] args) {

        YouXi youXi = new YouXi();
        youXi.CreatePuKe();
        System.out.println();
        youXi.XiPai();
        System.out.println();
        youXi.CreateWanJia();
        System.out.println();
        youXi.FaPai();
        System.out.println();
        youXi.OpenPuKe();
        System.out.println();
        youXi.show();
}

//比较大小

}

3人推荐
随时随地看视频
慕课网APP