懒羊羊学习号 2023-12-11 17:19 采纳率: 50%
浏览 19
已结题

JAVAswing,设计一个扑克牌什么的

img


要求!

  1. 里面有一个大体框架按框架写
  2. 还有文件包[里面是扑克牌样式]
  3. 要有注释,俺真的看不懂
    [待会会把大体代码贴出来]

    img

img

  • 写回答

10条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2023-12-11 17:22
    关注

    不好意思哈,由于时间问题,我这边只能帮你写到这里了,后续功能您可以自己新增编写。

    img

    仅供参考代码:

    
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.*;
    import java.util.List;
    
    public class MyFrame1 {
        private Card[] playerCards = new Card[13];
        private Set<String> computerHand = new HashSet<>();  // 机器人手牌集合
        private JTextArea infoTextArea;
    
        public MyFrame1() {
            JFrame f = new JFrame("使用标签作窗体背景");
            Toolkit tk = Toolkit.getDefaultToolkit();
            int w = (int) tk.getScreenSize().getWidth();
            int h = (int) tk.getScreenSize().getHeight();
            Container cp = f.getContentPane();
            cp.setLayout(null);
            ImageIcon bj = new ImageIcon("C:\\Users\\caozhen\\Desktop\\扑克\\扑克牌\\img\\bj.jpg");
            JLabel jl = new JLabel(bj);
            jl.setBounds(0, 0, w, h);
            cp.add(jl);
    
            JLayeredPane jp = f.getLayeredPane();
    
            // 添加玩家信息
            JLabel playerLabel = new JLabel("玩家:学号123,姓名张三");
            playerLabel.setBounds(10, 10, 200, 20);
            jp.add(playerLabel, new Integer(100));
    
            // 添加开始按钮
            JButton startButton = new JButton("开始");
            startButton.setBounds(10, 40, 80, 30);
            jp.add(startButton, new Integer(100));
    
            // 初始化玩家和机器玩家的牌
            initializeCards();
    
            // 添加信息提示的多文本框
            infoTextArea = new JTextArea();
            infoTextArea.setBounds(w - 250, 100, 200, 400);
            infoTextArea.setEditable(false);
            jp.add(infoTextArea, new Integer(100));
    
            // 为每个按钮添加监听器
            for (int i = 0; i < 13; i++) {
                final Card playerCard = playerCards[i];
                ImageIcon pkImg = playerCard.getImage();
                JButton jb = new JButton(pkImg);
                jb.setBounds(100 + 80 * i, 500, 134, 201);
                jp.add(jb, new Integer(i));
    
                jb.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        // 处理按钮点击事件
                        handleButtonClick(playerCard);
                    }
                });
            }
    
            for (int i = 0; i < 13; i++) {
                Card computerCard = getRandomCard();
                computerHand.add(computerCard.getName());  // 将机器人的手牌加入集合
                ImageIcon pkImg = computerCard.getImage();
                JButton jb = new JButton(pkImg);
                jb.setBounds(100 + 80 * i, 100, 134, 201);
                jp.add(jb, new Integer(i + 13));
    
                jb.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        // 处理机器玩家按钮点击事件
                        handleButtonClick(computerCard);
                    }
                });
            }
    
            f.setExtendedState(JFrame.MAXIMIZED_BOTH);
            f.setVisible(true);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    
        private void initializeCards() {
            // 初始化玩家的牌
            for (int i = 0; i < 13; i++) {
                playerCards[i] = getRandomCard();
            }
        }
    
        private void handleButtonClick(Card card) {
            // 处理按钮点击事件
            System.out.println("Button Clicked: " + card.getName());
    
            // 在信息提示框中显示出牌信息
            infoTextArea.append("玩家出牌:" + card.getName() + "\n");
    
            // 机器人出牌
            Card computerCard = getRandomComputerCard();
            infoTextArea.append("机器玩家出牌:" + computerCard.getName() + "\n");
        }
    
        private Card getRandomCard() {
            String[] suits = {"fang", "hei", "hong", "mei"};
            String suit = suits[new Random().nextInt(suits.length)];
            int number = new Random().nextInt(13) + 1;
            String cardName = suit + number;
            String imagePath = "C:\\Users\\caozhen\\Desktop\\扑克\\扑克牌\\img\\" + suit + number + ".jpg";
            return new Card(cardName, new ImageIcon(imagePath));
        }
    
        private Card getRandomComputerCard() {
            // 从机器人手牌集合中随机选一张牌
            List<String> handList = new ArrayList<>(computerHand);
            String randomCardName = handList.get(new Random().nextInt(handList.size()));
            return new Card(randomCardName, null);  // 这里暂时不设置图像
        }
    
        public static void main(String[] args) {
            MyFrame1 mf = new MyFrame1();
        }
    
        private static class Card {
            private String name;
            private ImageIcon image;
    
            public Card(String name, ImageIcon image) {
                this.name = name;
                this.image = image;
            }
    
            public String getName() {
                return name;
            }
    
            public ImageIcon getImage() {
                return image;
            }
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(9条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月15日
  • 已采纳回答 12月14日
  • 修改了问题 12月11日
  • 创建了问题 12月11日

悬赏问题

  • ¥15 关于#python#的问题:在跑ldsc数据整理的时候一直抱这种错误,要么--out识别不了参数,要么--merge-alleles识别不了参数(操作系统-linux)
  • ¥15 PPOCRLabel
  • ¥15 网友们我该怎么办啊,急
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 目标跟踪,计算机视觉
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏
  • ¥15 Windows Server2016本地登录失败