/*
建立了四个类和一个接口(主要是用一下接口的知识),基本实现了游戏功能,可能有一点冗余,欢迎各位大佬指出宝贵意见!!!
*/
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;
}
}
我也是菜鸟一个,写代码每个人都有自己的思路,我不大好评价你的逻辑和语法(其实也不大懂),但是就是有一个建议,就是你的变量名或者类名,最好不要用中文的拼音,因为这样不符合行业规范,最好是用英文,比如玩家不是用"wanjia”,而是用“player”,实在不懂得如何用英文表示,那就百度一下。。。
忘了注释掉洗牌过后的打印。