⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 game.java

📁 一个Java编写的程序
💻 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 + -