Java:扑克牌

思路:

1、定义扑克牌的类,定义成员变量(扑克牌的牌面值和花色),构造成语方法,重写成员方法

2、定义一个字符串数组存放四种花色

3、买牌:52张牌(每种花色13张牌)

4、洗牌:获取牌数,引用随机函数Random生成随机数rand,从最后一张牌开始换牌

5、构造换牌的方法:定义tmp来接收i下标的值,j下标的值给i,j接收tmp的值(j为随机数rand)

6、揭牌:定义一个二维数组hand,一人一个List揭牌,轮流揭牌

 

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

class Card{
    private int rank;   //牌面值
    private String suit;  //花色

    public Card(int rank,String suit){
        this.rank = rank;
        this.suit = suit;
    }

    @Override
    public String toString() {
        return "[ "+this.suit+" "+this.rank+"  ]";
    }
}

public class Test1 {
    private static final String[] suits = {"♥","♠","♣","♦"};  //四种花色

    public static List<Card> buyCard(){  //假设买的牌没有大小王,只有1-13
        ArrayList<Card> cards = new ArrayList<>();
        //52张牌,四种花色
        for (int i = 0; i < 4; i++) {
            for (int j = 1; j <= 13; j++) {

                //String suit = suits[i];
                //int rank = j;
                //Card card = new Card(rank,suit);
                //cards.add(card);

                cards.add(new Card(j,suits[i])); //一张牌
            }
        }
        return cards; //返回52张牌
    }

    private static void swap(List<Card> cards,int i,int j){ //换牌
        Card tmp = cards.get(i); //获取i下标的元素
        cards.set(i,cards.get(j)); //获取j下标的元素给i下标
        cards.set(j,tmp); //重置j下标的值为tmp
    }

    public static  void shuffle(List<Card> cards){  //洗牌
        int size = cards.size();  // size=52
        for (int i = size-1; i > 0; i--) {  //从最后一张牌开始换牌
            Random random = new Random(); //生成随机数
            int rand = random.nextInt(i); //生成0到i-1的下标
            swap(cards,i,rand);
        }
    }

    public static void main(String[] args) {
        List<Card> cards = buyCard();

        System.out.println("买牌:"+cards);

        shuffle(cards);
        System.out.println("洗牌:"+cards);

        System.out.println("揭牌:3个人每人轮流揭5张牌"); //一人一个List揭牌,轮流揭牌

        //二维数组--> hand 的每个元素是个List<Card>
        ArrayList<List<Card>> hand = new ArrayList<>();

        List<Card> hand1 = new ArrayList<>(); //一人一个List揭牌
        List<Card> hand2 = new ArrayList<>();
        List<Card> hand3 = new ArrayList<>();

        hand.add(hand1);
        hand.add(hand2);
        hand.add(hand3);

        //每个人轮流揭牌
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                Card card = cards.remove(0);  //揭到一张牌,说明移除了一张牌,第二张牌就变为了0下标
                                                    //每次揭牌,揭的都是数组0下标的牌
                hand.get(j).add(card); //第j个人揭牌
            }
        }
        System.out.println("第一个人的牌为:"+hand1);
        System.out.println("第二个人的牌为:"+hand2);
        System.out.println("第三个人的牌为:"+hand3);
        System.out.println("剩下的牌为:"+cards);
    }
}
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,编写扑克牌游戏的一般思路如下: 1. 定义扑克牌的类,包括花色、点数、是否是明牌等属性; 2. 定义扑克牌集合的类,包括所有扑克牌的集合、发牌、洗牌等方法; 3. 定义玩家类,包括手牌、牌面点数等属性,以及抽牌、出牌等方法; 4. 定义游戏类,包括游戏初始化、玩家出牌、判断胜负等方法。 以下是一个简单的 Java 代码示例,可以作为参考: ```java // 扑克牌类 class Card { String suit; // 花色 int rank; // 点数 boolean isFaceUp; // 是否明牌 Card(String suit, int rank) { this.suit = suit; this.rank = rank; this.isFaceUp = false; // 初始状态为背面朝上 } // 翻牌 void flip() { isFaceUp = !isFaceUp; } // 获取牌面点数 int getValue() { if (isFaceUp) { return rank; } else { return 0; } } } // 扑克牌集合类 class Deck { ArrayList<Card> cards; // 所有扑克牌的集合 Deck() { cards = new ArrayList<Card>(); String[] suits = {"Spades", "Hearts", "Diamonds", "Clubs"}; for (String suit : suits) { for (int rank = 1; rank <= 13; rank++) { Card card = new Card(suit, rank); cards.add(card); } } } // 洗牌 void shuffle() { Collections.shuffle(cards); } // 发牌 Card deal() { Card card = cards.get(0); cards.remove(0); return card; } } // 玩家类 class Player { String name; // 玩家名称 ArrayList<Card> hand; // 手牌 int score; // 牌面点数之和 Player(String name) { this.name = name; this.hand = new ArrayList<Card>(); this.score = 0; } // 抽牌 void drawCard(Deck deck) { Card card = deck.deal(); card.flip(); // 抽到的牌默认为明牌 hand.add(card); score += card.getValue(); } // 出牌 Card playCard(int index) { Card card = hand.get(index); card.flip(); // 出的牌翻面 hand.remove(index); score -= card.getValue(); return card; } } // 游戏类 class Game { Deck deck; // 扑克牌集合 ArrayList<Player> players; // 玩家集合 int currentPlayerIndex; // 当前玩家的下标 Game() { this.deck = new Deck(); this.players = new ArrayList<Player>(); this.currentPlayerIndex = 0; } // 初始化游戏 void init() { deck.shuffle(); for (int i = 1; i <= 4; i++) { Player player = new Player("Player " + i); for (int j = 1; j <= 5; j++) { player.drawCard(deck); } players.add(player); } } // 玩家出牌 void playCard(int index) { Player currentPlayer = players.get(currentPlayerIndex); Card card = currentPlayer.playCard(index); System.out.println(currentPlayer.name + " plays " + card.rank + " of " + card.suit); // 下一个玩家 currentPlayerIndex++; if (currentPlayerIndex >= players.size()) { currentPlayerIndex = 0; } } // 判断胜负 void checkWinner() { int maxScore = 0; Player winner = null; for (Player player : players) { if (player.score > maxScore) { maxScore = player.score; winner = player; } } System.out.println(winner.name + " wins with " + maxScore + " points!"); } } // 主程序 public class Main { public static void main(String[] args) { Game game = new Game(); game.init(); while (true) { System.out.println("Current player: " + game.players.get(game.currentPlayerIndex).name); Scanner scanner = new Scanner(System.in); System.out.print("Enter index of card to play (-1 to quit): "); int index = scanner.nextInt(); if (index == -1) { break; } game.playCard(index); } game.checkWinner(); } } ``` 这是一个简单的控制台程序,玩家可以通过输入 index 来出牌,每个玩家初始抽 5 张牌,玩家出完牌后程序会自动判断胜负。当然,你也可以按照自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值