Browse Source

Added songs, new libraries and more code

Kenneth van Ewijk 10 năm trước cách đây
mục cha
commit
7b21aa1e09
67 tập tin đã thay đổi với 380 bổ sung80 xóa
  1. 80 0
      audio/AudioPlayer.java
  2. 66 1
      audio/Song.java
  3. 6 6
      audio/io/DirScanner.java
  4. 6 7
      audio/io/JSONReader.java
  5. 19 3
      control/GameStateManager.java
  6. 37 27
      image/Images.java
  7. 17 11
      main/Window.java
  8. 4 5
      model/GameModel.java
  9. 69 8
      model/SongHandler.java
  10. 4 2
      model/gameState/GameState.java
  11. 10 8
      model/gameState/MenuState.java
  12. 59 0
      model/gameState/PickSongState.java
  13. 3 2
      model/gameState/PlayState.java
  14. BIN
      mp3spi1.9.5.jar
  15. BIN
      songs/Card_Captor_Sakura-_Catch_You_Catch_Me/CCSIntro.mp3
  16. 0 0
      songs/Card_Captor_Sakura-_Catch_You_Catch_Me/Card_Captor_Sakura-_Catch_You_Catch_Me.csf
  17. BIN
      songs/Card_Captor_Sakura-_Catch_You_Catch_Me/SakuraBG.png
  18. BIN
      songs/Card_Captor_Sakura-_Catch_You_Catch_Me/SakuraLogo.png
  19. 0 0
      songs/Chobits-_Let_Me_Be_With_You/Chobits-_Let_Me_Be_With_You.csf
  20. BIN
      songs/Chobits-_Let_Me_Be_With_You/ChobitsIntro.mp3
  21. BIN
      songs/Chobits-_Let_Me_Be_With_You/Chobitsbg1.png
  22. BIN
      songs/Chobits-_Let_Me_Be_With_You/Chobitslogo.png
  23. 0 0
      songs/Excel_Saga-_Excel's_Theme/Excel_Saga-_Excel's_Theme.csf
  24. BIN
      songs/Excel_Saga-_Excel's_Theme/excel-bg.png
  25. BIN
      songs/Excel_Saga-_Excel's_Theme/excel-logo.png
  26. BIN
      songs/Excel_Saga-_Excel's_Theme/excel.mp3
  27. BIN
      songs/Hand_Maid_May-_Jump_Meippai_Dakishimete!/HandMaidMayIntro.mp3
  28. 0 0
      songs/Hand_Maid_May-_Jump_Meippai_Dakishimete!/Hand_Maid_May-_Jump_Meippai_Dakishimete!.csf
  29. BIN
      songs/Hand_Maid_May-_Jump_Meippai_Dakishimete!/MayBG.png
  30. BIN
      songs/Hand_Maid_May-_Jump_Meippai_Dakishimete!/MayLogo.png
  31. 0 0
      songs/Love_Hina-_Sakura_Saku/Love_Hina-_Sakura_Saku.csf
  32. BIN
      songs/Love_Hina-_Sakura_Saku/sakurasaku-bg.png
  33. BIN
      songs/Love_Hina-_Sakura_Saku/sakurasaku.mp3
  34. BIN
      songs/Love_Hina-_Sakura_Saku/sakurasakulogo.png
  35. BIN
      songs/Love_Hina-_Sakura_Saku_[Euro_Beat_Mix]/LoveHinaBG.png
  36. BIN
      songs/Love_Hina-_Sakura_Saku_[Euro_Beat_Mix]/LoveHinaLogo.png
  37. 0 0
      songs/Love_Hina-_Sakura_Saku_[Euro_Beat_Mix]/Love_Hina-_Sakura_Saku_[Euro_Beat_Mix].csf
  38. BIN
      songs/Love_Hina-_Sakura_Saku_[Euro_Beat_Mix]/SakuraSaku.mp3
  39. BIN
      songs/Love_Hina_Again-_Kirari_Takaramono/LoveHinaAgain.mp3
  40. BIN
      songs/Love_Hina_Again-_Kirari_Takaramono/LoveHinaAgainBG.png
  41. BIN
      songs/Love_Hina_Again-_Kirari_Takaramono/LoveHinaAgainLogo.png
  42. 0 0
      songs/Love_Hina_Again-_Kirari_Takaramono/Love_Hina_Again-_Kirari_Takaramono.csf
  43. BIN
      songs/Mahoromatic-_Mahoro_De_Mambo/Mahoro.mp3
  44. BIN
      songs/Mahoromatic-_Mahoro_De_Mambo/MahoroBG.png
  45. BIN
      songs/Mahoromatic-_Mahoro_De_Mambo/MahoroLogo.png
  46. 0 0
      songs/Mahoromatic-_Mahoro_De_Mambo/Mahoromatic-_Mahoro_De_Mambo.csf
  47. BIN
      songs/Neon_Genesis_Evangelion-_Cruel_Angel's_Thesis_[Euro_Mix]/EvaBG.png
  48. BIN
      songs/Neon_Genesis_Evangelion-_Cruel_Angel's_Thesis_[Euro_Mix]/EvaLogo.png
  49. BIN
      songs/Neon_Genesis_Evangelion-_Cruel_Angel's_Thesis_[Euro_Mix]/Evangelion.mp3
  50. 0 0
      songs/Neon_Genesis_Evangelion-_Cruel_Angel's_Thesis_[Euro_Mix]/Neon_Genesis_Evangelion-_Cruel_Angel's_Thesis_[Euro_Mix].csf
  51. 0 0
      songs/Rurouni_Kenshin-_Freckles_(KCP_Re-Edit)/Rurouni_Kenshin-_Freckles_(KCP_Re-Edit).csf
  52. BIN
      songs/Rurouni_Kenshin-_Freckles_(KCP_Re-Edit)/freckles.mp3
  53. BIN
      songs/Rurouni_Kenshin-_Freckles_(KCP_Re-Edit)/rk-bg.png
  54. BIN
      songs/Rurouni_Kenshin-_Freckles_(KCP_Re-Edit)/rk-logo.png
  55. BIN
      songs/Sister_Princess-_Love_Destiny/SPBg1.png
  56. BIN
      songs/Sister_Princess-_Love_Destiny/SPLogo.png
  57. BIN
      songs/Sister_Princess-_Love_Destiny/SisterPrincessIntro.mp3
  58. 0 0
      songs/Sister_Princess-_Love_Destiny/Sister_Princess-_Love_Destiny.csf
  59. 0 0
      songs/Slayers-_Midnight_Blue/Slayers-_Midnight_Blue.csf
  60. BIN
      songs/Slayers-_Midnight_Blue/SlayersLogo.png
  61. BIN
      songs/Slayers-_Midnight_Blue/SlayersMovieTheme.mp3
  62. BIN
      songs/Slayers-_Midnight_Blue/Slayersbg.PNG
  63. 0 0
      songs/Vandread-_Trust/Vandread-_Trust.csf
  64. BIN
      songs/Vandread-_Trust/VandreadBG1.png
  65. BIN
      songs/Vandread-_Trust/VandreadIntro.mp3
  66. BIN
      songs/Vandread-_Trust/VandreadLogo.png
  67. BIN
      tritonus_share.jar

