Jump to content

  • Log In with Google      Sign In   
  • Create Account

Awesome job so far everyone! Please give us your feedback on how our article efforts are going. We still need more finished articles for our May contest theme: Remake the Classics

#ActualGearslayer360

Posted 17 October 2012 - 09:51 PM

Ok so my problem is in my game I have two enemies. One of them is human controlled and can shoot at will. The AI however, seems to be a little broken. In my shoot method in this class, which is the enemy class, I try to use the system for shooting that I used for the player and I call the shoot method in run so it continuously updates. I can get one shot off right at the beginning, but I can't shoot any more after that. I've tried everything I know...and now I'm basically stuck. I want to see if I can do more with this game but for weeks I've struggled to no avail trying to figure this out. Help please? It would be very appreciated. I can include the other classes if needed just ask. So maybe you can run the game to see what I mean.



[source lang="java"]package game;import java.awt.Color;import java.awt.Graphics;import java.awt.Rectangle;import java.util.Random;public class Enemy implements Runnable{ int x; int y; int xDirection; int yDirection; int health; int p1Score; int pHealth = 10; int bx; int by; boolean shot = false; public static boolean readyToFire; Rectangle enemy; Rectangle bullet; Player p1 = new Player(290, 15, 10); public Enemy(int x, int y, int health) { p1Score = 0; this.x = x; this.y = y; this.health = health; Random r = new Random(); int rDir = r.nextInt(1); if(rDir == 0) { rDir--; setXDirection(rDir); } int yrDir = r.nextInt(1); /*if(yrDir == 0) { yrDir--; setYDirection(yrDir); } */ enemy = new Rectangle(this.x, this.y, 100, 30); } public void draw(Graphics g) { //draw the enemy initially g.setColor(Color.BLUE); g.fillRect(enemy.x, enemy.y, enemy.width+5, enemy.height); g.fillRect(enemy.x+45, enemy.y+25, 15, 30); if(shot) { g.setColor(Color.BLUE); g.fillRect(bullet.x+5, bullet.y-10, bullet.width, bullet.height); } //if the enemy dies remove it //Need to delete the current one and make a new enemy if(health <= 0) { enemy = new Rectangle(x, y, 100, 30); health = 10 ; } } /* * Always seems to create the enemy bullet in the same place *...need to figure a way for it to always fire * if within range of the player */ public void shoot() { readyToFire = true; if(!shot && enemy.x >= p1.x) { while(readyToFire) { shot = true; readyToFire = false; bullet = new Rectangle (enemy.x+45, enemy.y+65); by = enemy.y+65; bx = enemy.x+45; bullet = new Rectangle(bx, by, 3 , 15); System.out.println("Hi"); if(bullet.y >= 595) { bullet = new Rectangle(0, 0, 0, 0); shot = false; readyToFire = true; } } } bullet.y+=3; } public void collision() { //Collision between the bullet and the enemy. //Checks first if the player bullet is null //Checks if the bounds of bullet and enemy intersect if(enemy.getBounds().intersects(p1.player)) { setYDirection(-1); } if(p1.bullet != null && enemy.getBounds().contains(p1.bullet.getBounds())) { //setYDirection(-1); p1Score+=100; health-=1; p1.bullet = new Rectangle(0, 0, 0, 0); } } public void move() { enemy.x+=xDirection; enemy.y+=yDirection; //Checks if the enemy hits the left side of the screen //if so reverse the direction to the right if(enemy.x <= 0) { setXDirection(1); } //Checks if the enemy hits the right side of the screen //if so reverse the direction to the left if(enemy.x >= 700) { setXDirection(-1); } //Checks if the enemy hits the top of the screen //if so reverse the direction to the bottom if(enemy.y <= 30) { setYDirection(1); } //Checks if the enemy hits the bottom of the screen //if so reverse the direction to the top if(enemy.y >= 570) { setYDirection(-1); }   } public void run() { try {    while(true)    {    move();    shoot();    collision();    Thread.sleep(3);    } } catch(Exception e){System.err.println(e.getMessage());} } public void setXDirection(int direction) { xDirection = direction; } public void setYDirection(int direction) { yDirection = direction; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public int getHealth() { return health; } public void setHealth(int health) { this.health = health; } public int getP1Score() { return p1Score; } public void setP1Score(int score) { p1Score = score; } public Player getP1() { return p1; } public void setP1(Player p1) { this.p1 = p1; } public Rectangle getEnemy() { return enemy; } public void setEnemy(Rectangle enemy) { this.enemy = enemy; } public int getXDirection() { return xDirection; } public int getYDirection() { return yDirection; } public int getPHealth() { return pHealth; } public void setPHealth(int health) { pHealth = health; }}[/source]

#1Gearslayer360

Posted 17 October 2012 - 09:50 PM

Ok so my problem is in my game I have two enemies. One of them is human controlled and can shoot at will. The AI however, seems to be a little broken. In my shoot method in this class, which is the enemy class, I try to use the system for shooting that I used for the player and I call the shoot method in run so it continuously updates. I can get one shot off right at the beginning, but I can't shoot any more after that. I've tried everything I know...and now I'm basically stuck. I want to see if I can do more with this game but for weeks I've struggled to no avail trying to figure this out. Help please? It would be very appreciated.



[source lang="java"]package game;import java.awt.Color;import java.awt.Graphics;import java.awt.Rectangle;import java.util.Random;public class Enemy implements Runnable { int x; int y; int xDirection; int yDirection; int health; int p1Score; int pHealth = 10; int bx; int by; boolean shot = false; public static boolean readyToFire; Rectangle enemy; Rectangle bullet; Player p1 = new Player(290, 15, 10); public Enemy(int x, int y, int health) { p1Score = 0; this.x = x; this.y = y; this.health = health; Random r = new Random(); int rDir = r.nextInt(1); if(rDir == 0) { rDir--; setXDirection(rDir); }         int yrDir = r.nextInt(1); /*if(yrDir == 0) { yrDir--; setYDirection(yrDir); } */ enemy = new Rectangle(this.x, this.y, 100, 30); } public void draw(Graphics g) { //draw the enemy initially g.setColor(Color.BLUE); g.fillRect(enemy.x, enemy.y, enemy.width+5, enemy.height); g.fillRect(enemy.x+45, enemy.y+25, 15, 30); if(shot) { g.setColor(Color.BLUE); g.fillRect(bullet.x+5, bullet.y-10, bullet.width, bullet.height); } //if the enemy dies remove it //Need to delete the current one and make a new enemy if(health <= 0) { enemy = new Rectangle(x, y, 100, 30); health = 10 ; } } /* * Always seems to create the enemy bullet in the same place *...need to figure a way for it to always fire * if within range of the player */ public void shoot() { readyToFire = true; if(!shot && enemy.x >= p1.x) { while(readyToFire) { shot = true; readyToFire = false; bullet = new Rectangle (enemy.x+45, enemy.y+65); by = enemy.y+65; bx = enemy.x+45; bullet = new Rectangle(bx, by, 3 , 15); System.out.println("Hi"); if(bullet.y >= 595) { bullet = new Rectangle(0, 0, 0, 0); shot = false; readyToFire = true; } } } bullet.y+=3; } public void collision() { //Collision between the bullet and the enemy. //Checks first if the player bullet is null //Checks if the bounds of bullet and enemy intersect if(enemy.getBounds().intersects(p1.player)) { setYDirection(-1); } if(p1.bullet != null && enemy.getBounds().contains(p1.bullet.getBounds())) { //setYDirection(-1); p1Score+=100; health-=1; p1.bullet = new Rectangle(0, 0, 0, 0); } } public void move() { enemy.x+=xDirection; enemy.y+=yDirection; //Checks if the enemy hits the left side of the screen //if so reverse the direction to the right if(enemy.x <= 0) { setXDirection(1); } //Checks if the enemy hits the right side of the screen //if so reverse the direction to the left if(enemy.x >= 700) { setXDirection(-1); } //Checks if the enemy hits the top of the screen //if so reverse the direction to the bottom if(enemy.y <= 30) { setYDirection(1); } //Checks if the enemy hits the bottom of the screen //if so reverse the direction to the top if(enemy.y >= 570) { setYDirection(-1); }   } public void run()     {         try         {            while(true)            {             move();             shoot();             collision();             Thread.sleep(3);            }         }         catch(Exception e){System.err.println(e.getMessage());}     } public void setXDirection(int direction) { xDirection = direction; } public void setYDirection(int direction) { yDirection = direction; } public int getX() { return x; } public void setX(int x)    { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public int getHealth() { return health; } public void setHealth(int health) { this.health = health; } public int getP1Score()    { return p1Score; } public void setP1Score(int score) { p1Score = score; } public Player getP1() { return p1; } public void setP1(Player p1) { this.p1 = p1; } public Rectangle getEnemy() { return enemy; } public void setEnemy(Rectangle enemy) { this.enemy = enemy; } public int getXDirection() { return xDirection; } public int getYDirection() { return yDirection; } public int getPHealth() { return pHealth; } public void setPHealth(int health) { pHealth = health; } }[/source]

PARTNERS