继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Java入门第三季项目实战——扑克游戏

我的天空我做主
关注TA
已关注
手记 2
粉丝 1
获赞 50

package com.imooc;

/**

  • 创建扑克牌类 --Card
    */
    public class Card implements Comparable<Card>
    {
    private int color;
    private int number;

    /**

    • 取得扑克牌颜色
      */
      public int getColor()
      {
      return color;
      }
      /**
    • 设置扑克牌颜色
      */
      public void setColor(int color)
      {
      this.color = color;
      }
      /**
    • 取得扑克牌数字
      */
      public int getNumber()
      {
      return number;
      }
      /**
    • 设置扑克牌颜色
      */
      public void setNumber(int number)
      {
      this.number = number;
      }

    /**

    • 无参数构造函数
      */
      public Card()
      {
      }

    /**

    • 有参数构造函数
    • color :颜色
    • number: 数字
      */
      public Card(int color, int number)
      {
      this.color = color;
      this.number = number;
      }

    /**

    • 打印输出时, 重写 toString() 方法
      */
      @Override
      public String toString()
      {
      String colorString = "";
      String numberString = "";

      // 颜色字符
      switch(color)
      {
      case 0:
      colorString = "黑桃"; //"♠
      break;
      case 13:
      colorString = "红桃"; // "♥"
      break;
      case 26:
      colorString = "梅花"; // "♣"
      break;
      case 39:
      colorString = "方片"; // "♦"
      break;
      }

      // 数字字符
      switch (number)
      {
      case 11:
      numberString = "J";
      break;
      case 12:
      numberString = "Q";
      break;
      case 13:
      numberString = "K";
      break;
      case 14:
      numberString = "A";
      break;
      default:
      numberString = number + "";
      break;
      }

      return colorString + numberString;
      }

    /**

    • Override create hashCode
      /
      @Override
      public int hashCode()
      {
      final int prime = 31;
      int result = 1;
      result = prime
      result + color;
      result = prime * result + number;
      return result;
      }

    /**

    • Override create equals
      */
      @Override
      public boolean equals(Object obj)
      {
      if (this == obj)
      return true;
      if (obj == null)
      return false;
      if (!(obj instanceof Card))
      return false;
      Card other = (Card) obj;
      if (color != other.color)
      return false;
      if (number != other.number)
      return false;
      return true;
      }

    /**

    • Override create comparator
      */
      @Override
      public int compareTo(Card o)
      {
      if(this.number > o.number)
      return 1;
      else if(this.number < o.number)
      return -1;
      else if(this.color > o.color)
      return 1;
      else if(this.color < o.color)
      return -1;
      else
      return 0;
      }
      }

package com.imooc;

import java.util.ArrayList;

/**

  • 创建玩家类---Player
    */
    public class Player
    {
    private int id;
    private String name;
    public ArrayList<Card>handCards = new ArrayList<Card>();

    /**

    • 取得玩家 ID
      */
      public int getId()
      {
      return id;
      }
      /**
    • 设置玩家 ID
      */
      public void setId(int id)
      {
      this.id = id;
      }
      /**
    • 取得玩家姓名
      */
      public String getName()
      {
      return name;
      }
      /**
    • 设置玩家姓名
      */
      public void setName(String name)
      {
      this.name = name;
      }

    /**

    • 有参构造函数
    • @param id : 玩家ID编号
    • @param name :玩家姓名
      */
      public Player(int id, String name)
      {
      this.id = id;
      this.name = name;
      }

    /**

    • Override hashCode()
      /
      @Override
      public int hashCode()
      {
      final int prime = 31;
      int result = 1;
      result = prime
      result + id;
      return result;
      }

    /**

    • Override equals()
      */
      @Override
      public boolean equals(Object obj)
      {
      if (this == obj)
      return true;
      if (obj == null)
      return false;
      if (!(obj instanceof Player))
      return false;
      Player other = (Player) obj;
      if (id != other.id)
      return false;
      return true;
      }

    /**

    • Override toString()
      */
      @Override
      public String toString()
      {
      return "ID:" + id + ", name:" + name;
      }
      }

package com.imooc;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

