基于JAVA的课程设计《智能捡火柴小程序》

因为时间较长,内容较多,仅提供代码进行沟通交流,因为笔者水平不足,仍然有较多的bug没有进行处理,不提供代码运行界面以及界面的图片

Main:

package 智能捡火柴小游戏;

class Main {
    public static void main(String[] args) {
        new Display().DisplayIt();
    }
}

Config:

package 智能捡火柴小游戏;

class Config {
    private boolean isStart;
    private String aiLv;
    private int matchNum;
    private int mode;
    private String player;
    private boolean pre;
    private  AI ai;
    private int matchs;
    private boolean first;
    Config(){
        isStart = false;
        aiLv = "简单";
        matchNum =0;
        mode = 1;
        pre = false;
    }
    int getMatchNum() {
        return matchNum;
    }
    int getMode() {
        return mode;
    }
    void setMode(int mode) {
        this.mode = mode;
    }
    boolean getPre(){
        return pre;
    }
    String getAiLv(){
        return aiLv;
    }
    void setAiLv(String lv){
        aiLv = lv;
    }
    String dataOut(){
        return  "玩家先手" + pre;
    }
    void set(boolean pre){
        this.pre = pre;
    }
    boolean isStart(){
        return isStart;
    }
    void setMatches(int n){
        this.matchs=n;
    }
    int getMatches(){
        return matchs;
    }
    boolean start(){
        if(isStart)
            return false;
        else {
            isStart = true;
            matchNum = (int) (Math.random()*31+20);
            if(mode == 1){
                if(pre){
                    player="玩家1";
                }else{
                 player="电脑";
                }
                if(aiLv.equals("简单"))
                    ai = new EasyAi();
                else if (!pre) {
                    ai = new DifficultAi1();
                }else if(pre){
                    ai = new DifficultAi2();
                }

            }else{
                player="玩家1";
            }
            first=true;
            return true;
        }
    }
    void setPlayer(String player){
        this.player=player;
    }
    void stop(){
        isStart=false;
    }
    void remove(int num){
        matchNum -= num;
    }
    int ai(){
        int drop = ai.index(matchNum,matchs,first);
        if(first){
            first=false;
        }
        if(drop>0&&matchNum>0) {
            matchNum -= drop;
        }
        return drop;
    }
    String getPlayer(){
        return player;
    }
}

Display:

package 智能捡火柴小游戏;

import javax.swing.*;
import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.awt.event.*;
import java.util.Date;

