From 8766037defc9e7ac5d15306ac85410ad70410945 Mon Sep 17 00:00:00 2001 From: Kenneth van Ewijk Date: Mon, 8 Jun 2015 11:41:01 +0200 Subject: [PATCH] Fixed a lot of bugs --- audio/Song.java | 7 ++- audio/SongInstance.java | 2 +- audio/sorting/SortALPHA.java | 14 ++++++ audio/sorting/SortPLAYED.java | 14 ++++++ control/GameStateManager.java | 18 +++++-- model/SongHandler.java | 14 +++++- model/gameState/MenuState.java | 16 ++++++- model/gameState/PlayState.java | 71 +++++++++++++++++----------- model/gameState/TitleState.java | 83 ++++++++++++++++----------------- model/objects/InfoPanel.java | 23 ++++----- 10 files changed, 170 insertions(+), 92 deletions(-) create mode 100644 audio/sorting/SortALPHA.java create mode 100644 audio/sorting/SortPLAYED.java diff --git a/audio/Song.java b/audio/Song.java index 50cf23b..007b63a 100644 --- a/audio/Song.java +++ b/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{ 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()); + } } diff --git a/audio/SongInstance.java b/audio/SongInstance.java index 2b73dee..858a3e2 100644 --- a/audio/SongInstance.java +++ b/audio/SongInstance.java @@ -66,7 +66,7 @@ public class SongInstance { for(ButtonInstance i : buttons) { - if(i.getTime() >= progress) + if(i.getTime() > progress) { return b; } diff --git a/audio/sorting/SortALPHA.java b/audio/sorting/SortALPHA.java new file mode 100644 index 0000000..1c05133 --- /dev/null +++ b/audio/sorting/SortALPHA.java @@ -0,0 +1,14 @@ +package audio.sorting; + +import java.util.Comparator; + +import audio.Song; + +public class SortALPHA implements Comparator { + + @Override + public int compare(Song s1, Song s2) { + return s1.getTitle().compareTo(s2.getTitle()); + } + +} diff --git a/audio/sorting/SortPLAYED.java b/audio/sorting/SortPLAYED.java new file mode 100644 index 0000000..7318ee2 --- /dev/null +++ b/audio/sorting/SortPLAYED.java @@ -0,0 +1,14 @@ +package audio.sorting; + +import java.util.Comparator; + +import audio.Song; + +public class SortPLAYED implements Comparator { + + @Override + public int compare(Song s1, Song s2) { + return s1.getAuthor().compareTo(s2.getAuthor()); + } + +} diff --git a/control/GameStateManager.java b/control/GameStateManager.java index f54a926..b8cfe53 100644 --- a/control/GameStateManager.java +++ b/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(); + } } diff --git a/model/SongHandler.java b/model/SongHandler.java index 9caa4ee..2f0538d 100644 --- a/model/SongHandler.java +++ b/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 sorter) + { + Collections.sort(songs, sorter); + } + } diff --git a/model/gameState/MenuState.java b/model/gameState/MenuState.java index b6764cb..489ebb9 100644 --- a/model/gameState/MenuState.java +++ b/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; } } } diff --git a/model/gameState/PlayState.java b/model/gameState/PlayState.java index 4b44c80..eb91dd6 100644 --- a/model/gameState/PlayState.java +++ b/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 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 enemysInPath = area.paths.get(player.getIndex()) - .getEnemysInPath().iterator(); + boolean notHit = true; + Iterator 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 diff --git a/model/gameState/TitleState.java b/model/gameState/TitleState.java index 3f07865..a0ef25e 100644 --- a/model/gameState/TitleState.java +++ b/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); diff --git a/model/objects/InfoPanel.java b/model/objects/InfoPanel.java index 86310fd..bc8c7e1 100644 --- a/model/objects/InfoPanel.java +++ b/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(); }