Przeglądaj źródła

Fixed a lot of bugs

Kenneth van Ewijk 10 lat temu
rodzic
commit
8766037def

+ 6 - 1
audio/Song.java

@@ -12,7 +12,7 @@ import javax.sound.sampled.AudioInputStream;
 import javax.sound.sampled.AudioSystem;
 import javax.sound.sampled.UnsupportedAudioFileException;
 
-public class Song {
+public class Song implements Comparable<Song>{
 
 	private String title;
 	private String subtitle;
@@ -150,4 +150,9 @@ public class Song {
 	public void close()
 	{
 	}
+
+	@Override
+	public int compareTo(Song s) {
+		return getTitle().compareTo(s.getTitle());
+	}
 }

+ 1 - 1
audio/SongInstance.java

@@ -66,7 +66,7 @@ public class SongInstance {
 		
 		for(ButtonInstance i : buttons)
 		{
-			if(i.getTime() >= progress)
+			if(i.getTime() > progress)
 			{
 				return b;
 			}

+ 14 - 0
audio/sorting/SortALPHA.java

@@ -0,0 +1,14 @@
+package audio.sorting;
+
+import java.util.Comparator;
+
+import audio.Song;
+
+public class SortALPHA implements Comparator<Song> {
+
+	@Override
+	public int compare(Song s1, Song s2) {
+		return s1.getTitle().compareTo(s2.getTitle());
+	}
+
+}

+ 14 - 0
audio/sorting/SortPLAYED.java

@@ -0,0 +1,14 @@
+package audio.sorting;
+
+import java.util.Comparator;
+
+import audio.Song;
+
+public class SortPLAYED implements Comparator<Song> {
+
+	@Override
+	public int compare(Song s1, Song s2) {
+		return s1.getAuthor().compareTo(s2.getAuthor());
+	}
+
+}

+ 15 - 3
control/GameStateManager.java

@@ -1,5 +1,6 @@
 package control;
 
+import java.awt.Color;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -8,6 +9,8 @@ import model.gameState.GameState;
 import model.gameState.MenuState;
 import model.gameState.PlayState;
 import model.gameState.TitleState;
+import control.button.Button;
+import control.button.ButtonHandler;
 
 public class GameStateManager {
 
@@ -27,24 +30,33 @@ public class GameStateManager {
 		gamestates.add(new TitleState(this, sh));
 		gamestates.add(new MenuState(this, sh));
 		gamestates.add(new PlayState(this, sh));
-		currentState = gamestates.get(0);
+		setState(State.TITLE_STATE);
 	}
 	
 	public void setState(State st)
 	{
 		currentState = gamestates.get(st.ordinal());
-		currentState.init();
+		init();
 	}
 
 	public void next() {
 		index++;
 		index %= gamestates.size();
 		currentState = gamestates.get(index);
-		currentState.init();
+		init();
 	}
 	
 	public void update(float factor){		
 		currentState.update(factor);
 		fps = (int) (60/(factor/10));
 	}
+	
+	public void init()
+	{
+		for (int i = 1; i < ButtonHandler.getButtons().size(); i++) {
+			Button b = ButtonHandler.getButton(i);
+			b.setColor(Color.BLACK);
+		}
+		currentState.init();
+	}
 }

+ 12 - 2
model/SongHandler.java

@@ -2,6 +2,8 @@ package model;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
 import main.Window;
@@ -9,6 +11,7 @@ import audio.AudioPlayer;
 import audio.Song;
 import audio.SongInstance;
 import audio.io.DirScanner;
+import audio.sorting.SortALPHA;
 
 public class SongHandler {
 	
@@ -35,10 +38,12 @@ public class SongHandler {
 		if(Window.ON_RASP)
 			dir = new File(System.getProperty( "user.home" ) + "/ColorStrike/Songs/");
 		else
-			dir = new File(System.getProperty( "user.home" ) + "/ColorStrike/Songs/");
+			dir = new File(System.getProperty( "user.home" ) + "/Documents/Songs/");
 		
 		songs = DirScanner.scanDirectories(dir);
-		System.out.println(songs.size());
+		
+		Collections.sort(songs, new SortALPHA());
+		
 		updatePlayer();
 	}
 	
@@ -109,5 +114,10 @@ public class SongHandler {
 		p.play();
 	}
 	
+	public void sort(Comparator<Song> sorter)
+	{
+		Collections.sort(songs, sorter);
+	}
+	
 	
 }

+ 15 - 1
model/gameState/MenuState.java

@@ -21,8 +21,11 @@ import model.objects.DifficultyButton;
 import model.objects.MenuButton;
 import audio.Song;
 import audio.SongInstance;
+import audio.sorting.SortALPHA;
+import audio.sorting.SortPLAYED;
 import control.GameStateManager;
 import control.button.ButtonEvent;
+import control.button.ButtonHandler;
 import control.joystick.Joystick;
 import control.joystick.JoystickEvent;
 
@@ -60,7 +63,11 @@ public class MenuState extends GameState {
 	}
 	@Override
 	public void init() {
+		ButtonHandler.getButton(1).setColor(GameModel.colors[0]);
+		ButtonHandler.getButton(2).setColor(GameModel.colors[2]);
 		
+		ButtonHandler.getButton(5).setColor(GameModel.colors[1]);
+		ButtonHandler.getButton(6).setColor(GameModel.colors[4]);
 	}
 
 	@Override
@@ -93,7 +100,6 @@ public class MenuState extends GameState {
 	 			buttons2.add(new DifficultyButton(yPosDiffButton-instanceNr,si.getDifficulty(), GameModel.colors[i-1]));
 	 			instanceNr += 100;
 	 		}
-	 		
 	     }
 	     index++;
 	}
@@ -131,6 +137,14 @@ public class MenuState extends GameState {
 				generateSubScreenBackground();
 			}else if(e.getButton().getButtonID() == 2){
 				subscreen = false;
+			}else if(e.getButton().getButtonID() == 5){
+				sh.sort(new SortALPHA());
+				oldselected = 1;
+				selected = 0;
+			}else if(e.getButton().getButtonID() == 6){
+				sh.sort(new SortPLAYED());
+				oldselected = 1;
+				selected = 0;
 			}	
 		}
 	}

