版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaohuiyang_949/article/details/80061940
此游戏是一个简单的并且很基础的java控制台程序。这个扑克牌游戏主要的游戏过程是:首先创建一副扑克牌,创建好了后要进行洗牌,牌洗好了,需要玩家来玩,接下来就创建玩家。有洗好的牌,也有玩家了,那么就开始发牌,发完牌后,比较玩家中手牌的大小,大的那一位获胜。下面是代码:
首先创建一个扑克牌类,扑克牌主要有两个属性,一个是点数,一个是花色。给点数和花色生成getter和setter。然后重载构造函数,一个无参的,一个有参的。在最后还重写了equals方法,判断两个扑克牌是否相等。
public class Poker {
private String point;
private String color;
public Poker(){
}
public Poker(String point,String color){
this.point = point;
this.color = color;
}
public String getPoint() {
return point;
}
public void setPoint(String point) {
this.point = point;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Poker poker = (Poker) o;
return Objects.equals(point, poker.point) &&
Objects.equals(color, poker.color);
}
}
接下来我们创建玩家类,玩家拥有三个属性,一个是id,一个name,另一个是手牌。在这个游戏中,我们给每名玩家会发两张牌,所以用List来存放手牌。同样是创建无参构造方法和有参构造方法。然后就是这三个属性的getter和setter。
import java.util.ArrayList;
import java.util.List;
public class Player {
private String id;
private String name;
private List<Poker> pokers;
public Player(){
}
public Player(String id,String name){
this.id = id;
this.name = name;
this.pokers = new ArrayList<Poker>();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Poker> getPokers() {
return pokers;
}
public void setPokers(List<Poker> pokers) {
this.pokers = pokers;
}
}
有了玩家类和扑克类,剩下的就是游戏的主类了。主要的方法有三个,一个是创建玩家createPlayer,一个是洗牌shuffle,另一个是开始游戏的方法play。这个类需要实现Comparator接口,用于比较引用对象的大小。
import java.util.*;
public class Main implements Comparator<Poker> {
private List<Player> playerList; //玩家列表
private List<Poker> pokerList ; //原始扑克牌列表
private List<Poker> pokerListAfterShuffle; //洗牌后的扑克牌列表
private Scanner console; //输入控制
private String id; //用户输入的id
private String name; //用户输入的name
private Poker getPoker; //存放发的那张牌
public static void main(String[] args) {
Main game = new Main();
game.createPlayer();
game.shuffle();
game.play();
}
/**
* 在方法的初始化中,给成员变量初始化
*/
public Main(){
playerList = new ArrayList<Player>();
pokerList = new ArrayList<Poker>();
pokerListAfterShuffle = new ArrayList<Poker>();
console = new Scanner(System.in);
//创建扑克牌,有序的
String[] points = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
String[] colors = {"方块","梅花","红桃","黑桃"}; //同花色的扑克牌大小遵循“黑红梅方”的规定
for (String point : points){
for (String color : colors){
Poker poker = new Poker(point,color);
pokerList.add(poker);
}
}
}
/**
* 创建玩家,一共两个玩家
*/
public void createPlayer(){
System.out.println("----------创建玩家----------");
for (int i = 1; i<3;i++){
System.out.println("请输入第" + i + "位玩家信息:");
System.out.println("请输入玩家id:");
id = console.next();
System.out.println("请输入玩家name:");
name = console.next();
playerList.add(new Player(id,name));
}
for (Player player : playerList){
System.out.println("欢迎玩家:" + player.getName());
}
}
/**
* 因为实现了接口Comparator,所以需要重写compare方法,
* 在后面给扑克牌排序的时候,会调用
* @param o1
* @param o2
* @return
*/
@Override
public int compare(Poker o1, Poker o2) {
if (pokerList.indexOf(o1)>pokerList.indexOf(o2)){
return 1;
}
return -1;
}
/**
* 洗牌
* 洗牌的方式是:将生成的有序的扑克牌,利用随机数,一张一张的抽取出来
* 放在pokerListAfterShuffle列表中
*/
public void shuffle(){
//创建一个随机数
Random random = new Random();
Poker poker = new Poker();
System.out.println("----------开始洗牌----------");
for (int i = 0;i<pokerList.size();i++){
//避免重复添加同一张牌,在添加之前,检查洗牌后的列表中是否已经存在此牌
do {
//随机数的随机范围,是原始扑克牌列表的大小
int position = random.nextInt(pokerList.size());
poker = pokerList.get(position);
}while (pokerListAfterShuffle.contains(poker));
//如果没有重复,将此牌添加进去
pokerListAfterShuffle.add(poker);
}
System.out.println("----------洗牌结束----------");
}
/**
* 开始游戏,发牌,比较大小
*/
public void play(){
System.out.println("----------开始发牌----------");
for (int i = 0;i<2;i++){
for (int j = 0;j<2;j++){
System.out.println("玩家" + playerList.get(j).getName() + "拿牌");
getPoker = pokerListAfterShuffle.get(i*2+j);
playerList.get(j).getPokers().add(getPoker);
}
}
System.out.println("----------发牌结束----------");
//对两位玩家中的手牌进行排序,后面那一张就是手中牌最大的
Collections.sort(playerList.get(0).getPokers(),new Main());
Collections.sort(playerList.get(1).getPokers(),new Main());
System.out.println("----------玩家各自手牌为----------");
for(int i =0;i<2;i++){
for (int j = 0;j<2;j++){
System.out.println(playerList.get(i).getName() + playerList.get(i).getPokers().get(j).getColor()
+ playerList.get(i).getPokers().get(j).getPoint());
}
}
//因为原始的扑克牌是升序,利用在原始扑克牌列表中位置,判断出谁大谁小。
System.out.println("----------比较大小----------");
if (pokerList.indexOf(playerList.get(0).getPokers().get(1))>pokerList.indexOf(playerList.get(1)
.getPokers().get(1))){
System.out.println("玩家" + playerList.get(0).getName() + "获胜");
}else
System.out.println("玩家" + playerList.get(1).getName() + "获胜");
System.out.println("----------游戏结束----------");
}
}
下面是游戏的运行结果
以上就是全部内容,如果发现问题,请指出,谢谢。