class Display {
    public Config config;
    private JFrame frame, frame2;
    private DateFormat df = new SimpleDateFormat("HH:mm:ss");
    private JMenuBar bar;
    private JMenu mode, set, help;
    private JMenuItem pc, pp;
    private JMenuItem SystemSet, AiSet;
    private JMenuItem rule, about;
    private final static String RUL = "游戏规则:\n系统随机产生总数在 20-50 范围内的火柴。\n" + "用户可以选择和用户进行游戏、或者和电脑进行游戏。\n轮流捡起火柴,每次捡起 1-3 根,以捡起最后一根为胜利。\n\n操作方法:\nstart:开始游戏\nstop:结束游戏";
    private final static String VER = "智能捡火柴小游戏 \n\n版本号:V1.0\n\n开发者:SmashDreams\n开发时间:2022年6月";
    private final static Object[] AI = {"简单", "困难"};
    private ImageIcon bg, ks, play, way1, way2, dts1, dts2, p1_1, p2_1, c1_1, hc2_1, hc2_2, hc2_3, c_1, c_2, c_3, c_4,restart_1;
    private JLabel bglabel, playlabel, p1, p2, computer, hc2;
    private JButton start, choice1, choice2, choice3, choice4, c1, c2, c3, c4, c5, c6, c7,restart;
    private JLabel num, mode1, mode2;
    private TextArea log;
    public int n;
    Display() {
        config=new Config();
        frame = new JFrame("智能捡火柴小游戏");
        bar = new JMenuBar();
        mode = new JMenu("模式(M)");
        mode.setMnemonic(KeyEvent.VK_M);
        pc = new JMenuItem("人机对战(当前)");
        pc.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK));
        pp = new JMenuItem("玩家对战");
        pp.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_DOWN_MASK));
        set = new JMenu("设置(S)");
        set.setMnemonic(KeyEvent.VK_S);
        SystemSet = new JMenuItem("系统设置");
        SystemSet.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK));
        AiSet = new JMenuItem("AI 设置");
        AiSet.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_DOWN_MASK));
        help = new JMenu("帮助(H)");
        help.setMnemonic(KeyEvent.VK_H);
        rule = new JMenuItem("游戏帮助");
        rule.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_DOWN_MASK));
        about = new JMenuItem("关于");
        about.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_DOWN_MASK));
        bg = new ImageIcon("首页.png");
        bglabel = new JLabel(bg);
        bglabel.setBounds(0, 0, bg.getIconWidth(), bg.getIconHeight());
        start = new JButton();
        start.setBounds(800, 600, 200, 100);
        ks = new ImageIcon("开始游戏.png");
        ks.setImage(ks.getImage().getScaledInstance(200, 100, Image.SCALE_DEFAULT));
        start.setIcon(ks);
        start.setBorderPainted(false);
        start.setBorder(null);
        start.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        start.setContentAreaFilled(false);
        play = new ImageIcon("游戏界面.png");
        playlabel = new JLabel(play);
        playlabel.setBounds(0, 0, play.getIconWidth(), play.getIconHeight());
        Font font = new Font("宋体", Font.PLAIN, 35);
        Font font2 = new Font("宋体", Font.PLAIN, 20);
        mode1 = new JLabel("请选择游戏模式");
        mode1.setBounds(800, 300, 300, 100);
        mode1.setFont(font);
        choice1 = new JButton();
        choice1.setBounds(700, 400, 200, 60);
        way1 = new ImageIcon("人机对战.png");
        way1.setImage(way1.getImage().getScaledInstance(200, 60, Image.SCALE_DEFAULT));
        choice1.setIcon(way1);
        choice1.setBorderPainted(false);
        choice1.setBorder(null);
        choice1.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        choice1.setContentAreaFilled(false);
        choice2 = new JButton();
        choice2.setBounds(950, 400, 200, 60);
        way2 = new ImageIcon("玩家对战.png");
        way2.setImage(way2.getImage().getScaledInstance(200, 60, Image.SCALE_DEFAULT));
        choice2.setIcon(way2);
        choice2.setBorderPainted(false);
        choice2.setBorder(null);
        choice2.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        choice2.setContentAreaFilled(false);
        mode2 = new JLabel("请选择电脑难度");
        mode2.setBounds(800, 300, 300, 100);
        mode2.setFont(font);
        choice3 = new JButton();
        choice3.setBounds(700, 400, 200, 60);
        dts1 = new ImageIcon("简单.png");
        dts1.setImage(dts1.getImage().getScaledInstance(200, 60, Image.SCALE_DEFAULT));
        choice3.setIcon(dts1);
        choice3.setBorderPainted(false);
        choice3.setBorder(null);
        choice3.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        choice3.setContentAreaFilled(false);
        choice4 = new JButton();
        choice4.setBounds(950, 400, 200, 60);
        dts2 = new ImageIcon("困难.png");
        dts2.setImage(dts2.getImage().getScaledInstance(200, 60, Image.SCALE_DEFAULT));
        choice4.setIcon(dts2);
        choice4.setBorderPainted(false);
        choice4.setBorder(null);
        choice4.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        choice4.setContentAreaFilled(false);
        num = new JLabel("火柴的个数为:");
        num.setBounds(780, 30, 300, 100);
        num.setFont(font);
        log = new TextArea("",20,20,log.SCROLLBARS_VERTICAL_ONLY);
        //Border border = BorderFactory.createLineBorder(Color.BLACK, 3);
        log.setBounds(700, 340, 450, 530);
        log.setFont(font2);
        log.setEditable(false);
        p1_1 = new ImageIcon("玩家1.png");
        p1 = new JLabel(p1_1);
        p1.setBounds(350, 200, p1_1.getIconWidth(), p1_1.getIconHeight());
        p1.setOpaque(false);
        p2_1 = new ImageIcon("玩家2.png");
        p2 = new JLabel(p2_1);
        p2.setBounds(1250, 200, p2_1.getIconWidth(), p2_1.getIconHeight());
        p2.setOpaque(false);
        c1_1 = new ImageIcon("电脑.png");
        computer = new JLabel(c1_1);
        computer.setBounds(1250, 200, c1_1.getIconWidth(), c1_1.getIconHeight());
        computer.setOpaque(false);
        hc2_1 &
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java火柴游戏设计可以分为以下几个方面: 1. 定义游戏规则:取火柴游戏的规则可以根据实际需要自定义,比如可以定义每次取的火柴数量、起始的火柴数量、取火柴的顺序等。 2. 设计游戏界面:可以使用Java Swing或JavaFX来设计游戏界面,包括游戏标题、火柴数量、玩家信息、操作按钮等。 3. 实现游戏逻辑:游戏逻辑包括火柴数量的更新、玩家的操作、游戏结果的判断等,需要使用Java编写相关代码。 下面是一个简单的Java火柴游戏的设计示例: ``` import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MatchstickGame extends JFrame { private int matchsticks = 21; private JLabel matchstickLabel; public MatchstickGame() { super("取火柴游戏"); setLayout(new FlowLayout()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 200); JLabel titleLabel = new JLabel("取火柴游戏"); titleLabel.setFont(new Font("微软雅黑", Font.BOLD, 20)); add(titleLabel); matchstickLabel = new JLabel("火柴数量:" + matchsticks); matchstickLabel.setFont(new Font("微软雅黑", Font.PLAIN, 16)); add(matchstickLabel); JButton oneButton = new JButton("取1根"); oneButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { takeMatchsticks(1); } }); add(oneButton); JButton twoButton = new JButton("取2根"); twoButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { takeMatchsticks(2); } }); add(twoButton); JButton threeButton = new JButton("取3根"); threeButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { takeMatchsticks(3); } }); add(threeButton); JButton fourButton = new JButton("取4根"); fourButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { takeMatchsticks(4); } }); add(fourButton); setVisible(true); } private void takeMatchsticks(int num) { if (num < 1 || num > 4 || num > matchsticks) { JOptionPane.showMessageDialog(this, "无效的输入,请重新输入!"); return; } matchsticks -= num; matchstickLabel.setText("火柴数量:" + matchsticks); if (matchsticks == 0) { JOptionPane.showMessageDialog(this, "你输了!"); System.exit(0); } int computerNum = (5 - num); matchsticks -= computerNum; matchstickLabel.setText("火柴数量:" + matchsticks); if (matchsticks == 0) { JOptionPane.showMessageDialog(this, "你赢了!"); System.exit(0); } } public static void main(String[] args) { MatchstickGame game = new MatchstickGame(); } } ``` 这个程序使用了Java Swing来实现游戏界面,包括取火柴的按钮和火柴数量的显示。在按钮的ActionListener中,根据玩家取火柴的数量来更新火柴数量,并且根据游戏规则让电脑也取火柴。当火柴数量为0时,根据最后一次取火柴的玩家判断游戏胜负。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值