+ 80 - 0
audio/AudioPlayer.java

@@ -0,0 +1,80 @@
+package audio;
+
+import javax.sound.sampled.AudioFormat;
+import javax.sound.sampled.AudioInputStream;
+import javax.sound.sampled.AudioSystem;
+import javax.sound.sampled.Clip;
+
+public class AudioPlayer {
+
+	private Clip clip;
+
+	public AudioPlayer() {
+		clip = null;
+	}
+
+	public void setClip(Song s) {
+		try {
+			clip = null;
+			AudioInputStream ais = s.getAudioStream();
+			AudioFormat baseFormat = ais.getFormat();
+			AudioFormat decodeFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(), 16, baseFormat.getChannels(), baseFormat.getChannels() * 2, baseFormat.getSampleRate(), false);
+			AudioInputStream dais = AudioSystem.getAudioInputStream(decodeFormat, ais);
+			clip = AudioSystem.getClip();
+			clip.open(dais);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	public void play() {
+		if (clip == null)
+			return;
+		clip.start();
+	}
+	
+	public void pause()
+	{
+		if (clip == null)
+			return;
+		if (clip.isRunning())
+		{
+			clip.stop();
+		}
+	}
+	
+	public void play(int framePosition) {
+		if (clip == null)
+			return;
+		stop();
+		clip.setFramePosition(framePosition);
+		clip.start();
+	}
+
+	public void stop() {
+		if (clip == null)
+			return;
+		if (clip.isRunning())
+		{
+			clip.stop();
+			clip.setFramePosition(0);
+		}
+	}
+
+	public void close() {
+		stop();
+		if(clip != null)
+		{
+			clip.close();
+		}
+	}
+	
+	public long getProgress()
+	{
+		if(clip != null)
+			return clip.getMicrosecondPosition();
+		else
+			return 0L;
+	}
+
+}

+ 66 - 1
audio/Song.java

@@ -1,10 +1,16 @@
 package audio;
 
+import image.Images;
+
+import java.awt.image.BufferedImage;
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
-import javafx.scene.media.Media;
+import javax.sound.sampled.AudioInputStream;
+import javax.sound.sampled.AudioSystem;
+import javax.sound.sampled.UnsupportedAudioFileException;
 
 public class Song {
 
@@ -18,6 +24,10 @@ public class Song {
 	private File background;
 	private File banner;
 	private File file;
+	
+	private BufferedImage backgroundImage;
+	private BufferedImage bannerImage;
+	private AudioInputStream audioStream;
 
 	private List<SongInstance> songs;
 
@@ -32,6 +42,10 @@ public class Song {
 		background = null;
 		banner = null;
 		file = null;
+		
+		backgroundImage = null;
+		bannerImage = null;
+		audioStream = null;
 
 		songs = new ArrayList<SongInstance>();
 	}
@@ -83,6 +97,27 @@ public class Song {
 	public File getAudio() {
 		return audio;
 	}
+	
+	public AudioInputStream getAudioStream()
+	{
+		if(audioStream == null)
+		{
+			try {
+				this.audioStream = AudioSystem.getAudioInputStream(audio);
+			} catch (UnsupportedAudioFileException e) {
+				e.printStackTrace();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		
+		try {
+			audioStream.reset();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return audioStream;
+	}
 
 	public void setAudio(File audio) {
 		this.audio = audio;
@@ -94,11 +129,30 @@ public class Song {
 
 	public void setBackground(File background) {
 		this.background = background;
+		
+	}
+	
+	public BufferedImage getBackgroundImage()
+	{
+		if(backgroundImage == null)
+		{
+			this.backgroundImage = Images.readImage(background);
+		}
+		return backgroundImage;
 	}
 
 	public File getBanner() {
 		return banner;
 	}
+	
+	public BufferedImage getBannerImage()
+	{
+		if(bannerImage == null)
+		{
+			this.bannerImage = Images.readImage(banner);
+		}
+		return bannerImage;
+	}
 
 	public void setBanner(File banner) {
 		this.banner = banner;
@@ -115,4 +169,15 @@ public class Song {
 	public List<SongInstance> getSongs() {
 		return songs;
 	}
+	
+	public void close()
+	{
+		if(audioStream != null)
+		{
+			try {
+				audioStream.close();
+			} catch (IOException e) {
+			}
+		}
+	}
 }

+ 6 - 6
audio/io/DirScanner.java

@@ -40,12 +40,12 @@ public class DirScanner {
 		{
 			for(File file2 : file.listFiles(csf))
 			{
-				try {
-					Song s = JSONReader.readSong(file2);
-					songs.add(s);
-				} catch (IOException e) {
-					e.printStackTrace();
-				}
+					try {
+						Song s = JSONReader.readSong(file2);
+						songs.add(s);
+					} catch (IOException e1) {
+					}
+					
 			}
 		}
 		

+ 6 - 7
audio/io/JSONReader.java

@@ -10,7 +10,6 @@ import java.io.InputStream;
 import javax.json.Json;
 import javax.json.JsonArray;
 import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
 import javax.json.JsonReader;
 
 import model.GameModel;
@@ -54,17 +53,17 @@ public class JSONReader {
 		JsonObject file = obj.getJsonObject("file");
 		
 		File audio = new File(f.getParent() + File.separator + file.getString("audio"));
-		if(!audio.exists() || !audio.getName().endsWith(".mp3"))
+		if(!audio.exists() || !audio.getName().toLowerCase().endsWith(".mp3"))
 			throw new FileNotFoundException("Audio file does not exist: " + audio.getPath());
 		s.setAudio(audio);
 		
 		File background = new File(f.getParent() + File.separator + file.getString("background"));
-		if(!background.exists() || !(background.getName().endsWith(".jpg") || background.getName().endsWith(".png")))
+		if(!background.exists() || !(background.getName().toLowerCase().endsWith(".jpg") || background.getName().toLowerCase().endsWith(".png")))
 			throw new FileNotFoundException("Background image does not exist: " + background.getPath());
 		s.setBackground(background);
 
 		File banner = new File(f.getParent() + File.separator + file.getString("banner"));
-		if(!banner.exists() || !(banner.getName().endsWith(".jpg") || banner.getName().endsWith(".png")))
+		if(!banner.exists() || !(banner.getName().toLowerCase().endsWith(".jpg") || banner.getName().toLowerCase().endsWith(".png")))
 			throw new FileNotFoundException("Banner image does not exist: " + banner.getPath());
 		s.setBanner(banner);
 		
@@ -90,10 +89,10 @@ public class JSONReader {
 			si.addObjectInstance( readObjectInstance(object.getJsonObject(i)) );
 		}
 		
-		JsonArray button = obj.getJsonArray("button");
-		for(int i = 0; i < button.size(); i++)
+		JsonArray buttons = obj.getJsonArray("buttons");
+		for(int i = 0; i < buttons.size(); i++)
 		{
-			si.addButtonInstance( readButtonInstance(button.getJsonObject(i)) );
+			si.addButtonInstance( readButtonInstance(buttons.getJsonObject(i)) );
 		}
 		
 		return si;

+ 19 - 3
control/GameStateManager.java

@@ -3,8 +3,10 @@ package control;
 import java.util.ArrayList;
 import java.util.List;
 
+import model.SongHandler;
 import model.gameState.GameState;
 import model.gameState.MenuState;
+import model.gameState.PickSongState;
 import model.gameState.PlayState;
 
 public class GameStateManager {
@@ -13,17 +15,31 @@ public class GameStateManager {
 	public GameState currentState;
 	private int index = 0;
 	
-	public GameStateManager(){
+	public enum State {
+		MENU_STATE,
+		PLAY_STATE,
+		PICKSONG_STATE
+	}
+	
+	public GameStateManager(SongHandler sh){
 		gamestates = new ArrayList<GameState>();
-		gamestates.add(new MenuState(this));
-		gamestates.add(new PlayState(this));
+		gamestates.add(new MenuState(this, sh));
+		gamestates.add(new PlayState(this, sh));
+		gamestates.add(new PickSongState(this, sh));
 		currentState = gamestates.get(0);
 	}
+	
+	public void setState(State st)
+	{
+		currentState = gamestates.get(st.ordinal());
+		currentState.init();
+	}
 
 	public void next() {
 		index++;
 		index %= gamestates.size();
 		currentState = gamestates.get(index);
+		currentState.init();
 	}
 	
 	public void update(){		

+ 37 - 27
image/Images.java

@@ -1,6 +1,7 @@
 package image;
 
 import java.awt.image.BufferedImage;
+import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 
@@ -8,31 +9,40 @@ import javax.imageio.ImageIO;
 
 import main.Main;
 
-public class Images{
-
- public static ArrayList<BufferedImage> images = new ArrayList<BufferedImage>();
-
-	 public Images(){
-	  
-	 }
-
-	 static{
-		  try{
-		   images.add(ImageIO.read(Main.class.getResource("/image/player.png"))); 
-		   images.add(ImageIO.read(Main.class.getResource("/image/player2.png"))); 
-		  
-		  }catch(IOException e){
-		   e.printStackTrace();
-		  }
-	 }
-
-	 public static BufferedImage getImage(ImageType img)
-	 {
-	  return images.get(img.ordinal());
-	 }
-
-	 public enum ImageType
-	 {
-	  player,player2	 
-	 }
+public class Images {
+
+	public static ArrayList<BufferedImage> images = new ArrayList<BufferedImage>();
+
+	public Images() {
+
+	}
+
+	static {
+		try {
+			images.add(ImageIO.read(Main.class.getResource("/image/player.png")));
+			images.add(ImageIO.read(Main.class.getResource("/image/player2.png")));
+
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+
+	public static BufferedImage getImage(ImageType img) {
+		return images.get(img.ordinal());
+	}
+
+	public enum ImageType {
+		player, player2
+	}
+
+	public static BufferedImage readImage(File f) {
+		BufferedImage bf = null;
+		try {
+			bf = ImageIO.read(f);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+
+		return bf;
+	}
 }

+ 17 - 11
main/Window.java

@@ -13,6 +13,7 @@ import java.awt.image.BufferedImage;
 import javax.swing.JFrame;
 
 import model.GameModel;
+import model.SongHandler;
 import view.GameView;
 import control.GameControl;
 import control.GameStateManager;
@@ -24,19 +25,14 @@ public class Window extends JFrame {
 	private static final long serialVersionUID = -9222956702898533696L;
 	public static boolean ON_RASP;
 	
+	public final static int WIDTH = 1280;
+	public final static int HEIGHT = 1024;
+	
 	public Window(boolean ON_RASP)
 	{
 		//Create window
 		super("Arcade");
-		setSize(1280, 1024);
-				
-		//Set window close listener
-		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
-		addWindowListener(new WindowAdapter(){
-			public void windowClosing(WindowEvent e) {
-				System.exit(0);
-			}
-		});
+		setSize(WIDTH, HEIGHT);
 		
 		//Create Events
 		LedHandler led = null;
@@ -62,12 +58,22 @@ public class Window extends JFrame {
 		JoystickHandler jsh = new JoystickHandler();
 		
 		//Create Instances
-		GameStateManager gsm = new GameStateManager();
+		SongHandler sh = new SongHandler();
+		GameStateManager gsm = new GameStateManager(sh);
 		GameView view = new GameView(led,gsm);
-		GameModel model = new GameModel(gsm);
+		GameModel model = new GameModel(sh, gsm);
 		GameControl control = new GameControl(model, view,gsm);
 		setContentPane(view);
 		
+		//Set window close listener
+		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
+		addWindowListener(new WindowAdapter(){
+			public void windowClosing(WindowEvent e) {
+				sh.close();
+				System.exit(0);
+			}
+		});
+		
 		//Create EventListeners
 		if(!Window.ON_RASP){
 			addKeyListener(bth);

+ 4 - 5
model/GameModel.java

@@ -15,14 +15,13 @@ public class GameModel implements ActionListener{
 	private Timer update;
 	public static Color[] colors = {Color.MAGENTA,Color.RED,Color.GREEN,Color.YELLOW,Color.CYAN,Color.WHITE};
 	private GameStateManager gsm;
-	private SongHandler sh;
+	SongHandler sh;
 	
-	public GameModel(GameStateManager gsm)
+	public GameModel(SongHandler sh, GameStateManager gsm)
 	{
-			
 		this.gsm = gsm;
 		
-		sh = new SongHandler();
+		this.sh = sh;
 		
 		update = new Timer(1000/30, this);
 		update.start();
@@ -34,6 +33,6 @@ public class GameModel implements ActionListener{
 	
 	@Override
 	public void actionPerformed(ActionEvent e) {
-		gsm.update();		
+		gsm.update();	
 	}
 }

+ 69 - 8
model/SongHandler.java

@@ -1,11 +1,12 @@
 package model;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
-import javazoom.jl.player.Player;
 import main.Window;
+import audio.AudioPlayer;
 import audio.Song;
 import audio.io.DirScanner;
 
@@ -17,13 +18,17 @@ public class SongHandler {
 	private int currentIndex;
 	
 	private File dir;
+	
+	private AudioPlayer p;
 
 	public SongHandler()
 	{
 		songs = new ArrayList<Song>();
 		
 		currentSong = null;
-		currentIndex = 0;
+		currentIndex = -1;
+		
+		p = new AudioPlayer();
 		
 		if(Window.ON_RASP)
 			dir = new File(System.getProperty( "user.home" ) + "/ColorStrike/Songs");
@@ -31,27 +36,83 @@ public class SongHandler {
 			dir = new File("Songs");
 		
 		songs = DirScanner.scanDirectories(dir);
-		
-		currentSong = songs.get(currentIndex);
 	}
 	
 	public void next()
 	{
 		currentIndex++;
-		currentIndex%=songs.size();
-		currentSong = songs.get(currentIndex);
 		updatePlayer();
 	}
 	public void previous()
 	{
 		currentIndex--;
-		currentIndex%=songs.size();
-		currentSong = songs.get(currentIndex);
 		updatePlayer();
 	}
+	public void set(int i)
+	{
+		if(currentIndex != i)
+		{
+			currentIndex = i;
+			updatePlayer();
+		}
+	}
+	
 	
 	private void updatePlayer()
 	{
+		if(currentIndex < 0)
+			currentIndex = songs.size() + currentIndex;
 		
+		currentIndex%=songs.size();
+		currentSong = songs.get(currentIndex);
+		
+		p.stop();
+		p.setClip(currentSong);
+	}
+	
+	public long getProgress()
+	{
+		return p.getProgress();
+	}
+	
+	public List<Song> getSongs()
+	{
+		return songs;
+	}
+	public Song getCurrentSong()
+	{
+		return currentSong;
+	}
+	
+	public void close()
+	{
+		p.close();
+		for(Song s : songs)
+		{
+			s.close();
+		}
+	}
+	
+	public void play()
+	{
+		p.play();
+	}
+	
+	public void play(boolean b)
+	{
+		if(b)
+		{
+			p.play((int)currentSong.getSampleStart()*10000);
+		}
+	}
+	
+	public void pause()
+	{
+		p.pause();
+	}
+	
+	public void stop()
+	{
+		p.stop();
 	}
 }

+ 4 - 2
model/gameState/GameState.java

@@ -2,6 +2,7 @@ package model.gameState;
 
 import java.awt.Graphics2D;
 
+import model.SongHandler;
 import control.GameStateManager;
 import control.button.ButtonEvent;
 import control.joystick.JoystickEvent;
@@ -9,10 +10,11 @@ import control.joystick.JoystickEvent;
 public abstract class GameState  {
 
 	protected GameStateManager gsm;
+	protected SongHandler sh;
 
-	public GameState(GameStateManager gsm) {
-		super();
+	public GameState(GameStateManager gsm, SongHandler sh) {
 		this.gsm = gsm;
+		this.sh = sh;
 	}
 	
 	public abstract void init();

+ 10 - 8
model/gameState/MenuState.java

@@ -2,14 +2,16 @@ package model.gameState;
 
 import java.awt.Graphics2D;
 
+import model.SongHandler;
 import control.GameStateManager;
+import control.GameStateManager.State;
 import control.button.ButtonEvent;
 import control.joystick.JoystickEvent;
 
 public class MenuState extends GameState {
 
-	public MenuState(GameStateManager gsm) {
-		super(gsm);
+	public MenuState(GameStateManager gsm, SongHandler sh) {
+		super(gsm, sh);
 	}
 	@Override
 	public void init() {
@@ -26,6 +28,7 @@ public class MenuState extends GameState {
 	@Override
 	public void draw(Graphics2D g2) {
 		g2.drawString("Press 0 to start the game", 1280/2, 1024/2);
+		g2.drawString("Press 1 to pick a song", 1280/2, 1024/2 + 40);
 
 	}
 	
@@ -34,20 +37,19 @@ public class MenuState extends GameState {
 		
 		switch(e.getButton().getButtonID()){
 		case 0:
-			gsm.next();
+			gsm.setState(State.PLAY_STATE);
+			break;
+		case 1:
+			gsm.setState(State.PICKSONG_STATE);
 			break;
 		}
 		
-		
 	}
 	@Override
 	public void buttonReleased(ButtonEvent e) {
 		
 	}
 	@Override
-	public void onJoystickMoved(JoystickEvent e) {
-		// TODO Auto-generated method stub
-		
-	}
+	public void onJoystickMoved(JoystickEvent e) {}
 
 }

+ 59 - 0
model/gameState/PickSongState.java

@@ -0,0 +1,59 @@
+package model.gameState;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Window;
+import java.awt.image.BufferedImage;
+
+import model.SongHandler;
+import control.GameStateManager;
+import control.button.ButtonEvent;
+import control.joystick.JoystickEvent;
+
+public class PickSongState extends GameState {
+	
+	public PickSongState(GameStateManager gsm, SongHandler sh) {
+		super(gsm, sh);
+	}
+
+	@Override
+	public void init() {
+		sh.set(0);
+		sh.play(true);
+	}
+
+	@Override
+	public void update() {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void draw(Graphics2D g2d) {
+		g2d.drawImage(sh.getCurrentSong().getBackgroundImage(), null, 0, 0);
+		g2d.drawImage(sh.getCurrentSong().getBannerImage(), null, 400, 0);
+	}
+
+	@Override
+	public void buttonPressed(ButtonEvent e) {}
+
+	@Override
+	public void buttonReleased(ButtonEvent e) {}
+
+	@Override
+	public void onJoystickMoved(JoystickEvent e) {
+		switch (e.getJoystick().getPos()) {
+		case LEFT:
+			sh.previous();
+			sh.play(true);
+			break;
+		case RIGHT:
+			sh.next();
+			sh.play(true);
+			break;
+		default:
+			break;
+		}
+	}
+
+}

+ 3 - 2
model/gameState/PlayState.java

@@ -11,6 +11,7 @@ import java.util.Iterator;
 import java.util.List;
 
 import model.GameModel;
+import model.SongHandler;
 import model.drawObjects.Bullet;
 import model.drawObjects.Enemy;
 import model.drawObjects.Player;
@@ -34,8 +35,8 @@ public class PlayState extends GameState{
 	public static int currentScore = 0; 
 	public static int lifePoints = 100;
 	
-	public PlayState(GameStateManager gsm) {
-		super(gsm);
+	public PlayState(GameStateManager gsm, SongHandler sh) {
+		super(gsm, sh);
 		area = new PlayArea((int) borderRect.getX(),1024,1024,100);
 		infoPanel = new InfoPanel(0, 0);
 		enemys = new ArrayList<Enemy>();

BIN
mp3spi1.9.5.jar


BIN
songs/Card_Captor_Sakura-_Catch_You_Catch_Me/CCSIntro.mp3


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
songs/Card_Captor_Sakura-_Catch_You_Catch_Me/Card_Captor_Sakura-_Catch_You_Catch_Me.csf


BIN
songs/Card_Captor_Sakura-_Catch_You_Catch_Me/SakuraBG.png


BIN
songs/Card_Captor_Sakura-_Catch_You_Catch_Me/SakuraLogo.png


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
songs/Chobits-_Let_Me_Be_With_You/Chobits-_Let_Me_Be_With_You.csf


BIN
songs/Chobits-_Let_Me_Be_With_You/ChobitsIntro.mp3


BIN
songs/Chobits-_Let_Me_Be_With_You/Chobitsbg1.png


BIN
songs/Chobits-_Let_Me_Be_With_You/Chobitslogo.png


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
songs/Excel_Saga-_Excel's_Theme/Excel_Saga-_Excel's_Theme.csf


BIN
songs/Excel_Saga-_Excel's_Theme/excel-bg.png


BIN
songs/Excel_Saga-_Excel's_Theme/excel-logo.png


BIN
songs/Excel_Saga-_Excel's_Theme/excel.mp3


BIN
songs/Hand_Maid_May-_Jump_Meippai_Dakishimete!/HandMaidMayIntro.mp3


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
songs/Hand_Maid_May-_Jump_Meippai_Dakishimete!/Hand_Maid_May-_Jump_Meippai_Dakishimete!.csf


BIN
songs/Hand_Maid_May-_Jump_Meippai_Dakishimete!/MayBG.png


BIN
songs/Hand_Maid_May-_Jump_Meippai_Dakishimete!/MayLogo.png


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
songs/Love_Hina-_Sakura_Saku/Love_Hina-_Sakura_Saku.csf


BIN
songs/Love_Hina-_Sakura_Saku/sakurasaku-bg.png


BIN
songs/Love_Hina-_Sakura_Saku/sakurasaku.mp3


BIN
songs/Love_Hina-_Sakura_Saku/sakurasakulogo.png


BIN
songs/Love_Hina-_Sakura_Saku_[Euro_Beat_Mix]/LoveHinaBG.png


BIN
songs/Love_Hina-_Sakura_Saku_[Euro_Beat_Mix]/LoveHinaLogo.png


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
songs/Love_Hina-_Sakura_Saku_[Euro_Beat_Mix]/Love_Hina-_Sakura_Saku_[Euro_Beat_Mix].csf


BIN
songs/Love_Hina-_Sakura_Saku_[Euro_Beat_Mix]/SakuraSaku.mp3


BIN
songs/Love_Hina_Again-_Kirari_Takaramono/LoveHinaAgain.mp3


BIN
songs/Love_Hina_Again-_Kirari_Takaramono/LoveHinaAgainBG.png


BIN
songs/Love_Hina_Again-_Kirari_Takaramono/LoveHinaAgainLogo.png


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
songs/Love_Hina_Again-_Kirari_Takaramono/Love_Hina_Again-_Kirari_Takaramono.csf


BIN
songs/Mahoromatic-_Mahoro_De_Mambo/Mahoro.mp3


BIN
songs/Mahoromatic-_Mahoro_De_Mambo/MahoroBG.png


BIN
songs/Mahoromatic-_Mahoro_De_Mambo/MahoroLogo.png


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
songs/Mahoromatic-_Mahoro_De_Mambo/Mahoromatic-_Mahoro_De_Mambo.csf


BIN
songs/Neon_Genesis_Evangelion-_Cruel_Angel's_Thesis_[Euro_Mix]/EvaBG.png


BIN
songs/Neon_Genesis_Evangelion-_Cruel_Angel's_Thesis_[Euro_Mix]/EvaLogo.png


BIN
songs/Neon_Genesis_Evangelion-_Cruel_Angel's_Thesis_[Euro_Mix]/Evangelion.mp3


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
songs/Neon_Genesis_Evangelion-_Cruel_Angel's_Thesis_[Euro_Mix]/Neon_Genesis_Evangelion-_Cruel_Angel's_Thesis_[Euro_Mix].csf


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
songs/Rurouni_Kenshin-_Freckles_(KCP_Re-Edit)/Rurouni_Kenshin-_Freckles_(KCP_Re-Edit).csf


BIN
songs/Rurouni_Kenshin-_Freckles_(KCP_Re-Edit)/freckles.mp3


BIN
songs/Rurouni_Kenshin-_Freckles_(KCP_Re-Edit)/rk-bg.png


BIN
songs/Rurouni_Kenshin-_Freckles_(KCP_Re-Edit)/rk-logo.png


BIN
songs/Sister_Princess-_Love_Destiny/SPBg1.png


BIN
songs/Sister_Princess-_Love_Destiny/SPLogo.png


BIN
songs/Sister_Princess-_Love_Destiny/SisterPrincessIntro.mp3


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
songs/Sister_Princess-_Love_Destiny/Sister_Princess-_Love_Destiny.csf


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
songs/Slayers-_Midnight_Blue/Slayers-_Midnight_Blue.csf


BIN
songs/Slayers-_Midnight_Blue/SlayersLogo.png


BIN
songs/Slayers-_Midnight_Blue/SlayersMovieTheme.mp3


BIN
songs/Slayers-_Midnight_Blue/Slayersbg.PNG


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
songs/Vandread-_Trust/Vandread-_Trust.csf


BIN
songs/Vandread-_Trust/VandreadBG1.png


BIN
songs/Vandread-_Trust/VandreadIntro.mp3


BIN
songs/Vandread-_Trust/VandreadLogo.png


BIN
tritonus_share.jar


Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác