有些方法还是不太会,要参照老师讲的用法才能写对~
package fourth;
/**
* 扑克牌类
* @author jiuge
*
*/
public class poker implements Comparable<poker>{
public String type; //花色
public String name; //牌名
public int typevalue; //通过两个value方便对牌进行大小比较
public int namevalue;
public poker(){
}
public poker(String type,String name){
this.type=type;
this.name=name;
if(type=="红桃") this.typevalue=4;
else if(type=="黑桃") this.typevalue=3;
else if(type=="方块") this.typevalue=2;
else if(type=="梅花") this.typevalue=1;
if(name=="J") this.namevalue=11;
else if(name=="Q") this.namevalue=12;
else if(name=="K") this.namevalue=13;
else if(name=="A") this.namevalue=14;
else this.namevalue=Integer.valueOf(name);
}
@Override
public int compareTo(poker o) { //重写compare方法
int returnvalue = -1000;
if(this.namevalue>o.namevalue)
returnvalue= 1;
else if(this.namevalue<o.namevalue)
returnvalue= -1;
else if(this.namevalue==o.namevalue){
if(this.typevalue>o.typevalue)
returnvalue= 1;
else if(this.typevalue<o.typevalue)
returnvalue= -1;
else returnvalue=0;
}
return returnvalue;
}
}
package fourth;
public class player {
String id;
String name;
public player(String id,String name){
this.id=id;
this.name=name;
}
}
package fourth;
import java.util.*;
public class test {
public void creat(){
/***********************给牌****************************/
poker[] pokers = new poker[52];
String[] types={"红桃","黑桃","方块","梅花"};
String[] names={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
for(int i=0;i<4;i++){ //创建一副牌,这时的扑克牌组是有顺序的
for(int j=0;j<13;j++){
pokers[(i*13+j)]=new poker(types[i],names[j]);
}
}
/************************洗牌***************************/
Integer[] arr=new Integer[52]; //建立一个52长度(一副牌的长度)的数组,将下标作为值
for(int i=0;i<52;i++){
arr[i]=i;
}
List<Integer> num=new ArrayList<Integer>();
num.addAll(Arrays.asList(arr)); //把该数组转换成序列后打乱顺序
Collections.shuffle(num);
for (int i : num) { //把乱序的值再返回给数组,得到一个乱序的数组,且每次运行程序这个数组都不一样
arr[i]=num.get(i); //把这个乱序的数组作为扑克牌组的下标,能够达到洗牌的效果
}
/************************发牌****************************/
Scanner in=new Scanner(System.in);//准备创建两名玩家
System.out.print("请输入第一位玩家的name:");
String name=in.next();
player player1=new player("1",name);
System.out.print("请输入第二位玩家的name:");
name=in.next();
player player2=new player("2",name);
List<poker> p1=new ArrayList<poker>();//player1的牌组
List<poker> p2=new ArrayList<poker>();//player2的牌组
System.out.print("请输入发牌数量(26张以内):");
int i;
do{
i=in.nextInt();
if(i<0||i>26) System.out.print("选择错误!请重新选择发牌数量:");
}while(i<0||i>26);
for(int n=0;n<2*i;n++){ //给两名玩家交替发牌
if(n%2==0){
p1.add(pokers[arr[n]]); //pokers中的对象已固定,通过乱序的数组arr作为下标,实现洗牌功能
System.out.println("玩家"+player1.name+"发到一张牌");
}
else{
p2.add(pokers[arr[n]]);
System.out.println("玩家"+player2.name+"发到一张牌");
}
}
System.out.println("**********发牌完毕***********");
/*************************输赢***************************/
System.out.print("玩家"+player1.name+"的牌:"); //玩家一获得的牌
for(int a=0;a<p1.size();a++){
poker po1=p1.get(a);
System.out.print(po1.type+po1.name+" ");
}
System.out.println();
System.out.print("玩家"+player2.name+"的牌:"); //玩家二获得的牌
for(int a=0;a<p2.size();a++){
poker po2=p2.get(a);
System.out.print(po2.type+po2.name+" ");
}
System.out.println();
Collections.sort(p1);//这里对牌进行排序,排序是递增的,故最后一张牌是最大的
Collections.sort(p2);//下面获取两名玩家各自最大的牌
System.out.println("玩家"+player1.name+"最大的牌:"+p1.get((p1.size()-1)).type+p1.get((p1.size()-1)).name);
System.out.println("玩家"+player2.name+"最大的牌:"+p2.get((p2.size()-1)).type+p2.get((p2.size()-1)).name);
int result=p1.get((p1.size()-1)).compareTo(p2.get((p2.size()-1)));//对两名玩家最大的牌进行比较
switch(result){
case -1:System.out.println("玩家"+player2.name+"赢了!");break;
case 1:System.out.println("玩家"+player1.name+"赢了!");break;
}
in.close();
}
public static void main(String[] args) {
System.out.println("-------------------欢迎使用扑克牌!--------------------");
System.out.println("规则一:双方发等量的牌,比较其中最大的牌,牌的点数是主要因素。");
System.out.println("规则二:若点数相等,则继续比较牌的花色,花色权重为红桃>黑桃>方块>梅花。");
test t=new test();
t.creat();
}
}