package chess;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
//接口名称:ActionListener
public class ChessFrame extends JFrame implements ActionListener {
// 布局的容器 背景图片
JLabel mainLabel = new JLabel(new ImageIcon("case06/back.png"));
// 3.玩家图片
JLabel player = new JLabel(new ImageIcon("case06/blackmsg.png"));
JLabel comp = new JLabel(new ImageIcon("case06/whitemsg.png"));
// 设置悔棋,开始,最小化,关闭等按钮
JButton huiqi = new JButton(new ImageIcon("case06/huiqi.png"));
JButton start = new JButton(new ImageIcon("case06/start.png"));
JButton min = new JButton(new ImageIcon("case06/min.png"));
JButton close = new JButton(new ImageIcon("case06/close.png"));
// 创建菜单需要三个类
JMenuBar bar;// 告诉界面在某个区域内我是要放菜单的
JMenu game;// 这个才是我们真正的菜单
JMenuItem savegame, loadgame;// 主菜单的两个子菜单
// 创建画布类的对象
ChessJPanel panel = new ChessJPanel();
// 用来控制下子的先后顺序
boolean isBlack = false;
// 用来控制游戏的输赢
boolean isWin = false;
public ChessFrame() {
// 将画布放到背景图上
panel.setBounds(170, 85, 592, 592);
panel.setOpaque(false);// 去掉画布的白底
mainLabel.add(panel);
// 设置菜单的区域
bar = new JMenuBar();
bar.setBounds(10, 10, 100, 36);
mainLabel.add(bar);
// 在区域内放入主菜单
game = new JMenu();
game.setIcon(new ImageIcon("case06/bar.png"));
game.add(savegame = new JMenuItem("保存游戏"));
game.add(loadgame = new JMenuItem("加载游戏"));
bar.add(game);
// 4.加载玩家图片
player.setBounds(30, 90, 110, 110);
mainLabel.add(player);
comp.setBounds(770, 510, 110, 110);
mainLabel.add(comp);
// 设置悔棋按钮
huiqi.setBorderPainted(false);
huiqi.setContentAreaFilled(false);
huiqi.setBounds(30, 450, 100, 42);
mainLabel.add(huiqi);
// 设置重置按钮
start.setBorderPainted(false);
start.setContentAreaFilled(false);
start.setBounds(430, 10, 34, 34);
mainLabel.add(start);
// 设置最小化按钮
min.setBorderPainted(false);
min.setContentAreaFilled(false);
min.setBounds(830, 20, 14, 14);
mainLabel.add(min);
// 设置关闭按钮
close.setBorderPainted(false);
close.setContentAreaFilled(false);
close.setBounds(870, 20, 14, 14);
mainLabel.add(close);
// 2.将背景图放在窗口上
this.add(mainLabel);
this.setUndecorated(true);
this.setBounds(50, 30, 900, 700);
// 1.设置程序运行的小图标
this.setIconImage(new ImageIcon("case06/icon.jpg").getImage());
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setLocationRelativeTo(null);
// 给画布添加鼠标点击事件同时添加监听
// MouseAdapter这个类它自己本身实现了
// MouseListener和MouseMotionListerner
panel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
if (isWin) {
return;
}
// 获得鼠标的X,Y坐标
int x = e.getX();
int y = e.getY();
// 对鼠标的点进行处理 将像素转换成数组的下标
int i = Math.round((float) (y - ChessJPanel.LEFT_SPACE) / ChessJPanel.COL_SPACE);
int j = Math.round((float) (x - ChessJPanel.UP_SPACE) / ChessJPanel.ROW_SPACE);
panel.boradX = i;
panel.boradY = j;
// 判断是否有棋子
if (panel.chess[i][j] != 0) {// 如果此处有棋子
JOptionPane.showMessageDialog(ChessFrame.this, "此处有棋子,禁止下棋");
return;// 1.返回值 2.结束后面的代码执行
}
// 三目运算法
panel.chess[i][j] = isBlack ? 1 : 2;
// 当我的鼠标点击一下之后,就记录步数
String step=i+":"+j+":"+(isBlack?1:2);
System.out.println(step);
//往集合当中去添加步数
panel.stepchess.add(step);
panel.repaint();
// 判断输赢
if (panel.isUpAndDown(i, j) || panel.isLeftAndRight(i, j) || panel.isLeftUpAndRightDown(i, j)
|| panel.isRightUpAndLeftDown(i, j)) {
JOptionPane.showMessageDialog(ChessFrame.this, (isBlack ? "黑方胜利" : "白方胜利"));
isWin = true;
}
isBlack = !isBlack;
}
});
// 监听
min.addActionListener(this);
close.addActionListener(this);
start.addActionListener(this);
savegame.addActionListener(this);
loadgame.addActionListener(this);
huiqi.addActionListener(this);
}
public static void main(String[] args) {
new ChessFrame();
}
//接口名称:ActionListener
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == min) {
ChessFrame.this.setState(1);
}
if (e.getSource() == close) {
System.exit(0);
}
if(e.getSource()==start){
for (int i = 0; i < panel.chess.length; i++) {
for (int j = 0; j < panel.chess.length; j++) {
panel.chess[i][j]=0;
}
}
panel.boradX=-1;
panel.boradY=-1;
isWin=false;
panel.repaint();
}
if(e.getSource()==savegame){
//1.弹出一个保存文件的对话框
JFileChooser jfc=new JFileChooser();
jfc.showSaveDialog(this);
//2.获取用户选择的文件
File f=jfc.getSelectedFile();
panel.saveFile(f);
}
if(e.getSource()==loadgame){
JFileChooser jfc=new JFileChooser();
jfc.showOpenDialog(this);
//2.获得用户选择的文件
File f=jfc.getSelectedFile();
panel.loadFile(f);
}
if (e.getSource()==huiqi) {
ArrayList<String> step=panel.stepchess;
if(step.size()==0){
return;
}
String s=step.get(step.size()-1);
//split返回值为String类型的数组
String str[]=s.split(":");
//将字符串转化为整数Integer.parseInt
int i=Integer.parseInt(str[0]);
int j=Integer.parseInt(str[1]);
//悔棋第一步把二维数组的值变为0
panel.chess[i][j]=0;
isBlack=!isBlack;
if(step.size()==1){
panel.boradX=-1;
panel.boradY=-1;
panel.repaint();
//删除集合中的最后一位
step.remove(step.size()-1);
return;
}
//挪动红点到倒数第二位
String hd=step.get(step.size()-2);
String []strs=hd.split(":");
panel.boradX=Integer.parseInt(strs[0]);
panel.boradY=Integer.parseInt(strs[1]);
//删除集合中的最后一位
step.remove(step.size()-1);
panel.repaint();
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心下载使用。 java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心下载使用。 java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心下载使用。
资源推荐
资源详情
资源评论
收起资源包目录
Java小游戏.zip (167个子文件)
ChessFrame.class 5KB
ChessJPanel.class 5KB
BallJPanel.class 3KB
ChessFrame$1.class 2KB
BallJPanel.class 2KB
SoccerJPanel.class 2KB
BallJPanel2.class 2KB
BallJPanel1.class 2KB
BallJPanel.class 2KB
BallJPanel.class 2KB
SoccerJPanel$1.class 2KB
BallJPanel$1.class 2KB
BallJPanel$1.class 2KB
BallJPanel1$1.class 2KB
BallJPanel2$1.class 2KB
Ball.class 2KB
Array.class 2KB
CharJPanel.class 2KB
BallJPanel03.class 2KB
Ball.class 2KB
MyChar.class 1KB
BallJPanel$1.class 1KB
BallJPanel03$1.class 1KB
BallJPanel.class 1KB
Ball.class 1KB
SnowJPanel06.class 1KB
SnowJpanel03.class 1KB
SnowJpanel.class 1KB
SnowJpanel1.class 1KB
SnowJpanel02.class 1KB
SnowJPanel05.class 1KB
SnowJPanel08.class 1KB
SnowJpanel.class 1KB
BallJPanel$1.class 1KB
MethodDemo.class 1KB
Cup.class 1KB
自定义方法.class 1KB
CharGame.class 1KB
IfDemo.class 1KB
Computer.class 1KB
ArrDemo.class 1KB
CharJPanel$1.class 1006B
MoonJPanel.class 965B
SnowJframe.class 951B
Snow03.class 948B
Snow02.class 945B
MoonJFrame.class 943B
Snow04.class 937B
BallJFrame.class 899B
BallJPanel$1.class 898B
BallJFrame.class 896B
BallJFrame.class 896B
BallJFrame.class 896B
SnowJpanel03$1.class 895B
SnowJpanel02$1.class 893B
SnowJPanel05$1.class 891B
SnowJPanel08$1.class 891B
SnowJPanel06$1.class 891B
ArrDemo.class 888B
SnowJpanel1$1.class 886B
SnowJpanel$1.class 885B
Ball.class 883B
SnowJpanel$1.class 879B
Ball2.class 879B
MoveSnow01.class 877B
Snow01.class 876B
MoveSnow.class 873B
Ball.class 872B
Snow.class 867B
Snow04.class 844B
Snow06.class 844B
Snow05.class 844B
Snow02.class 844B
Snow03.class 844B
Snow.class 837B
Shoes.class 835B
BallJFrame.class 830B
SnowJpanel0.class 822B
MoonJPanel$1.class 819B
Soccer.class 819B
SnowJpanel1.class 819B
SnowJpanel3.class 814B
SnowJpanel2.class 813B
SnowJpanel4.class 813B
SnowJpanel7.class 810B
Aa.class 536B
Name.class 516B
Food.class 512B
Timee.class 509B
TimerTest.class 483B
MethodDemo.class 480B
Method01.class 476B
Method2.class 472B
.classpath 295B
.DS_Store 6KB
ChessFrame.java 6KB
ChessJPanel.java 5KB
BallJFrame.java 4KB
Soccer.java 4KB
BallJFrame.java 3KB
共 167 条
- 1
- 2
资源评论
白话机器学习
- 粉丝: 1w+
- 资源: 7670
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于STM32的智能家居系统全部资料+详细文档+优秀项目.zip
- 基于阿里云的智能家居控制APP全部资料+详细文档+优秀项目.zip
- 基于stm32智能家居项目全部资料+详细文档+优秀项目.zip
- 基于安卓与STM32通信硬件开发项目,实现安卓端控制家庭灯,窗帘,门,有毒有害其他报警等,全部资料+详细文档+优秀项目.zip
- 基于安卓的智能家居项目源码,通过Zigbee网络控制采集家居设备实现管理功能、全部资料+详细文档+优秀项目.zip
- 基于从零开始打造一个智能家居系统全部资料+详细文档+优秀项目.zip
- 基于单片机课程实践——智能家居系统(安卓端)全部资料+详细文档+优秀项目.zip
- 基于机智云平台打造的物联网智能家居一体化智能App、全部资料+详细文档+优秀项目.zip
- 基于电力线载波智能家居控制系统全部资料+详细文档+优秀项目.zip
- 基于使用Qt制作的智能家居上位机全部资料+详细文档+优秀项目.zip
- 基于使用“树莓派+Django+bootstrap”搭建的智能家居监控系统全部资料+详细文档+优秀项目.zip
- 基于米家智能门锁接入开源智能家居系统全部资料+详细文档+优秀项目.zip
- 基于使用STM32、ESP8266、微信小程序搭建的MQTT智能家居全部资料+详细文档+优秀项目.zip
- 基于树莓派Linux智能家居自定义语音助手, 全部资料+详细文档+优秀项目.zip
- 基于天猫精灵智能家居技能对接homeassistant全部资料+详细文档+优秀项目.zip
- 基于一组Python脚本程序,用来控制小米智能家居设备全部资料+详细文档+优秀项目.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功