From 3bc4f55f5a9d7b77f901266cd40d033935e2934a Mon Sep 17 00:00:00 2001 From: Remco Date: Tue, 26 May 2015 22:14:44 +0200 Subject: [PATCH 1/4] GameSprint1Done, little bug. When aiming right down not possible to hit with button 1 and 3 :S --- control/GameControl.java | 18 ++-- control/GameStateManager.java | 4 +- control/joystick/JoystickHandler.java | 14 ++- image/Images.java | 3 +- image/player2.png | Bin 0 -> 2211 bytes main/Window.java | 16 ++- model/GameModel.java | 18 ++-- model/drawObjects/Bullet.java | 107 +++++++++++++++++++ model/drawObjects/DrawObject.java | 14 +-- model/drawObjects/Enemy.java | 82 +++++++++++++++ model/drawObjects/Person.java | 13 +++ model/drawObjects/Player.java | 47 +++++++-- model/gameState/GameState.java | 12 ++- model/gameState/MenuState.java | 26 +++-- model/gameState/PlayState.java | 144 ++++++++++++++++++++++---- model/objects/InfoPanel.java | 2 +- model/objects/PlayArea.java | 58 +++++++++++ view/GameView.java | 21 ++-- 18 files changed, 515 insertions(+), 84 deletions(-) create mode 100644 image/player2.png create mode 100644 model/drawObjects/Bullet.java create mode 100644 model/drawObjects/Enemy.java create mode 100644 model/drawObjects/Person.java create mode 100644 model/objects/PlayArea.java diff --git a/control/GameControl.java b/control/GameControl.java index cfbc3f5..8fc1fa6 100644 --- a/control/GameControl.java +++ b/control/GameControl.java @@ -7,27 +7,33 @@ import control.button.ButtonListener; import control.joystick.JoystickEvent; import control.joystick.JoystickListener; -public class GameControl implements JoystickListener, ButtonListener{ +public class GameControl implements JoystickListener, ButtonListener { GameModel model; GameView view; + GameStateManager gsm; - public GameControl(GameModel model, GameView view) + public GameControl(GameModel model, GameView view,GameStateManager gsm) { this.model = model; this.view = view; + this.gsm = gsm; } @Override - public void buttonPressed(ButtonEvent e) { - + public void buttonPressed(ButtonEvent e) { +// System.out.println("Game control, button pressed: "+e.getButton().getButtonID()); + gsm.currentState.buttonPressed(e); } @Override - public void buttonReleased(ButtonEvent e) {} + public void buttonReleased(ButtonEvent e) { +// System.out.println("Game control, button released: "+e.getButton().getButtonID()); + gsm.currentState.buttonReleased(e); + } @Override public void onJoystickMoved(JoystickEvent e) { - + gsm.currentState.onJoystickMoved(e); } } diff --git a/control/GameStateManager.java b/control/GameStateManager.java index 2fba925..0373282 100644 --- a/control/GameStateManager.java +++ b/control/GameStateManager.java @@ -23,10 +23,10 @@ public class GameStateManager { public void next() { index++; index %= gamestates.size(); + currentState = gamestates.get(index); } - public void update(){ - currentState = gamestates.get(index); + public void update(){ currentState.update(); } } diff --git a/control/joystick/JoystickHandler.java b/control/joystick/JoystickHandler.java index da142da..7388faa 100644 --- a/control/joystick/JoystickHandler.java +++ b/control/joystick/JoystickHandler.java @@ -50,7 +50,12 @@ public class JoystickHandler implements KeyListener{ public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent e) { if(e.getState() == PinState.HIGH){ keyReleased(new KeyEvent( - new java.awt.Component(){}, + new java.awt.Component(){ + + /** + * + */ + private static final long serialVersionUID = 1L;}, KeyEvent.KEY_RELEASED, System.nanoTime(), 0, @@ -60,7 +65,12 @@ public class JoystickHandler implements KeyListener{ System.out.println(e.getPin().getName() + " Released"); }else{ keyPressed(new KeyEvent( - new java.awt.Component(){}, + new java.awt.Component(){ + + /** + * + */ + private static final long serialVersionUID = 1L;}, KeyEvent.KEY_PRESSED, System.nanoTime(), 0, diff --git a/image/Images.java b/image/Images.java index 501092e..2845d9b 100644 --- a/image/Images.java +++ b/image/Images.java @@ -19,6 +19,7 @@ public class 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(); @@ -32,6 +33,6 @@ public class Images{ public enum ImageType { - player + player,player2 } } diff --git a/image/player2.png b/image/player2.png new file mode 100644 index 0000000000000000000000000000000000000000..ddc48d26dc9b53ef7bf92a8014f8a38181f863b5 GIT binary patch literal 2211 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 Vt%&mZUA#~L9PFHInKqc@e*uWLHXZ-~ literal 0 HcmV?d00001 diff --git a/main/Window.java b/main/Window.java index 814fe40..e94b8f8 100644 --- a/main/Window.java +++ b/main/Window.java @@ -8,12 +8,17 @@ import javax.swing.JFrame; import model.GameModel; import view.GameView; import control.GameControl; +import control.GameStateManager; import control.LedHandler; import control.button.ButtonHandler; import control.joystick.JoystickHandler; public class Window extends JFrame { + /** + * + */ + private static final long serialVersionUID = -9222956702898533696L; public static boolean ON_RASP; public Window(boolean ON_RASP) @@ -23,7 +28,7 @@ public class Window extends JFrame { setSize(1280, 1024); Window.ON_RASP = ON_RASP; - System.out.println(ON_RASP); +// System.out.println(ON_RASP); //Set window close listener setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); @@ -35,7 +40,7 @@ public class Window extends JFrame { //Set window to fullscreen // setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH); - setUndecorated(true); +// setUndecorated(true); //Create Events LedHandler led = null; @@ -49,9 +54,10 @@ public class Window extends JFrame { JoystickHandler jsh = new JoystickHandler(); //Create Instances - GameView view = new GameView(led); - GameModel model = new GameModel(view); - GameControl control = new GameControl(model, view); + GameStateManager gsm = new GameStateManager(); + GameView view = new GameView(led,gsm); + GameModel model = new GameModel(view,gsm); + GameControl control = new GameControl(model, view,gsm); setContentPane(view); //Create EventListeners diff --git a/model/GameModel.java b/model/GameModel.java index 2ba007e..dc41e1c 100644 --- a/model/GameModel.java +++ b/model/GameModel.java @@ -6,29 +6,25 @@ import java.awt.event.ActionListener; import javax.swing.Timer; import view.GameView; +import control.GameStateManager; public class GameModel implements ActionListener{ GameView view; Timer update; - Player player; + GameStateManager gsm; - public GameModel(GameView view) + public GameModel(GameView view,GameStateManager gsm) { - this.view = view; - player = new Player(1920/2, 1080/2); - update = new Timer(1000/10, this); + this.view = view; + this.gsm = gsm; + update = new Timer(1000/30, this); update.start(); } - public void update(){ - player.update(); - view.setPlayer(player); - } - @Override public void actionPerformed(ActionEvent e) { - update(); + gsm.update(); } } diff --git a/model/drawObjects/Bullet.java b/model/drawObjects/Bullet.java new file mode 100644 index 0000000..457e4b4 --- /dev/null +++ b/model/drawObjects/Bullet.java @@ -0,0 +1,107 @@ +package model.drawObjects; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.geom.Line2D; + +public class Bullet extends DrawObject { + + private double speed,lengthOfBullet; + + public Line2D bullet; + private Color c; + + public Bullet(double speed,Color c,double lengthOfBullet,int index,Line2D path) { + super(); + this.speed = speed; + this.lengthOfBullet = lengthOfBullet; + this.c = c; + double beginX,beginY,endX,endY; + + beginX = path.getX2(); + beginY = path.getY2(); + endX = beginX; + endY = beginY; + + //the 8 richtingen van de octagon + switch(index){ + case 0: + endY = beginY - lengthOfBullet; + break; + case 1: + endX = beginX + lengthOfBullet; + endY = beginY - lengthOfBullet; + break; + case 2: + endX = beginX + lengthOfBullet; + break; + case 3: + endX = beginX + lengthOfBullet; + endY = beginY + lengthOfBullet; + break; + case 4: + endY = beginY + lengthOfBullet; + break; + case 5: + endX = beginX - lengthOfBullet; + endY = beginY + lengthOfBullet; + break; + case 6: + endX = beginX - lengthOfBullet; + break; + case 7: + endX = beginX - lengthOfBullet; + endY = beginY - lengthOfBullet; + break; + } + bullet = new Line2D.Double(beginX, beginY, endX, endY); +// System.out.println("Index: "+index); +// System.out.println("X difference: "+(bullet.getX2()-bullet.getX1())); +// System.out.println("Y difference: "+(bullet.getY2()-bullet.getY1())); + } + + @Override + public void draw(Graphics2D g2) { + g2.setPaint(c); + g2.draw(bullet); + } + + @Override + public void update() { + double x1,x2,y1,y2,yDifference,xDifference; + x1 = bullet.getX1(); + x2 = bullet.getX2(); + y1 = bullet.getY1(); + y2 = bullet.getY2(); + yDifference = y2 - y1; + xDifference = x2 - x1; + + if(yDifference < 0.0){ + y1 -= speed; + y2 = y1-lengthOfBullet; + }else if(yDifference > 0.0){ + y1 += speed; + y2 = y1+lengthOfBullet; + } + + if(xDifference < 0.0){ + x1 -= speed; + x2 = x1-lengthOfBullet; + }else if(xDifference > 0.0){ + x1 += speed; + x2 = x1+lengthOfBullet; + } + + bullet.setLine(x1, y1, x2, y2); + } + + public Color getColor() { + return c; + } + + public void setColor(Color c) { + this.c = c; + } + + +} diff --git a/model/drawObjects/DrawObject.java b/model/drawObjects/DrawObject.java index 92527f0..2c5b658 100644 --- a/model/drawObjects/DrawObject.java +++ b/model/drawObjects/DrawObject.java @@ -2,19 +2,21 @@ package model.drawObjects; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; -import java.awt.geom.Point2D; public abstract class DrawObject { - protected Point2D middlePoint; - protected AffineTransform transform; - protected int index = 0,width,height; - public DrawObject(int x, int y) { - middlePoint = new Point2D.Double(x, y); + protected AffineTransform transform; + protected double width,height; + protected int index = 0; + public DrawObject() { transform = new AffineTransform(); } + public void setIndex(int index){ + this.index = index; + } + public abstract void draw(Graphics2D g2); public abstract void update(); } diff --git a/model/drawObjects/Enemy.java b/model/drawObjects/Enemy.java new file mode 100644 index 0000000..2de287d --- /dev/null +++ b/model/drawObjects/Enemy.java @@ -0,0 +1,82 @@ +package model.drawObjects; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Line2D; +import java.awt.geom.Point2D; + +public class Enemy extends Person{ + + private Color color; + private Ellipse2D.Double circle; + private Point2D beginPoint; + private Dimension size; + private double xSpeed,ySpeed; + + /** + * + * @param path, the path the player is walking on. + * @param c, the color of the enemy + * @param size, the size of the enemy + * @param stepsToFinishTheMiddle, the speed to finish the middle octagon + */ + public Enemy(Line2D path,Color c,int size,double stepsToFinishTheMiddle) { + + super(path.getX1()-size/2,path.getY1()-size/2); + beginPoint = new Point2D.Double(middlePoint.getX(),middlePoint.getY()); + this.size = new Dimension(size,size); + color = c; + circle = new Ellipse2D.Double(middlePoint.getX(),middlePoint.getY(),this.size.width,this.size.height); + index = 0; + xSpeed = (path.getX2() - circle.getCenterX())/stepsToFinishTheMiddle; + ySpeed = (path.getY2() - circle.getCenterY())/stepsToFinishTheMiddle; + } + + @Override + public void draw(Graphics2D g2) { + g2.setPaint(color); + g2.fill(circle); + } + + private void moveTowardsPlayer() + { + + double newX, newY; + newX = index*xSpeed+beginPoint.getX(); + newY = index*ySpeed+beginPoint.getY(); + index++; + middlePoint.setLocation(newX, newY); + circle.setFrame(middlePoint, size); + } + + @Override + public void update() { + moveTowardsPlayer(); + } + + public Color getColor() { + return color; + } + + public void setColor(Color color) { + this.color = color; + } + + public Ellipse2D.Double getCircle() { + return circle; + } + + public void setCircle(Ellipse2D.Double circle) { + this.circle = circle; + } + + public boolean hit(Bullet bullet){ + if(color.equals(bullet.getColor()) && circle.getBounds2D().intersectsLine(bullet.bullet)){ + return true; + } + return false; + } + +} diff --git a/model/drawObjects/Person.java b/model/drawObjects/Person.java new file mode 100644 index 0000000..65e4b64 --- /dev/null +++ b/model/drawObjects/Person.java @@ -0,0 +1,13 @@ +package model.drawObjects; + +import java.awt.geom.Point2D; + +public abstract class Person extends DrawObject { + + protected Point2D middlePoint; + + public Person(double x, double y) { + super(); + middlePoint = new Point2D.Double(x, y); + } +} diff --git a/model/drawObjects/Player.java b/model/drawObjects/Player.java index 1cf2baf..29014f9 100644 --- a/model/drawObjects/Player.java +++ b/model/drawObjects/Player.java @@ -2,28 +2,63 @@ package model.drawObjects; import image.Images; +import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; -public class Player extends DrawObject { +import model.gameState.PlayState; +import model.objects.PlayArea; + +public class Player extends Person { private BufferedImage img; + private PlayArea path ; + public List bullets; - public Player(int x, int y){ + public Player(int x, int y,PlayArea paths){ super(x,y); - img = Images.getImage(Images.ImageType.player); - + this.path = paths; + img = Images.getImage(Images.ImageType.player2); + width = img.getWidth(); + height = img.getHeight(); + bullets = new ArrayList(); } public void draw(Graphics2D g2){// - g2.drawImage(img, transform, null); + g2.drawImage(img, transform, null); + + g2.setStroke(new BasicStroke(5)); + for(Bullet b : bullets){ + b.draw(g2); + } } public void update(){ transform = new AffineTransform(); transform.rotate(Math.toRadians(index*45),middlePoint.getX(),middlePoint.getY()); - transform.translate(middlePoint.getX() - width/2, middlePoint.getY() - height*2); + transform.translate(middlePoint.getX() - width/2, middlePoint.getY() - height); + for(Bullet b : bullets){ + b.update(); + } + Iterator i = bullets.iterator(); + while(i.hasNext()){ + if(!PlayState.borderRect.intersectsLine(i.next().bullet)){ + i.remove(); + } + } + } + + public void addBullet(Color c){ + System.out.println(index); + bullets.add(new Bullet(10, c, 10, index,path.paths.get(index))); + } + + public void removeBullet(Bullet bullet){ + bullets.remove(bullet); } } diff --git a/model/gameState/GameState.java b/model/gameState/GameState.java index bb78b3e..1f27647 100644 --- a/model/gameState/GameState.java +++ b/model/gameState/GameState.java @@ -1,11 +1,12 @@ package model.gameState; import java.awt.Graphics2D; -import java.awt.event.KeyEvent; import control.GameStateManager; +import control.button.ButtonEvent; +import control.joystick.JoystickEvent; -public abstract class GameState { +public abstract class GameState { protected GameStateManager gsm; @@ -16,7 +17,8 @@ public abstract class GameState { public abstract void init(); public abstract void update(); - public abstract void draw(Graphics2D g2); - public abstract void keyPressed(KeyEvent e); - public abstract void keyReleased(KeyEvent e); + public abstract void draw(Graphics2D g2); + public abstract void buttonPressed(ButtonEvent e); + public abstract void buttonReleased(ButtonEvent e); + public abstract void onJoystickMoved(JoystickEvent e); } diff --git a/model/gameState/MenuState.java b/model/gameState/MenuState.java index ba19fba..51b1301 100644 --- a/model/gameState/MenuState.java +++ b/model/gameState/MenuState.java @@ -1,9 +1,10 @@ package model.gameState; import java.awt.Graphics2D; -import java.awt.event.KeyEvent; import control.GameStateManager; +import control.button.ButtonEvent; +import control.joystick.JoystickEvent; public class MenuState extends GameState { @@ -24,22 +25,29 @@ public class MenuState extends GameState { @Override public void draw(Graphics2D g2) { - g2.fillRect(10, 10, 100, 10); + g2.drawString("Press 0 to start the game", 1280/2, 1024/2); } - + @Override - public void keyPressed(KeyEvent e) { - if(e.getKeyCode() == KeyEvent.VK_Q){ + public void buttonPressed(ButtonEvent e) { + + switch(e.getButton().getButtonID()){ + case 0: gsm.next(); + break; } - + + } - @Override - public void keyReleased(KeyEvent e) { + public void buttonReleased(ButtonEvent e) { + + } + @Override + public void onJoystickMoved(JoystickEvent e) { // TODO Auto-generated method stub - + } } diff --git a/model/gameState/PlayState.java b/model/gameState/PlayState.java index b5cf5c9..810c9e3 100644 --- a/model/gameState/PlayState.java +++ b/model/gameState/PlayState.java @@ -1,54 +1,162 @@ package model.gameState; +import java.awt.Color; import java.awt.Graphics2D; -import java.awt.event.KeyEvent; +import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import model.drawObjects.Bullet; +import model.drawObjects.Enemy; +import model.drawObjects.Player; import model.objects.InfoPanel; -import model.objects.Lines; +import model.objects.PlayArea; import control.GameStateManager; +import control.button.ButtonEvent; +import control.joystick.JoystickEvent; public class PlayState extends GameState{ public static final Rectangle2D borderRect = new Rectangle2D.Double(256, 0, 1024, 1024); - private Lines lines; - private InfoPanel hsb; + private PlayArea area; + private InfoPanel infoPanel; + private Player player; + private List enemys; + private Color[] colors = {Color.MAGENTA,Color.RED,Color.GREEN,Color.YELLOW,Color.CYAN}; + + public PlayState(GameStateManager gsm) { super(gsm); - lines = new Lines((int) borderRect.getX(),100); - hsb = new InfoPanel(0, 0); + area = new PlayArea((int) borderRect.getX(),1024,1024,100); + infoPanel = new InfoPanel(0, 0); + enemys = new ArrayList(); + player = new Player(1280-1024+1024/2, 1024/2,area); + for(int i = 0; i < 8; i++){ + Line2D line = area.getLine(i); + addEnemy(line, Color.BLUE, 100); + } } @Override public void init() { - // TODO Auto-generated method stub + } @Override - public void update() { - // TODO Auto-generated method stub - + public void update() { + player.update(); + Iterator enemyIterator = enemys.iterator(); + while(enemyIterator.hasNext()){ + Enemy e = enemyIterator.next(); + Iterator bulletIterator = player.bullets.iterator(); + while(bulletIterator.hasNext()){ + if(e.hit(bulletIterator.next())){ + enemyIterator.remove(); + bulletIterator.remove(); + } + } + if(area.octagon.intersects(e.getCircle().getBounds2D())){ + enemyIterator.remove(); + }else{ + e.update(); + } + } + while(enemys.size() < 8){ + int index = (int)(Math.random()*8); + int speed = (int)(Math.random()*1000); + int color = (int)(Math.random()*colors.length); + Line2D line = area.getLine(index); + addEnemy(line,colors[color],speed); + } } @Override public void draw(Graphics2D g2) { - hsb.draw(g2); + infoPanel.draw(g2); g2.setClip(borderRect); - lines.draw(g2); + area.draw(g2); + if(enemys != null){ + if(!enemys.isEmpty()){ + for(Enemy enemy : enemys){ + enemy.draw(g2); + } + } + } + + if(player != null) + player.draw(g2); + + } + + public void addEnemy(Line2D path,Color c,double speed){ + enemys.add(new Enemy(path,c,20,speed)); } @Override - public void keyPressed(KeyEvent e) { - // TODO Auto-generated method stub - + public void buttonPressed(ButtonEvent e) { + System.out.println("Playstate button pressed: "+e.getButton().getButtonID()); + switch(e.getButton().getButtonID()){ + case 1: + player.addBullet(Color.RED); + break; + case 2: + player.addBullet(Color.BLUE); + break; + case 3: + player.addBullet(Color.GREEN); + break; + case 4: + player.addBullet(Color.YELLOW); + break; + case 5: + player.addBullet(Color.MAGENTA); + break; + case 6: + player.addBullet(Color.CYAN); + break; + } } @Override - public void keyReleased(KeyEvent e) { - // TODO Auto-generated method stub - + public void buttonReleased(ButtonEvent e) { +// System.out.println("Playstate button released: "+e.getButton().getButtonID()); } + @Override + public void onJoystickMoved(JoystickEvent e) { + switch(e.getJoystick().getPos()){ + case CENTER: + break; + case DOWN: + player.setIndex(4); + break; + case DOWN_LEFT: + player.setIndex(5); + break; + case DOWN_RIGHT: + player.setIndex(3); + break; + case LEFT: + player.setIndex(6); + break; + case RIGHT: + player.setIndex(2); + break; + case UP: + player.setIndex(0); + break; + case UP_LEFT: + player.setIndex(7); + break; + case UP_RIGHT: + player.setIndex(1); + break; + default: + break; + } + } } diff --git a/model/objects/InfoPanel.java b/model/objects/InfoPanel.java index 30b0c4b..97ba316 100644 --- a/model/objects/InfoPanel.java +++ b/model/objects/InfoPanel.java @@ -12,6 +12,6 @@ public class InfoPanel { } public void draw(Graphics2D g2){ - g2.drawRect(x, y, 256, 1024); + g2.fillRect(x, y, 256, 1024); } } diff --git a/model/objects/PlayArea.java b/model/objects/PlayArea.java new file mode 100644 index 0000000..b5d8fc4 --- /dev/null +++ b/model/objects/PlayArea.java @@ -0,0 +1,58 @@ +package model.objects; + +import java.awt.Graphics2D; +import java.awt.Polygon; +import java.awt.Shape; +import java.awt.geom.Line2D; +import java.util.ArrayList; +import java.util.List; + +public class PlayArea { + + public List paths; + public Polygon octagon; + + + public PlayArea(int xToRight,int heightOfGameScreen,int widthOfGameScreen, int sizeOctagon) { + super(); + paths = new ArrayList(); + int middlePointX = widthOfGameScreen/2+xToRight; + int middlePointY = heightOfGameScreen/2; + int amountOfAngles = 8; + + octagon = new Polygon(); + for(int i = 0; i < amountOfAngles; i++){ + octagon.addPoint((int)(middlePointX+sizeOctagon*Math.cos(i*Math.PI/(amountOfAngles/2))), + (int)(middlePointY+sizeOctagon*Math.sin(i*Math.PI/(amountOfAngles/2)))); + } + + widthOfGameScreen += xToRight; + + + paths.add(new Line2D.Double(middlePointX,0 ,octagon.xpoints[6],octagon.ypoints[6]));//top + paths.add(new Line2D.Double(widthOfGameScreen,0 ,octagon.xpoints[7],octagon.ypoints[7]));//right -top + paths.add(new Line2D.Double(widthOfGameScreen,middlePointY ,octagon.xpoints[0],octagon.ypoints[0]));//right + paths.add(new Line2D.Double(widthOfGameScreen,heightOfGameScreen,octagon.xpoints[1],octagon.ypoints[1]));//right -down + paths.add(new Line2D.Double(middlePointX,heightOfGameScreen ,octagon.xpoints[2],octagon.ypoints[2]));//down + paths.add(new Line2D.Double(xToRight,heightOfGameScreen ,octagon.xpoints[3],octagon.ypoints[3]));//left -down + paths.add(new Line2D.Double(xToRight,middlePointY ,octagon.xpoints[4],octagon.ypoints[4]));//left + paths.add(new Line2D.Double(xToRight,0 ,octagon.xpoints[5],octagon.ypoints[5]));//left -top + } + + public void draw(Graphics2D g2){ + for(Shape s : paths){ + g2.draw(s); + } + g2.draw(octagon); + } + + public Line2D getLine(int index){ + if(index < 0){ + index = 0; + } + if(index >= 8 ){ + index = 7; + } + return paths.get(index); + } +} diff --git a/view/GameView.java b/view/GameView.java index 7eb9f62..4c7255e 100644 --- a/view/GameView.java +++ b/view/GameView.java @@ -9,7 +9,7 @@ import java.awt.event.ActionListener; import javax.swing.JPanel; import javax.swing.Timer; -import model.Player; +import control.GameStateManager; import control.LedHandler; public class GameView extends JPanel implements ActionListener{ @@ -18,13 +18,15 @@ public class GameView extends JPanel implements ActionListener{ * */ private static final long serialVersionUID = 1939480784205689618L; - Timer t; - Player player; - LedHandler led; - public GameView(LedHandler led) + Timer t; + LedHandler led; + GameStateManager gsm; + + public GameView(LedHandler led,GameStateManager gsm) { this.led=led; + this.gsm = gsm; t = new Timer(1000/30, this); t.start(); setPreferredSize(new Dimension(1280,1024)); @@ -40,11 +42,6 @@ public class GameView extends JPanel implements ActionListener{ super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; - if(player != null) - player.draw(g2d); - } - - public void setPlayer(Player player){ - this.player = player; - } + gsm.currentState.draw(g2d); + } } From 54382e9c1d4cfc9f9608e237a3d131f4a6001979 Mon Sep 17 00:00:00 2001 From: Remco Date: Wed, 27 May 2015 10:42:29 +0200 Subject: [PATCH 2/4] Colors --- model/GameModel.java | 8 +++++++- model/drawObjects/Player.java | 2 +- model/gameState/PlayState.java | 25 ++++++++++++------------- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/model/GameModel.java b/model/GameModel.java index dc41e1c..85b594d 100644 --- a/model/GameModel.java +++ b/model/GameModel.java @@ -1,5 +1,6 @@ package model; +import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -7,12 +8,13 @@ import javax.swing.Timer; import view.GameView; import control.GameStateManager; +import control.button.ButtonHandler; public class GameModel implements ActionListener{ GameView view; Timer update; - + public static Color[] colors = {Color.MAGENTA,Color.RED,Color.GREEN,Color.YELLOW,Color.CYAN,Color.BLUE}; GameStateManager gsm; public GameModel(GameView view,GameStateManager gsm) @@ -21,6 +23,10 @@ public class GameModel implements ActionListener{ this.gsm = gsm; update = new Timer(1000/30, this); update.start(); + + for(int i = 1; i < ButtonHandler.getButtons().size(); i++){ + ButtonHandler.getButtons().get(i).setColor(colors[i-1]);; + } } @Override diff --git a/model/drawObjects/Player.java b/model/drawObjects/Player.java index 29014f9..b3c1231 100644 --- a/model/drawObjects/Player.java +++ b/model/drawObjects/Player.java @@ -54,7 +54,7 @@ public class Player extends Person { } public void addBullet(Color c){ - System.out.println(index); +// System.out.println(index); bullets.add(new Bullet(10, c, 10, index,path.paths.get(index))); } diff --git a/model/gameState/PlayState.java b/model/gameState/PlayState.java index 810c9e3..654e82d 100644 --- a/model/gameState/PlayState.java +++ b/model/gameState/PlayState.java @@ -8,6 +8,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import model.GameModel; import model.drawObjects.Bullet; import model.drawObjects.Enemy; import model.drawObjects.Player; @@ -23,8 +24,7 @@ public class PlayState extends GameState{ private PlayArea area; private InfoPanel infoPanel; private Player player; - private List enemys; - private Color[] colors = {Color.MAGENTA,Color.RED,Color.GREEN,Color.YELLOW,Color.CYAN}; + private List enemys; public PlayState(GameStateManager gsm) { @@ -35,7 +35,7 @@ public class PlayState extends GameState{ player = new Player(1280-1024+1024/2, 1024/2,area); for(int i = 0; i < 8; i++){ Line2D line = area.getLine(i); - addEnemy(line, Color.BLUE, 100); + addEnemy(line, Color.BLUE, 200); } } @@ -66,10 +66,9 @@ public class PlayState extends GameState{ } while(enemys.size() < 8){ int index = (int)(Math.random()*8); - int speed = (int)(Math.random()*1000); - int color = (int)(Math.random()*colors.length); + int color = (int)(Math.random()*GameModel.colors.length); Line2D line = area.getLine(index); - addEnemy(line,colors[color],speed); + addEnemy(line,GameModel.colors[color],200); } } @@ -98,25 +97,25 @@ public class PlayState extends GameState{ @Override public void buttonPressed(ButtonEvent e) { - System.out.println("Playstate button pressed: "+e.getButton().getButtonID()); +// System.out.println("Playstate button pressed: "+e.getButton().getButtonID()); switch(e.getButton().getButtonID()){ case 1: - player.addBullet(Color.RED); + player.addBullet(GameModel.colors[0]); break; case 2: - player.addBullet(Color.BLUE); + player.addBullet(GameModel.colors[1]); break; case 3: - player.addBullet(Color.GREEN); + player.addBullet(GameModel.colors[2]); break; case 4: - player.addBullet(Color.YELLOW); + player.addBullet(GameModel.colors[3]); break; case 5: - player.addBullet(Color.MAGENTA); + player.addBullet(GameModel.colors[4]); break; case 6: - player.addBullet(Color.CYAN); + player.addBullet(GameModel.colors[5]); break; } } From 6510d4b93ad7f81e3803f20654394382319e5890 Mon Sep 17 00:00:00 2001 From: jancoow Date: Wed, 27 May 2015 11:41:10 +0200 Subject: [PATCH 3/4] Only full screen on rpi & enabled AA --- main/Window.java | 9 +++++++++ view/GameView.java | 9 +++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/main/Window.java b/main/Window.java index e94b8f8..558a1ff 100644 --- a/main/Window.java +++ b/main/Window.java @@ -1,5 +1,7 @@ package main; +import java.awt.GraphicsDevice; +import java.awt.GraphicsEnvironment; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; @@ -48,6 +50,13 @@ public class Window extends JFrame { if(ON_RASP) //TODO REMOVE { led = new LedHandler(); + GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment(); + GraphicsDevice[] devices = graphicsEnvironment.getScreenDevices(); + if (!devices[0].isFullScreenSupported ()) + { + throw new UnsupportedOperationException ("Fullscreen mode is unsupported."); + } + devices[0].setFullScreenWindow(this); } ButtonHandler bth = new ButtonHandler(led); diff --git a/view/GameView.java b/view/GameView.java index 4c7255e..825a738 100644 --- a/view/GameView.java +++ b/view/GameView.java @@ -3,6 +3,7 @@ package view; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; +import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -27,7 +28,7 @@ public class GameView extends JPanel implements ActionListener{ { this.led=led; this.gsm = gsm; - t = new Timer(1000/30, this); + t = new Timer(1000/60, this); t.start(); setPreferredSize(new Dimension(1280,1024)); } @@ -40,8 +41,12 @@ public class GameView extends JPanel implements ActionListener{ public void paintComponent(Graphics g) { super.paintComponent(g); - Graphics2D g2d = (Graphics2D) g; + Graphics2D g2d = (Graphics2D) g; + RenderingHints rh = new RenderingHints( + RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + g2d.setRenderingHints(rh); gsm.currentState.draw(g2d); } } From ad447eedf8b19e9023744d6b666e66dfc151e77d Mon Sep 17 00:00:00 2001 From: Remco Date: Wed, 27 May 2015 20:10:28 +0200 Subject: [PATCH 4/4] Waarschijnlijk de exception opgelost, ik krijg de expection zelf niet --- main/Main.java | 2 +- model/drawObjects/Enemy.java | 21 +++++++++++++++++++-- model/drawObjects/Player.java | 3 ++- model/gameState/PlayState.java | 10 +++++++--- 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/main/Main.java b/main/Main.java index 6c45714..ff51e42 100644 --- a/main/Main.java +++ b/main/Main.java @@ -10,7 +10,7 @@ public class Main { else { new Window(true); - } + } } } diff --git a/model/drawObjects/Enemy.java b/model/drawObjects/Enemy.java index 2de287d..d74be12 100644 --- a/model/drawObjects/Enemy.java +++ b/model/drawObjects/Enemy.java @@ -72,8 +72,25 @@ public class Enemy extends Person{ this.circle = circle; } - public boolean hit(Bullet bullet){ - if(color.equals(bullet.getColor()) && circle.getBounds2D().intersectsLine(bullet.bullet)){ + /** + * Deze methode kijkt of de enemy is geraakt door een bullet + * @param bullet, een kogel om te kijken of hij deze enemy heeft geraakt + * @return, true = raakt, false = mis + */ + public boolean bulletHitMe(Bullet bullet){ + if(circle.getBounds2D().intersectsLine(bullet.bullet)){ + return true; + } + return false; + } + + /** + * Hier kijk je of de bullet de juiste kleur heeft, om de enemy te vermoorden + * @param bullet, de kogel om te kije of hij de zelfde kleur heeft als deze enemy + * @return,true = zelfde kleur, false = andere kleur + */ + public boolean ColorHitMe(Bullet bullet){ + if(this.color.equals(bullet.getColor())){ return true; } return false; diff --git a/model/drawObjects/Player.java b/model/drawObjects/Player.java index b3c1231..89cfbbf 100644 --- a/model/drawObjects/Player.java +++ b/model/drawObjects/Player.java @@ -8,6 +8,7 @@ import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.util.ArrayList; +import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -26,7 +27,7 @@ public class Player extends Person { img = Images.getImage(Images.ImageType.player2); width = img.getWidth(); height = img.getHeight(); - bullets = new ArrayList(); + bullets = Collections.synchronizedList(new ArrayList()); } public void draw(Graphics2D g2){// diff --git a/model/gameState/PlayState.java b/model/gameState/PlayState.java index 654e82d..647a041 100644 --- a/model/gameState/PlayState.java +++ b/model/gameState/PlayState.java @@ -5,6 +5,7 @@ import java.awt.Graphics2D; import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; import java.util.ArrayList; +import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -31,7 +32,7 @@ public class PlayState extends GameState{ super(gsm); area = new PlayArea((int) borderRect.getX(),1024,1024,100); infoPanel = new InfoPanel(0, 0); - enemys = new ArrayList(); + enemys = Collections.synchronizedList(new ArrayList()); player = new Player(1280-1024+1024/2, 1024/2,area); for(int i = 0; i < 8; i++){ Line2D line = area.getLine(i); @@ -53,9 +54,12 @@ public class PlayState extends GameState{ Enemy e = enemyIterator.next(); Iterator bulletIterator = player.bullets.iterator(); while(bulletIterator.hasNext()){ - if(e.hit(bulletIterator.next())){ - enemyIterator.remove(); + Bullet b = bulletIterator.next(); + if(e.bulletHitMe(b)){ //kijkt of de enemy een bullet tegen komt, zoja verwijder de bullet. bulletIterator.remove(); + if(e.ColorHitMe(b)){ //kijkt of de bullet die de enemy heeft gehit, ook dezelfde kleur heeft als de enemy, zoja verwijder de enemy + enemyIterator.remove(); + } } } if(area.octagon.intersects(e.getCircle().getBounds2D())){