项目源码及相关图片资源,已上传至GitHub,有需要的朋友自取吧。
https://github.com/HueyM/Projects
接上文,本文将实现天天酷跑游戏的结束界面,功能如下:
跑酷距离、获取玩家的得分。
再来一次、返回主菜单、直接退出。
具体啥样子,先睹为快!
点击再来一次按钮,进入加载状态,加载结束,直接进入游戏。
点击主菜单按钮,进入主菜单界面:
一、跑酷距离
我是在Person类的玩家移动方法中,添加了一个自增的diatance,只要玩家的图片还在切换,也就是游戏还没有结束,这个distance都在自增,也算是一种间接的实现计算跑酷距离的方法。
通过在Person类中添加get、set方法,获取数据。
二、获取玩家的得分
玩家与金币碰撞的得分即为图中的表现分,在GamePanel 获取。
而总分,我在Person类中,设定了一个简单的计分规则:
三、再来一次
在鼠标点击事件内,new一个新的加载界面,加载完成后自动进入游戏。
四、返回主界面
同理。
五、直接退出
同理。
上代码
EndFrame.java
package cn.sqc.runday.view;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import cn.sqc.runday.controller.GamePanel;
import cn.sqc.runday.model.Person;
public class EndFrame extends JFrame implements MouseListener {
//创建继续游戏按钮、返回主菜单按钮、退出按钮 组件
JLabel again,back,exit;
public EndFrame(Person person) {
again = new JLabel(new ImageIcon("Image/hh5.png"));
again.setBounds(520, 622, 60, 25);
again.addMouseListener(this);
this.add(again);
back = new JLabel(new ImageIcon("Image/hh6.png"));
back.setBounds(520, 722, 60, 25);
back.addMouseListener(this);
this.add(back);
exit = new JLabel(new ImageIcon("Image/hh3.png"));
exit.setBounds(520, 822, 60, 25);
exit.addMouseListener(this);
this.add(exit);
EndPanel end = new EndPanel(person);
this.add(end);//将结束面板组件添加到结束窗口上
this.setSize(1500, 900);
this.setLocationRelativeTo(null);
this.setUndecorated(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setIconImage(new ImageIcon("Image/115.png").getImage());
this.setVisible(true);
}
public static void main(String[] args) {
//new EndFrame();
}
class EndPanel extends JPanel{
Image background;
Person p;
public EndPanel(Person person) {
//类比int a
this.p = person;//创建对象、传值
try {
background = ImageIO.read(new File("Image/chou.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);
g.drawImage(background, 0, 0,1500,900 ,null);
g.setColor(Color.CYAN);
g.setFont(new Font("宋体",Font.BOLD,30));
g.drawString(p.getScore()+"",1110,705);// + ” “ 属实妙
g.drawString(p.getDistance() + " ", 1110, 622);
g.setFont(new Font("宋体",Font.BOLD,50));
g.setColor(Color.ORANGE);
g.drawString(p.getTotalScore() + "", 1075, 500);
}
}
@Override
public void mouseClicked(MouseEvent e) {
if(e.getSource().equals(again)){
//跳转到下一界面
new WindowFrame().Start();
//关闭当前界面
dispose();
} else if(e.getSource().equals(back)){
new MainFrame();
dispose();
}else if(e.getSource().equals(exit)){
System.exit(0);
}
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}