Ver Fonte

Feature/herkasingen

# Conflicts:
#	model/gameState/PlayState.java
# Bugs:
#   model/gameState/PlayState.java highscore empty
jancoow há 10 anos atrás
pai
commit
172454e13f

+ 3 - 3
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);
 	}

+ 2 - 1
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) {

BIN
image/youwon.png


+ 174 - 0
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();
+	}
+}

+ 16 - 7
model/gameState/PlayState.java

@@ -4,17 +4,16 @@ import java.awt.BasicStroke;
 import java.awt.Color;
 import java.awt.Graphics2D;
 import java.awt.Stroke;
-import java.awt.geom.Ellipse2D;
 import java.awt.geom.Rectangle2D;
 import java.util.Iterator;
 
-import main.Window;
 import model.SongHandler;
 import model.drawObjects.Enemy;
 import model.drawObjects.Player;
 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;
@@ -45,6 +44,7 @@ public class PlayState extends GameState {
 	private int joystick_moved = 0;
 	
 	private boolean init = false;
+	private static boolean won = false;
 
 	private long oldProgress = 0;
 
@@ -60,6 +60,7 @@ public class PlayState extends GameState {
 	@Override
 	public void init() {
 		init = true;
+		won = false;
 		lifePoints = 100;
 		currentScore = 0;
 		comboScore = 0;
@@ -69,8 +70,9 @@ public class PlayState extends GameState {
 		enemies_missed = 0;
 		buttons_pressed = 0;
 		joystick_moved = 0;
-		
-		infoPanel.init(sql.getHighscore(sh.getCurrentSong(), sh.getCurrentSongInstance()).getScore());
+		Highscore h = sql.getHighscore(sh.getCurrentSong(), sh.getCurrentSongInstance());
+		if(h != null)
+			infoPanel.init(h.getScore());
 		
 		for(Path p : area.paths)
 		{
@@ -101,8 +103,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;
 
@@ -164,7 +169,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
@@ -287,5 +292,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;
 	}
 }

+ 1 - 2
model/objects/PlayArea.java

@@ -2,7 +2,6 @@ package model.objects;
 
 import image.Images;
 
-import java.awt.AlphaComposite;
 import java.awt.BasicStroke;
 import java.awt.Color;
 import java.awt.Graphics2D;
@@ -29,7 +28,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 Rectangle2D backgroundPlay = new Rectangle2D.Double(256, 0, 1024, 1024);