/**

  • 实现一个简单的扑克牌游戏点数玩法
    */
    public class CardsPlay
    {
    private static Scanner sn = new Scanner(System.in); //创建一个静态用户输入Scanner对象
    private static ArrayList<Card> cards = new ArrayList<Card>(); //创建一个静态扑克牌泛型集合列表
    private static ArrayList<Player> players = new ArrayList<Player>(); //创建一个静态玩家泛型集合列表

    /**

    • 创建至少 1 副扑克牌
      */
      private void createCards()
      {
      System.out.println("-------------------------创建扑克牌-------------------------");

      int count;
      do
      {
      System.out.print("请输入需要扑克牌的副数(至少一副): ");
      count = sn.nextInt();
      }
      while (count <=0);

      // 根据用户输入的扑克牌多少副数量来创建扑克牌集合
      for(int i=0; i< count; i++)
      {
      // 一副牌有52张
      for(int j=0; j<52; j++)
      {
      //0/3 =0, 1 / 3=0, 2 / 3=0, 3 / 3=1
      //0%3 =0, 1 % 3=1, 2 % 3=2, 3 % 3=0
      cards.add(new Card(j / 13 * 13, j % 13 + 2));
      }
      }

      System.out.println(cards); //打印输出时用到 Card 类中的 toString() 重写方法
      System.out.println("-------------------------扑克牌创建成功-------------------------");
      }

    /**

    • 创建至少两名玩家,包含 id 和 名称
      */
      private void createPayers()
      {
      System.out.println("-------------------------创建玩家-------------------------");
      // 取得用户设定的玩家数量
      int count ;
      do
      {
      System.out.print("输入玩家数量(至少2个玩家):");
      count = sn.nextInt();
      }
      while(count < 1);

      for(int i= 0; i< count; i++)
      {

      System.out.println("请输入第" + (i + 1) + "玩家的ID和姓名:");
      //  玩家ID
      int id;
      do
      {
          System.out.print("输入ID(1~" + count + "):");
          id= sn.nextInt();
      }
      while(id<1 || id>count || players.contains(new Player (id,"")));
      // 玩家姓名
      System.out.print("输入姓名:");
      String playerName = sn.next();
      players.add(new Player(id, playerName));

      }

      for(Player player : players)
      {
      System.out.println("-------欢迎玩家:" + player.getName());
      }
      }

    /**

    • 洗牌,将扑克牌打乱顺序
      */
      private void shuffleCards()
      {
      System.out.println("-------------------------开始洗牌-------------------------");
      Collections.shuffle(cards);
      System.out.println("-------------------------洗牌完成-------------------------");
      }

    /**

    • 发牌,一人一张的方式发牌
      */
      private void getHandCards()
      {
      System.out.println("-------------------------开始发牌-------------------------");
      int countMax;
      do
      {
      System.out.print("输入每个玩家最多抓取几张牌(至少一张):");
      countMax = sn.nextInt();
      }
      while(countMax < 1);

      for(int i =0;i < cards.size(); i++)
      {
      //0%3 =0, 1 % 3=1, 2 % 3=2, 3 % 3=0
      Player player = players.get((i % players.size()));
      if(player.handCards.size() >= countMax)
      {
      break;
      }
      player.handCards.add(cards.get(i));
      System.out.println("玩家:" + player.getName() + "-拿牌");
      }
      System.out.println("-------------------------发牌结束-------------------------");
      }

    /**

    • 游戏开始,取各自手中最大点数,谁大谁赢
      */
      private void playGame()
      {
      System.out.println("-------------------------开始游戏-------------------------");

      // 将玩家各自手中的牌按从大到小排序
      ArrayList<Card> maxHandList = new ArrayList<Card>();
      for(Player player : players)
      {
      Collections.sort(player.handCards, Collections.reverseOrder());//从大->小排序
      maxHandList.add(player.handCards.get(0));
      System.out.println("玩家:" + player.getName() + "最大手牌为:" + player.handCards.get(0));
      }
      // 收集所有玩家手中最大点数比较确认谁获胜
      ArrayList<Player> maxPlayer = new ArrayList<Player>();
      Collections.sort(maxHandList, Collections.reverseOrder());//从大->小排序
      for(Player player : players)
      {
      if(player.handCards.get(0).equals(maxHandList.get(0)))
      {
      maxPlayer.add(player);
      }
      }

      // 输出获胜玩家
      if(maxPlayer.size() ==1)
      {
      System.out.println("-------------------------玩家:" + maxPlayer.get(0).getName() + "获胜-------------------------");
      }
      else if(maxPlayer.size() > 1)
      {
      String strPlayer ="";
      for(int i =0 ; i< maxPlayer.size(); i++)
      {
      strPlayer = strPlayer + maxPlayer.get(i).getName() + " ";
      }
      System.out.println("-------------------------玩家:" + strPlayer + "获胜-------------------------");
      }

      // 输出各玩家手中的牌
      System.out.println("玩家各自的手牌为:");
      for(Player player : players)
      {
      System.out.println(player.getName() + ":" + player.handCards);
      }
      }

    /**

    • 主要有以下几种方法完成游戏
    • 1.创建至少 1 副扑克牌
    • 2.创建至少两名玩家,包含 id 和 名称
    • 3.洗牌,将扑克牌打乱顺序,用到 Collections.shuffle(List) 方法
    • 4.发牌,一人一张的方式发牌
    • 5.游戏开始,取各自手中最大点数,谁大谁赢
      */
      public static void main(String[] args)
      {
      CardsPlay cplay = new CardsPlay();

      // 创建至少 1 副扑克牌, 一副牌52
      cplay.createCards();
      // 创建至少两名玩家,包含 id 和 名称
      cplay.createPayers();

      if(cards.isEmpty())
      {
      System.out.println("扑克牌数量为空, 无法完成发牌, 请检查程序!");
      return;
      }

      if(players.isEmpty())
      {
      System.out.println("玩家人数为空, 无法完成发牌, 请检查程序!");
      return;
      }

      // 洗牌,将扑克牌打乱顺序
      cplay.shuffleCards();
      // 发牌,一人一张的方式发牌
      cplay.getHandCards();
      // 游戏开始,取各自手中最大点数,谁大谁赢
      cplay.playGame();
      }
      }

打开App,阅读手记
5人推荐
发表评论
随时随地看视频慕课网APP