JAVASE 游戏

news/2024/5/2 21:40:00

朴素的拼图游戏,通过WASD移动,我自己都不太会,可以通过篡改内部代码来取得想要的成功彩蛋

代码:

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.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;public class MainFrame extends JFrame implements KeyListener, ActionListener{//继承父类非私有方法,方便创建新的方法public static void main(String[] args) {// TODO Auto-generated method stubnew MainFrame();}String path = "A";int[][] datas = { 	{1, 2, 3},{4, 5, 6},{7, 8, 0}};int fx = datas.length - 1, fy = datas.length - 1;int count = -1;//记录移动次数JMenuItem item1 = new JMenuItem("打乱");JMenuItem item2 = new JMenuItem("复原");boolean selfdo = false;//构造器
public MainFrame(){initFrame();pantview();//放在这里更保险initmemu();//初始化菜单this.addKeyListener(this);setVisible(true);//设置窗体可见
}//界面初始化
public void initFrame(){ setTitle("游戏");setSize(804, 534);//设置尺寸setLocationRelativeTo(null);//设置窗体居中setAlwaysOnTop(true);//设置窗体置顶setDefaultCloseOperation(3);//设置窗体的关闭模式//取消窗口默认布局setLayout(null);
}/*菜单*/
public void initmemu() {JMenuBar menu = new JMenuBar();//菜单框JMenu menu1 = new JMenu("菜单"); JMenu menu2 = new JMenu("关于我们");//一阶菜单JMenu menu3 = new JMenu("作者");JMenuItem item3 = new JMenuItem("Narnat");JMenu menu4 = new JMenu("指导者");JMenuItem item4 = new JMenuItem("黑马程序员");//串起来menu.add(menu1);menu.add(menu2);menu1.add(item1);menu1.add(item2);menu2.add(menu3);menu3.add(item3);menu2.add(menu4);menu4.add(item4);/*只要监听运行一次就会一直监听*/item1.addActionListener(this);item2.addActionListener(this);setJMenuBar(menu);//放入窗体
}//图片放映
public void pantview(){ 	/*先移除掉原有的画面*/getContentPane().removeAll();count ++;//System.out.println(selfdo + " " + checkVictory());pantVictory(selfdo && checkVictory());//画出成功for(int i = 0; i < 3; i ++)for(int j = 0; j < 3; j ++) {JLabel image = new JLabel(new ImageIcon("D:\\New_Study\\JAVA\\gameJAVA\\" + datas[i][j] + ".png"));//读取图片image.setBounds(100 + 202 * j, 100 + 112 * i, 200, 110);getContentPane().add(image);//将图片放入窗口}JLabel background = new JLabel(new ImageIcon("D:\\New_Study\\JAVA\\gameJAVA\\background.png"));//放入背景background.setBounds(100, 100, 604, 334);//后放的图片放在下面getContentPane().add(background);JLabel scoreshow = new JLabel("步数: " + count);scoreshow.setBounds(100, 80, 100, 20);getContentPane().add(scoreshow);//装入窗口getContentPane().repaint();//刷新界面
}@Override
public void keyTyped(KeyEvent e) {}//较多按键监视不到@Override
/*按键被按下*/
public void keyPressed(KeyEvent e) {// TODO Auto-generated method stubint keycode = e.getKeyCode();if(keycode == 87) {//上MoveUp();}else if(keycode == 83) {//下MoveDown();}else if(keycode == 65) {//左MoveLeft();}else if(keycode == 68) {//右MoveRight();}else {}}@Override
/*按键松开*/
public void keyReleased(KeyEvent e) {// TODO Auto-generated method stub}public void MoveLeft() {// TODO Auto-generated method stubif(fy + 1 >= 0 && fy + 1 < datas.length) {swap(fx, fy, fx, fy + 1);pantview();//重新绘制界面 }}public void MoveRight() {// TODO Auto-generated method stubif(fy - 1 >= 0 && fy - 1 < datas.length) {swap(fx, fy, fx, fy - 1);pantview();//重新绘制界面 }
}public void MoveDown(){// TODO Auto-generated method stubif(fx - 1 >= 0 && fx - 1 < datas.length) {swap(fx, fy, fx - 1, fy);pantview();//重新绘制界面 }
}public void MoveUp() {// TODO Auto-generated method stubif(fx + 1 >= 0 && fx + 1 < datas.length) {swap(fx, fy, fx + 1, fy);pantview();//重新绘制界面 }
}public void swap(int xx, int yy, int x, int y) {int temp = datas[xx][yy];datas[xx][yy] = datas[x][y];datas[x][y] = temp; fx = x;fy = y;
}@Override
/*监听菜单*/
public void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif(e.getSource() == item1) {selfdo = true;//再次完成拼图会出现成功画面changeAll();count = -1;pantview();}else if(e.getSource() == item2) {selfdo = false;//再次完成拼图不会出现成功画面recoverAll();count = -1;pantview();}
}
public void changeAll() {int len = datas.length * datas.length;int nums[] = new int[len];nums[len - 1] = 0;int x = 1;for(int i = 0; i < len - 1; i ++) nums[i] = x ++;Random r = new Random();//产生随机数for(int j = 0; j < len - 1; j ++) {//最后一位不做处理int index = r.nextInt(len - 1);//[0 ~ len - 1)随机数int temp = nums[j];nums[j] = nums[index];nums[index] = temp;}int length = (int)Math.abs(Math.sqrt(len));for(int i = 0; i < len; i++) datas[i / length][i % length] = nums[i];//重新记录空格位置fx = length - 1;fy = length - 1;
}
public void recoverAll() {int len = datas.length;datas[len - 1][len - 1] = 0;int x = 1;for(int i = 0; i < len; i ++)for(int j = 0; j < len; j ++) datas[i][j] = x ++;//记录空格位置fx = len - 1;fy = len - 1;
}
public boolean checkVictory() {int x = 1;int len = datas.length;for(int i = 0; i < len; i ++)for(int j = 0; j < len; j ++) {if(i == len - 1 && j == len - 1) return true;//最后一个不用检查if(datas[i][j] != x ++) return false;}return true;
}
public void pantVictory(boolean whodo) {if(whodo) {if(count <= 50) path = "A";else if(count <= 100) path = "B";else if(count <= 500) path = "C";else path = "D";System.out.println("成功");JLabel victory = new JLabel(new ImageIcon("D:\\New_Study\\JAVA\\gameJAVA\\"+ path +"_victory.jpg"));//成功画面victory.setBounds(252, 117, 300, 300);getContentPane().add(victory);//写入画框selfdo = false;}
}
}

调用的文件图片:

在这里插入图片描述

图片下载:
百度网盘:
https://pan.baidu.com/s/1ELlMZXXSqGCE8Dsyl1ETNQ?pwd=e1z8
提取:e1z8

运行效果:

在这里插入图片描述

移动:通过WASD移动

打乱功能效果:

在这里插入图片描述

复原功能效果:

在这里插入图片描述

成功功能效果:

根据步数不同效果分别为:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.tangninghui.cn.cn/item-131.htm

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

竞赛 基于机器视觉的行人口罩佩戴检测

简介 2020新冠爆发以来&#xff0c;疫情牵动着全国人民的心&#xff0c;一线医护工作者在最前线抗击疫情的同时&#xff0c;我们也可以看到很多科技行业和人工智能领域的从业者&#xff0c;也在贡献着他们的力量。近些天来&#xff0c;旷视、商汤、海康、百度都多家科技公司研…

安装samba服务器

1.实验目的 &#xff08;1&#xff09;了解SMB和NETBIOS的基本原理 &#xff08;2&#xff09;掌握Windows和Linux之间&#xff0c;Linux系统之间文件共享的基本方法。 2.实验内容 &#xff08;1&#xff09;安装samba服务器。 &#xff08;2&#xff09;配置samba服务器的…

多款大模型向公众开放,百模大战再升级?

作为一种使用大量文本数据训练的深度学习模型&#xff0c;大模型可以生成自然语言文本或理解语言文本的含义&#xff0c;是通向人工智能的一条重要途径。大模型可以应用于各种机器学习任务&#xff0c;包括自然语言处理、计算机视觉、语音识别、机器翻译、推荐系统、强化学习等…

14:00面试,14:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…

企业架构LNMP学习笔记57

MongoDB的安全设置&#xff1a; 安全&#xff1a; MongoDB的安全事件&#xff1a; 2017年年初&#xff1a; 利用SMB漏洞可以获得系统最高权限。wannacry勒索病毒。当年确实遇到过这个事情。 比特币的概念&#xff1a;开源软件 P2P网络 P2P形式的数字货币。交易记录公开透明。…

Linux 简介 启动过程

简介 Linux 是一套免费使用和自由传播的开放源码的类 UNIX 操作系统&#xff0c;英文解释为&#xff1a; Linux is not Unix。1991 年由林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在赫尔辛基大学上学时出于个人爱好而编写的&#xff0c;主要受到 Minix 和 Unix 思想的…