Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 61 additions & 34 deletions .idea/workspace.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

40 changes: 30 additions & 10 deletions Engine/gameEngine.java
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,14 @@ public void run() {
long [] enemy1_nextShoot = new long[10]; // instantes do próximo tiro
double enemy1_radius = 9.0; // raio (tamanho do inimigo 1)
long nextEnemy1 = currentTime + 2000; // instante em que um novo inimigo 1 deve aparecer

ArrayList<Enemy1> enemy1List = new ArrayList<>(10);

//utiliza as clases criadas -- y está fora da tela ---tem que descomentar as outras partes para funcinar
int NumEnemys = 10;
ArrayList<Enemy1> enemy1List = new ArrayList<>();
for(int i = 0; i < NumEnemys; i++){
enemy1List.add(new Enemy1(Math.random() * (GameLib.WIDTH - 20.0) + 10.0, -10, 0, currentTime));
}
enemy1List.add(null);

/* variáveis dos inimigos tipo 2 */

Expand All @@ -126,7 +132,7 @@ public void run() {

ArrayList<Enemy2> enemy2List = new ArrayList<>(10);
/* variáveis dos projéteis lançados pelos inimigos (tanto tipo 1, quanto tipo 2) */

int [] e_projectile_states = new int[200]; // estados
double [] e_projectile_X = new double[200]; // coordenadas x
double [] e_projectile_Y = new double[200]; // coordenadas y
Expand Down Expand Up @@ -342,9 +348,15 @@ public void run() {
}
}
}



/* inimigos tipo 1 */


//Utilizando as clases criadas
/*for (int i = 0; i < enemy1List.size(); i++){
enemy1List.get(i).update(delta);
}*/

