diff --git a/control/GameStateManager.java b/control/GameStateManager.java index f906d52..8ff3c5c 100644 --- a/control/GameStateManager.java +++ b/control/GameStateManager.java @@ -5,7 +5,7 @@ import java.util.ArrayList; import java.util.List; import model.SongHandler; -import model.gameState.GameOverState; +import model.gameState.EndState; import model.gameState.GameState; import model.gameState.HelpState; import model.gameState.MenuState; @@ -32,7 +32,7 @@ public class GameStateManager { MENU_STATE, HELP_STATE, PLAY_STATE, - GAMEOVER_STATE, + END_STATE, PRE_GAME_STATE } @@ -42,7 +42,7 @@ public class GameStateManager { gamestates.add(new MenuState(this, sh, sql)); gamestates.add(new HelpState(this, sh, sql)); gamestates.add(new PlayState(this, sh, sql)); - gamestates.add(new GameOverState(this, sh, sql)); + gamestates.add(new EndState(this, sh, sql)); gamestates.add(new PreGameState(this,sh, sql)); setState(State.TITLE_STATE); } diff --git a/image/Images.java b/image/Images.java index 2ee2045..dfe010e 100644 --- a/image/Images.java +++ b/image/Images.java @@ -35,6 +35,7 @@ public class Images { images.add(toCompatibleImage(ImageIO.read(Main.class.getResource("/image/gameover.png")))); images.add(toCompatibleImage(ImageIO.read(Main.class.getResource("/image/screenshot.png")))); images.add(toCompatibleImage(ImageIO.read(Main.class.getResource("/image/help.png")))); + images.add(toCompatibleImage(ImageIO.read(Main.class.getResource("/image/youwon.png")))); } catch (IOException e) { e.printStackTrace(); } @@ -45,7 +46,7 @@ public class Images { } public enum ImageType { - pulse,cursor,pressstart,colorstrike,background,aanwijzers,kast,gameover, screenshot, help + pulse,cursor,pressstart,colorstrike,background,aanwijzers,kast,gameover, screenshot, help,youwon } public static BufferedImage readImage(File f) { diff --git a/image/youwon.png b/image/youwon.png new file mode 100644 index 0000000..bf0c7b0 Binary files /dev/null and b/image/youwon.png differ diff --git a/model/gameState/EndState.java b/model/gameState/EndState.java new file mode 100644 index 0000000..1f2d25e --- /dev/null +++ b/model/gameState/EndState.java @@ -0,0 +1,174 @@ +package model.gameState; + +import image.Images; + +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics2D; +import java.awt.RenderingHints; +import java.awt.Transparency; +import java.awt.image.BufferedImage; +import java.awt.image.VolatileImage; +import java.io.IOException; + +import model.GameModel; +import model.SongHandler; +import model.objects.InfoPanel; +import model.objects.highscore.HighscoreName; + +import com.google.zxing.WriterException; + +import control.GameStateManager; +import control.GameStateManager.State; +import control.button.ButtonEvent; +import control.button.ButtonHandler; +import control.joystick.JoystickEvent; +import control.joystick.JoystickHandler; +import data.io.SQLConnector; +import data.io.WebcamUploader; + +public class EndState extends GameState { + + BufferedImage end = null; + VolatileImage background; + Font textFont = new Font("OCR A Extended", Font.BOLD, 70); + HighscoreName hsn; + int image_x = 0; + private boolean uploaded; + private BufferedImage QRimage; + + int frame; + + public EndState(GameStateManager gsm, SongHandler sh, SQLConnector sql) { + super(gsm, sh, sql); + hsn = new HighscoreName(640,717,5,textFont); + } + + @Override + public void init() { + createBackground(); + ButtonHandler.getButton(1).setColor(GameModel.colors[0]); + ButtonHandler.getButton(2).setColor(GameModel.colors[2]); + JoystickHandler.REPEAT = true; + uploaded = false; +// System.out.println("Endgame: "+PlayState.won()); + if(PlayState.won()){ + end = Images.getImage(Images.ImageType.youwon); + }else{ + end = Images.getImage(Images.ImageType.gameover); + } + } + + @Override + public void update(float factor) { + image_x = ((frame / 5) % 5) * 40; + frame++; + } + + @Override + public void draw(Graphics2D g2) { + g2.drawImage(background, 0, 0, 1280, 1024, null); + + if(end != null){ + g2.drawImage(end.getSubimage(image_x, 0, 40, 26), 640-122, 400, 245, 130, null); + } + + if(!uploaded) + hsn.drawName(g2); + else if(QRimage != null){ + g2.drawImage(QRimage, (1280/2)-(QRimage.getWidth()/2), 600,null); + //1280 is de breedte van de panel + } + + } + + @Override + public void buttonPressed(ButtonEvent e) { + //System.out.println("Name: "+hsn.getName()); + switch(e.getButton().getButtonID()){ + case 0: + gsm.setState(State.TITLE_STATE); + break; + case 1: + if(hsn.getName().trim().length() >= 3) + { + if(!uploaded){ + int id = sql.addHighscore(sh.getCurrentSong(), sh.getCurrentSongInstance(), hsn.getName(), PlayState.currentScore); + try { + WebcamUploader.takePictureAndUpload(id); + } catch (IOException e2) { + e2.printStackTrace(); + } + + try { + QRimage = WebcamUploader.createQRImage("http://portfolio.jancokock.me/colorstrike/message.php?id="+id, 400); + } catch (WriterException | IOException e1) { + e1.printStackTrace(); + } + uploaded = true; + + }else{ + gsm.setState(State.MENU_STATE); + } + } + break; + case 2: + gsm.setState(State.MENU_STATE); + break; + } + + + } + @Override + public void buttonReleased(ButtonEvent e) { + + } + @Override + public void onJoystickMoved(JoystickEvent e) { + switch(e.getJoystick().getPos()){ + case DOWN: + hsn.down(); + break; + case LEFT: + hsn.left(); + break; + case RIGHT: + hsn.right(); + break; + case UP: + hsn.up(); + break; + default: + break; + } + } + + 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.setColor(Color.BLACK); + g2.setFont(textFont); + + g2.drawString("High Score", 385, 212); + g2.drawString(InfoPanel.getTotalHighscore() + "", 390, 342); + g2.dispose(); + } +} diff --git a/model/gameState/PlayState.java b/model/gameState/PlayState.java index 59b9c25..1ac9c79 100644 --- a/model/gameState/PlayState.java +++ b/model/gameState/PlayState.java @@ -9,7 +9,6 @@ import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.util.Iterator; -import main.Window; import model.SongHandler; import model.drawObjects.Enemy; import model.drawObjects.Player; @@ -17,6 +16,7 @@ import model.drawObjects.PointAnimation; import model.objects.InfoPanel; import model.objects.Path; import model.objects.PlayArea; +import model.objects.highscore.Highscore; import audio.ButtonInstance; import audio.ObjectInstance; import control.GameStateManager; @@ -47,6 +47,7 @@ public class PlayState extends GameState { private int joystick_moved = 0; private boolean init = false; + private static boolean won = false; private long oldProgress = 0; @@ -62,6 +63,7 @@ public class PlayState extends GameState { @Override public void init() { init = true; + won = false; lifePoints = 100; currentScore = 0; comboScore = 0; @@ -71,6 +73,9 @@ public class PlayState extends GameState { enemies_missed = 0; buttons_pressed = 0; joystick_moved = 0; + Highscore h = sql.getHighscore(sh.getCurrentSong(), sh.getCurrentSongInstance()); + if(h != null) + infoPanel.init(h.getScore()); infoPanel.init(sql.getHighscore(sh.getCurrentSong(), sh.getCurrentSongInstance()).getScore()); @@ -103,8 +108,11 @@ public class PlayState extends GameState { } - if(progress > sh.getCurrentSongInstance().getEndTime() + Enemy.secondsToEnd*1000*2) - endGame(); + if(progress > sh.getCurrentSongInstance().getEndTime() + Enemy.secondsToEnd*1000*2){ + won = true; + endGame(); + } + oldProgress = progress; @@ -166,7 +174,7 @@ public class PlayState extends GameState { if(currentScore == 0) gsm.setState(State.MENU_STATE); else - gsm.setState(State.GAMEOVER_STATE); + gsm.setState(State.END_STATE); } @Override @@ -229,6 +237,7 @@ public class PlayState extends GameState { } } } + player.setBeat(); @@ -291,5 +300,9 @@ public class PlayState extends GameState { Path path = area.paths.get(pathID); Enemy e = new Enemy(pathID, 1, color, path); path.getEnemysInPath().addLast(e); + } + + public static boolean won(){ + return won; } } diff --git a/model/objects/PlayArea.java b/model/objects/PlayArea.java index 143fa55..f182f02 100644 --- a/model/objects/PlayArea.java +++ b/model/objects/PlayArea.java @@ -2,6 +2,13 @@ package model.objects; import image.Images; +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Polygon; +import java.awt.RenderingHints; +import java.awt.Stroke; +import java.awt.Transparency; import java.awt.*; import java.awt.geom.GeneralPath; import java.awt.geom.Line2D; @@ -24,7 +31,7 @@ public class PlayArea { private VolatileImage background; private boolean hit = false; private int count = 0,maxCount = 100,pathID = -1; - private Stroke stroke = new BasicStroke(5); + private Stroke stroke = new BasicStroke(5,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND); private PointAnimation pointAnimation = new PointAnimation(); private Rectangle2D backgroundPlay = new Rectangle2D.Double(256, 0, 1024, 1024); @@ -125,7 +132,7 @@ public class PlayArea { pointAnimation.draw(g2); g2.setFont(tempFont); } - + public Line2D getLine(int index){ if(index < 0){ index = 0;