长师数科Java实训(拼图游戏)
2024-01-08 04:38:36
长师数科Java实训(拼图游戏)
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
例如:长江师范学院数科专业大二下Java期末实训拼图游戏
提示:以下是本篇文章正文内容,下面案例可供参考
一、源码
public class game_jframe extends JFrame implements KeyListener,ActionListener{
int[][] data=new int[3][3];
int x,y;//表示空白图片的位置
//定义表示胜利的数组
private int[][] win = new int[][]{
{0, 1, 2},
{3, 4, 5},
{6, 7, 8}
};
JMenuItem j1=new JMenuItem("重新游戏");
JMenuItem j2=new JMenuItem("结束游戏");
JMenuItem j3=new JMenuItem("关于游戏");
JMenuItem j4=new JMenuItem("按w可一键通关");
public game_jframe() {
chuangti();
caidan();
daluan();
image();
this.addKeyListener(this);
this.setVisible(true);//可视化
}
private int stepCount; //统计步数
//窗体搭建
public void chuangti() {
this.setTitle("拼图游戏");//创建标题
this.setSize(1000,700);//设置窗体大小
this.setAlwaysOnTop(true);//页面锁定置前
this.setLocationRelativeTo(null);//将页面居中
this.setDefaultCloseOperation(3);//设置关闭模式
this.setLayout(null);//取消默认的排列方式
}
//菜单搭建
public void caidan() {
JMenuBar jmbar=new JMenuBar();
// JMenu jm=new JMenu("菜单");
j1.addActionListener(this);
j2.addActionListener(this);
j3.addActionListener(this);
j4.addActionListener(this);
// jm.add(j1);
// jm.add(j2);
// jm.add(j3);
jmbar.add(j1);
jmbar.add(j2);
jmbar.add(j3);
jmbar.add(j4);
this.setJMenuBar(jmbar);
}
//加载图片
public void image() {
this.getContentPane().removeAll();//删除原来的图片
//开始插入图片
if (isVictory()) {//判断是否胜利
JLabel winJLabel = new JLabel(new ImageIcon("images\\win.png"));
winJLabel.setBounds(203, 283, 197, 73);
this.getContentPane().add(winJLabel);
}
for(int i=0;i<3;i++) {
for(int j=0;j<3;j++) {
ImageIcon imag=new ImageIcon("images\\"+data[i][j]+".jpg");
JLabel jl=new JLabel(imag);
jl.setBounds(j*100+140,i*100+140,100,100);
jl.setBorder(new BevelBorder(1));
this.getContentPane().add(jl);
}
}
//加载步数显示
JLabel step = new JLabel("步数:" + stepCount);
step.setBounds(50, 30, 150, 40);
this.getContentPane().add(step);
//插入背景图篇
ImageIcon im=new ImageIcon("images\\back.jpg");
ImageIcon im1=new ImageIcon("images\\小新.jpg");
JLabel jl=new JLabel(im);
JLabel jl1=new JLabel(im1);
jl.setBounds(450,100,390,390);
jl1.setBounds(-100,0,1200,700);
this.getContentPane().add(jl);
this.getContentPane().add(jl1);
this.repaint();//刷新
}
public boolean isVictory() {//胜利判断
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[0].length; j++) {
if (data[i][j] != win[i][j]) return false;
}
}
return true;
}
//打乱图片
public void daluan() {
int[] t={0,1,2,3,4,5,6,7,8};
Random r=new Random();//随机函数打断图片
for(int i=0;i<9;i++) {
int index=r.nextInt(9);
int c=t[index];
t[index]=t[i];
t[i]=c;
}
for(int i=0;i<9;i++) {
if(t[i]==0) {
x=i/3;
y=i%3;
}
data[i/3][i%3]=t[i];
}
}
@Override
public void keyTyped(KeyEvent e) {//接口方法
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
int code=e.getKeyCode();//获得键盘
System.out.println(code);
if(code==40) {
//下
if(x==2) {
return ;
}
int c;
c=data[x][y];
data[x][y]=data[x+1][y];
data[x+1][y]=c;
x++;
stepCount++;
image();
}
else if(code==39) {
//右
if(y==2) {
return ;
}
int c=data[x][y];
data[x][y]=data[x][y+1];
data[x][y+1]=c;
y++;
stepCount++;
image();
}
else if(code==38) {
//上
if(x==0) {
return ;
}
int c=data[x][y];
data[x][y]=data[x-1][y];
data[x-1][y]=c;
x--;
stepCount++;
image();//加载图片
}
else if(code==37) {
//左
if(y==0) {
return ;
}
int c=data[x][y];
data[x][y]=data[x][y-1];
data[x][y-1]=c;
y--;
stepCount++;
image();
}else if (code == 65) { //press A -> 查看高清大图
//清空界面的所有图片
this.getContentPane().removeAll();
//重新加载一张完整的图片
JLabel all = new JLabel(new ImageIcon("images\\back 2.jpg"));
all.setBounds(-100,0,1200,700);
this.getContentPane().add(all);
//刷新界面
this.getContentPane().repaint();
}
else if (code == 87) { //press W -> 一键通关
data = new int[][]{
{0, 1, 2},
{3, 4, 5},
{6, 7, 8}
};
image();
}
//后面你可以自己分支中再定义一些快捷键
}
@Override
public void actionPerformed(ActionEvent e) {
Object s=e.getSource();//获取点击事件
if(s==j1) {
//重新游戏
System.out.println("重新游戏");
stepCount=0;
daluan();
image();
}
else if(s==j2) {
//结束游戏
System.out.println("结束游戏");
System.exit(0);
}
else if(s==j3) {
//关于游戏
//创建弹框对象
JDialog jDialog = new JDialog();
//创建JLabel对象
JLabel jLabel = new JLabel(" 是一个由Java编译的拼图小游戏,按A健可查看高清大图,按w健可一键通关");
jLabel.setBounds(0, 0, 480, 480); //jLabel设置大小
jDialog.getContentPane().add(jLabel); //添加jLabel
jDialog.setSize(550, 200); //弹框设置大小
jDialog.setAlwaysOnTop(true); //弹框置顶
jDialog.setLocationRelativeTo(null); //弹框居中
jDialog.setModal(true); //不关闭弹框无法进行游戏
jDialog.setVisible(true); //显示弹框
}
// else if(s==j4) {
// }
}
}
二、使用步骤
1.引入库
代码如下(示例):
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
// import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.border.BevelBorder;
2.主函数
public class test{
public static void main(String[] args) {
new game_jframe();
}
}
3.源码
上面的源码
三.效果
总结
提示:这里对文章进行总结:
可以简单的用Java实训一个拼图游戏,用键盘控制,可重新开始,一键通关
长师数科Java实训(拼图游戏)
文章来源:https://blog.csdn.net/qinlin_K/article/details/135418433
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!