手记

简易扑克牌游戏的写法,肯定有很多重复代码,可以修改

对于简单扑克牌游戏,实现了对子的比较,为了测试的时候方便,顺便加上了重新玩这个部分;
一共是三个类,扑克牌、玩家、还有游戏。
扑克牌类首先有花色和点数属性,为了比较大小,重写了equals方法和使用了系统自动生成的Hashcode方法,对于不用HashSet的类来说,可以不要。
玩家类有名字 id和手牌三个属性,记住是private,通过系统生成的get和set方法进行获取和修改。

package com.poker;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class Gameplay {
static Boolean restart=true;
List<Poker>pokerlist=new ArrayList<Poker>();
List<Player>playerlist=new ArrayList<Player>();
List<Poker>player1handpoker=new ArrayList<Poker>();
List<Poker>player2handpoker=new ArrayList<Poker>();
String[]type={"方块","梅花","红桃","黑桃"};
String[]point={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
/**

  • 首先创建的是一副扑克牌
    */
    public void creatPoker(){
    System.out.println("开始创建扑克牌");
    for(int i=0;i<type.length;i++){
    for(int j=0;j<point.length;j++){
    pokerlist.add(new Poker(type[i],point[j]));
    }

        }
    System.out.println("扑克牌创建成功");

    }
    /**

    • 检验扑克牌是否完成
      */
      public void testCreatPoker(){
      for(Poker pk:pokerlist){
      System.out.println("有如下牌:"+pk.getType()+pk.getNum()+" ");}
      }

    /**

    • 然后是创建2个玩家
      */
      public void creatPlayer(){
      for(int n=0;n<2;n++){
      System.out.println("请输入玩家ID");
      String playerID=new Scanner(System.in).next();
      System.out.println("请输入玩家姓名");
      String playerName=new Scanner(System.in).next();
      playerlist.add(new Player(playerID,playerName));
      }
      System.out.println("玩家添加成功!"+"现有玩家是:");
      for(Player player:playerlist){
      System.out.println(player.getID()+":"+player.getName());
      }

    }
    /**

    • 接下来的步骤是洗牌
      */
      public void shufflepoker(){
      System.out.println("开始洗牌咯~~"+" .....");
      Collections.shuffle(pokerlist);
      System.out.println("洗牌完成!");
      }
      /**
    • 下面是发牌步骤
      */
      public void deliverPoker(){
      System.out.println("开始发牌!");
      for(int i=0;i<4;i++){
      Poker newpoker=pokerlist.get(i);
      if(i%2==0){
      player1handpoker.add(newpoker);
      System.out.println("玩家1抓了一张牌");
      }else
      {
      player2handpoker.add(newpoker);
      System.out.println("玩家2抓了一张牌");

      }

      }

      for(Poker Poker1:player1handpoker){
      System.out.println(playerlist.get(0).getName()+"手里的牌是"
      +Poker1.getType()+Poker1.getNum());
      }
      for(Poker Poker2:player2handpoker){
      System.out.println(playerlist.get(1).getName()+"手里的牌是"
      +Poker2.getType()+Poker2.getNum());
      }

    }

    /**

    • 这是比较牌面大小
      */
      public void comparenum(){
      Poker pk11=player1handpoker.get(0);
      Poker pk12=player1handpoker.get(1);
      Poker pk21=player2handpoker.get(0);
      Poker pk22=player2handpoker.get(1);
      int level1=0;
      int level2=0;
      if(pk11.getNum()==pk12.getNum())level1++;
      if(pk21.getNum()==pk22.getNum()) level2++;
      if(level1>level2){
      System.out.println(playerlist.get(0).getName()+"手里的牌是对子,所以"+playerlist.get(0).getName()+"获胜!");
      }
      else if(level1<level2){
      System.out.println(playerlist.get(1).getName()+"手里的牌是对子,所以"+playerlist.get(1).getName()+"获胜!");
      }
      else{
      System.out.println("两个人的牌型是一样的,所以比较点数!");
      //获得玩家1手中最大的牌
      Collections.sort(player1handpoker);
      Poker pk1Max=player1handpoker.get(player1handpoker.size()-1);
      System.out.println(playerlist.get(0).getName()+"手里最大的牌是:"+pk1Max.getType()+pk1Max.getNum());

      //获得玩家2手中最大的牌
      Collections.sort(player2handpoker);
      Poker pk2Max=player2handpoker.get(player2handpoker.size()-1);
      System.out.println(playerlist.get(1).getName()+"手里最大的牌是:"+pk2Max.getType()+pk2Max.getNum());

      if(pk1Max.compareTo(pk2Max)>0){
          System.out.println(playerlist.get(0).getName()+"获胜!");
      }else{
          System.out.println(playerlist.get(1).getName()+"获胜!");
      }

      }

    }

    public void restart(){
    int door=0; //保证输入没问题的时候才开门
    do{
    System.out.println("是否重新开始游戏?Y/N");
    Scanner sc=new Scanner(System.in);
    String regame=sc.next();
    if(regame.equals("N")||regame.equals("n")){
    restart=false;
    System.out.println("欢迎下次再玩!");
    door=1;
    }else if(regame.equals("Y")||regame.equals("y")){
    door=1;
    }else{
    System.out.println("您的输入有误,请重新输入!");
    }}while(door==0);

    }

    /**

    • @param args
      */

    public static void main(String [] args){

    do{
    Gameplay t1=new Gameplay();
    t1.creatPlayer();
    t1.creatPoker();
    t1.testCreatPoker();
    t1.shufflepoker();
    t1.deliverPoker();
    t1.comparenum();
    t1.restart();
    }while(restart==true);

    }

}

package com.poker;

public class Poker implements Comparable<Poker> {
private String type;
private String num;
public Poker(String type ,String num){

this.setType(type);
this.setNum(num);
}

public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime result + ((num == null) ? 0 : num.hashCode());
result = prime
result + ((type == null) ? 0 : type.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Poker other = (Poker) obj;
if (num == null) {
if (other.num != null)
return false;
} else if (!num.equals(other.num))
return false;
if (type == null) {
if (other.type != null)
return false;
} else if (!type.equals(other.type))
return false;
return true;
}
@Override
public int compareTo(Poker o) {
String pokernum="2,3,4,5,6,7,8,9,10,J,Q,K,A";
String pokertype="方块,梅花,红桃,黑桃";
int result;
result=pokernum.indexOf(this.getNum())-pokernum.indexOf(o.getNum());
if(result==0){
result=pokertype.indexOf(this.getType())-pokertype.indexOf(o.getType());
}
return result;
}

}

package com.poker;

public class Player {
private String ID;
private String name;
public Poker handpoker;
public Player(String ID,String name){
this.ID=ID;
this.name=name;

}
public String getID() {
    return ID;
}
public void setID(String iD) {
    ID = iD;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

}

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