一个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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package org.crazyit.ball; import java.awt.Image; import java.io.File; import javax.imageio.ImageIO; import java.io.IOException; /** * 小球对象 * * @author yangenxiong yangenxiong2009@gmail.com * @author Kelvin Mak kelvin.mak125@gmail.com * @version 1.0 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> * <br>Copyright (C), 2009-2010, yangenxiong * <br>This program is protected by copyright laws. */ public class Ball extends BallComponent { // 定义球的竖向速度 private int speedY = 10; // 定义弹球的横向速度 private int speedX = 8; // 定义是否在运动 private boolean started = false; // 定义是否结束运动 private boolean stop = false; /** * m 有参数构造器 * * @param panelWidth * int 画板宽度 * @param panelHeight * int 画板高度 * @param offset * int 位移 * @param path * String 图片路径 */ public Ball(int panelWidth, int panelHeight, int offset, String path) throws IOException { // 调用父构造器 super(panelWidth, panelHeight, path); // 设置y坐标 this.setY(panelHeight - super.getImage().getHeight(null) - offset); } /** * 设置横向速度 * * @param speed * int 速度 * @return void */ public void setSpeedX(int speed) { this.speedX = speed; } /** * 设置竖向速度 * * @param speed * int 速度 * @return void */ public void setSpeedY(int speed) { this.speedY = speed; } /** * 设置是否在运动 * * @param b * boolean * @return void */ public void setStarted(boolean b) { this.started = b; } /** * 设置是否结束运动 * * @param b * boolean * @return void */ public void setStop(boolean b) { this.stop = b; } /** * 返回横向速度 * * @return int 速度 */ public int getSpeedX() { return this.speedX; } /** * 返回竖向速度 * * @return int 速度 */ public int getSpeedY() { return this.speedY; } /** * 是否在运动 * * @return boolean 是否在运动 */ public boolean isStarted() { return this.started; } /** * 是否已经结束运动 * * @return boolean 是否已经结束运动 */ public boolean isStop() { return this.stop; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值