因为时间较长,内容较多,仅提供代码进行沟通交流,因为笔者水平不足,仍然有较多的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 &