MyPanel.java
上传用户:hbszxlzwj
上传日期:2009-12-03
资源大小:9k
文件大小:8k
源码类别:

游戏

开发平台:

Java

  1. //MyPanel.java
  2. import java.awt.event.*;
  3. import java.awt.*;
  4. import java.util.Date;
  5.  public class MyPanel extends  Panel
  6. {
  7.    public MyPanel(Color bgcolor)
  8.   {
  9.    this.setBackground(bgcolor);//预设背景色
  10.    
  11.    //设置右击快捷菜单
  12.    for(int k=0;k<100;k++)
  13.       {
  14.        xiaoshi[k]=true;
  15.       }
  16.    p1.add(new MenuItem("增加字母数目"));
  17.    p1.add(new MenuItem("加快下落速度"));
  18.    p1.add(new MenuItem("加快变化速度"));
  19.    p1.add(new MenuItem("加快时间间隔"));
  20.    p1.addSeparator();
  21.    p1.add(new MenuItem("减少字母数目"));
  22.    p1.add(new MenuItem("减慢下落速度"));
  23.    p1.add(new MenuItem("降低变化速度"));
  24.    p1.add(new MenuItem("减缓时间间隔"));
  25.    //xuanze(6);
  26.    xuanze(3);
  27.    for(int i=0;i<6;i++)
  28.   {
  29.    fenshu+=zeng[i];
  30.   }
  31.   
  32.   this.add(p1);
  33.  
  34.   }
  35.   int mey=2;
  36.   int ss;
  37.   int es;
  38.   int start=0;
  39.   int hour=0;
  40.   int minute=0;
  41.   int fenshu=0;
  42.   Date d1;
  43.   Date d2;
  44.   int shot=0;
  45.   
  46.  public String changestr(double a)
  47.  {
  48.    String str="0.0000";
  49.    try{ str=""+String.valueOf(a);
  50.     str=str.substring(0,3);}
  51.    catch(Exception exc){}
  52.    return str;
  53.  }
  54.   
  55.  PopupMenu p1=new PopupMenu();
  56.  boolean reda;
  57.  boolean greena;
  58.  boolean bluea;
  59.  int w;
  60.  int h;
  61.  int xuhao[]=new int[26];
  62.  Image backimg;
  63.  Graphics backg;
  64.  //int num=6;
  65.  int num=2;
  66.  int score=0;
  67.  int total=0;
  68.  char zifu[]=new char[26];
  69.  boolean up=true;
  70.  
  71.  
  72.  //随机产生字母
  73.  int jiji=0;
  74.  public void xuanze(int num)
  75.  {   jiji=0;
  76.  total+=num;
  77.  
  78.  for(int k=0;k<num;k++)
  79.         {
  80.          xiaoshi[k]=true;
  81.          }
  82.  
  83.  if(num>=26){xuhao[25]=25;num=25;}
  84.      else if(num<=1)
  85.           { 
  86.             num=1;
  87.             }
  88.           
  89.      int number1=0;
  90.  int number=0;
  91.      for(int i1=0;i1<num;i1++)
  92.      {
  93.     if(num<=24)
  94.     {
  95.    number1=26;
  96.    }
  97.     else
  98.     { 
  99.        number1=25;
  100.        }
  101.   number=(int)(Math.floor((number1*Math.random())));
  102.        while(selected(number,i1))
  103.        {
  104.       number=(int)(Math.floor((number1*Math.random()))); 
  105.  //System.out.println(number+"");
  106.         }
  107.       xuhao[i1]=number; 
  108.  //System.out.println(""+xuhao[i1]+" "+i1+"");
  109.     }
  110.    
  111. }
  112.  public boolean selected(int number,int ii)
  113.  {
  114.   for(int j=0;j<ii;j++)
  115.       {
  116.        if(number==xuhao[j])
  117.         return true;
  118.         }
  119.    return false;
  120.    }
  121.    
  122.  int i=0;
  123.  int delay=100;
  124.  int add=3;
  125.  int dd=0;
  126.  
  127. public void update(Graphics g)
  128. {i++;
  129.  
  130. w=size().width;
  131. h=size().height;
  132. if(i<=1){d1=new Date();
  133. ss=d1.getSeconds();}
  134. if((i%4==0))
  135. {
  136. d2=new Date();
  137. es=d2.getSeconds();
  138. if(es<ss){es+=60;}
  139. start=es-ss;
  140. if(start<=60&&start>=59){if(xiaoshi[95])
  141. minute++;
  142.  xiaoshi[95]=false;
  143.   }
  144. if(minute==60){
  145. if(xiaoshi[96]){
  146. minute=0;hour++;}
  147. xiaoshi[96]=false;
  148.   }
  149. }
  150.  if(red>=254){reda=false;}
  151.  if(red<=1){reda=true;}
  152.  if(green>=254){greena=false;}
  153.  if(green<=1){greena=true;}
  154.  if(blue>=252){bluea=false;}
  155.  if(blue<=3){bluea=true;}
  156.  if(i%5==0){
  157.  if(reda){red++;}
  158.    else{red--;}
  159.  if(greena){green+=2;}else{green-=2;}
  160.  if(bluea){blue+=3;}else{blue-=3;}}
  161.  
  162.  backg.setColor(new Color(red,green,blue));
  163.  backg.fillRect(0,0,w,h);
  164.  backg.setFont(null);
  165.  backg.setColor(Color.white);
  166.  
  167. String defenlv=changestr(((double)(score)/(double)(fenshu)*100));
  168. int sudu=shot*60/(hour*3600+minute*60+start+1);
  169. String mingzhonglv=changestr(((double)shot/(double)(total)*100));
  170. backg.drawString("字母:"+num+" 用时"+hour+":"+minute+":"+start+" 发出:"
  171.                  +total+" 命中:"+shot+" 得分:"+score+" 应得:"
  172.                  +fenshu+" 速度:"+sudu+"键/分",1,20);
  173. backg.drawString("命中率:"
  174.                  +mingzhonglv+"%"+" 得分率"+defenlv+"%",1,40); 
  175.  if(i%delay==0){xuanze(num);
  176. xiaoshi[95]=true;
  177. xiaoshi[96]=true;
  178.  px=new int[num];
  179.  zeng=new int[num];
  180.  py=new int[num];  mey=(int)(num*Math.random())-1;
  181.  for(int k=0;k<num;k++)
  182.  {
  183.    px[k]=(int)((w-20)*Math.random());
  184.    if(k<mey)
  185.      {py[k]=(int)((20)*Math.random())+size().height-20;}
  186.    else
  187.      {{py[k]=(int)((20)*Math.random());}}
  188.    zeng[k]=(int)(juli*Math.random())+1;
  189.    fenshu+=zeng[k];
  190.  }}
  191. paint(g);}
  192. int zeng[]={3,5,3,7,4,2};
  193. int juli=2;
  194. int red=22;
  195. int green=22;
  196. int blue=22;
  197. public void drawchar(Graphics g,int x,int y,char key)
  198. {
  199. g.setColor(Color.orange);
  200. g.fillOval(x,y,20,20);
  201. g.setColor(Color.blue);
  202.     g.setFont(new Font("TimesRoma",Font.BOLD,18));
  203.     g.drawString(""+(char)key,x+4,y+16);
  204. }
  205. int x=-1;
  206. public void paint(Graphics g)
  207.  {
  208.   for(int mm=1;mm<3600000;mm++) {}
  209.  if(backimg==null)
  210.     {
  211.         w=size().width;
  212.         h=size().height;
  213.         backimg=createImage(w,h);
  214.         backg=backimg.getGraphics();
  215.       if(i<=1)
  216.         {}
  217.       for(int i=0;i<zifu.length;i++)
  218.      {
  219.       zifu[i]=(char)(i+97);
  220.        }
  221.   
  222.     }
  223.    
  224.       for(int k=0;k<num;k++)
  225.  {
  226.    if(xiaoshi[k])
  227.   {
  228.     if(k<mey)
  229.    {
  230.        drawchar(backg,px[k],py[k]-=zeng[k],zifu[xuhao[k]]);
  231.        }
  232.  else{
  233.   drawchar(backg,px[k],py[k]+=zeng[k],zifu[xuhao[k]]);
  234.    }
  235. if(this.i%1000==0)
  236.    {
  237.     drawchar(backg,px[k]+zeng[k],py[k]+=zeng[k],zifu[xuhao[k]]);
  238.     }
  239. }
  240.  }
  241.  
  242.     for(int k=0;k<num;k++)
  243.    {
  244.  if(xiaoshi[k])
  245. {
  246.    if(x==xuhao[k])
  247.   {
  248.    xiaoshi[k]=false;
  249.    shot++;
  250.    score+=zeng[k];
  251.    jiji++;
  252. backg.setColor(Color.orange);
  253. backg.fill3DRect(px[k]+6,py[k]+5,6,size().height-py[k],true);
  254. backg.setColor(Color.magenta);
  255. dddd=px[k]-15;
  256. backg.fill3DRect(px[k]-15,size().height-10,50,10,true);
  257.     
  258.     if(jiji==num)
  259.    {
  260.    backg.setColor(new Color(red,green,blue));
  261.    try{
  262.     xuanze(num);
  263. for(int i=0;i<num;i++)
  264.    fenshu+=zeng[i];
  265.   }
  266.    catch(Exception ex){}
  267. }
  268.    }
  269.      }
  270.    }
  271.    
  272.  backg.setColor(new Color(255-red,255-green,255-blue));
  273.  backg.fill3DRect(dddd,size().height-10,40,10,true);
  274.  g.drawImage(backimg,0,0,w,h,this);
  275.  if(up)
  276.  {
  277.   repaint(time);
  278.   }
  279.  }
  280.  
  281.  int time=30;
  282.  boolean xiaoshi[]=new boolean[100];
  283.  
  284.  //int px[]={80,255,170,240,290,350};
  285. // int py[]={200,340,50,30,60,70};
  286.  int px[]={40,40,40,40,40,40};
  287.  int py[]={700,700,700,700,700,700};
  288. public boolean keyDown(Event e, int key)
  289. {
  290. if(up==false)
  291.       {up=true;repaint();}
  292. x=key-97;
  293. return super.keyDown(e, key);
  294. }
  295. public boolean keyUp(Event e, int key)
  296. {
  297. x=-1;
  298. return super.keyDown(e, key);
  299. }
  300. public boolean mouseDown(Event e, int p2, int p3)
  301. {
  302. if(e.metaDown())
  303.      {
  304.       up=false;
  305.      p1.show(this,p2,p3);}
  306. else up=true;
  307. return super.mouseDown(e, p2, p3);
  308. }
  309. int dddd=2000;
  310. public boolean action(Event e, Object what)
  311. {
  312. this.setCursor(new Cursor(Cursor.WAIT_CURSOR));
  313. if("增加字母数目".equals(what))
  314.    {
  315.   num++;
  316. if(num>=11)
  317.    {
  318.        delay=(size().height-50)/(juli/2);
  319.        }
  320.  if(num>=26)
  321.  num=26;
  322. xuanze(num);
  323.     px=new int[num];
  324.     zeng=new int[num];
  325.     py=new int[num];
  326.     mey=(int)(num*Math.random())-1;
  327.     mey=(int)(num*Math.random())-1;
  328.    for(int k=0;k<num;k++)
  329.   {
  330.  px[k]=(int)((w-20)*Math.random());
  331.  if(k<mey)
  332. {
  333. py[k]=(int)((20)*Math.random())+size().height-20;
  334. }
  335.  else
  336. {
  337. py[k]=(int)((20)*Math.random());
  338. }
  339.  zeng[k]=(int)(juli*Math.random())+1;fenshu+=zeng[k];
  340.  }
  341.    }
  342.    
  343.    
  344.  if("减少字母数目".equals(what))
  345.      {
  346.       num--;
  347. if(num>=11)
  348.    {delay=(size().height-50)/(juli/2);}
  349. if(num<=1)
  350. num=1;
  351.    xuanze(num);
  352.    px=new int[num];
  353.    zeng=new int[num];
  354.    py=new int[num]; 
  355.    mey=(int)(num*Math.random())-1;
  356.    for(int k=0;k<num;k++)
  357.   {
  358.  px[k]=(int)((w-20)*Math.random());
  359.  if(k<mey)
  360. {
  361.   py[k]=(int)((20)*Math.random())+size().width-20;
  362.   }
  363.  else
  364.     {
  365.      py[k]=(int)((20)*Math.random());
  366.      }
  367.  zeng[k]=(int)(juli*Math.random())+1;fenshu+=zeng[k];
  368.  }
  369.  }
  370. if("加快下落速度".equals(what))
  371.    {juli+=3;}
  372.     if("加快变化速度".equals(what))
  373.        {delay-=5;if(delay<=10){delay=10;}}
  374.   if("加快时间间隔".equals(what))
  375.      {time+=3;}
  376. if("减慢下落速度".equals(what))
  377.    {juli-=3;if(juli<=3){juli=3;}}
  378. if("降低变化速度".equals(what))
  379.    {delay+=5;}
  380. if("减缓时间间隔".equals(what))
  381.    {time-=3;if(time<=4){time=4;}}
  382.     this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
  383.     up=true;
  384.  
  385. return super.action(e, what);
  386. }
  387.  
  388. }