java小游戏第二弹 打地鼠

/*打地鼠
 * 本版只是单纯的图形接界面运用
 * 图片编程要用到的API----应用程序接口
 * 1, JLabel: JLabel(Icon image)
 * 2, Icon接口---可以封装固定大小的小图片,通常用于装饰界面组件
 * 3, ImageIcon----是Icon接口的实现类,当然可以当作Icon来用。
 *     ImageIcon(String filename)---说明该对象可以通过文件名来生成
   4, Toolkit---抽象类,我们不能new对象,因此通过它的工厂方法获取---getDefaultTookit
      public abstract Image createImage(String filename)---可以通过文件名创建一个图片
      public Cursor createCustomCursor(Image cursor,Point hotSpot,String name)---创建自定义光标
   5,Window类(JFrame的父类)
      public void setCursor(Cursor cursor)-----设置光标
   6, JFrame类中的方法
       public JLayeredPane getLayeredPane() ----返回窗体的 layeredPane对象----窗体分层显示
   
 *

 */


package cn.hncu.games;

import java.awt.Font;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.Timer;


public class HitMouse extends JFrame{
	//图片路径
	private final String dir="./images_HitMouse/";
	private JLabel jlbMouse=new JLabel();
	
	private boolean isHit;
	
	private Timer timer;
	private int delay;
	
	private JLabel[] jlb;
	private int[] number;
	
