精品主页 | 软件下载 | 系统下载 | 精品导航| 精彩图片 | 转帖工具 | 版主申请 | 影视下载
发新话题
打印

JAVA程序编写的打字游戏

JAVA程序编写的打字游戏

  


                  





炸弹是我玩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=noRepeat();

x=noHit(i,10);

if (i>=5)

y=5 (int)(Math.random()*50);

else

y=60 (int)(Math.random()*50);

x1=220 i*32 1; y1=550;

x2=x1;

}

}



public void panduan() //用来判断pd的y值是否要到达屏幕下边,如果是就把Y值变为5,并把所有Y值加3.

{ for(int i=0;i<10;i  )

{ if (y>=500)

{life--;ac1.play();y=5;}

y =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.equals(""))

{

for (j=0;j<10;j  )

if (fj.equals(pd[j]))

{ if (!(x1>=x[j] && x1<=x[j] 32 || x1 32>=x[j] && x1 32<=x[j] 32))

if (x1>x[j])

x1-=4;

else x1 =4;



if (!(y1>=y[j] && y1<=y[j] 32 || y1 32>=y[j] && y1 32<=y[j] 32))

if (y1>y[j])

y1-=3;

else y1 =4;



if (y[j]>=380 && Math.abs(x[j]-x1)>5)

if (x[j]>x1) x1 =5;

else if (x[j]<x1) x1-=5;



if (y[j]>=380 && Math.abs(y[j]-y1)>5)

if (y[j]>y1) y1 =5;

else if (y[j]<y1) y1-=5;





if ((x1>=x[j] && x1<=x[j] 32 || x1 32>=x[j] && x1 32<=x[j] 32) && (y1>=y[j] && y1<=y[j] 32 || y1 32>=y[j] && y1 32<=y[j] 32))

{life  ;ac2.play();pd[j]=noRepeat(); x[j]=noHit(i,10); y[j]=5; x1=x2;y1=550;fj="";}

break;

}

if (j==10)y1-=3;

if (y1<=5) {y1=550; fj="";}

}

}

}


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.equals(fj[j]))

{g.setColor(new Color(255,93,55));

g.drawImage(paodan,x,y,this);

g.drawString(pd,x 11,y 20);

break;

}



if (j==fj.length)

{g.setColor(new Color(255,255,255));

g.drawImage(paodan,x,y,this);

g.drawString(pd,x 11,y 20);

}

g.setColor(new Color(255,93,55));

g.drawImage(huojian,x1,y1,this);

g.drawString(fj,x1 10,y1 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)) break;

} //保证字母不重复

if (i==fj.length)

for(i=0;i<fj.length;i  )

if (fj.equals("")) {fj=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.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();

}


}

TOP

发新话题