//玩家类
public class Wan {
String name ;
Kapai kap;
Wan(String name,Kapai kap){
this.name=name;
this.kap= kap;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Kapai getKap() {
return kap;
}
public void setKap(Kapai kap) {
this.kap = kap;
}
public String toString() {
return "["+this.kap.getPai()+" "+this.kap.getShu()+"]";
}
//卡牌类
public class Kapai {
private String pai;//卡牌名字
private String shu;//卡牌数字
public Kapai(String pai,String shu){
this.pai=pai;
this.shu=shu;
}
//重新 equals 和hashCode方法 用于判别不同的手牌
@Override
public String toString() {
return "["+this.getPai()+" "+this.getShu()+"]";
}
@Override
public boolean equals(Object obj) {
if(this==obj){
return true;
}
if(obj instanceof Kapai){
Kapai k = (Kapai)obj;
if(k.pai.equals(this.pai) && k.shu.equals(this.shu)){
return true;
}else{
return false;
}
}else{
return false;
}
}
@Override
public int hashCode() {
return this.shu.hashCode()+this.pai.hashCode();
}
public String getPai() {
return pai;
}
public void setPai(String pai) {
this.pai = pai;
}
public String getShu() {
return shu;
}
public void setShu(String shu) {
this.shu = shu;
}
}
//比较器
import java.util.Comparator;
public class Compara01 implements Comparator{
@Override
public int compare(Object arg0, Object arg1) {
Wan p1 = (Wan)(arg0);
Wan p2 = (Wan)(arg1);
int s = p2.getKap().getShu().compareTo(p1.getKap().getShu());
return s==0?p2.getKap().getPai().compareTo(p1.getKap().getPai()):s;
}
}
//玩家最大手牌类
public class max {
Wan wan;
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.Random;
import java.util.Scanner;
public class Dome {
public static void main(String[] args) {
ArrayList<Kapai> list = new ArrayList<Kapai>();//创建一个卡牌集合 用来存储卡牌对象
ArrayList<Wan> wan1 = new ArrayList<Wan>();//创建玩家一
ArrayList<Wan> wan2 = new ArrayList<Wan>();//创建玩家二
ArrayList<Wan> max = new ArrayList<Wan>();//创建玩家1和玩家2手中最大的手牌集合
Dome d= new Dome();//创建本类对象
System.out.println("----------创建扑克牌--------------");
System.out.println("----------扑克牌创建成功-------------");
d.pu(list);//传入卡牌集合 对卡牌进行初始化
System.out.println("----------开始洗牌------------");
Collections.shuffle(list);//对卡牌集合进行打乱顺序
System.out.println("----------洗牌结束-------------");
System.out.println("-----------创建玩家--------------");
Scanner sa = new Scanner(System.in);
Random ra = new Random();//定义随机数对象
String[] str = new String[2];//定义一个数组 用户接受用户所属于的玩家名字
for(int x=0; x<2; x++){
System.out.println("请输入第"+(x+1)+"位玩家的id和名字");
System.out.println("输入ID:");
int id = sa.nextInt();
System.out.println("输入名字:");
String name = sa.next();
str[x] = name;//接受名字
}
for(int x= 0;x<2;x++){//遍历玩家名字数组
System.out.println("-----欢迎玩家"+str[x]);
}
System.out.println("---------开始发牌--------");
for(int x= 0;x<2;x++){
for(int y=0;y<2;y++){
System.out.println("------玩家:"+str[y]+"拿牌");
int i = ra.nextInt(list.size());//产生一个长度为卡牌集合长度的一个随机数
Kapai pp = list.get(i);//用随机数得到一个随机的卡牌对象 这里会产出一个相同的随机数 懒得想了。。。。。
if(y==0){
wan1.add(new Wan(str[y],pp));//玩家1开始存储手牌
}else{
wan2.add(new Wan(str[y],pp));//玩家2开始存储手牌
}
}
}
//对玩家1和玩家2的手牌进行排序 会得到角标为0的数是最大的手牌
Collections.sort(wan1, new Compara01());//自己定义比较器
Collections.sort(wan2, new Compara01());//自己定义比较器
System.out.println("-------发牌结束开始游戏-----------");
for(int x=0;x<2;x++){
if(x==0){//得到玩家1角标为0的数是最大的手牌
System.out.println(str[x]+"最大的手牌是"+wan1.get(0).getKap());
}else{//得到玩家2角标为0的数是最大的手牌
System.out.println(str[x]+"最大的手牌是"+wan2.get(0).getKap());
}
}
//再把玩家1和玩家2手中最大的牌 传入之前定义的最大手牌集合中
max.add(wan1.get(0));
max.add(wan2.get(0));
//通过自己定义的比较得到最大的牌角标为0
Collections.sort(max,new Compara01());
//定义一个可接受字符串名字的对象 不然会生成哈希吗值
StringBuilder sb = new StringBuilder();
//接受角标为0的 最大手牌集合中的玩家名字
sb.append(max.get(0).getName());
//输出名字
System.out.println("----------"+sb.toString()+" 玩家获胜");
System.out.println("玩家各自的手牌是--------");
//自己定义一个函数 把玩家1和玩家2的集合进行遍历
d.maxx(wan1);
d.maxx(wan2);
}
public void pu(ArrayList<Kapai> list){
//定义会出现的卡牌颜色跟数字
String[] s = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
String[] p = {"方片","梅花","红桃","黑桃"};
//循环添加进卡牌对象集合
for(int y = 0; y<4;y++){
for(int x =0;x<s.length;x++){
Kapai k= new Kapai(p[y],s[x]);
list.add(k);
}
}
//进行遍历卡牌集合
Iterator<Kapai> it = list.iterator();
while(it.hasNext()){
Kapai kk =(Kapai)it.next();
System.out.print(kk+" ");
}
}
//遍历玩家集合
public void maxx(ArrayList<Wan> wan){
Iterator<Wan>it1 = wan.iterator();
while(it1.hasNext()){
Wan wa = it1.next();
Kapai kp = wa.getKap();
String n = wa.getName();
System.out.println(n+":"+kp);
}
}
}