Ok, so I am still fairly new to java and am working on this game to improve myself. When my special is set to true it does not draw for some reason can someone tell me what I am doing wrong?
Below are the files containing code having to deal with the special.
Special.java
[spoiler]
package com.chimpygames;
import java.awt.Color;
import java.awt.Graphics2D;
public class Special {
// fields
private double x;
private double y;
private int r;
private int increase;
private Color color1;
//constructor
public Special(int x, int y) {
//new code
this.x = x;
this.y = y;
r = 0;
increase = 1;
color1 = Color.WHITE;
}
// functions
public double getx() { return x; }
public double gety() { return y; }
public double getr() { return r; }
public boolean update() {
//new true code
while (r <= 10) {
r += increase;
r++;
return false;
}
return false;
}
public void draw(Graphics2D g) {
g.setColor(color1);
g.drawOval((int) x,(int) y, 5 * r, 5 * r);
}
}
[/spoiler]
GamePanel.java
[spoiler]
package com.chimpygames;
import javax.swing.JPanel;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.*;
import java.util.ArrayList;
import javax.swing.JPanel;
public class GamePanel extends JPanel implements Runnable, KeyListener {
// Fields
public static int WIDTH = 400;
public static int HEIGHT = 500;
private Thread thread;
private boolean isRunning;
private BufferedImage image;
private Graphics2D g;
private int FPS = 30;
private double averageFPS;
public Player player;
public static ArrayList<Bullet> bullets;
public static ArrayList<Enemy> enemies;
public static ArrayList<Special> special;
// Constructor
public GamePanel() {
super();
setPreferredSize(new Dimension(WIDTH, HEIGHT));
setFocusable(true);
requestFocus();
}
// Functions
public void addNotify() {
super.addNotify();
if (thread == null) {
thread = new Thread(this);
thread.start();
}
addKeyListener(this);
}
@Override
public void run() {
isRunning = true;
image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
g = (Graphics2D) image.getGraphics();
player = new Player();
bullets = new ArrayList<Bullet>();
enemies = new ArrayList<Enemy>();
for (int i = 0; i < 2000; i++) {
enemies.add(new Enemy(1,1));
}
long startTime;
long URDTimeMillis;
long waitTime;
long totalTime = 0;
int frameCount = 0;
int maxFrameCount = 30;
long targetTime = 1000 / FPS;
// GAME LOOP
while (isRunning) {
startTime = System.nanoTime();
gameUpdate();
gameRender();
gameDraw();
URDTimeMillis = (System.nanoTime() - startTime) / 1000000;
waitTime = targetTime - URDTimeMillis;
try {
Thread.sleep(waitTime);
} catch (Exception e) {
}
totalTime += System.nanoTime() - startTime;
frameCount++;
if (frameCount == maxFrameCount) {
averageFPS = 1000.0 / ((totalTime / frameCount) / 1000000);
frameCount = 0;
totalTime = 0;
}
}
}
private void gameUpdate() {
//player update
player.update();
//bullet update
for (int i = 0; i < bullets.size(); i++) {
boolean remove = bullets.get(i).update();
if (remove) {
bullets.remove(i);
i--;
}
}
//enemy update
for (int i = 0; i < enemies.size(); i++) {
enemies.get(i).update();
}
//bullet and enemy collisions
for (int i = 0; i < bullets.size(); i++) {
Bullet b = bullets.get(i);
double bx = b.getx();
double by = b.gety();
double br = b.getr();
for (int j = 0; j < enemies.size(); j++) {
Enemy e = enemies.get(j);
double ex = e.getx();
double ey = e.gety();
double er = e.getr();
double dx = bx - ex;
double dy = by - ey;
double dist = Math.sqrt(dx * dx + dy * dy);
if (dist < br + er) {
e.hit();
bullets.remove(i);
i--;
break;
}
}
}
//special update
try {
for (int t = 0; t < special.size(); t++) {
boolean remove = special.get(t).update();
if (remove) {
special.remove(t);
t--;
}
}
} catch (Exception e) {
// TODO: handle exception
}
//enemy and player collision
for (int i = 0; i < enemies.size(); i++) {
Enemy e = enemies.get(i);
double ex = e.getx();
double ey = e.gety();
double er = e.getr();
double px = player.getx();
double py = player.gety();
double pr = player.getr();
double dx = ex - px;
double dy = ey - py;
double dist = Math.sqrt(dx * dx + dy * dy);
if (player.getSpecial()) {
if (dist < (er + 10) + (pr + 10)) {
e.hit();
}
}
}
//check dead enemies
for(int i=0; i < enemies.size(); i++) {
if(enemies.get(i).isDead()) {
enemies.remove(i);
i--;
}
}
}
private void gameRender() {
g.setColor(Color.BLACK);
g.fillRect(0, 0, WIDTH, HEIGHT);
g.setColor(Color.WHITE);
g.drawString("FPS: " + averageFPS, 10, 10);
g.drawString("Bullets: " + bullets.size(), 10, 20);
g.drawString("Enemies: " + enemies.size(), 10, 30);
g.drawString("X: " + player.x + " Y: " + player.y, 10, 40);
//draw special
try {
for(int i =0; i < special.size(); i++){
special.get(i).draw(g);
}
} catch (Exception e) {
// TODO: handle exception
}
//draw player
player.draw(g);
//draw bullets
for(int i =0; i < bullets.size(); i++){
bullets.get(i).draw(g);
}
//draw enemies
for (int i = 0; i < enemies.size(); i++) {
enemies.get(i).draw(g);
}
}
private void gameDraw() {
Graphics g2 = this.getGraphics();
g2.drawImage(image, 0, 0, null);
g2.dispose();
}
public void keyTyped(KeyEvent key) {
}
public void keyPressed(KeyEvent key) {
int keyCode = key.getKeyCode();
switch (keyCode) {
case KeyEvent.VK_LEFT:
player.setLeft(true);
break;
case KeyEvent.VK_RIGHT:
player.setRight(true);
break;
case KeyEvent.VK_UP:
player.setUp(true);
break;
case KeyEvent.VK_DOWN:
player.setDown(true);
break;
case KeyEvent.VK_Z:
player.setFiring(true);
break;
case KeyEvent.VK_X:
player.setSpecial(true);
break;
default:
break;
}
}
public void keyReleased(KeyEvent key) {
int keyCode = key.getKeyCode();
switch (keyCode) {
case KeyEvent.VK_LEFT:
player.setLeft(false);
break;
case KeyEvent.VK_RIGHT:
player.setRight(false);
break;
case KeyEvent.VK_UP:
player.setUp(false);
break;
case KeyEvent.VK_DOWN:
player.setDown(false);
break;
case KeyEvent.VK_Z:
player.setFiring(false);
break;
case KeyEvent.VK_X:
player.setSpecial(false);
break;
default:
break;
}
}
}
[/spoiler]
Player.java
[spoiler]
package com.chimpygames;
import java.awt.*;
public class Player {
// fields
public int x;
public int y;
public int r;
public int dx;
public int dy;
private int speed;
private boolean left;
private boolean right;
private boolean up;
private boolean down;
private boolean firing;
private long firingTimer;
private long firingDelay;
private boolean special;
private long specialTimer;
private long specialDelay;
private int lives;
private Color color1;
private Color color2;
// constructor
public Player() {
x = GamePanel.WIDTH / 2;
y = GamePanel.HEIGHT / 2;
r = 5;
dx = 0;
dy = 0;
speed = 6;
lives = 3;
color1 = Color.WHITE;
color2 = Color.RED;
firing = false;
firingTimer = System.nanoTime();
firingDelay = 200;
special = false;
specialTimer = System.nanoTime();
specialDelay = 5000;
}
// functions
public int getx() {
return x;
}
public int gety() {
return y;
}
public int getr() {
return r;
}
public boolean getSpecial() {
return special;
}
public void setLeft(boolean b) {
left = b;
}
public void setRight(boolean b) {
right = b;
}
public void setUp(boolean b) {
up = b;
}
public void setDown(boolean b) {
down = b;
}
public void setSpecial(boolean b) {
special = b;
}
public void setFiring(boolean b) { firing = b;}
public void update() {
if (left) {
dx = -speed;
}
if (right) {
dx = speed;
}
if (up) {
dy = -speed;
}
if (down) {
dy = speed;
}
x += dx;
y += dy;
if (x < r)
x = r;
if (y < r)
y = r;
if (x > GamePanel.WIDTH - r)
x = GamePanel.WIDTH - r;
if (y > GamePanel.HEIGHT - r)
y = GamePanel.HEIGHT - r;
dx = 0;
dy = 0;
if(firing) {
long elapsed = (System.nanoTime() - firingTimer) / 1000000;
if(elapsed > firingDelay) {
GamePanel.bullets.add(new Bullet(270, x, y));
firingTimer = System.nanoTime();
}
}
if(special) {
long elapsed = (System.nanoTime() - specialTimer) / 1000000;
if(elapsed > specialDelay) {
try {
GamePanel.special.add(new Special(getx(), gety()));
} catch (Exception e) {
// TODO: handle exception
}
specialTimer = System.nanoTime();
}
}
}
public void draw(Graphics2D g) {
g.setColor(color1);
g.fillOval(x - r, y - r, 2 * r, 2 * r);
g.setStroke(new BasicStroke(3));
g.setColor(color1.darker());
g.drawOval(x - r, y - r, 2 * r, 2 * r);
g.setStroke(new BasicStroke(1));
}
}
[/spoiler]