首先请准备好图像素材,例如把以下图像分别命名为bird.gif shark.gif 和weed.gif放到源文件同一目录下,
bird.gif shark.gif weed.gif
大家也可以自己随便指定图像,看代码就知道了
空格开始或暂停 方向键控制方向 f和g为开火两种不同的子弹 z和x为增加横向和纵向的移动速度 player的子弹可以抵消敌人的子弹 更多内容请自己添加修改
start:
Watergame.java
//小李开源之javagame by difeijin 2004 10 8
//如有疑问请联系我
//一个横版射击游戏,需要素材为bird.gif, shark.gif, weed.gif
//bird.gif 为player的图案 shark.gif为enemy的图案 weed为背景草的图案 游戏可以很方便的扩充
//例如添加敌人增强火力增加吃奖励提升战斗能力等
import java.awt.*;
import java.applet.Applet;
import java.awt.*;
import java.applet.*;
import java.lang.*;
import java.util.*;
import java.net.*;
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //
class shark_fire implements Runnable //同一高度有三颗子弹
{
int startx;
int starty;
int xoffset;
int firespeed;
int firesize;
int rot;
int countofexplode;
Thread myThread;
static int count = 0;
boolean state, explode;
public shark_fire()
{
state = false;
count++;
countofexplode = 0;
xoffset = 0;
myThread = null;
}
public shark_fire(int x, int y, int z, int size)
{
count++;
startx = x;
starty = y;
firespeed = z;
firesize = size;
myThread = null;
explode = false;
state = true;
countofexplode = 0;
xoffset = 0;
this.start();
}
public void set(int x, int y, int z, int size)
{ //count++;
startx = x;
starty = y;
firespeed = z;
firesize = size;
explode = false;
state = true;
countofexplode = 0;
xoffset = 0;
// myThread=null;
this.start();
}
public void setexplode()
{ //count++;
explode = true;
countofexplode = 8;
//System.out.println("explode is true now ddddddddddddddddddddddddddddddddddddddddddddddddddddddddd");
//this.paint
}
public void start()
{ //state=true;
if (myThread == null)
{
System.out.println("sharkfire_shot Starting!");
myThread = new Thread(this);
myThread.start();
}
else
{
myThread.stop();
myThread = new Thread(this);
myThread.start();
}
}
public void stop()
{
state = false;
if (myThread != null)
{
myThread.stop();
myThread = null;
System.out.println(" sharkfire_shot thread stopped ");
}
}
public void destroy()
{
System.gc();
}
public void run()
{
//Do stuff
//System.out.println("run");
myThread.setPriority(Thread.MIN_PRIORITY);
while (myThread != null)
{
try
{
Thread.sleep(100);
}
catch(InterruptedException e)
{
}
// repaint();
if (starty < 0) //from buttom to top
{
System.out.println("sharkfire_shot stop" + starty + "cont is " + count);
myThread.stop();
}
}
myThread = null;
}
public void move() //tells shotH to move all the shots
{
starty -= firespeed;
xoffset += firespeed; //the fire will be move to the position with x cordinate startx startx+xoffset and startx-xoffset
//shark_fire
// System.out.println("moving ");
}
public void exploding(Graphics g) //tells shotH to move all the shots
{ //starty+=firespeed;
System.out.println(" sharkfire_shot exploding ");
g.fillOval(startx, starty, (int)((firesize + (10 - countofexplode) * 3) * Math.random()),
(int)((firesize + (10 - countofexplode) * 3) * Math.random()));
g.fillRoundRect(startx, starty, (10 - countofexplode) * 3, (10 - countofexplode) * 3,
(int)((firesize + (10 - countofexplode) * 3) * Math.random()),
(int)((firesize + (10 - countofexplode) * 3) * Math.random()));
g.fillOval(startx - xoffset, starty, (int)((firesize + (10 - countofexplode) * 3) * Math.random()),
(int)((firesize + (10 - countofexplode) * 3) * Math.random()));
g.fillRoundRect(startx + xoffset, starty, (10 - countofexplode) * 3, (10 - countofexplode) * 3,
(int)((firesize + (10 - countofexplode) * 3) * Math.random()),
(int)((firesize + (10 - countofexplode) * 3) * Math.random()));
g.fillOval(startx - xoffset, starty, (int)((firesize + (10 - countofexplode) * 3) * Math.random()),
(int)((firesize + (10 - countofexplode) * 3) * Math.random()));
g.fillRoundRect(startx + xoffset, starty, (10 - countofexplode) * 3, (10 - countofexplode) * 3,
(int)((firesize + (10 - countofexplode) * 3) * Math.random()),
(int)((firesize + (10 - countofexplode) * 3) * Math.random()));
Color temp = g.getColor();
switch (countofexplode % 8)
{
case 0:
case 1:
case 2:
g.setColor(new Color(255, 255, 206));
break;
case 3:
g.setColor(new Color(49, 48, 49));
break;
case 4:
case 5:
g.setColor(new Color(255, 251, 247));
break;
case 6:
g.setColor(new Color(255, 69, 255));
break;
case 7:
//case 8:
//default:g.setColor(new Color(255,243,231));
break;
}
if (countofexplode % 3 == 0)
{
g.fillOval(startx, starty, (int)((firesize + (10 - countofexplode) * 300) * Math.random()),
(int)(2 * (firesize) * Math.random()));
}
else
{
g.setColor(new Color(66, 65, 66));
for(int k = 0; k <= 12; k += 3)
{
g.drawOval(startx - xoffset + k * 20, starty, 10 * k, 16 - k);
g.drawRect(startx - xoffset + k * 20 - 10, starty + 5, 5 * k, 16 - k);
}
}
g.setColor(temp);
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //
}
public boolean checkexplode(Graphics g)
{
if (explode)
{
exploding(g);
countofexplode--;
if (countofexplode == 0)
{
stop();
return true;
}
}
return false;
}
public void check() //tells shotH to check the shots' movement
{
if (starty < 0)
{
stop();
}
}
public void paint(Graphics g)
{ //this is the shots paint method... draws a line from its last position to its current position, basically
rot++; //advances color rotation
if (rot == 16)
{
rot = 0;
} //keeps rotation below 17
Color col1 = new Color(255 - (rot * 8), rot * 8, 127 + rot * 8); //makes the new color
if (rot % 2 == 0)
{
g.setColor(col1); //sets the current color to the rotation color
}
g.fillOval((int)startx, (int)starty, firesize, firesize); //draws a line from the current coords to the previous coords
g.fillOval((int)startx - xoffset, (int)starty, firesize, firesize); //draws a line from the current coords to the previous coords
g.fillOval((int)startx + xoffset, (int)starty, firesize, firesize); //draws a line from the current coords to the previous coords
}
//}
};
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //
class fire implements Runnable
{
int startx;
int starty;
int firespeed;
int firesize;
int rot;
int countofexplode;
int type;
Thread myThread;
static int count = 0;
boolean state, explode, sharkfirehitted;
public fire()
{
state = false;
count++;
countofexplode = 0;
type = 0;
myThread = null;
}
public fire(int x, int y, int speed, int size)
{
count++;
startx = x;
starty = y;
firespeed = speed;
firesize = size;
myThread = null;
explode = false;
sharkfirehitted = false;
state = true;
countofexplode = 0;
type = 0;
this.start();
}
public fire(int x, int y, int speed, int size, int atype)
{
set(x, y, speed, size, atype);
}
public void set(int x, int y, int speed, int size, int atype)
{
startx = x;
starty = y;
firespeed = speed;
firesize = size;
explode = false;
sharkfirehitted = false;
state = true;
countofexplode = 0;
type = atype;
this.start();
}
public void set(int x, int y, int speed, int size)
{ //count++;
startx = x;
starty = y;
firespeed = speed;
firesize = size;
explode = false;
sharkfirehitted = false;
state = true;
countofexplode = 0;
type = 0;
// myThread=null;
this.start();
}
public void setexplode()
{ //count++;
explode = true;
countofexplode = 8;
//System.out.println("explode is true now ddddddddddddddddddddddddddddddddddddddddddddddddddddddddd");
//this.paint
}
public void setsharkfirehitted()
{ //count++;
sharkfirehitted = true;
countofexplode = 4;
//System.out.println("explode is true now ddddddddddddddddddddddddddddddddddddddddddddddddddddddddd");
//this.paint
}
public void start()
{ //state=true;
if (myThread == null)
{
System.out.println("Starting!");
myThread = new Thread(this);
myThread.start();
}
else
{
myThread.stop();
myThread = new Thread(this);
myThread.start();
}
}
public void stop()
{
state = false;
if (myThread != null)
{
myThread.stop();
myThread = null;
System.out.println("thread stopped ");
}
}
public void destroy()
{
System.gc();
}
public void run()
{
//Do stuff
//System.out.println("run");
myThread.setPriority(Thread.MIN_PRIORITY);
while (myThread != null)
{
try
{
Thread.sleep(100);
}
catch(InterruptedException e)
{
}
// repaint();
if (starty > 200)
{
System.out.println("stop" + starty + "cont is " + count);
myThread.stop();
}
}
myThread = null;
}
public void move() //tells shotH to move all the shots
{
starty += firespeed;
// System.out.println("moving ");
}
public void exploding(Graphics g) //tells shotH to move all the shots
{ //starty+=firespeed;
System.out.println("exploding ");
//g.fillOval((int)startx, (int)starty, firesize, firesize); //draws a line from the current coords to the previous coords
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //
System.out.println(" " + (int)(Math.random() * 250) + " " + (int)(Math.random() * 250) + " " +
(int)(Math.random() * 250));
g.setColor(new Color((int)(Math.random() * 250), (int)(Math.random() * 250), (int)(Math.random() * 250)));
int MaxRocketNumber = 60;
int arr[] = { -1, 0, 1, 2, -2, -3, -4, 3, 4, 5, -5, 6, -6, 7, -7, 8, -8, 9, -9 };
g.drawOval(startx, starty, firesize + (10 - countofexplode) * 3, firesize + (10 - countofexplode) * 3);
g.fillOval(startx, starty, (int)((firesize + (10 - countofexplode) * 3) * Math.random()),
(int)((firesize + (10 - countofexplode) * 3) * Math.random()));
g.fillRoundRect(startx, starty, (10 - countofexplode) * 3, (10 - countofexplode) * 3,
(int)((firesize + (10 - countofexplode) * 3) * Math.random()),
(int)((firesize + (10 - countofexplode) * 3) * Math.random()));
}
public void dispsharkfirehitted(Graphics g)
{
g.drawOval(startx, starty, firesize * 6 - countofexplode * 3, firesize * 6 - countofexplode * 6);
}
public boolean checkexplode(Graphics g)
{
if (explode)
{
exploding(g);
countofexplode--;
if (countofexplode == 0)
{
stop();
return true;
}
}
return false;
}
public boolean checksharkfirehitted(Graphics g)
{
if (sharkfirehitted)
{
dispsharkfirehitted(g);
countofexplode--;
if (countofexplode == 0)
{
stop();
return true;
}
}
return false;
}
public void check(int width, int height) //tells shotH to check the shots' movement
{
if (starty > height)
{
stop();
}
}
public void paint(Graphics g)
{ //this is the shots paint method... draws a line from its last position to its current position, basically
switch (type)
{
case 0:
rot++; //advances color rotation
if (rot == 15)
{
rot = 0;
} //keeps rotation below 15
Color col1 = new Color(255 - (rot * 15), rot * 10, 127 + rot * 8); //makes the new color
g.setColor(col1); //sets the current color to the rotation color
g.fillOval((int)startx, (int)starty, firesize, firesize); //draws a line from the current coords to the previous coords
break;
case 1:
//g.setColor(new Color(255,255,156));
g.fillRect((int)startx, (int)starty, firesize / 3, firesize / 2); //draws a line from the current coords to the previous coords
g.setColor(new Color((int)(Math.random() * 250), (int)(Math.random() * 60), (int)(Math.random() * 156)));
g.draw3DRect((int)startx - firesize / 4, (int)starty, firesize / 2, firesize / 4, false);
g.setColor(new
Color((int)(Math.random() * 156), 200 - (int)(Math.random() * 160),
255 - (int)(Math.random() * 160)));
g.fillOval(startx - (int)(firesize / 3), starty + (int)(firesize / 3), (int)(firesize / 1.5),
firesize / 2);
g.drawLine(startx - firesize / 2, starty + firesize / 2, startx, starty + firesize);
g.drawLine(startx + firesize / 2, starty + firesize / 2, startx, starty + firesize);
break;
}
}
//}
};
public class Watergame extends java.applet.Applet implements Runnable
{
Thread killme = null;
ImageCanvas board;
public void init()
{
// setLayout() is a java.awt.Container member. It sets the LayoutManager
// for the container. Without it, the ImagePanels would get different
// relative positions when the viewer is resized.
setLayout(new BorderLayout());
// Place the ImageHelp at the top of the applet.
ImageHelp imHelp = new ImageHelp();
add("North", imHelp);
// Place the ImagePanel at the center of the applet.
ImagePanel ip = new ImagePanel(this, imHelp.getLabel());
add("Center", ip);
board = ip.getBoard();
System.out.println("initial finish ");
}
public void run()
{
while (killme != null)
{
try
{
Thread.sleep(100);
}
catch(InterruptedException e)
{
}
board.tick();
}
killme = null;
}
public void start()
{
if (killme == null)
{
killme = new Thread(this);
killme.start();
}
}
public void stop()
{
killme = null;
}
}
class ImageHelp extends Panel
{
Label l;
public ImageHelp()
{
setLayout(new GridLayout(2, 1));
// Create a new label, centered in the panel
add(new Label("Move the player using the arrow keys and fire with f and g,and speed up using x and z ", Label.CENTER));
l = new Label("Score: ");
add(l);
System.out.println("imagehelp finished ");
}
public Label getLabel()
{
return l;
}
}
class ImagePanel extends Panel
{
ImageCanvas board;
public ImagePanel(Applet app, Label l)
{
// Set the layout so that it is one column full size of the panel
//
setLayout(new GridLayout(0, 1));
board = new ImageCanvas(app, l);
add(board);
System.out.println("imagepanel initial finished ");
}
public ImageCanvas getBoard()
{
return board;
}
}
class ImageCanvas extends Canvas /*implements ImageObserver */
{
int banks[][] = new int[2][12];
int xpos = 50, ypos = 50;
int yOff = 0;
int ySpeed = 1;
int ymoveoffset = 5; //player's move offset
int xmoveoffset = 5;
fire fireshot[] = new fire[20]; //player's shoot
shark_fire sharkfire_shot[] = new shark_fire[20]; //shark's shoot
Image im;
Graphics gOff;
Image image_bird;
Image image_shark;
int xshark[] = new int[6];
int yshark[] = new int[6];
int xSpeedshark[] = new int[6];
int nShoreTick = 0;
int nScore = 0;
Label labelScore;
boolean fPaused = true;
boolean fDead = false;
Image image_weed;
Dimension r;
int xweed[] = new int[4];
int yweed[] = new int[4];
public ImageCanvas(Applet app, Label l)
{
labelScore = l;
image_bird = app.getImage(app.getCodeBase(), "bird.gif");
image_shark = app.getImage(app.getCodeBase(), "shark.gif");
image_weed = app.getImage(app.getCodeBase(), "weed.gif");
r = app.getSize();
initBoard();
try
{ //layout();
System.out.println(r);
im = app.createImage(r.width, r.height);
System.out.println(im);
gOff = im.getGraphics();
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println(" finish image canvas creat ");
}
void initBoard()
{
// Initialize the banks
for(int i = 0; i < 12; i++)
{
for(int j = 0; j < 2; j++)
{
banks[j][i] = (int)(Math.random() * 30);
}
}
// Initialize the weed
for(int i = 0; i < 4; i++)
xweed[i] = -999;
// Initialize the sharks
for(int i = 0; i < 6; i++)
xshark[i] = -999;
xpos = 100;
ypos = 50;
yOff = 0;
ymoveoffset = 5;
xmoveoffset = 5;
ySpeed = 1;
nShoreTick = 0;
nScore = 0;
fDead = false;
}
public void layout()
{
}
public void update(Graphics g)
{
paint(g);
}
public void paint(Graphics g)
{
Rectangle r = bounds(); //
paintApplet(gOff);
g.drawImage(im, 0, 0, this);
// System.out.println("paint "); //error
}
public void paintApplet(Graphics g)
{ //System.out.println(" start to paint applet" );
Rectangle r = bounds();
g.setColor(Color.lightGray);
g.clearRect(0, 0, r.width, r.height);
// Draw the banks
Polygon p1 = new Polygon();
p1.addPoint(0, 0);
Polygon p2 = new Polygon();
p2.addPoint(r.width, 0);
for(int i = 0; i < 12; i++)
{
p1.addPoint(banks[0][i], i * r.height / 10 - yOff);
p2.addPoint(r.width - banks[1][i], i * r.height / 10 - yOff);
}
p1.addPoint(0, r.height);
p1.addPoint(0, 0);
p2.addPoint(r.width, r.height);
p2.addPoint(r.width, 0);
g.setColor(Color.yellow);
g.fillPolygon(p1);
g.fillPolygon(p2);
// Draw the weed
for(int i = 0; i < 4; i++)
if (xweed[i] != -999)
{
// System.out.println("Drawing a weed");
g.drawImage(image_weed, xweed[i], yweed[i], this);
}
// Draw the sharks
for(int i = 0; i < 6; i++)
if (xshark[i] != -999)
g.drawImage(image_shark, xshark[i], yshark[i], this);
// Draw the player
g.drawImage(image_bird, xpos, ypos, this);
for(int i = 0; i < 20; i++)
{
if (fireshot[i] != null && fireshot[i].state)
{
if (!fireshot[i].checkexplode(g) && !fireshot[i].checksharkfirehitted(g)); // if not explode and if not hit the fire of shark
fireshot[i].paint(g);
//fireshot[i].check(100,200);
}
}
for(int i = 0; i < 20; i++)
{
if (sharkfire_shot[i] != null && sharkfire_shot[i].state)
{
if (!sharkfire_shot[i].checkexplode(g)); // if not explode
sharkfire_shot[i].paint(g);
//fireshot[i].check(100,200);
}
}
// Display any status messages
g.setColor(Color.gray);
if (fDead)
g.drawString("haha ^_^ ,you are hitted ,Press space bar for new game", 50, 50);
else if (fPaused)
g.drawString("Press space bar to tube", 50, 50);
}
int leftbank(int y)
{
Rectangle r = bounds();
int segment = (y + yOff) * 10 / r.height;
return Math.max(banks[0][segment], banks[0][segment + 1]);
}
int rightbank(int y)
{
Rectangle r = bounds();
int segment = (y + yOff) * 10 / r.height;
return r.width - Math.min(banks[1][segment], banks[1][segment + 1]);
}
public synchronized boolean handleEvent(Event e)
{
switch (e.id)
{
case Event.KEY_ACTION:
case Event.KEY_PRESS:
switch (e.key)
{
case Event.UP:
case 'k':
if (ypos - ymoveoffset > 0 && !fPaused)
ypos -= ymoveoffset;
repaint();
return true;
case Event.DOWN:
case 'j':
if (ypos + ymoveoffset < bounds().height - 32 && !fPaused)
// {//if (ySpeed>5)
// {
// }
ypos += ySpeed + ymoveoffset;
repaint();
return true;
case Event.RIGHT:
case 'l':
if (xpos + xmoveoffset < rightbank(ypos) - 32 && !fPaused)
xpos += xmoveoffset;
repaint();
return true;
case Event.LEFT:
case 'h':
if (xpos - xmoveoffset > leftbank(ypos) && !fPaused)
xpos -= xmoveoffset;
repaint();
return true;
case 'f':
startafire(xpos, ypos, 20, 10, 0); //fire type 0 with speed of 20
//System.out.println("fire ");
//fire a=new fire(20,20,30);
break;
case 'g':
startafire(xpos, ypos, 35, 20, 1); //fire type 1 with speed of 35
break;
//repaint();
//return true;
case 'z': //accecerate the player's x speed
// if (ySpeed > 0)
// ySpeed--;
xmoveoffset++;
return true;
case 'x': //accecerate the player's y speed
// if (ySpeed < 10)
// ySpeed++;
ymoveoffset++;
return true;
case ' ': //it is the blank press
if (fDead)
{
initBoard();
fPaused = false;
labelScore.setText("Score: " + String.valueOf(nScore));
}
else
fPaused = !fPaused;
return true;
default:
return false;
}
default:
return false;
}
}
// tick() is because I couldn't figure out if I made this class Runnable what
// whould I do about start()&stop()
public void tick()
{
if (fPaused)
return;
// Scroll the shore
yOff += ySpeed;
// Scroll the player
if (ypos - ySpeed > 0)
{
ypos -= ySpeed;
}
if (xpos < leftbank(ypos))
xpos = leftbank(ypos);
else if (xpos > rightbank(ypos) - 32)
xpos = rightbank(ypos) - 32;
// Scroll the weed
for(int i = 0; i < 4; i++)
if (xweed[i] != -999)
{
yweed[i] -= ySpeed;
if (yweed[i] < 0)
{
// System.out.println("Killing a cactus");
xweed[i] = -999;
}
}
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% below start to check collision//
Rectangle rectPlayer = new Rectangle(xpos + 4, ypos + 4, 32 - 4, 32 - 4);
Rectangle rectShark = new Rectangle();
Rectangle rectshot = new Rectangle();
Rectangle rectsharkshot1 = new Rectangle();
Rectangle rectsharkshot2 = new Rectangle();
Rectangle rectsharkshot3 = new Rectangle();
// Scroll the sharks
for(int i = 0; i < 6; i++)
{
yshark[i] -= Math.random() * ySpeed;
if (xshark[i] != -999 && (yshark[i] < 0 || xshark[i] < leftbank(yshark[i])))
{
// Shark is off-screen. Destroy.
// System.out.println("Destroyed a shark");
xshark[i] = -999;
}
if (xshark[i] != -999)
{
xshark[i] -= xSpeedshark[i] * ySpeed;
// check if the shark hit the player?
rectShark.reshape(xshark[i] + 8, yshark[i] + 8, 32 - 8, 32 - 8);
if (rectPlayer.intersects(rectShark))
{
fDead = true;
fPaused = true;
}
}
//check if fire shot hit the shark
for(int j = 0; j < 20; j++)
{
if (fireshot[j] != null && fireshot[j].state)
{
rectshot.reshape(fireshot[j].startx - fireshot[j].firesize / 2,
fireshot[j].starty - fireshot[j].firesize / 2, fireshot[j].firesize,
fireshot[j].firesize);
if (rectshot.intersects(rectShark))
{
xshark[i] = -999; //// Shark Destroy.
// fireshot[j].explode();
nScore += 200; //score added as you hit the shark
fireshot[j].setexplode();
}
}
}
}
//check if fire shot of shark hit the player
for(int j = 0; j < 20; j++)
{
if (sharkfire_shot[j] != null && sharkfire_shot[j].state)
{
rectsharkshot1.reshape(sharkfire_shot[j].startx - sharkfire_shot[j].firesize / 2,
sharkfire_shot[j].starty - sharkfire_shot[j].firesize / 2,
sharkfire_shot[j].firesize, sharkfire_shot[j].firesize);
rectsharkshot2.reshape(sharkfire_shot[j].startx - sharkfire_shot[j].firesize / 2 -
sharkfire_shot[j].xoffset,
sharkfire_shot[j].starty - sharkfire_shot[j].firesize / 2,
sharkfire_shot[j].firesize, sharkfire_shot[j].firesize);
rectsharkshot3.reshape(sharkfire_shot[j].startx - sharkfire_shot[j].firesize / 2 +
sharkfire_shot[j].xoffset,
sharkfire_shot[j].starty - sharkfire_shot[j].firesize / 2,
sharkfire_shot[j].firesize, sharkfire_shot[j].firesize);
if (rectsharkshot1.intersects(rectPlayer) || rectsharkshot2.intersects(rectPlayer) ||
rectsharkshot3.intersects(rectPlayer))
{
sharkfire_shot[j].setexplode();
fDead = true;
fPaused = true; //player is hitted
}
for(int k = 0; k < 20; k++)
{
if (fireshot[k] != null && fireshot[k].state)
{
rectshot.reshape(fireshot[k].startx - fireshot[k].firesize / 2,
fireshot[k].starty - fireshot[k].firesize / 2, fireshot[k].firesize,
fireshot[k].firesize);
////check shark fire shot if hit the player fire shot
if (rectsharkshot1.intersects(rectshot) || rectsharkshot2.intersects(rectshot) ||
rectsharkshot3.intersects(rectshot))
{
fireshot[k].setsharkfirehitted(); //fire of player hit with fire of shark
sharkfire_shot[j].stop();
nScore += 30;
}
}
}
}
}
// Update score, if on the bottom half of screen
Rectangle r = bounds();
if (ypos + yOff > r.height / 2)
{
nScore += ySpeed;
labelScore.setText("Score: " + String.valueOf(nScore));
}
// Do we need to generate another shore coordinate?
if (yOff >= r.height / 10)
{
yOff -= r.height / 10;
for(int i = 1; i < 12; i++)
{
banks[0][i - 1] = banks[0][i];
banks[1][i - 1] = banks[1][i];
}
// banks[0][11] = banks[0][10] + 10;
// banks[1][11] = banks[0][10] + 10;
banks[0][11] = banks[0][10] + (int)(Math.random() * 20) - 7;
banks[1][11] = banks[1][10] + (int)(Math.random() * 20) - 7;
if (banks[0][11] < 0)
banks[0][11] = 0;
if (r.width - banks[1][11] < 100)
banks[1][11] -= 64;
if (banks[0][11] >= r.width)
banks[0][11] = r.width - 1;
if (banks[1][11] >= r.width)
banks[1][11] = r.width - 1;
if (banks[0][11] > banks[1][11])
{
int i = banks[0][11];
banks[0][11] = banks[1][11];
banks[1][11] = i;
}
if (banks[0][11] + 64 > r.width - banks[1][11])
{
banks[0][11] = r.width - banks[1][11] - 40;
banks[1][11] -= 22;
}
// If necessary, generate a new shark
for(int i = 0; i < 6; i++)
if (xshark[i] == -999 && Math.random() < 0.2)
{
xshark[i] = r.width - banks[1][11] - 32;
yshark[i] = 9 * r.height / 10;
xSpeedshark[i] = (int)(Math.random() * 3) + 1;
// System.out.println("Created a shark");
break;
}
// start a shark fire;
int ran = (int)(Math.random() * 6);
startasharkfire(xshark[ran], yshark[ran], 5, 10); //start shark fire with speed 5 and size 10
nShoreTick++;
if (nShoreTick > 3)
{
// System.out.println("Finished level " + String.valueOf(ySpeed));
nShoreTick = 0;
banks[0][11] = 0;
banks[1][11] = 0;
if (ySpeed < 10)
ySpeed++;
}
}
// Add any needed weed
for(int i = 0; i < 4; i++)
if (xweed[i] == -999 && Math.random() < .02)
{
// System.out.println("Making a weed");
yweed[i] = r.height;
if (Math.random() < 0.5)
xweed[i] = (int)(Math.random() * banks[0][11]);
else
xweed[i] = r.width - (int)(Math.random() * banks[1][11]);
}
for(int i = 0; i < 20; i++)
{
if (fireshot[i] != null && fireshot[i].state)
{
fireshot[i].move();
fireshot[i].check(100, 500);
}
}
for(int i = 0; i < 20; i++)
{
if (sharkfire_shot[i] != null && sharkfire_shot[i].state)
{
sharkfire_shot[i].move();
sharkfire_shot[i].check();
}
}
repaint();
}
public void startafire(int x, int y, int speed, int size, int type)
{ //System.out.println("start to find fire ");
for(int i = 0; i < 20; i++)
{
if (fireshot[i] == null)
{
fireshot[i] = new fire(x, y, speed, size, type);
System.out.println(" creat new " + i);
return;
}
else if (fireshot[i].state == false)
{
fireshot[i].set(x, y, speed, size, type);
System.out.println(" state false reset " + i);
return;
}
//System.out.println(fireshot[i].state + " " + i);
// System.out.println(fireshot[i].state+" "+fireshot[i].myThread+" "+i);
}
}
public void startasharkfire(int x, int y, int z, int size)
{ //System.out.println("start to find fire ");
for(int i = 0; i < 20; i++)
{
if (sharkfire_shot[i] == null)
{
sharkfire_shot[i] = new shark_fire(x, y, z, size);
System.out.println("shark fire creat new " + i);
return;
}
else if (sharkfire_shot[i].state == false)
{
sharkfire_shot[i].set(x, y, z, size);
System.out.println("shark fire state false reset " + i);
return;
}
//System.out.println(sharkfire_shot[i].state + " " + i);
// System.out.println(fireshot[i].state+" "+fireshot[i].myThread+" "+i);
}
}
}
/*
<applet code=Watergame.class width=500 height=500>
</applet>
*/
本文地址:http://com.8s8s.com/it/it14857.htm