2020-11-15

开始游戏、游戏设置、关于游戏、退出游戏等:

有一定桌面软件开发基础的同学可能会想到,用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游戏开发,有什么好处呢。我是这么看,第一是这个很好玩,能充分体验编程的乐趣。第二是游戏开发更有挑战性,对面向对象思想、数据结构、算法、设计模式等都有更高的要求,学习游戏编程,对这些知识能有更好的理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值