浏览代码

game logic fixed1.0

Remco 10 年之前
父节点
当前提交
76c288cfec
共有 3 个文件被更改,包括 95 次插入114 次删除
  1. 9 33
      model/drawObjects/Enemy.java
  2. 83 80
      model/gameState/PlayState.java
  3. 3 1
      model/gameState/TitleState.java

+ 9 - 33
model/drawObjects/Enemy.java

@@ -8,13 +8,11 @@ import model.objects.Path;
 
 
 public class Enemy extends DrawObject {
 public class Enemy extends DrawObject {
 
 
-	public static final int distanceToOctagon = 1000;
-	private final double secondsToEnd = 3;
-	private int length,timeToClick = 10,currentTimeToClick;	
+	public static final double distanceToOctagon = 1000,secondsToEnd = 5.0;	
+	private int length;
 	private double lengthOf1Side,distanceFromStart;//lengthOf1Side wordt alleen gebruikt als de lijn een schuine lijn is.	
 	private double lengthOf1Side,distanceFromStart;//lengthOf1Side wordt alleen gebruikt als de lijn een schuine lijn is.	
 	public Line2D enemy;
 	public Line2D enemy;
 	private Color c;	
 	private Color c;	
-	private boolean clickable = false;
 	private Path path;
 	private Path path;
 	
 	
 	public Enemy(int pathID,int lengthOfEnemy,Color c,Path path){
 	public Enemy(int pathID,int lengthOfEnemy,Color c,Path path){
@@ -66,7 +64,8 @@ public class Enemy extends DrawObject {
 		endX += beginX;
 		endX += beginX;
 		endY += beginY;
 		endY += beginY;
 		
 		
-		enemy = new Line2D.Double(beginX, beginY, endX, endY);			
+		enemy = new Line2D.Double(beginX, beginY, endX, endY);	
+//		System.out.println("Enemy added on path: "+pathID);
 	}
 	}
 
 
 	@Override
 	@Override
@@ -77,11 +76,8 @@ public class Enemy extends DrawObject {
 
 
 	@Override
 	@Override
 	public void update(float factor) {	
 	public void update(float factor) {	
-		if(clickable){
-			currentTimeToClick++;
-		}		
 		
 		
-		distanceFromStart += (distanceToOctagon/(secondsToEnd*1000))*factor;
+		distanceFromStart += (distanceToOctagon/(secondsToEnd*1000))*factor;		
 		
 		
 		double x1,x2,y1,y2;
 		double x1,x2,y1,y2;
 		x1 = enemy.getX1();
 		x1 = enemy.getX1();
@@ -93,7 +89,7 @@ public class Enemy extends DrawObject {
 		angleX = Math.cos(Math.toRadians(45))*distanceFromStart;
 		angleX = Math.cos(Math.toRadians(45))*distanceFromStart;
 		angleY = Math.sin(Math.toRadians(45))*distanceFromStart;
 		angleY = Math.sin(Math.toRadians(45))*distanceFromStart;
 		
 		
-		System.out.println(Math.toRadians(45)*distanceFromStart);
+//		System.out.println(Math.toRadians(45)*distanceFromStart);
 		System.out.println(angleX+" - "+angleY);
 		System.out.println(angleX+" - "+angleY);
 		
 		
 		switch(index){
 		switch(index){
@@ -161,29 +157,9 @@ public class Enemy extends DrawObject {
 
 
 	public void setBullet(Line2D bullet) {
 	public void setBullet(Line2D bullet) {
 		this.enemy = bullet;
 		this.enemy = bullet;
-	}	
-	
-	public void clickable(){
-		clickable = true;
-	}
-	
-	/**
-	 * deze methode kijkt hoeveel frame je nog hebt om te klikken op het moment dat je bolletje in de hitzone zit
-	 * @return
-	 */
-	public boolean finised(){
-		if(currentTimeToClick >= timeToClick){
-			return true;
-		}
-		return false;
-	}
-	
-	public boolean isClickable(){
-		return clickable;
-	}
-	
-	public int getTimeLeftToClick() {
-		return currentTimeToClick;
 	}
 	}
 
 
+	public double getDistanceFromStart() {
+		return distanceFromStart;
+	}	
 }
 }

+ 83 - 80
model/gameState/PlayState.java

@@ -1,7 +1,5 @@
-
 package model.gameState;
 package model.gameState;
 
 
-
 import java.awt.BasicStroke;
 import java.awt.BasicStroke;
 import java.awt.Color;
 import java.awt.Color;
 import java.awt.Graphics2D;
 import java.awt.Graphics2D;
@@ -9,7 +7,6 @@ import java.awt.Stroke;
 import java.awt.geom.Rectangle2D;
 import java.awt.geom.Rectangle2D;
 import java.util.Iterator;
 import java.util.Iterator;
 
 
-import model.GameModel;
 import model.SongHandler;
 import model.SongHandler;
 import model.drawObjects.Enemy;
 import model.drawObjects.Enemy;
 import model.drawObjects.Player;
 import model.drawObjects.Player;
@@ -21,118 +18,124 @@ import control.GameStateManager;
 import control.button.ButtonEvent;
 import control.button.ButtonEvent;
 import control.joystick.JoystickEvent;
 import control.joystick.JoystickEvent;
 
 
-public class PlayState extends GameState{
+public class PlayState extends GameState {
 
 
-	public static final Rectangle2D borderRect = new Rectangle2D.Double(256, 0, 1024, 1024);
+	public static final Rectangle2D borderRect = new Rectangle2D.Double(256, 0,
+			1024, 1024);
 	private PlayArea area;
 	private PlayArea area;
 	private InfoPanel infoPanel;
 	private InfoPanel infoPanel;
-	private Player player;			
-	private Stroke stroke;	 	
-	
+	private Player player;
+	private Stroke stroke;
+
 	public static int sizeOfEnemy = 40;
 	public static int sizeOfEnemy = 40;
-	public static int currentScore = 0; 
+	public static int currentScore = 0;
 	public static int lifePoints = 100;
 	public static int lifePoints = 100;
-	
+
 	private long oldProgress = 0;
 	private long oldProgress = 0;
-	
+
 	public PlayState(GameStateManager gsm, SongHandler sh) {
 	public PlayState(GameStateManager gsm, SongHandler sh) {
-		super(gsm,sh);
-		infoPanel = new InfoPanel(0, 0);			
-		area = new PlayArea(256, 1024, 1024, 100);
-		for(int index = 0; index < 8; index++){						
-			addEnemy(index, GameModel.colors[index % 6]);
-		}
-		
-		player = new Player(1280-1024+1024/2, 1024/2);		
-		stroke = new BasicStroke(sizeOfEnemy,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND);
+		super(gsm, sh);
+		infoPanel = new InfoPanel(0, 0);
+		area = new PlayArea(256, 1024, 1024, 125);
+		// for(int index = 0; index < 8; index++){
+		// addEnemy(index, GameModel.colors[index % 6]);
+		// }
+		//
+		player = new Player(1280 - 1024 + 1024 / 2, 1024 / 2);
+		stroke = new BasicStroke(sizeOfEnemy, BasicStroke.CAP_ROUND,
+				BasicStroke.JOIN_ROUND);
 	}
 	}
 
 
 	@Override
 	@Override
 	public void init() {
 	public void init() {
 		sh.stop();
 		sh.stop();
 		sh.play();
 		sh.play();
-		
-//		System.out.println("Diff" + sh.getCurrentSongInstance().getDifficulty());
+
+		// System.out.println("Diff" +
+		// sh.getCurrentSongInstance().getDifficulty());
 	}
 	}
 
 
 	@Override
 	@Override
-	public void update(float factor) {		
-		player.update(factor);		
-		for(Path path : area.paths){						
-		Iterator<Enemy>enemyIterator = path.getEnemysInPath().iterator();
-		while(enemyIterator.hasNext()){			
-			Enemy e = enemyIterator.next();
-			Rectangle2D hitArea = area.hitAreas[e.getIndex()];
-			if(e.finised()){
-				enemyIterator.remove();
-			}			
-			if(hitArea.intersectsLine(e.enemy) && !e.isClickable()){
-				e.clickable();
-			}
-				e.update(factor);				
+	public void update(float factor) {
+		player.update(factor);
+		for (Path path : area.paths) {
+
+			Iterator<Enemy> enemyIterator = path.getEnemysInPath().iterator();
+
+			while (enemyIterator.hasNext()) {
+
+				Enemy e = enemyIterator.next();
+				
+				if(e.getDistanceFromStart() > Enemy.distanceToOctagon+(sizeOfEnemy*1.5)){
+					enemyIterator.remove();
+				}
+				
+				e.update(factor);
 			}
 			}
-		}		
-		
-		infoPanel.updateIPanel();		
-		
-//		long progress = sh.getProgress() / 1000;
-//
-//		for(ObjectInstance ob : sh.getCurrentSongInstance().getBetween(oldProgress, progress))
-//		{
-//			Path p = area.paths.get(ob.getDirection());
-//			p.addEnemy(ob.getColor(), ob.getDirection(), (int) ob.getLength());
-//		}
-//			
-//		oldProgress = progress;
+		}
+
+		infoPanel.updateIPanel();
+
+		long progress = (long) ((sh.getProgress() / 1000) + (Enemy.secondsToEnd * 1000));
+
+		for (ObjectInstance ob : sh.getCurrentSongInstance().getBetween(
+				oldProgress, progress)) {
+			Path p = area.paths.get(ob.getDirection());
+			p.addEnemy(ob.getColor(), ob.getDirection(), (int) ob.getLength());
+		}
+
+		oldProgress = progress;
 	}
 	}
-	
 
 
 	@Override
 	@Override
-	public void draw(Graphics2D g2) {			
-		try{			
+	public void draw(Graphics2D g2) {
+		try {
 			infoPanel.draw(g2);
 			infoPanel.draw(g2);
-			g2.setClip(borderRect);	
+			g2.setClip(borderRect);
 			area.draw(g2);
 			area.draw(g2);
-			
+
 			g2.setStroke(stroke);
 			g2.setStroke(stroke);
-			for(Path p : area.paths){
-				if(p.getEnemysInPath() != null){
-					for(Enemy enemy : p.getEnemysInPath()){
+			for (Path p : area.paths) {
+				if (p.getEnemysInPath() != null) {
+					for (Enemy enemy : p.getEnemysInPath()) {
 						enemy.draw(g2);
 						enemy.draw(g2);
 					}
 					}
-				}	
+				}
 			}
 			}
 
 
-			if(player != null)
+			if (player != null)
 				player.draw(g2);
 				player.draw(g2);
-		}catch(Exception e){};
-		
+		} catch (Exception e) {
+		}
+		;
+
 	}
 	}
-	
-	
 
 
 	@Override
 	@Override
-	public void buttonPressed(ButtonEvent e) {			
-//		int index = player.getIndex();		
-		Path currentPath = area.paths.get(player.getIndex());
-		if (!currentPath.getEnemysInPath().isEmpty()) {
-			Enemy ce = currentPath.getEnemysInPath().getFirst();
-			if (ce.isClickable()) {
-				if (ce.getColor().equals(e.getButton().getColor())) {
-					currentScore += ce.getTimeLeftToClick();
-					currentPath.getEnemysInPath().remove(ce);
+	public void buttonPressed(ButtonEvent e) {
+		Iterator<Enemy> enemysInPath = area.paths.get(player.getIndex()).getEnemysInPath().iterator();
+		while(enemysInPath.hasNext()){
+			Enemy enemy = enemysInPath.next();
+			if(enemy.getDistanceFromStart() > Enemy.distanceToOctagon || enemy.getDistanceFromStart() > Enemy.distanceToOctagon+sizeOfEnemy)
+			{
+				if(e.getButton().getColor().equals(enemy.getColor()))
+				{
+					currentScore += enemy.getDistanceFromStart() - Enemy.distanceToOctagon;
+					enemysInPath.remove();
 				}
 				}
 			}
 			}
+			
 		}
 		}
+		
 	}
 	}
 
 
 	@Override
 	@Override
-	public void buttonReleased(ButtonEvent e) {		
+	public void buttonReleased(ButtonEvent e) {
 	}
 	}
 
 
 	@Override
 	@Override
-	public void onJoystickMoved(JoystickEvent e) {	
-		switch(e.getJoystick().getPos()){
+	public void onJoystickMoved(JoystickEvent e) {
+		switch (e.getJoystick().getPos()) {
 		case CENTER:
 		case CENTER:
 			break;
 			break;
 		case DOWN:
 		case DOWN:
@@ -159,14 +162,14 @@ public class PlayState extends GameState{
 		case UP_RIGHT:
 		case UP_RIGHT:
 			player.setIndex(1);
 			player.setIndex(1);
 			break;
 			break;
-		default:			
+		default:
 			break;
 			break;
 		}
 		}
 	}
 	}
 
 
-	public void addEnemy(int pathID,Color color){	
+	public void addEnemy(int pathID, Color color) {
 		Path path = area.paths.get(pathID);
 		Path path = area.paths.get(pathID);
-		Enemy e = new Enemy(pathID,1,color,path);		
-		path.getEnemysInPath().addLast(e);			
-	}		
+		Enemy e = new Enemy(pathID, 1, color, path);
+		path.getEnemysInPath().addLast(e);
+	}
 }
 }

+ 3 - 1
model/gameState/TitleState.java

@@ -11,6 +11,7 @@ import java.awt.image.BufferedImage;
 import control.joystick.JoystickEvent;
 import control.joystick.JoystickEvent;
 import model.SongHandler;
 import model.SongHandler;
 import control.GameStateManager;
 import control.GameStateManager;
+import control.GameStateManager.State;
 import control.button.ButtonEvent;
 import control.button.ButtonEvent;
 
 
 public class TitleState extends GameState {
 public class TitleState extends GameState {
@@ -73,7 +74,8 @@ public class TitleState extends GameState {
 		
 		
 		switch(e.getButton().getButtonID()){
 		switch(e.getButton().getButtonID()){
 		case 0:
 		case 0:
-			gsm.next();
+			//gsm.next();
+			gsm.setState(State.PLAY_STATE);
 			break;
 			break;
 		}
 		}