+ 44 - 27
model/gameState/PlayState.java

@@ -16,6 +16,7 @@ import model.objects.PlayArea;
 import audio.ButtonInstance;
 import audio.ObjectInstance;
 import control.GameStateManager;
+import control.GameStateManager.State;
 import control.button.Button;
 import control.button.ButtonEvent;
 import control.button.ButtonHandler;
@@ -23,8 +24,7 @@ import control.joystick.JoystickEvent;
 
 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 InfoPanel infoPanel;
 	private Player player;
@@ -32,7 +32,8 @@ public class PlayState extends GameState {
 
 	public static int sizeOfEnemy = 40;
 	public static int currentScore = 0;
-	public static int lifePoints = 100;
+	public static int comboScore = 0;
+	public static double lifePoints = 100;
 
 	private long oldProgress = 0;
 
@@ -45,8 +46,7 @@ public class PlayState extends GameState {
 		// }
 		//
 		player = new Player(1280 - 1024 + 1024 / 2, 1024 / 2);
-		stroke = new BasicStroke(sizeOfEnemy, BasicStroke.CAP_ROUND,
-				BasicStroke.JOIN_ROUND);
+		stroke = new BasicStroke(sizeOfEnemy, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
 	}
 
 	@Override
@@ -56,39 +56,39 @@ public class PlayState extends GameState {
 		} catch (InterruptedException e) {
 			e.printStackTrace();
 		}
-		
+
 		sh.play();
 
-		for(int i=1; i<ButtonHandler.getButtons().size(); i++)
-		{
+		for (int i = 1; i < ButtonHandler.getButtons().size(); i++) {
 			Button b = ButtonHandler.getButton(i);
 			b.setColor(Color.BLACK);
 		}
 		
+		ButtonHandler.getButton(1).setColor(sh.getCurrentSongInstance().getButtons().get(0).getColor());
+
 		// System.out.println("Diff" +
 		// sh.getCurrentSongInstance().getDifficulty());
 	}
 
 	@Override
 	public void update(float factor) {
-		
+
 		long progress = (long) ((sh.getProgress() / 1000) + (Enemy.secondsToEnd * 1000));
 
-		for (ButtonInstance bu : sh.getCurrentSongInstance().getButtonsBetween(
-				oldProgress, progress)) {
+		for (ButtonInstance bu : sh.getCurrentSongInstance().getButtonsBetween(oldProgress, progress)) {
 			Button b = ButtonHandler.getButton(bu.getButtonID());
 			b.setColor(bu.getColor());
-//			System.out.println(bu.getButtonID() + " - " + bu.getColor()+ " / " + b.getColor());
+			// System.out.println(bu.getButtonID() + " - " + bu.getColor()+
+			// " / " + b.getColor());
 		}
-		
-		for (ObjectInstance ob : sh.getCurrentSongInstance().getObjectsBetween(
-				oldProgress, progress)) {
+
+		for (ObjectInstance ob : sh.getCurrentSongInstance().getObjectsBetween(oldProgress, progress)) {
 			Path p = area.paths.get(ob.getDirection());
 			p.addEnemy(ob.getColor(), ob.getDirection(), (int) ob.getLength());
 		}
 
 		oldProgress = progress;
-		
+
 		player.update(factor);
 		for (Path path : area.paths) {
 
@@ -98,15 +98,26 @@ public class PlayState extends GameState {
 
 				Enemy e = enemyIterator.next();
 
-				if (e.getDistanceFromStart() > Enemy.distanceToOctagon
-						+ (sizeOfEnemy * 1.5)) {
+				if (e.getDistanceFromStart() > Enemy.distanceToOctagon + (sizeOfEnemy * 1.5)) {
 					enemyIterator.remove();
+					lifePoints -= 5;
+					comboScore /= 2;
 				}
 
 				e.update(factor);
 			}
 		}
 
+		lifePoints -= 0.002 * factor;
+		
+		if(lifePoints <= 0)
+			gsm.setState(State.MENU_STATE);
+		if(comboScore >= 100)
+		{
+			comboScore = 0;
+			currentScore += 500;
+		}
+
 		infoPanel.updateIPanel();
 	}
 
@@ -134,23 +145,29 @@ public class PlayState extends GameState {
 
 	@Override
 	public void buttonPressed(ButtonEvent e) {
-		Iterator<Enemy> enemysInPath = area.paths.get(player.getIndex())
-				.getEnemysInPath().iterator();
+		boolean notHit = true;
+		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 (enemy.getDistanceFromStart() > Enemy.distanceToOctagon || enemy.getDistanceFromStart() > Enemy.distanceToOctagon + sizeOfEnemy) {
 				if (e.getButton().getColor().equals(enemy.getColor())) {
-					currentScore += enemy.getDistanceFromStart()
-							- Enemy.distanceToOctagon;
+					currentScore += enemy.getDistanceFromStart() - Enemy.distanceToOctagon;
+					comboScore += 5;
+					lifePoints = Math.min(lifePoints+10, 100);
 					enemysInPath.remove();
+					notHit = false;
 					break;
 				}
 			}
-
 		}
-
+		
+		if(notHit)
+		{
+			if(area.paths.get(player.getIndex()).getEnemysInPath().size() > 0)
+			{
+				lifePoints -= 1.5;
+			}
+		}
 	}
 
 	@Override

+ 41 - 42
model/gameState/TitleState.java

@@ -7,9 +7,6 @@ import java.awt.Color;
 import java.awt.Font;
 import java.awt.GradientPaint;
 import java.awt.Graphics2D;
-import java.awt.GraphicsConfiguration;
-import java.awt.GraphicsDevice;
-import java.awt.GraphicsEnvironment;
 import java.awt.RenderingHints;
 import java.awt.Transparency;
 import java.awt.image.BufferedImage;
@@ -23,85 +20,87 @@ import control.joystick.JoystickEvent;
 
 public class TitleState extends GameState {
 
-    BufferedImage pressStart = Images.getImage(ImageType.pressstart);
-    BufferedImage colorStrike = Images.getImage(ImageType.colorstrike);
-    VolatileImage background;
+	BufferedImage pressStart = Images.getImage(ImageType.pressstart);
+	BufferedImage colorStrike = Images.getImage(ImageType.colorstrike);
+	VolatileImage background;
 	Font textFont = new Font("OCR A Extended", Font.BOLD, 15);
 	Font textFont2 = new Font("OCR A Extended", Font.BOLD, 130);
-	GradientPaint gp = new GradientPaint(300, 0, new Color(0,0,1, 0.6f),980,1024 ,new Color(0,0,1, 0.2f));
-	
-    int index = 0;
-    int varx = 0;
-    int frame;
+	GradientPaint gp = new GradientPaint(300, 0, new Color(0, 0, 1, 0.6f), 980, 1024, new Color(0, 0, 1, 0.2f));
 
-	public TitleState(GameStateManager gsm, SongHandler sh){
+	int index = 0;
+	int varx = 0;
+	int frame;
+
+	public TitleState(GameStateManager gsm, SongHandler sh) {
 		super(gsm, sh);
 		createBackground();
 	}
+
 	@Override
 	public void init() {
-
+		sh.play();
 	}
 
 	@Override
 	public void update(float factor) {
 
-        frame++;
+		frame++;
 	}
 
 	@Override
 	public void draw(Graphics2D g2) {
 		g2.drawImage(background, 0, 0, 1280, 1024, null);
 		int image_x = ((frame / 6) % 6) * 49;
-		g2.drawImage(pressStart.getSubimage(image_x, 0, 49, 26),  640-122, 512, 245, 130, null);
+		g2.drawImage(pressStart.getSubimage(image_x, 0, 49, 26), 640 - 122, 512, 245, 130, null);
 	}
-	
+
 	@Override
 	public void buttonPressed(ButtonEvent e) {
-		
-		switch(e.getButton().getButtonID()){
+
+		switch (e.getButton().getButtonID()) {
 		case 0:
 			gsm.setState(State.MENU_STATE);
 			break;
 		}
-		
-		
+
 	}
+
 	@Override
 	public void buttonReleased(ButtonEvent e) {
-		
+
 	}
+
 	@Override
 	public void onJoystickMoved(JoystickEvent e) {
 	}
-	
-	public void createBackground(){
+
+	public void createBackground() {
 		background = Images.initVolatileImage(1280, 1024, Transparency.OPAQUE);
 		Graphics2D g2 = background.createGraphics();
 		RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-	    g2.setRenderingHints(rh);
-		g2.setColor(new Color(1,1,1, 0.3f));
-		g2.fillRect(0,0,1280,1024);
-		
-		g2.setColor(new Color(0,1,0, 0.7f));
-		g2.fillRect(0,0,100,1024);
-		g2.fillRect(1180,0,100,1024);
-		
-		g2.setColor(new Color(1,1,0, 0.7f));
-		g2.fillRect(100,0,100,1024);
-		g2.fillRect(1080,0,100,1024);
-		
-		g2.setColor(new Color(1,0,0, 0.7f));
-		g2.fillRect(200,0,100,1024);
-		g2.fillRect(980,0,100,1024);
-		
+		g2.setRenderingHints(rh);
+		g2.setColor(new Color(1, 1, 1, 0.3f));
+		g2.fillRect(0, 0, 1280, 1024);
+
+		g2.setColor(new Color(0, 1, 0, 0.7f));
+		g2.fillRect(0, 0, 100, 1024);
+		g2.fillRect(1180, 0, 100, 1024);
+
+		g2.setColor(new Color(1, 1, 0, 0.7f));
+		g2.fillRect(100, 0, 100, 1024);
+		g2.fillRect(1080, 0, 100, 1024);
+
+		g2.setColor(new Color(1, 0, 0, 0.7f));
+		g2.fillRect(200, 0, 100, 1024);
+		g2.fillRect(980, 0, 100, 1024);
+
 		g2.setPaint(gp);
 		g2.fillRect(300, 0, 680, 1024);
-		
+
 		g2.setFont(textFont);
 		g2.setColor(Color.WHITE);
-		g2.drawString("©2015 Team Hamtaro", 550, 1012);
-		
+		g2.drawString("©2015 Team Hamtaro", 550, 1012);
+
 		g2.setColor(Color.RED);
 		g2.setFont(textFont2);
 		g2.drawString("Color", 385, 212);

+ 8 - 15
model/objects/InfoPanel.java

@@ -13,31 +13,21 @@ import model.gameState.PlayState;
 
 public class InfoPanel {
 	
-	private String totalHighscore = "XXXXXX";
-	private int lifePercent;
-	private int upgradeScore = 0;
+	private String totalHighscore = "Score: 000000";
 	private int x, y;
 	private VolatileImage infoPanel;
 	
 	public InfoPanel(int x, int y){
 		this.x = x;
 		this.y = y;
-		generateInfoPanel();
 		updateIPanel();
+		generateInfoPanel();
 	}
 	
 	public void updateIPanel() {		
 		totalHighscore  = "Score: " + PlayState.currentScore;
 		
-		
-		lifePercent =+ PlayState.lifePoints;
-		
-		if(0 <= PlayState.currentScore && PlayState.currentScore <=100) {			
-			if(upgradeScore != PlayState.currentScore){
-				upgradeScore = PlayState.currentScore;
-				generateInfoPanel();
-			}
-		}
+		generateInfoPanel();
 	}
 	
 	private void generateInfoPanel(){
@@ -46,18 +36,21 @@ public class InfoPanel {
 		RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 	    g2.setRenderingHints(rh);	
 	    g2.setColor(Color.BLACK);
+	    
 		g2.fillRect(x, y, 256, 1024);
+		
 		Font scoreFont = new Font("OCR A Extended", Font.BOLD, 30);
 		g2.setFont(scoreFont);
 		g2.setColor(Color.ORANGE);
+		
 		g2.drawString(totalHighscore, 25, 75);
 		g2.drawRect(25, 100, 200, 30);
 		g2.drawRect(25, 300, 200, 700);
 		g2.setColor(Color.GREEN);
-		g2.fillRect(25, 100, 2 * lifePercent, 30);
+		g2.fillRect(25, 100, (int)(2 * PlayState.lifePoints), 30);
 		
 		g2.setColor(Color.YELLOW);		
-		g2.fillRect(25, 1000 - 7 * upgradeScore, 200, 0 + 7 * upgradeScore);
+		g2.fillRect(25, 1000 - 7 * PlayState.comboScore, 200, 0 + 7 * PlayState.comboScore);
 		g2.dispose();
 		infoPanel.createGraphics();
 	}