集团游戏

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;

java扑克牌图片路径、java编写简单的扑克牌

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. 类结构

结构

  • Card类:表示单张扑克牌,包含花色和点数
  • Deck类:表示整副扑克牌,包含初始化、洗牌和发牌功能
  • Player类:表示玩家,管理手牌和计算点数
  • PokerGame类:提供图形用户界面
  • 2. 功能特点

  • 使用标准52张扑克牌
  • 实现洗牌功能
  • 支持发牌操作
  • 计算手牌点数(考虑A的特殊规则)
  • 简单的21点游戏逻辑
  • 图形化界面
  • 3. 运行方式

    直接运行PokerGame类的main方法即可启动游戏。

    4. 游戏规则

  • 点击"发牌"按钮获得一张新牌
  • 目标是使手牌点数尽可能接近21点但不超出
  • 超过21点为"爆牌",游戏结束
  • 点击"重新开始"按钮可重置游戏
  • 这个程序展示了Java面向对象编程的基本概念,包括类的设计、集合的使用和GUI编程。你可以根据需要进一步扩展功能,比如添加多个玩家、实现更复杂的游戏规则或改进图形界面。