for(int i = 0; i < enemy1_states.length; i++){

if(enemy1_states[i] == EXPLODING){
Expand All @@ -357,7 +369,7 @@ public void run() {

if(enemy1_states[i] == ACTIVE){

/* verificando se inimigo saiu da tela */
/* verificando se inimigo saiu da tela*/
if(enemy1_Y[i] > GameLib.HEIGHT + 10) {

enemy1_states[i] = INACTIVE;
Expand Down Expand Up @@ -472,8 +484,8 @@ public void run() {

if(free < enemy1_states.length){

enemy1List.add(new Enemy1(Math.random() * (GameLib.WIDTH - 20.0) + 10.0,-10.0,10));
enemy1List.get(0).draw();
//enemy1List.add(new Enemy1(Math.random() * (GameLib.WIDTH - 20.0) + 10.0,-10.0,10));
enemy1List.get(0).draw(0);
enemy1_X[free] = Math.random() * (GameLib.WIDTH - 20.0) + 10.0;
enemy1_Y[free] = -10.0;
enemy1_V[free] = 0.20 + Math.random() * 0.15;
Expand Down Expand Up @@ -571,11 +583,13 @@ public void run() {

/* desenhando plano fundo distante */

backGround.draw(delta); //função que desenha o plano de fundo

//GameLib.setColor(Color.DARK_GRAY);
//background2_count += background2_speed* delta;

//for(int i = 0; i < background2_X.length; i++){
backGround.draw(delta);

//GameLib.fillRect(background2_X[i], (background2_Y[i] + background2_count) % GameLib.HEIGHT, 2, 2);
//}

Expand Down Expand Up @@ -627,7 +641,13 @@ public void run() {
}

/* desenhando inimigos (tipo 1) */


/*utiliza as classes criadas
for(int i = 0; i < enemy1List.size(); i++){
enemy1List.get(i).draw();
}*/


for(int i = 0; i < enemy1_states.length; i++){

if(enemy1_states[i] == EXPLODING){
Expand Down
4 changes: 2 additions & 2 deletions Entities/BackGround.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,12 @@ public void draw(long delta){
star2.getFirst().count += star2.getFirst().VY * delta;
for(int i = 0; i < star2.size(); i++){
star2.get(i).count += star2.get(i).VY * delta;
star2.get(i).draw();
star2.get(i).draw(0);
}
GameLib.setColor(star1.getFirst().getColor());
for(int i = 0; i < star1.size(); i++){
star1.get(i).count += star1.get(i).VY * delta;
star1.get(i).draw();
star1.get(i).draw(0);
}
}
}
Expand Down
9 changes: 7 additions & 2 deletions Entities/Enemy.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ public void spaw(long currentTime){
}
}

//Sobreescrita do metodo canShoot de Entity
public boolean canShoot(long currentTime, GameElement ent){
return currentTime > nextShot && getY() < ent.getY() && getState() == EntityState.ACTIVE;
}


public void collide(GameElement element, long currentTime){
if(getState() == EntityState.ACTIVE){
Expand All @@ -32,9 +37,9 @@ public void collide(GameElement element, long currentTime){
}
}

public void draw(){
public void draw(long currentTime){
if(getState() == EntityState.EXPLODING){
explode(10);
explode(10, currentTime);
}
if(getState() == EntityState.ACTIVE){
GameLib.setColor(color);
Expand Down
44 changes: 24 additions & 20 deletions Entities/EnemyModels/Enemy1.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,44 +2,47 @@

import Engine.GameLib;
import Entities.Enemy;
import Entities.GameElement;
import Entities.Projectile;
import utils.EntityState;

import javax.lang.model.type.NullType;
import java.awt.*;

public class Enemy1 extends Enemy {

public Enemy1(double x, double y, long when){
public Enemy1(double x, double y, long when, long currentTime){
super(x, y, when, 9.0);
VX = 0;
VY = 0.20 + Math.random() * 0.15;
angle = (3 * Math.PI) / 2;
RV = 0;
nextShot = now + 500;
ShootingSpeed = 500;
nextShot = currentTime + ShootingSpeed;
color= Color.CYAN;
setState(EntityState.INACTIVE);
setState(EntityState.ACTIVE);
}

public void update(long delta/*, Player player*/){
public void update(long delta, long currentTime){
if(getState() == EntityState.EXPLODING){

if(now > explosionEnd){
if(currentTime > explosionEnd){
setState(EntityState.DESTROY);
}
}

if(getState() == EntityState.ACTIVE){
if(getState() == EntityState.ACTIVE) {

/* verificando se inimigo saiu da tela */
if(getY() > GameLib.HEIGHT + 10) {
if (getY() > GameLib.HEIGHT + 10) {
setState(EntityState.DESTROY);
}
else {
} else {
setX(getX() + VX * Math.cos(angle) * delta);
setY(getY() + VX * Math.sin(angle) * delta * (-1.0) );
setY(getY() + VY * Math.sin(angle) * delta * (-1.0));
angle += RV * delta;

if(now > nextShot/* && Y < player.getY()*/){
}
}
//if(now > nextShot/* && Y < player.getY()*/){


//efetua o proximo disparo
Expand All @@ -56,24 +59,25 @@ public void update(long delta/*, Player player*/){
enemy1_nextShoot[i] = (long) (currentTime + 200 + Math.random() * 500);
}
*/
}
}
}



}

//Provavlemente esse metodo retornara alguma coisa
public void shot(){

Projectile project = new Projectile(getX(),getY(), radius, Math.cos(angle) * 0.45,Math.sin(angle) * 0.45 * (-1.0) );
public Projectile shot(long currentTime, GameElement ent){

if(canShoot(currentTime, ent)){
nextShot = currentTime + ShootingSpeed;
return new Projectile(getX(),getY(), 2.0, Math.cos(angle) * 0.45,Math.sin(angle) * 0.45 * (-1.0), Color.RED );
}
return null;
//Inimigo1 e Inimigo2: super(enemy.getX(), enemy.getY(), radius);
// Inimigo1: VX = Math.cos(enemy.getAngle()) * 0.45; VY = Math.sin(enemy.getAngle()) * 0.45 * (-1.0);
// o tiro vai ser parte do inimigo, mas o inimigo vai chamar/criar uma classe de projétil c o construtor de projetil. Se vc quiser, pode criar 2 subclasses de projetil, uma o projetil base e uma outra q quando chega em um pedaco da tela (o fim se pa) explode em outros projeteis (pro boss e pros powerup w vo usa). mas ai e opcional sepa, tu escolhe, so acho q vale a pena ter mais q 1 tipo de projetil
//teoricamente quem vai controlar porjetil seria GameEnge
//mas a arrayList ficaria aonde ?
//no codigo original ele não controla isso, pra ele todos os projeteis são a mesma coisa


}

}
Expand Down
Loading