首先请准备好图像素材,例如把以下图像分别命名为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> */

|