开始游戏、游戏设置、关于游戏、退出游戏等:
有一定桌面软件开发基础的同学可能会想到,用JButton组件就可以实现,每个选项就是一个按钮嘛。 嗯,这样做是可以的。但是,系统自带的JButton按钮,样式是已经定义好的,虽然可以设置它的颜色、背景等属性,但终归是受限制的。
我们既然是学习游戏开发,那么时刻要记住游戏里所有的东西都是计算机画出来的,程序员的工作就是,控制计算机在什么时间,画什么东西。
那么我们现在,就用这种思路,借用画笔API来实现一个游戏主菜单。 相信大家真正领悟了以后,会对GUI有了更深入的了解,你会明白,噢,原来我们用的JButton等组件,其实也就是这么实现的。
这个要实现的就是:按上下方向键时,焦点是四个菜单上切换,焦点菜单用红色显示。
是不是很简单,自己可以想一下如何实现,然后复制下面的代码,放到Eclipse里执行。
package game4;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
/**
- java
- —demo4:实现一个简单的游戏菜单
- @author
- https://blog.csdn.net/chaohi
- @date
*/
public class GamePanel extends JPanel implements KeyListener{
/** 屏幕的宽和高 */
private int width,height;
public GamePanel(int width, int height) {
this.width = width;
this.height = height;
this.setSize(width, height);
//设置当前画布可以获得焦点。
this.setFocusable(true);
//设置自己为自己的按键事件监听器
this.addKeyListener(this);
}
/**要显示的菜单项*/
private String[] menus = new String[]{"开始游戏", "游戏设置", "帮助关于", "退出游戏"};
/**当前焦点在哪个菜单项*/
private int focusIndex;
/**菜单项位置的横坐标*/
private int menu_x = 260;
/**菜单项位置的纵坐标*/
private int[] menu_ys = new int[]{80, 110, 140, 170};
/**
* 覆盖paintComponent()方法
*/
public void paintComponent(Graphics g) {
super.paintComponent(g);
//画绿色背景
g.setColor(new Color(0x9391d6));
g.fillRect(0, 0, width, height);
//绘制菜单项。焦点所在的菜单用红色,其它为黑色。
for (int i = 0; i < menus.length; i++) {
int x = menu_x;
int y = menu_ys[i];
//如果是焦点按钮,用红色突出
if(i == focusIndex){
g.setColor(Color.red);
}else{
g.setColor(Color.black);
}
g.drawString(menus[i], x, y);
}
}
/**
* 当键盘上的键被按下,程序会调用这个方法,来处理这个按下事件
*/
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode(); //根据keyCode能知道按下的是哪个键
switch(keyCode)
{
case KeyEvent.VK_UP://往上的方向键
focusIndex = (focusIndex + menus.length - 1) % menus.length; //考虑%取余的意义。
this.repaint(); //刷新画布
break;
case KeyEvent.VK_DOWN://往下的方向键
focusIndex = (focusIndex + 1) % menus.length;
this.repaint();
break;
case KeyEvent.VK_ENTER: //如果是Enter键
//----------------这里就可以根据focusIndex知道按下的是哪个菜单项,从而进行对应操作
//----------------比如如果focusIndex为0,则转到游戏界面。如果focusIndex为2,则转到帮助关于的界面。
System.out.println(focusIndex + " , " + menus[focusIndex]);
break;
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
}
package game4;
import javax.swing.JFrame;
/**
-
java
-
—demo4:实现一个简单的游戏菜单
-
@author
-
@date
*/
public class GameFrame extends JFrame{private int width = 600, height = 400;
public GameFrame() {
//设置窗体标题
this.setTitle(“java”);//创建一个画布 GamePanel panel = new GamePanel(width, height); //把画布加入到窗体中 getContentPane().add(panel, "Center"); //设置窗体大小 this.setSize(width, height); //设置能否调整窗体大小 this.setResizable(false); //这句会使得在屏幕上居中显示 this.setLocationRelativeTo(null); //当关闭窗体的时候退出程序 this.setDefaultCloseOperation(EXIT_ON_CLOSE); //把窗体显示出来 this.setVisible(true);
}
/**
- 主方法
*/
public static void main(String[] args) {
GameFrame frame = new GameFrame();
}
}
- 主方法
这里要特别声明的一点是:学习java游戏开发,可能没有完全对口的工作,所以如果你正准备找工作,那最好去学习JSP、Sevlet、Mysql等知识吧,对应聘web开发的工作更有直接好处。
那么学习java游戏开发,有什么好处呢。我是这么看,第一是这个很好玩,能充分体验编程的乐趣。第二是游戏开发更有挑战性,对面向对象思想、数据结构、算法、设计模式等都有更高的要求,学习游戏编程,对这些知识能有更好的理解。