	private JMenu[] jmenu;
	private JMenuItem[][] jmenuItem;
	/*
	 * 菜单处理
	 */
	private ActionListener jmenuListener=new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent e) {
			if(e.getActionCommand().equals("newGame")){
				delay=1000;
				newGame();
				jlb[2].setText("0");
				jmenuItem[0][2].setEnabled(false);
				jmenuItem[0][1].setEnabled(true);
			}else if(e.getActionCommand().equals("break")){
				timer.stop();
				jlbMouse.removeMouseListener(jlbmouseListener);
				jmenuItem[0][1].setEnabled(false);
				jmenuItem[0][2].setEnabled(true);
			}else if(e.getActionCommand().equals("continue")){
				timer.restart();
				jlbMouse.addMouseListener(jlbmouseListener);
				jmenuItem[0][2].setEnabled(false);
				jmenuItem[0][1].setEnabled(true);
			}else if(e.getActionCommand().equals("exit")){
				if (timer!=null&&timer.isRunning()) {
					timer.stop();
				}
				//System.exit(0);
				dispose();
			}
			
		}
	};
	/*
	 * 
	 * 地鼠位置改变
	 */
	private ActionListener hitListener=new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent e) {
			jlbMouse.setVisible(false);
			gameMessage(1);
			switch((new Random()).nextInt(9)){
			case 0:
				jlbMouse.setLocation(66,45);break;
			case 1:
				jlbMouse.setLocation(195,45);break;
			case 2:
				jlbMouse.setLocation(324,45);break;
			case 3:
				jlbMouse.setLocation(33,115);break;
			case 4:
				jlbMouse.setLocation(170,115);break;
			case 5:
				jlbMouse.setLocation(307,115);break;
			case 6:
				jlbMouse.setLocation(58,187);break;
			case 7:
				jlbMouse.setLocation(195,187);break;
			case 8:
				jlbMouse.setLocation(332,187);break;
			}
			setMouse(0);
			isHit=true;
			jlb[0].setText(Integer.parseInt(jlb[0].getText())+1+"");
			jlbMouse.setVisible(true);
		}
	};
	/*
	 * 地鼠监听鼠标进行击中后变化
	 */
	private MouseListener jlbmouseListener=new MouseListener() {
		@Override
		public void mouseReleased(MouseEvent e) {
			mySetCursor(0);
		}
		@Override
		public void mousePressed(MouseEvent e) {
			mySetCursor(1);
			if(!isHit)
				return;
			setMouse(1);
			Toolkit.getDefaultToolkit().beep();
			jlb[1].setText(Integer.parseInt(jlb[1].getText())+1+"");
			isHit=false;
		}
		
		@Override
		public void mouseExited(MouseEvent e) {
		}
		@Override
		public void mouseEntered(MouseEvent e) {
		}
		@Override
		public void mouseClicked(MouseEvent e) {
		}
	};

	public HitMouse() {
		super("简易版打地鼠");
		setBounds(260, 80, 445, 385);
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		
		//菜单
		JMenuBar bar=new JMenuBar();
		
		String[] str={"游戏"};
		String[][] strs={{"新游戏","暂停","继续","退出"}};
		String[][] strs_english={{"newGame","break","continue","exit"}};
		jmenu=new JMenu[str.length];
		jmenuItem=new JMenuItem[strs.length][];
		for (int i = 0; i < jmenu.length; i++) {
			jmenu[i]=new JMenu(str[i]);
			jmenuItem[i]=new JMenuItem[strs[i].length];
			for (int j = 0; j < jmenuItem[i].length; j++) {
				jmenuItem[i][j]=new JMenuItem(strs[i][j]);
				jmenuItem[i][j].addActionListener(jmenuListener);
				jmenuItem[i][j].setActionCommand(strs_english[i][j]);
				if(jmenuItem[i][j].getActionCommand().equals("continue"))
					jmenuItem[i][j].setEnabled(false);
				if(jmenuItem[i][j].getActionCommand().equals("break"))
					jmenuItem[i][j].setEnabled(false);
				jmenu[i].add(jmenuItem[i][j]);
			}
			bar.add(jmenu[i]);
		}
		setJMenuBar(bar);
		/*
		 * 对光标设置
		 */
		addMouseListener(new MouseListener() {
			@Override
			public void mouseReleased(MouseEvent e) {
				mySetCursor(0);
			}
			@Override
			public void mousePressed(MouseEvent e) {
				mySetCursor(1);
			}
			@Override
			public void mouseExited(MouseEvent e) {
			}
			@Override
			public void mouseEntered(MouseEvent e) {
			}
			@Override
			public void mouseClicked(MouseEvent e) {
			}
		});
		getContentPane().setLayout(null);
		
		setBack();
		
		mySetCursor(0);
		
		isHit=false;
		jlbMouse.setLocation(170,115);
		setMouse(0);
		jlbMouse.addMouseListener(jlbmouseListener);
		getContentPane().add(jlbMouse);
		
		JPanel p=new JPanel();
		p.setOpaque(false);
		p.setBounds(0, 0, 445, 60);
		getContentPane().add(p);
		
		jlb=new JLabel[3];
		String[] str_lb={"chuxiancishu.png","dazhongcishu.png","dangqiandengji.png"};
		for (int i = 0; i < jlb.length; i++) {
			jlb[i]=new JLabel("0", new ImageIcon(dir+str_lb[i]), SwingConstants.CENTER);
			jlb[i].setFont(new Font("仿宋",Font.BOLD+Font.ITALIC,20));
			p.add(jlb[i]);
		}
		setVisible(true);
	}
	/*
	 * 新游戏初始化
	 */
	private void newGame() {
		jlb[2].setText(Integer.parseInt(jlb[2].getText())+1+"");
		jlb[0].setText("0");
		jlb[1].setText("0");
		
		jlbMouse.setVisible(false);
		
		timer=new Timer(delay, hitListener);
		timer.start();
	}
	/*
	 * 游戏结束或晋级时的提示
	 */
	private void gameMessage(int number) {
		int a=Integer.parseInt(jlb[0].getText());
		int b=Integer.parseInt(jlb[1].getText());
		if(a+number>9+number){
			timer.stop();
			if(b>7){
				int option=JOptionPane.showConfirmDialog(null, "击中率过80%,是否进入下一关?");
				if(option==JOptionPane.OK_OPTION){
					if(delay==0){
						JOptionPane.showMessageDialog(null, "恭喜通关?");
					}
					jlb[0].setText("0");
					jlb[1].setText("0");
					delay=delay-100;
					newGame();
				}else if(option==JOptionPane.NO_OPTION){
					//System.exit(0);
					dispose();
				}else{
				}
			}else{
				int option=JOptionPane.showConfirmDialog(null, "击中率不足80%,是否从新开始?", "失败",JOptionPane.YES_NO_OPTION);
				if(option==JOptionPane.OK_OPTION){
					jlb[0].setText("0");
					jlb[1].setText("0");
					delay=1000;
					newGame();
				}else{
					//System.exit(0);
					dispose();
				}
			}
		}
	}
	/*
	 * 对地鼠的设置
	 */
    private Icon mouseImg;
	private void setMouse(int mouseType) {
		switch(mouseType){
		case 0:
			mouseImg=new ImageIcon(dir+"dishu.png");
			break;
		case 1:
			mouseImg=new ImageIcon(dir+"datou.png");
		}
		jlbMouse.setIcon(mouseImg);
		jlbMouse.setSize(mouseImg.getIconWidth(), mouseImg.getIconHeight());
		if(mouseType==1){
			jlbMouse.setLocation(jlbMouse.getX()-16, jlbMouse.getY()-2);
		}
	}

	/*
	 * 光标设置
	 */
	private void mySetCursor(int cursorType) {
		Image myCursorImg=null;
		Toolkit toolkit=Toolkit.getDefaultToolkit();
		switch(cursorType){
		case 0:myCursorImg=toolkit.createImage(dir+"chui1.png");break;
		case 1:myCursorImg=toolkit.createImage(dir+"chui2.png");break;
		}
		getContentPane().setCursor(toolkit.createCustomCursor(myCursorImg, new Point(10, 10), "chui"));
		
	}
/*
 * 背景设置
 */
	private void setBack() {
		((JPanel)getContentPane()).setOpaque(false);
		Icon backImg=new ImageIcon(dir+"beijing.jpg");
		JLabel backJlable=new JLabel(backImg);
		getLayeredPane().add(backJlable,new Integer(Integer.MIN_VALUE));
		backJlable.setBounds(0, 0, backImg.getIconWidth(), backImg.getIconHeight());
	}

	public static void main(String[] args) {
		new HitMouse();

	}

}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值