📄 game.java
字号:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import sun.audio.*;//音效
import java.io.*;//文件输入输出流
import javax.swing.event.*; //JSlider所需
import java.util.*;
class Game extends JFrame implements Runnable,ActionListener,MouseListener
{
private javax.swing.Timer timer1,timer2;//地鼠变幻时间,游戏时间
private int score=0,time=20;//积分
private JLabel label,label2,label3,blank;//时间,积分标签,速度,空白
private JLabel clickMe[]=new JLabel [12];//12个地鼠
private JButton select1,select2; //难度选择
private Thread thread; //线程倒计时
private MenuBar mb;//菜单栏
private MenuItem m10;//重新开始游戏
private MenuItem m11;// 开始游戏
private MenuItem m13;//退出
private MenuItem m20;//排行榜
private MenuItem m21;//关于
private MenuItem m31;//20
private MenuItem m32;//40
private MenuItem m33;//60
private MenuItem m34;//自定义时间
private Menu m1;//选项
private Menu m2;//帮助
private Menu m3;//游戏时间
private JPanel pane; //面板
private JSlider speed;//速度滚动条
private int ispeed=800;//默认速度
private String line=""; //积分榜一行
private String sum="";//积分榜所有的记录
private int highest=0;
public Game() //初始化
{
super("打地鼠 1.5");
blank=new JLabel(" ");
add(blank);
String imgePath = "background.jpg"; //背景图片
final Image img = Toolkit.getDefaultToolkit().createImage(imgePath);
pane = new JPanel()
{
protected void paintChildren(Graphics g)
{
g.drawImage(img,0,0,this);
super.paintChildren(g);
}
};
pane.setSize(380,500);//布局大小
getContentPane().add(pane);
pane.setLayout(new GridLayout(4,3,40,40)); //pane窗体布局
setLayout(new FlowLayout());//窗体布局
timer2=new javax.swing.Timer(20000,this); //设置游戏时间
//////////////////菜单1////////////////////////////////
m1=new Menu("游戏选项");
m11=new MenuItem("开始游戏");
m10=new MenuItem("重新游戏");
m13=new MenuItem("退出游戏");
m1.add(m11);
m1.add(m10);
m1.add(m13);
//////////////////菜单2////////////////////////////////
m3=new Menu("设置时间");
m31=new MenuItem("20秒");
m32=new MenuItem("40秒");
m33=new MenuItem("60秒");
m34=new MenuItem("自定义");
m3.add(m31);
m3.add(m32);
m3.add(m33);
m3.add(m34);
//////////////////菜单3////////////////////////////////
m2=new Menu("帮助");
m20=new MenuItem("排行榜");
m21=new MenuItem("关于");
m2.add(m20);
m2.add(m21);
//////////////////添加主菜单////////////////////////////////
mb=new MenuBar();
mb.add(m1);
mb.add(m3);
mb.add(m2);
//////////////////设置菜单动作////////////////////////////////
m10.addActionListener(this);
m11.addActionListener(this);
m13.addActionListener(this);
m20.addActionListener(this);
m21.addActionListener(this);
m31.addActionListener(this);
m32.addActionListener(this);
m33.addActionListener(this);
m34.addActionListener(this);
pane.addMouseListener(this); //窗体加入鼠标事件
m10.setEnabled(false);//一开始重新开始菜单不可见
select1=new JButton("开始游戏");
select1.setForeground(Color.black);
select1.setBackground(Color.pink);//设置按钮颜色
select1.setFont(new Font("黑体",Font.BOLD,16));
select1.addActionListener(this);
select2=new JButton("重新游戏");
select2.setForeground(Color.black);
select2.setBackground(Color.pink);//设置按钮颜色
select2.setFont(new Font("黑体",Font.BOLD,16));
select2.addActionListener(this);
select2.setVisible(false);
label=new JLabel(" 得分:0 ");
label.setForeground(Color.green);
label.setFont(new Font("幼圆",Font.BOLD,12));
label2=new JLabel(" 时间:20 ");
label2.setForeground(Color.red);
label2.setFont(new Font("幼圆",Font.BOLD,12));
label3=new JLabel(" 游戏速度:200");
label3.setForeground(Color.blue);
label3.setFont(new Font("幼圆",Font.BOLD,12));
add(label2);
add(label);
add(label3);
ImageIcon image=new ImageIcon("mouse1.gif"); //地鼠图片
//////////////////////添加地鼠按钮///////////////////////////
for(int i=0;i<12;i++)
{
clickMe[i]=new JLabel(image);
clickMe[i].setVisible(false);
clickMe[i].addMouseListener(this); //按键鼠标事件
pane.add(clickMe[i]);
}
try //设置鼠标指针1
{
String ico="cursor1.gif";//鼠标图片的位置
this.setCursor(MyCursor.getSystemCustomCursor(ico));
}
catch(Exception ae){ }
/////////////设置背景音乐//////////////////////
try
{
FileInputStream music=new FileInputStream("music.mid" ); //背景音乐的位置
AudioStream as=new AudioStream(music);
AudioPlayer.player.start(as);
}
catch (Exception p) {}
speed=new JSlider();
speed.setMaximum(999);//反应速度最大为999
speed.setMinimum(1);//反应速度最小为1
speed.setValue(200);//默认值800
/////////////设置速度滚动条////////////
speed.addChangeListener(
new ChangeListener()
{
public void stateChanged( ChangeEvent changeEvent )
{
ispeed=-(speed.getValue()-1000);
label3.setText(" 游戏速度:"+speed.getValue());
}
}
);
add(speed);//速度滚动条
add( select1 ); //开始按钮
add( select2 ); //重新开始按钮
setSize(330,560); //设置窗口大小
setLocation(400,100);//设置初始化窗口位置
setResizable(false);//无最大化按钮
setVisible(true); //窗口可见
setMenuBar(mb);//设置菜单
////////////////读出积分榜//////////////////
try
{
FileReader reader = new FileReader("data.dat");
Scanner in = new Scanner(reader);
line= in.nextLine();
while(in.hasNextLine())
{
line= in.nextLine();
sum=sum+line+"\n";
}
in.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
//////////////事件触发/////////////////////////////////////
public void actionPerformed(ActionEvent b)
{
int i,j,k;
if(b.getSource() == select1||b.getSource() == m11 ) //开始
{
try //读出最高记录
{
FileReader reader = new FileReader("data.dat");
Scanner in = new Scanner(reader);
highest=in.nextInt();
System.out.println(highest);
in.close();
}
catch(IOException e){}
try
{
sum="";//积分榜清空
FileReader reader = new FileReader("data.dat");
Scanner in = new Scanner(reader);
line= in.nextLine();
while(in.hasNextLine())//积分榜重置
{
line= in.nextLine();
sum=sum+line+"\n";
}
in.close();
}
catch(IOException e)
{
e.printStackTrace();
}
select1.setVisible(false);//开始按钮不可见
select2.setVisible(true);//重新开始可见
m11.setEnabled(false);//开始菜单不可见
//隐藏时间选择菜单
m31.setEnabled(false);
m32.setEnabled(false);
m33.setEnabled(false);
m34.setEnabled(false);
m10.setEnabled(true);//重新开始菜单可见
thread = new Thread(this);
thread.start();
timer2.start(); //开始计时
timer1 = new javax.swing.Timer(ispeed,this);
timer1.start();
score=0;
label.setText(" 得分:"+score+" ");
try
{
FileInputStream music=new FileInputStream("button.wav" );
AudioStream as=new AudioStream(music);
AudioPlayer.player.start(as);
}
catch (Exception p) {}
}
if(b.getSource()==timer1) //随机地鼠
{
j=(int)(Math.random()*12);
clickMe[j].setVisible(true);
for(k=0;k<3;k++)
{
i=(int)(Math.random()*12);
clickMe[i].setVisible(false);
}
}
if(b.getSource()==timer2)//游戏时间到了
{
timer1.stop();
timer2.stop();//游戏时间结束
for(int n=0;n<12;n++)//恢复原始状态
{
clickMe[n].setVisible(false);
}
try
{
FileInputStream music=new FileInputStream("end.wav" );//游戏时间结束音效
AudioStream as=new AudioStream(music);
AudioPlayer.player.start(as);
}
catch (Exception p) {}
JOptionPane.showMessageDialog( null, "时间到! 您的得分为:"+score);
//////////////////////////破记录/////////////////////////////
if(score>=highest)
{
highest=score;
try
{
String name=null;
name = JOptionPane.showInputDialog( "恭喜您打破记录,请输入您的大名:" );
name=highest+"\n"+name+" "+highest+"\n";
File f = new File("data.dat");
RandomAccessFile raf = new RandomAccessFile(f, "rw");
name=name+sum;
raf.write(name.getBytes());
raf.close();
}
catch(Exception ae){}
}
score=0;
label.setText(" 得分:"+score+" ");//积分清0
select1.setVisible(true);//开始按钮可见
select2.setVisible(false);//重新开始按钮不可见
m11.setEnabled(true);// 开始菜单可见
m10.setEnabled(false);//重新开始菜单不可见
//游戏结束,重新显示时间选择菜单
m31.setEnabled(true);
m32.setEnabled(true);
m33.setEnabled(true);
m34.setEnabled(true);
}
if(b.getSource()==m10||b.getSource()==select2) //重新开始菜单
{
select1.setVisible(true);//开始按钮可见
select2.setVisible(false);//重新开始按钮不可见
m11.setEnabled(true);//开始菜单可见
m10.setEnabled(false);//重新开始菜单不可见
score=0;
timer1.stop();
timer2.stop();
thread.stop();
speed.setValue(200);//默认值800
timer2=new javax.swing.Timer(20000,this); //设置20秒游戏时间
time=20;
label2.setText(" 时间:20 ");
for(int q=0;q<12;q++)
{
clickMe[q].setVisible(false);
}
//重新显示时间选择菜单
m31.setEnabled(true);
m32.setEnabled(true);
m33.setEnabled(true);
m34.setEnabled(true);
try
{
FileInputStream music=new FileInputStream("button.wav" );
AudioStream as=new AudioStream(music);
AudioPlayer.player.start(as);
}
catch (Exception p) {}
}
if(b.getSource()==m13) //退出菜单
{
System.exit(0);
}
if(b.getSource()==m20) //排行榜菜单
{
try
{
FileReader reader = new FileReader("data.dat");
Scanner in = new Scanner(reader);
String line1="";
String sum1="";
line1= in.nextLine();
while(in.hasNextLine())
{
line1= in.nextLine();
sum1=sum1+line1+"\n";
}JOptionPane.showMessageDialog( null,sum1);
in.close();
}
catch(IOException e){}
}
if(b.getSource()==m21) //关于菜单
{
JOptionPane.showMessageDialog( null, " 打地鼠1.5\n 作者:刘锐浩\n 时间:2008.05.25~06.21");
}
if(b.getSource()==m31) //20秒
{
timer2=new javax.swing.Timer(20000,this); //设置20秒游戏时间
time=20;
label2.setText(" 时间:20 ");
}
if(b.getSource()==m32) //40秒
{
timer2=new javax.swing.Timer(40000,this); //设置40秒游戏时间
time=40;
label2.setText(" 时间:40 ");
}
if(b.getSource()==m33) //60秒
{
timer2=new javax.swing.Timer(60000,this); //设置60秒游戏时间
time=60;
label2.setText(" 时间:60 ");
}
if(b.getSource()==m34) //设置自定义游戏时间
{
try
{
int count=20000;//默认20秒
String number;
number = JOptionPane.showInputDialog( "请输入游戏时间:单位(秒)" );
time=Integer.parseInt(number);
label2.setText(" 时间:"+number+" ");
count = Integer.parseInt(number)*1000;
timer2=new javax.swing.Timer(count,this);
}
catch(Exception ae){ }
}
}
///////////////鼠标点击事件//////////////////////
public void mousePressed(MouseEvent e)//按下
{
//设置鼠标指针2
try
{
String ico="cursor2.gif";//鼠标图片的位置
this.setCursor(MyCursor.getSystemCustomCursor(ico));
}
catch(Exception ae){ }
if(e.getSource()==pane){}
else
{
try
{
FileInputStream music=new FileInputStream("beat.wav" );//打鼠音效
AudioStream as=new AudioStream(music);
AudioPlayer.player.start(as);
}
catch (Exception p) {}
for (int i=0;i<12;i++)
{
if(e.getSource()==clickMe[i])
{
score+=10;
label.setText(" 得分:"+score+" "); //积分板
clickMe[i].setVisible(false);
}
}
}
}
public void mouseReleased(MouseEvent e)//松开
{
//设置鼠标指针1
try
{
String ico="cursor1.gif";//鼠标图片的位置
this.setCursor(MyCursor.getSystemCustomCursor(ico));
}
catch(Exception ae){ }
}
public void mouseClicked(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
////////////////线程倒计时///////////////////
public void run()
{
long i;
try
{
for(i=time ;i>=0 ;i-- )
{
label2.setText(" 时间:"+i+" ");
thread.sleep(1000);
}
}
catch(Exception e){}
}
}
class MyCursor extends Cursor //自定义鼠标指针
{
public MyCursor(int n)
{
super(n);
}
static public Cursor getSystemCustomCursor(final String name) throws AWTException,HeadlessException
{
Toolkit toolkit=Toolkit.getDefaultToolkit();
Image image=toolkit.getImage(name);
return toolkit.createCustomCursor(image,new Point(0,0),"");//0,0为鼠标热点在左上角
}
}
public class mouse
{
public static void main(String[] args) //主函数
{
new Game(); //游戏开始
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -