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編程。你可以根據需要進一步擴展功能,比如添加多個玩家、實現更復雜的游戲規則或改進圖形界面。