java扑克牌图片路径、java编写简单的扑克牌
下面是一个完整的Java扑克牌程序,包括卡片类、游戏逻辑和图形显示:
java
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
// 扑克牌类
class Card {
private final String suit; // 花色
private final String rank; // 点数
public static final String[] SUITS = {"♠", "♥", "♦", "♣"};
public static final String[] RANKS = {"A", "2", "3", "4", "5", "6", "7",
8", "9", "10", "J", "Q", "K"};
public Card(String suit, String rank) {
this.suit = suit;
this.rank = rank;
public String getSuit {
return suit;
public String getRank {
return rank;
@Override
public String toString {
return suit + rank;
// 扑克牌组类
class Deck {
private List cards;
public Deck {
cards = new ArrayList;
initializeDeck;
// 初始化一副标准的52张扑克牌
private void initializeDeck {
for (String suit : Card.SUITS) {
for (String rank : Card.RANKS) {
cards.add(new Card(suit, rank));
// 洗牌
public void shuffle {
Collections.shuffle(cards);
// 发一张牌
public Card dealCard {
if (cards.isEmpty) {
return null;
return cards.remove(0);
// 返回剩余牌数
public int remainingCards {
return cards.size;
// 重置牌组
public void reset {
cards.clear;
initializeDeck;
// 玩家类
class Player {
private String name;
private List hand;
public Player(String name) {
this.name = name;
hand = new ArrayList;
public String getName {
return name;
// 玩家获得一张牌
public void receiveCard(Card card) {
if (card != null) {
hand.add(card);
// 查看手牌
悟空黑桃a官网在哪public List getHand {
return new ArrayList(hand);
// 清空手牌
public void clearHand {
hand.clear;
// 计算手牌点数
public int calculatePoints {
int points = 0;
int aceCount = 0;
for (Card card : hand) {
String rank = card.getRank;
if ("A".equals(rank)) {
points += 11;
aceCount++;
} else if ("JQK".contains(rank)) {
points += 10;
} else {
points += Integer.parseInt(rank);
// 调整A的点数
while (points > 21 && aceCount > 0) {
points -= 10; // 将A从11点调整为1点
aceCount--;
return points;
@Override
public String toString {
return name + "的手牌: " + hand + " (点数: " + calculatePoints + ")";
// 图形界面类
public class PokerGame extends JFrame {
private Deck deck;
private Player player;
private JTextArea textArea;
private JButton dealButton;
private JButton resetButton;
public PokerGame {
deck = new Deck;
player = new Player("玩家");
initializeUI;
private void initializeUI {
setTitle("Java扑克牌游戏");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
// 创建主面板
JPanel mainPanel = new JPanel(new BorderLayout);
// 创建文本区域显示信息
textArea = new JTextArea;
textArea.setEditable(false);
textArea.setFont(new Font("宋体", Font.PLAIN, 14));
mainPanel.add(new JScrollPane(textArea), BorderLayout.CENTER);
// 创建按钮面板
JPanel buttonPanel = new JPanel;
dealButton = new JButton("发牌");
resetButton = new JButton("重新开始");
dealButton.addActionListener(e -> dealCard);
resetButton.addActionListener(e -> resetGame);
buttonPanel.add(dealButton);
buttonPanel.add(resetButton);
mainPanel.add(buttonPanel, BorderLayout.SOUTH);
add(mainPanel);
// 初始消息
updateDisplay;
private void dealCard {
if (deck.remainingCards > 0) {
Card card = deck.dealCard;
player.receiveCard(card);
updateDisplay;
// 检查是否爆牌
if (player.calculatePoints > 21) {
textArea.append("\
爆牌了!游戏结束!\
);
dealButton.setEnabled(false);
} else {
textArea.append("\
牌已经发完了!\
);
dealButton.setEnabled(false);
private void resetGame {
deck.reset;
deck.shuffle;
player.clearHand;
dealButton.setEnabled(true);
updateDisplay;
private void updateDisplay {
StringBuilder sb = new StringBuilder;
sb.append("欢迎来到21点游戏!\
);
sb.append(player.toString).append("\
);
sb.append("剩余牌数: ").append(deck.remainingCards).append("\
);
textArea.setText(sb.toString);
public static void main(String[] args) {
SwingUtilities.invokeLater( -> {
new PokerGame.setVisible(true);
});
程序说明
1. 类结构
结构
2. 功能特点
3. 运行方式
直接运行PokerGame类的main方法即可启动游戏。
4. 游戏规则
这个程序展示了Java面向对象编程的基本概念,包括类的设计、集合的使用和GUI编程。你可以根据需要进一步扩展功能,比如添加多个玩家、实现更复杂的游戏规则或改进图形界面。