📄 menuframe.java
字号:
package frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import assistant.MoveImageChange;
import assistant.Music;
/**
* 主菜单窗体
* @author Administrator
*
*/
public class MenuFrame extends JFrame implements KeyListener,Runnable{
/**
*
*/
private static final long serialVersionUID = -1422291105010011000L;
/**游戏是否开始*/
private boolean isStart = false;
/** 取得双缓冲画布 */
private Image memoryImage;
/** 产生双缓冲画笔 */
private Graphics memoryGraphics;
/**菜单图像*/
private Image menuImage = new ImageIcon("image/menu.jpg").getImage();
/**游戏开始图像*/
private Image gameStartImage = new ImageIcon("image/gameStart.jpg").getImage();
/**游戏开始当前图像*/
private Image startImage;
/**心图像*/
private Image hartImage = new ImageIcon("image/hart.gif").getImage();
/**心起始位置*/
private int tempY = 278;
/**标记计数器*/
private int markCount;
/**是否按下了开始键*/
private boolean start = false;
/**图像闪烁计数器*/
private int count;
/**移动图像转换对象*/
private MoveImageChange moveImageChange = new MoveImageChange(2);
/**图像移动数组*/
private Image[] moveImage = {gameStartImage,null};
/**
* 构造方法
*/
public MenuFrame(){
/* 设置窗体大小 */
this.setSize(650, 550);
/* 设置窗体可见 */
this.setVisible(true);
/* 设置点击关闭,程序结束 */
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
/* 设置窗口不可改变 */
this.setResizable(false);
/*设置窗体居中*/
this.setLocationRelativeTo(null);
/*媒体追踪器*/
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(menuImage, 0);//加载图像
tracker.addImage(gameStartImage, 0);
try {
tracker.waitForID(0);//等待加载
} catch (InterruptedException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
/* 创建画布 */
memoryImage = this.createImage(650, 550);
/* 得到画笔对象 */
memoryGraphics = memoryImage.getGraphics();
this.startImage = this.gameStartImage;//设置开始图像
/*注册键盘事件*/
this.addKeyListener(this);
// 播放背景音乐
Music.playSingleMusic(Music.PLAY_STARTCARTOON);
Thread thread=new Thread(this);
thread.start();
}
public static void main(String[] args) {
new MenuFrame();
}
/**
* 按下键事件
*/
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
switch(keyCode){
case KeyEvent.VK_UP://向上
markCount--;
if(markCount < 0){
markCount = 0;
}
break;
case KeyEvent.VK_DOWN://向下
markCount++;
if(markCount > 3){
markCount = 3;
}
break;
case KeyEvent.VK_ENTER://按下回车
switch(markCount){
case 0:
start = true;
break;
case 2:
ProcessBuilder pre = new ProcessBuilder(
"C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE",
System.getProperty("user.dir")+"\\doc\\index.html");
try {
pre.start();
} catch (IOException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
break;
case 3:
System.exit(0);
break;
}
break;
}
tempY = 278 + markCount*50;//计算心的Y坐标
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
/**
* 重写父类run方法
*/
public void run() {
while(!isStart){
repaint();
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Music.stopSingleMusic();
this.dispose();
new GameStartFrame();
}
/**
* 刷新窗体
* @param 画笔
*/
public void update(Graphics g){
memoryGraphics.drawImage(menuImage, 0,0,null);//菜单图像
if(this.start){//游戏开始
startImage = moveImageChange.imageChange(moveImage);//图像闪烁
count++;
if(count>30){
this.isStart = true;//跳出循环
}
}
memoryGraphics.drawImage(startImage, 275,270,null);//绘制游戏开始图像
memoryGraphics.drawImage(hartImage, 225,tempY,30,25,null);//绘制心图像
g.drawImage(memoryImage, 0,0,this);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -