建立了四个类和一个接口(主要是用一下接口的知识),基本实现了游戏功能,可能有一点冗余,欢迎各位大佬指出宝贵意见!!!

来源:7-1 简易扑克牌游戏

旋转的梧桐叶

2018-08-30 16:10

/*

建立了四个类和一个接口(主要是用一下接口的知识),基本实现了游戏功能,可能有一点冗余,欢迎各位大佬指出宝贵意见!!!


*/

package com.jiang.youxi;


public class Main

{


/**

* @param args

*/

public static void main(String[] args)

{

Work work = new WorkImpl();

// 创建扑克牌

work.add1();

// 洗牌

work.xiPai();


// 创建玩家

work.wanJia();

// 发牌

work.faPai();

// 决胜负

work.panduan();

}


}

///////////////////////////////////////////////////////////////////////////////////////////////////////

package com.jiang.youxi;


public class Puke

{

private String huaSe;

private String shuZi;


public String getHuaSe()

{

return huaSe;

}


public void setHuaSe(String huaSe)

{

this.huaSe = huaSe;

}


public String getShuZi()

{

return shuZi;

}


public void setShuZi(String shuZi)

{

this.shuZi = shuZi;

}


public Puke()

{

super();

// TODO Auto-generated constructor stub

}


public Puke(String huaSe, String shuZi)

{

super();

this.huaSe = huaSe;

this.shuZi = shuZi;

}


public void tianjia()

{


}


@Override

public String toString()

{

return "Puke [huaSe=" + huaSe + ", shuZi=" + shuZi + "]";

}


}

/////////////////////////////////////////////////////////

package com.jiang.youxi;


/*

 * 玩家类

 */

public class Wanjia

{

private String name;

private Integer id;


public Puke[] shouPai = new Puke[2];


public String getName()

{

return name;

}


public void setName(String name)

{

this.name = name;

}


public Integer getId()

{

return id;

}


public void setId(Integer id)

{

this.id = id;

}


public Wanjia(String name, Integer id)

{

super();

this.name = name;

this.id = id;

}


public Wanjia()

{

super();

// TODO Auto-generated constructor stub

}


}

///////////////////////////////////////////////////////////////////

package com.jiang.youxi;


public interface Work

{

void add1();


void xiPai();


void faPai();


void wanJia();


void panduan();

}

//////////////////////////////////////

package com.jiang.youxi;


import java.util.ArrayList;

import java.util.HashSet;

import java.util.List;

import java.util.Scanner;

import java.util.Set;


public class WorkImpl implements Work

