一个java写的弹球小游戏

import java.awt.*;

import java.applet.*;

import javax.swing.*;

import java.awt.event.*;

import java.util.*;

import java.lang.Integer;

/*障碍1

*子弹2

*小车3

*定义三个向量存储下落的字符

*/

public class tanqiu extends JApplet implements Runnable,KeyListener

{

int kuai[][]=new int[45][38];

Thread t=null;

shangzu zu=null;

zidan dan=null;

board che=null;

jiangpin jiang=null;

ctrl con=null;

boolean begin=false; //判断开始游戏

int type=-1;

int stepmod=-1;

int p=-1; //pause or move

int slee=400;

boolean stepshow=false;

boolean pause=false;

boolean reb=false;

boolean chushi=false;

Vector zifu=new Vector();

Vector zx=new Vector();

Vector zy=new Vector();

int modle=-1;

public void init()

{

for(int i=0;i

for(int j=0;j

kuai[i][j]=0;

zu=new shangzu(kuai);

dan=new zidan(kuai);

che=new board(kuai);

jiang=new jiangpin(zifu);

con=new ctrl();

che.shengcheng();

addKeyListener(this);

setFocusable(true);

}

public void paint(Graphics g)

{

g.drawLine(19,19,470,19);

g.drawLine(19,19,19,400);

g.drawLine(470,19,470,400);

g.drawLine(19,400,470,400);

g.setColor(Color.green);

g.setFont(new Font("",2,20));

g.drawString("重新开始",600,32);

g.setColor(Color.blue);

g.drawString("选择级别",600,65);

if(modle%2==0)

{

g.clearRect(489,49,82,22);

g.setColor(Color.gray);

g.drawRect(490,23,60,14);

g.drawLine(550,23,560,30);

g.drawLine(550,37,560,30);

}

if(modle%2==1)

{

g.clearRect(489,19,82,22);

g.setColor(Color.gray);

g.drawRect(490,53,60,14);

g.drawLine(550,53,560,60);

g.drawLine(550,67,560,60);

}

if(stepshow==true)

{

g.setColor(Color.blue);

g.drawString("一级",650,99);

g.setColor(Color.blue);

g.drawString("二级",650,134);

g.setColor(Color.blue);

g.drawString("三级",650,164);

if(stepmod%3==0)

{

g.clearRect(530,120,80,20);

g.clearRect(530,150,80,20);

g.setColor(Color.gray);

g.drawRect(530,90,50,19);

}

if(stepmod%3==1)

{

g.clearRect(530,90,80,20);

g.clearRect(530,150,80,20);

g.setColor(Color.gray);

g.drawRect(530,120,50,19);

}

if(stepmod%3==2)

{

g.clearRect(530,90,80,20);

g.clearRect(530,120,80,20);

g.setColor(Color.gray);

g.drawRect(530,150,50,19);

}

}

else if(stepshow==false)

g.clearRect(500,88,180,250);

if(reb==false)

{

for(int i=20;i

for(int j=20;j

{

if(kuai[i/10-2][j/10-2]==0)

{

g.setColor(Color.white);

g.fill3DRect(i,j,10,10,true);

}

else if(kuai[i/10-2][j/10-2]==1)

{

g.setColor(Color.blue);

g.fill3DRect(i,j,10,10,true);

}

else if(kuai[i/10-2][j/10-2]==2)

{

g.setColor(Color.black);

g.fillOval(i,j,10,10);

}

else if(kuai[i/10-2][j/10-2]==3)

{

g.setColor(Color.green);

g.fill3DRect(i,j,10,10,true);

}

}

if(!(zifu.isEmpty()))

{

g.setColor(Color.black);

g.setFont(new Font("",2,15));

for(int i=0;i<zifu.size><p> {</p> <p> g.drawString((String)zifu.elementAt(i),((Integer)zx.elementAt(i)).intValue(),((Integer)zy.elementAt(i)).intValue());</p> <p> }</p> <p> }</p> <p> }</p> <p> if(reb==true)</p> <p> {</p> <p> g.setColor(Color.red);</p> <p> g.setFont(new Font("",3,40));</p> <p> g.drawString("GAME OVER",88,210);</p> <p> }</p> <p> }</p> <p> public void start()</p> <p> {</p> <p> t=new Thread(this);</p> <p> t.start();</p> <p> }</p> <p> public void run()</p> <p> {</p> <p> while(true)</p> <p> {</p> <p> if(pause==false)</p> <p> {</p> <p> if(zu.yes==true)</p> <p> {</p> <p> zu.shengcheng();</p> <p> zu.jishu();</p> <p> //System.out.println(zu.count);</p> <p> zu.yes=false;</p> <p> }</p> <p> if(begin==true)</p> <p> {</p> <p> dan.control(1);</p> <p> type=1;</p> <p> begin=false;</p> <p> chushi=true;</p> <p> }</p> <p> if((begin==false&amp;&amp;chushi==false)||chushi==false)</p> <p> {</p> <p> dan.control(che.ty);</p> <p> }</p> <p> if(chushi==false)</p> <p> {</p> <p> if(kuai[dan.x][dan.y]==1)</p> <p> zu.jianshu();</p> <p> }</p> <p> /*控制子弹的不撞击情况下的方向</p> <p> */</p> <p> if(dan.x==44)</p> <p> {</p> <p> if(type==1)</p> <p> type=2;</p> <p> if(type==4)</p> <p> type=3;</p> <p> }</p> <p> else if(dan.y==0)</p> <p> {</p> <p> if(type==2)</p> <p> type=3;</p> <p> if(type==1)</p> <p> type=4;</p> <p> }</p> <p> else if(dan.x==0)</p> <p> {</p> <p> if(type==3)</p> <p> type=4;</p> <p> if(type==2)</p> <p> type=1;</p> <p> }</p> <p> else if(dan.y==36)</p> <p> {</p> <p> type=0;</p> <p> dan.life=false;</p> <p> reb=true;</p> <p> }</p> <p> /*子弹的撞击</p> <p> */</p> <p> if(dan.life==true)</p> <p> {</p> <p> if(type==1)</p> <p> {</p> <p> if(kuai[dan.x+1][dan.y-1]==1)</p> <p> {</p> <p> try</p> <p> {</p> <p> kuai[dan.x+1][dan.y-1]=0;</p> <p> type=4;</p> <p> jiang.mode();</p> <p> Integer jx=new Integer((dan.x+1)*10+20);///////////////</p> <p> zx.addElement(jx);</p> <p> Integer jy=new Integer((dan.y-1)*10+20);//////////////</p> <p> zy.addElement(jy);</p> <p> }catch(Exception ee){</p> <p> }</p> <p> zu.jianshu();</p> <p> }</p> <p> }</p> <p> else if(type==2)</p> <p> {</p> <p> if(kuai[dan.x-1][dan.y-1]==1)</p> <p> {</p> <p> try</p> <p> {</p> <p> kuai[dan.x-1][dan.y-1]=0;</p> <p> type=3;</p> <p> jiang.mode();</p> <p> Integer jx=new Integer((dan.x-1)*10+20);///////////</p> <p> zx.addElement(jx);</p> <p> Integer jy=new Integer((dan.y-1)*10+20);/////////////</p> <p> zy.addElement(jy);</p> <p> }catch(Exception ee){</p> <p> }</p> <p> zu.jianshu();</p> <p> }</p> <p> }</p> <p> else if(type==3)</p> <p> {</p> <p> if(kuai[dan.x-1][dan.y+1]==1)</p> <p> {</p> <p> try</p> <p> {</p> <p> kuai[dan.x-1][dan.y+1]=0;</p> <p> type=2;</p> <p> jiang.mode();</p> <p> Integer jx=new Integer((dan.x-1)*10+20);////////////</p> <p> zx.addElement(jx);</p> <p> Integer jy=new Integer((dan.y+1)*10+20);////////////</p> <p> zy.addElement(jy);</p> <p> }catch(Exception ee){</p> <p> }</p> <p> zu.jianshu();</p> <p> }</p> <p> }</p> <p> else if(type==4)</p> <p> {</p> <p> if(kuai[dan.x+1][dan.y+1]==1)</p> <p> {</p> <p> try</p> <p> {</p> <p> kuai[dan.x+1][dan.y+1]=0;</p> <p> type=1;</p> <p> jiang.mode();</p> <p> Integer jx=new Integer((dan.x+1)*10+20);///////////////</p> <p> zx.addElement(jx);</p> <p> Integer jy=new Integer((dan.y+1)*10+20);/////////////</p> <p> zy.addElement(jy);</p> <p> }catch(Exception ee){</p> <p> }</p> <p> zu.jianshu();</p> <p> }</p> <p> }</p> <p> }</p> <p> /*以下处理与小车的碰撞 */</p> <p> if(type==3)</p> <p> {</p> <p> if(kuai[dan.x-1][dan.y+1]==3)</p> <p> type=2;</p> <p> }</p> <p> if(type==4)</p> <p> {</p> <p> if(kuai[dan.x+1][dan.y+1]==3)</p> <p> type=1;</p> <p> }</p> <p> dan.control(type);</p> <p> if(!(zy.isEmpty()))</p> <p> {</p> <p> for(int i=0;i<zy.size><p> {</p> <p> Integer l=new Integer(((Integer)zy.elementAt(i)).intValue()+10);</p> <p> zy.insertElementAt(l,i); </p> <p> zy.remove(i+1);</p> <p> }</p> <p> }</p> <p> /*以下处理字符与小车的撞击</p> <p> *字符落到显示区域以外则不见</p> <p> */</p> <p> if(!(zy.isEmpty()))</p> <p> {</p> <p> for(int i=0;i<zy.size><p> {</p> <p> if(kuai[((Integer)zx.elementAt(i)).intValue()/10-2][((Integer)zy.elementAt(i)).intValue()/10-2]==3||((Integer)zy.elementAt(i)).intValue()&gt;385)</p> <p> {</p> <p> if(kuai[((Integer)zx.elementAt(i)).intValue()/10-2][((Integer)zy.elementAt(i)).intValue()/10-2]==3)</p> <p> {</p> <p> if(((String)zifu.elementAt(i)).equals("L"))</p> <p> {</p> <p> if(che.width </p> <p> che.wider();</p> <p> }</p> <p> if(((String)zifu.elementAt(i)).equals("G"))</p> <p> con.state=false;</p> <p> if(((String)zifu.elementAt(i)).equals("F"))</p> <p> {</p> <p> if(chushi==true)</p> <p> chushi=false;</p> <p> else if(chushi==false)</p> <p> chushi=true;</p> <p> }</p> <p> /*</p> <p> *</p> <p> */</p> <p> }</p> <p> //计算出三个向量的索引</p> <p> zifu.remove(i);</p> <p> zx.remove(i);</p> <p> zy.remove(i);</p> <p> }</p> <p> }</p> <p> }</p> <p> if(con.state==false)</p> <p> {</p> <p> con.trick++;</p> <p> if(con.trick==20)</p> <p> {</p> <p> con.state=true;</p> <p> con.trick=0;</p> <p> }</p> <p> }</p> <p> if(zu.count==0)</p> <p> {</p> <p> zu.yes=true;</p> <p> }</p> <p> }</p> <p> try</p> <p> {</p> <p> Thread.sleep(slee);</p> <p> }</p> <p> catch(Exception exe)</p> <p> {</p> <p> }</p> <p> //System.out.println(zu.count);</p> <p> int cc=0;</p> <p> for(int i=0;i </p> <p> for(int j=0;j </p> <p> {</p> <p> if(kuai[i][j]==1)</p> <p> cc++;</p> <p> }</p> <p> System.out.println(cc);</p> <p> if(cc==40)</p> <p> {</p> <p> zu.yes=true;</p> <p> }</p> <p> repaint();</p> <p> }</p> <p> }</p> <p> public void keyPressed(KeyEvent ke)</p> <p> {</p> <p> }</p> <p> public void keyReleased(KeyEvent ke)</p> <p> {</p> <p> }</p> <p> public void keyTyped(KeyEvent ke)</p> <p> {</p> <p> if((""+ke.getKeyChar()).equals("b"))</p> <p> {</p> <p> begin=true;</p> <p> //chushi=true;</p> <p> if(reb==true)</p> <p> rebegin();</p> <p> }</p> <p> else if((""+ke.getKeyChar()).equals("d"))</p> <p> {</p> <p> if(con.state==true)</p> <p> che.move(5);</p> <p> }</p> <p> else if((""+ke.getKeyChar()).equals("a"))</p> <p> {</p> <p> if(con.state==true)</p> <p> che.move(6);</p> <p> }</p> <p> else if((""+ke.getKeyChar()).equals("w"))</p> <p> {</p> <p> che.move(7);</p> <p> }</p> <p> else if((""+ke.getKeyChar()).equals("u"))</p> <p> {</p> <p> p++;</p> <p> if(p%2==0)</p> <p> pause=true;</p> <p> else if(p%2==1)</p> <p> pause=false;</p> <p> }</p> <p> else if((""+ke.getKeyChar()).equals("i"))</p> <p> {</p> <p> pause=false;</p> <p> }</p> <p> if((""+ke.getKeyChar()).equals("k"))//down</p> <p> {</p> <p> if(stepshow==false)</p> <p> modle++;</p> <p> if(stepshow==true)</p> <p> stepmod++;</p> <p> }</p> <p> if((""+ke.getKeyChar()).equals("o")) //VK_ENTER</p> <p> {</p> <p> if(stepshow==false)</p> <p> {</p> <p> if(modle%2==0)</p> <p> {</p> <p> rebegin();</p> <p> }</p> <p> else if(modle%2==1)</p> <p> {</p> <p> stepshow=true;</p> <p> }</p> <p> }</p> <p> if(stepshow==true)</p> <p> {</p> <p> if(stepmod%3==0)</p> <p> {</p> <p> slee=400;</p> <p> stepshow=false;</p> <p> }</p> <p> else if(stepmod%3==1)</p> <p> {</p> <p> slee=200;</p> <p> stepshow=false;</p> <p> }</p> <p> else if(stepmod%3==2)</p> <p> {</p> <p> slee=100;</p> <p> stepshow=false; </p> <p> }</p> <p> }</p> <p> }</p> <p> }</p> <p> public void rebegin()</p> <p> {</p> <p> begin=false;</p> <p> pause=false;</p> <p> chushi=false;</p> <p> p=-1;</p> <p> reb=false;</p> <p> type=-1;</p> <p> stepshow=false;</p> <p> zifu=new Vector();</p> <p> zx=new Vector();</p> <p> zy=new Vector();</p> <p> for(int i=0;i </p> <p> for(int j=0;j </p> <p> kuai[i][j]=0;</p> <p> zu=new shangzu(kuai);</p> <p> modle=-1;</p> <p> stepmod=-1;</p> <p> slee=400;</p> <p> dan=new zidan(kuai);</p> <p> che=new board(kuai);</p> <p> jiang=new jiangpin(zifu);</p> <p> con=new ctrl();</p> <p> che.shengcheng();</p> <p> } </p> <p> public void destroy()</p> <p> {</p> <p> //System.exit(0);</p> <p> } </p> <p>}</p> <p>class shangzu</p> <p>{</p> <p> boolean yes=true;</p> <p> int kuai[][];</p> <p> int count=0;</p> <p> public shangzu(int[][] kuai)</p> <p> {</p> <p> this.kuai=kuai;</p> <p> }</p> <p> public void shengcheng()</p> <p> {</p> <p> for(int i=0;i </p> <p> {</p> <p> int zux=(int)(Math.random()*41+2);</p> <p> int zuy=(int)(Math.random()*14+2);</p> <p> kuai[zux][zuy]=1;</p> <p> }</p> <p> }</p> <p> public void jishu()</p> <p> {</p> <p> for(int i=0;i </p> <p> for(int j=0;j </p> <p> {</p> <p> if(kuai[i][j]==1)</p> <p> count++;</p> <p> }</p> <p> }</p> <p> public void jianshu()</p> <p> {</p> <p> count--;</p> <p> }</p> <p>}</p> <p>class zidan</p> <p>{</p> <p> int x=4;</p> <p> int y=33;</p> <p> int kuai[][];</p> <p> boolean life=true;</p> <p> public zidan(int[][] kuai)</p> <p> {</p> <p> this.kuai=kuai;</p> <p> }</p> <p> public void control(int type)</p> <p> {</p> <p> /*两个临时变量的定义,发生了一件令人快乐的事,</p> <p> *使我不必再去定义新的方法来消去撞击的障碍物;</p> <p> */</p> <p> int linx;</p> <p> int liny;</p> <p> linx=x;</p> <p> liny=y;</p> <p> switch(type)</p> <p> {</p> <p> case 1:</p> <p> {</p> <p> x++;</p> <p> y--;</p> <p> break;</p> <p> }</p> <p> case 2:</p> <p> {</p> <p> x--;</p> <p> y--;</p> <p> break;</p> <p> }</p> <p> case 3:</p> <p> {</p> <p> x--;</p> <p> y++;</p> <p> break;</p> <p> }</p> <p> case 4:</p> <p> {</p> <p> x++;</p> <p> y++;</p> <p> break;</p> <p> }</p> <p> case 0:</p> <p> {</p> <p> break;</p> <p> }</p> <p> case 5:</p> <p> {</p> <p> if(x </p> <p> x++;</p> <p> break;</p> <p> }</p> <p> case 6:</p> <p> {</p> <p> if(x&gt;0)</p> <p> x--;</p> <p> break;</p> <p> }</p> <p> case 7:</p> <p> {</p> <p> if(y&gt;18)</p> <p> y--;</p> <p> break;</p> <p> }</p> <p> }</p> <p> kuai[linx][liny]=0;</p> <p> kuai[x][y]=2;</p> <p> }</p> <p>}</p> <p>class board</p> <p>{</p> <p> int kuai[][];</p> <p> int start=0;</p> <p> int lin;</p> <p> int cha=0;</p> <p> int liny;</p> <p> int width=8;</p> <p> int ty=0;</p> <p> zidan zd=null;</p> <p> public board(int[][] kuai)</p> <p> {</p> <p> this.kuai=kuai;</p> <p> zd=new zidan(kuai);</p> <p> }</p> <p> public void shengcheng()</p> <p> {</p> <p> for(int i=0;i<width><p> kuai[i][34]=3;</p> <p> }</p> <p> public void move(int lei)</p> <p> {</p> <p> ty=lei;</p> <p> switch(lei)</p> <p> {</p> <p> case 5:</p> <p> {</p> <p> lin=start;</p> <p> if(start </p> <p> {</p> <p> start++;</p> <p> for(int i=start;i<start><p> if(i </p> <p> kuai[i][34+cha]=3;</p> <p> kuai[lin][34+cha]=0;</p> <p> }</p> <p> break; </p> <p> }</p> <p> case 6:</p> <p> {</p> <p> lin=start+width-1;</p> <p> if(start&gt;0)</p> <p> {</p> <p> start--;</p> <p> for(int i=start;i<start><p> //if(i&gt;45)</p> <p> kuai[i][34+cha]=3;</p> <p> //if(lin </p> <p> kuai[lin][34+cha]=0;</p> <p> }</p> <p> break; </p> <p> }</p> <p> case 7:</p> <p> {</p> <p> liny=cha;</p> <p> if(cha&gt;-15)</p> <p> cha--;</p> <p> for(int i=start;i<start><p> kuai[i][34+cha]=3;</p> <p> if(liny&gt;-15)</p> <p> for(int i=start;i<start><p> kuai[i][34+liny]=0;</p> <p> break;</p> <p> }</p> <p> }</p> <p> }</p> <p> public void wider()</p> <p> {</p> <p> width++;</p> <p> for(int i=start;i<start><p> if(i </p> <p> kuai[i][34+cha]=3;</p> <p> }</p> <p>}</p> <p>class jiangpin</p> <p>{</p> <p> String letter=null;</p> <p> Vector zifu;</p> <p> public jiangpin(Vector zifu)</p> <p> {</p> <p> this.zifu=zifu;</p> <p> }</p> <p> public void mode()</p> <p> {</p> <p> int mod=(int)(Math.random()*3);</p> <p> switch(mod)</p> <p> {</p> <p> case 0:</p> <p> {</p> <p> letter="L";//big</p> <p> break;</p> <p> }</p> <p> case 1:</p> <p> {</p> <p> letter="G";//nianzhu</p> <p> break;</p> <p> }</p> <p> case 2:</p> <p> {</p> <p> letter="F";//life</p> <p> break;</p> <p> }</p> <p> }</p> <p> zifu.addElement(letter);</p> <p> }</p> <p>}</p> <p>class ctrl</p> <p>{</p> <p> boolean state=true;</p> <p> int trick=0;</p> <p>}</p> </start></p></start></p></start></p></start></p></start></p></width></p></zy.size></p></zy.size></p></zifu.size>

你可能感兴趣的:(java)