<%@ page contentType="text/html; charset=gb2312"%> JAVA写的打字游戏
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
JAVA写的打字游戏
     发布者: 发布时间:2008-01-16

原帖及讨论地址:

点击下载该文件

炸弹是我玩1937特种兵的图标.反击的是QQ表情,呵呵
就地取材

大家来看看哈


/*
游戏开始,从天上掉下10个有标号(字母)的炸弹,
下面有10颗子弹(就是可以按10个字母).
如果所按字母包含在炸弹中,就找到相应的炸弹并
消灭它,消灭后返回继续利用.如果没有就一直飞到天上最后才返回.
*/
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;

public class paodan extends Applet implements Runnable,KeyListener
{
private Image bgImage;
private Graphics bg;
static Thread myThread;
static AudioClip ac1,ac2;
static JFrame md;
String Zi26="";
String pd[]={"a","a","a","a","a","a","a","a","a","a"}; //用来存储10个字母做落下的炮弹
String fj[]={"","","","","","","","","",""}; //用来存储10个字母做反击的防空
int x[]=new int[10];
int y[]=new int[10];
//炸弹的坐标
int x1[]=new int[10];
int x2[]=new int[10];
int y1[]=new int[10];
//火箭的坐标

int life=100;  //生命
Toolkit KIT=this.getToolkit();
Image paodan=KIT.createImage("paodan.jpg");
Image huojian=KIT.createImage("huojian.jpg");


public paodan() //用来生成一个包含26个英文字母的字符串Zi26
{for (int i=0;i<26;i++)
  Zi26+=(char)((int)'A'+i);
}

public void cushi() //初始各种数据,如炮弹与火箭的坐标.
{  
    try
    {URL u1=this.getClass().getResource("huishou.wav");
     URL u2=this.getClass().getResource("lanjie.wav");
     ac1=Applet.newAudioClip(u1);
     ac2=Applet.newAudioClip(u2);
    }catch(Exception e){}

   for (int i=0;i<10;i++)
   {pd[i]=noRepeat();
    x[i]=noHit(i,10);
    if (i>=5)
    y[i]=5+(int)(Math.random()*50);
    else
    y[i]=60+(int)(Math.random()*50);
    x1[i]=220+i*32+1; y1[i]=550;
    x2[i]=x1[i];
   }
}

public void panduan() //用来判断pd[i]的y值是否要到达屏幕下边,如果是就把Y值变为5,并把所有Y值加3.
{ for(int i=0;i<10;i++)
   { if (y[i]>=500)
     {life--;ac1.play();y[i]=5;}
     y[i]+=3;
     if (life==0) System.exit(0);
   }
   y[9]+=3;
   md.setTitle("打字训练室                你的生命为"+life+"             提示:白色的字母表示未按,粉红色的表示已按.");
  
}


public void fk() //防空程序,用来击毁落下的炸弹
{ int i=0,j=0;
      for (i=0;i<10;i++)
      {  if (!fj[i].equals(""))
         {
           for (j=0;j<10;j++)
           if (fj[i].equals(pd[j]))
           {   if (!(x1[i]>=x[j] && x1[i]<=x[j]+32 || x1[i]+32>=x[j] && x1[i]+32<=x[j]+32))
               if (x1[i]>x[j])
               x1[i]-=4;
               else x1[i]+=4;
              
               if (!(y1[i]>=y[j] && y1[i]<=y[j]+32 || y1[i]+32>=y[j] && y1[i]+32<=y[j]+32))
               if (y1[i]>y[j])
               y1[i]-=3;
               else y1[i]+=4;
              
               if (y[j]>=380 && Math.abs(x[j]-x1[i])>5)
               if (x[j]>x1[i]) x1[i]+=5;
               else if (x[j]<x1[i]) x1[i]-=5;
                
               if (y[j]>=380 && Math.abs(y[j]-y1[i])>5)
               if (y[j]>y1[i]) y1[i]+=5;
               else if (y[j]<y1[i]) y1[i]-=5;
              
              
                if ((x1[i]>=x[j] && x1[i]<=x[j]+32 || x1[i]+32>=x[j] && x1[i]+32<=x[j]+32) && (y1[i]>=y[j] && y1[i]<=y[j]+32 || y1[i]+32>=y[j] && y1[i]+32<=y[j]+32))
                {life++;ac2.play();pd[j]=noRepeat(); x[j]=noHit(i,10); y[j]=5; x1[i]=x2[i];y1[i]=550;fj[i]="";}
               break;
           }
           if (j==10)  y1[i]-=3;
           if (y1[i]<=5) {y1[i]=550; fj[i]="";}
         }          
      }
}

public void paint(Graphics g)
//根据相应的坐标在屏幕上画炸弹和吃炸弹的娃娃,并保证白色的字母表示未按,粉红色的表示已按
{int i=0,j=0;
  g.setFont(new Font("Vrinda",1,21));
  for(;i<pd.length;i++)
    { for (j=0;j<fj.length;j++)
      if (pd[i].equals(fj[j]))
      {g.setColor(new Color(255,93,55));
       g.drawImage(paodan,x[i],y[i],this);
       g.drawString(pd[i],x[i]+11,y[i]+20);
       break;
      }
      
      if (j==fj.length)
      {g.setColor(new Color(255,255,255));
       g.drawImage(paodan,x[i],y[i],this);
       g.drawString(pd[i],x[i]+11,y[i]+20);
      }
      g.setColor(new Color(255,93,55));
      g.drawImage(huojian,x1[i],y1[i],this);
      g.drawString(fj[i],x1[i]+10,y1[i]+22);
    }
  
}
//没有按的显红色,按了的显白色

public void keyPressed(KeyEvent k) //当用户按的是字母时,就生成一个防空字母.
{char z=k.getKeyChar();
   int i=0,j=0;
   if ((z>='A' && z<='Z') || (z>='a' && z<='z'))
   {  if (z-32>=65) z-=32;
      String zc=""+z;
      for(;i<fj.length;i++)
      {  if (zc.equals(fj[i])) break;
      } //保证字母不重复    
      if (i==fj.length)
      for(i=0;i<fj.length;i++)
      if (fj[i].equals("")) {fj[i]=zc;break;}
    
      

   }
}

public void keyReleased(KeyEvent k){}
public void keyTyped(KeyEvent k){}


public String noRepeat() //生成一个不重复的字母.
{int zc,i;
  String xinx;
  while(true)
       {zc=(int)(Math.random()*26);
        xinx=Zi26.substring(zc,zc+1);
        for(i=0;i<10;i++)
        if (pd[i].equals(xinx))  break;
        if(i==10)  return xinx;
       }
}

int noHit(int i,int langth) //让字母保持车距.
{int tmpX,j,k,width=32;
     while (true)    
           { tmpX=(int)(Math.random()*768)+1;
             for(j=0;j<10;j++)
             {   if (tmpX+width<x[j] || tmpX>x[j]+width) continue; //如果欲生成的位置不与当前J所占的位置相交就判断下一个J.
                  if ((tmpX>=x[j] && tmpX<=x[j]+width) || (tmpX+width>=x[j] && tmpX+width<=x[j]+width)) break;
                    //如果欲生成的位置与当前x[j]所占据的范围相交就结束循环,重新生成一个起始位置.
                  
             }
             if (j==10) {return tmpX;}
           }  
}

public void update(Graphics g)
{if (bgImage==null)
     {bgImage=createImage(this.getSize().width,this.getSize().height);
      bg=bgImage.getGraphics();
     }
  bg.setColor(getBackground());
  bg.fillRect(0,0,this.getSize().width,this.getSize().height);
  //bg.setColor(getForeground());
  paint(bg);
  g.drawImage(bgImage,0,0,this);
}

public void run() //用线程循环更改Y值,并根据新的坐标在屏幕上重画pd[I];
{
   while(true)
    {fk();
     panduan();
     repaint();
     try{ myThread.sleep(50);    }catch(Exception e) {}
    }
}

public static void main(String args[])
{paodan m=new paodan();
  md=new JFrame("打字训练室");
  md.setSize(800,600);
  md.addKeyListener(m);
  md.getContentPane().add(m);
  m.cushi();
  md.setVisible(true);
  md.setResizable(false);
  myThread=new Thread(m);
  myThread.start();
}

}

(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
Java入门必学
基于J2EE的电子商务开发模型及其实现
使用Annotation设计持久层
试问:动态语言是否将会挽救Swing?
JSP牵手JSF打造完美的Web应用
Java的中文编程与配置心得
 
最近评论:
        
回复:JAVA写的打字游戏
这里是中国最全的网站制作产品市场,网站制作产品价格满意,服务热情,售后服务完善本公司多年致力于优质网站制作的开发、设计、生产、产品。
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号