{


Scanner scanner = new Scanner(System.in);

List<Puke> list = new ArrayList<Puke>();


Puke puke[] = new Puke[52];

Wanjia[] w = new Wanjia[2];


// 创建扑克牌

@Override

public void add1()

{

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

String[] color = new String[] { "黑桃", "红桃", "方块", "梅花" };

String[] number = new String[] { "2", "3", "4", "5", "6", "7", "8",

"9", "10", "J", "Q", "K", "A" };

int k = 0;

for (int i1 = 0; i1 < color.length; i1++)

{

for (int i2 = 0; i2 < number.length; i2++)

{

puke[k] = new Puke();

puke[k].setHuaSe(color[i1]);

puke[k].setShuZi(number[i2]);

k++;

}

}

// 遍历输出

for (Puke p : puke)

{

System.out.print(p.getHuaSe() + p.getShuZi() + " ");

}

System.out.println("\n◇◇◇创建扑克牌成功!◇◇◇\n");

}


// 分发扑克牌

@Override

public void faPai()

{

System.out.println("◇◇◇开始发牌:(一人两张)");

// 定义的对象数组必须说明大小,否则这里会出错

w[0].shouPai[0] = new Puke();

w[0].shouPai[0] = list.get(0);


w[1].shouPai[0] = new Puke();

w[1].shouPai[0] = list.get(1);


w[0].shouPai[1] = new Puke();

w[0].shouPai[1] = list.get(2);


w[1].shouPai[1] = new Puke();

w[1].shouPai[1] = list.get(3);


System.out.println("玩家 " + w[0].getName() + "的手牌为:"

+ w[0].shouPai[0].getHuaSe() + w[0].shouPai[0].getShuZi()

+ "  " + w[0].shouPai[1].getHuaSe()

+ w[0].shouPai[1].getShuZi());


System.out.println("玩家 " + w[1].getName() + "的手牌为:"

+ w[1].shouPai[0].getHuaSe() + w[1].shouPai[0].getShuZi()

+ "  " + w[1].shouPai[1].getHuaSe()

+ w[1].shouPai[1].getShuZi());

}


@Override

public void xiPai()

{

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

Set<Puke> set1 = new HashSet<Puke>();


// 利用set集合元素的无序性,将对象数组里面的每个对象放在set集合中

for (int i = 0; i < 52; i++)

{

set1.add(puke[i]);

}


// System.out.println("洗牌过后:");


// 然后再依次遍历set集合,赋值给List集合,方便发牌的时候顺序发牌

for (Puke puke1 : set1)

{

// 吧洗完牌的排序赋值给一个List

list.add(puke1);

System.out.print(puke1.getHuaSe() + puke1.getShuZi() + " ");

}

System.out.println("\n◇◇◇洗牌成功◇◇◇\n");

}


@Override

public void wanJia()

{


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

w[0] = new Wanjia();// 创建玩家对象


System.out.println("请输入第一个玩家 的ID:(数字)");

String idsString = scanner.nextLine();

Integer id = err(idsString);// 转换为数字

while (id < 0)

{

System.out.println("你的输入有问题(只能是数字)");

System.out.println("请重新输入第一个玩家 的ID:(数字)");

idsString = scanner.nextLine();

id = err(idsString);

}

w[0].setId(id);


System.out.println("请输入第一个玩家的姓名:");

String nameString = scanner.nextLine();

w[0].setName(nameString);


System.out.println("请输入第二个玩家 的ID:(数字)");

w[1] = new Wanjia();// 创建玩家对象

String idsString3 = scanner.nextLine();

Integer id2 = err(idsString3);

// 判断输入的是否是数字

while (id2 < 0)

{

System.out.println("你的输入有问题(只能是数字)");

System.out.println("请重新输入第二个玩家 的ID:(数字)");

idsString3 = scanner.nextLine();

id2 = err(idsString3);

}

while (id2.equals(w[0].getId()))

{


System.out.println("玩家已经存在!)");

System.out.println("请重新输入第二个玩家 的ID:(数字)");

idsString3 = scanner.nextLine();

id2 = err(idsString3);

}

w[1].setId(id2);


System.out.println("请输入第二个玩家的姓名:");

String nameString2 = scanner.next();

w[1].setName(nameString2);


System.out.println("创建玩家成功:");

System.out.println("第一个玩家 :" + "id: " + w[0].getId() + " 姓名:"

+ w[0].getName() + "\n第二个玩家 :" + "id: " + w[1].getId() + " 姓名:"

+ w[1].getName() + "\n");

}


@Override

public void panduan()

{

// 比较大小的逻辑是:花色相同的玩家手牌大于花色不同的。如果来两个玩家的花色情况相同,则比较手牌数字。

// 每个玩家的最大手牌数字相比,较大的那个胜出。如果最大手牌相同,继续比较小哪张手牌的数字。否则平手。


// 第一个玩家的手牌花色和数字

//

String w01 = w[0].shouPai[0].getHuaSe();

String w011 = w[0].shouPai[0].getShuZi();


String w02 = w[0].shouPai[1].getHuaSe();

String w012 = w[0].shouPai[1].getShuZi();


// 第二个玩家的手牌花色和数字

String w11 = w[1].shouPai[0].getHuaSe();

String w111 = w[1].shouPai[0].getShuZi();


String w12 = w[1].shouPai[1].getHuaSe();

String w112 = w[1].shouPai[1].getShuZi();


// 首先判断每个玩家的手牌花色是否相同

if ((w01.equals(w02) && w11.equals(w12))

|| (!w01.equals(w02) && !w11.equals(w12)))

{

// 在此比较数字大小

// 将第一个玩家手牌的数字大小转换为数字类型

Integer num01 = maxNumber(w011);

Integer num02 = maxNumber(w012);

// 玩家一的手牌最大的那个数字

Integer maxNum01 = Math.max(num01, num02);


Integer num11 = maxNumber(w111);

Integer num12 = maxNumber(w112);

// 玩家二的手牌最大的那个数字

Integer maxNum02 = Math.max(num11, num12);

if (maxNum01 > maxNum02)

{

System.out.println("恭喜玩家一 " + w[0].getName() + " 胜出!游戏结束!");

} else

{

System.out.println("恭喜玩家二 " + w[1].getName() + " 胜出!游戏结束!");


}


} else

{

if (w01.equals(w02) && !w11.equals(w12))

{

System.out.println("恭喜玩家一 " + w[0].getName() + " 胜出!游戏结束!");

}

if (!w01.equals(w02) && w11.equals(w12))

{

System.out.println("恭喜玩家二 " + w[1].getName() + " 胜出!游戏结束!");

}

}


}


// 自定义方法。将手牌的的数字转换为数字类型

private Integer maxNumber(String a)

{

Integer num = 0;

if (a.equals("J"))

{

num = 11;

return num;

}

if (a.equals("Q"))

{

num = 12;

return num;

}

if (a.equals("K"))

{

num = 13;

return num;

}

if (a.equals("A"))

{

num = 1;

return num;

}

return Integer.valueOf(a);


}


// 自定义方法,判断输入的ID字符串是否正确

private Integer err(String num)

{

char[] ch = new char[num.length()];

ch = num.toCharArray();

boolean flag = true;

for (int i = 0; i < ch.length; i++)

{

if (ch[i] >= '1' && ch[i] <= '9')

{

flag = true;

} else

{

flag = false;

}

}

if (flag)

{

return Integer.valueOf(num);

}

return -1;

}

}


写回答 关注

2回答

  • SearchFan
    2018-10-11 11:26:14
    已采纳

    我也是菜鸟一个,写代码每个人都有自己的思路,我不大好评价你的逻辑和语法(其实也不大懂),但是就是有一个建议,就是你的变量名或者类名,最好不要用中文的拼音,因为这样不符合行业规范,最好是用英文,比如玩家不是用"wanjia”,而是用“player”,实在不懂得如何用英文表示,那就百度一下。。。

  • 旋转的梧桐叶
    2018-08-30 16:12:11

    忘了注释掉洗牌过后的打印。

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题