diff --git a/Frogger/src/Cronometro.java b/Frogger/src/Cronometro.java new file mode 100644 index 0000000..4045146 --- /dev/null +++ b/Frogger/src/Cronometro.java @@ -0,0 +1,77 @@ +package frogger; + +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +import java.awt.BorderLayout; +import java.awt.Font; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.Timer; + +/** + * + * @author Fabio + */ +public class Cronometro { + private JFrame form; + private JLabel label; + private JPanel panelButtons; + + private Timer timer; + private long startTime; + public Cronometro() { + form = new JFrame("Time"); + form.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + form.setSize(220, 140); + form.setResizable(false); + + label = new JLabel("0:00:00.0"); + label.setFont (new Font("SansSerif", Font.BOLD, 30)); + label.setHorizontalAlignment(JLabel.CENTER); + panelButtons = new JPanel(new GridLayout(1, 2)); +// panelButtons.add(buttonStart); +// panelButtons.add(buttonStop); + form.add(label, BorderLayout.CENTER); + form.add(panelButtons, BorderLayout.SOUTH); + timer = new Timer(100, new ActionListener() { + public void actionPerformed(ActionEvent e) { + long diffTime = System.currentTimeMillis() - startTime; + int decSeconds = (int)(diffTime % 1000 / 100); + int seconds = (int)(diffTime / 1000 % 60); + int minutes = (int)(diffTime / 60000 % 60); + int hours = (int)(diffTime / 3600000); + String s = String.format("%d:%02d:%02d.%d", hours, minutes, seconds, decSeconds); + label.setText(s); + } + }); + + + form.setVisible (true); +} + + public void inizio() + + { + + startTime = System.currentTimeMillis(); + timer.start(); + + } + + public void stop() + { + timer.stop(); + + } + + +} diff --git a/Frogger/src/Frog.java b/Frogger/src/Frog.java index af0bcfb..c9a2522 100644 --- a/Frogger/src/Frog.java +++ b/Frogger/src/Frog.java @@ -60,4 +60,10 @@ public void draw(Graphics g) g.setColor(COLOR); g.fillOval(x-RADIUS, y-RADIUS, RADIUS*2, RADIUS*2); } + public void drawLevel(Graphics g,int levelNumber) + { + String level="LEVEL "+levelNumber; + g.setColor(COLOR); + g.drawString(level,300,400); + } } \ No newline at end of file diff --git a/Frogger/src/Frogger.java b/Frogger/src/Frogger.java new file mode 100644 index 0000000..3afde94 --- /dev/null +++ b/Frogger/src/Frogger.java @@ -0,0 +1,21 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package frogger; + +/** + * + * @author Fabio + */ +public class Frogger { + + /** + * @param args the command line arguments + */ + public static void main(String[] args) { + // TODO code application logic here + } + +} diff --git a/Frogger/src/FroggerComponent.java b/Frogger/src/FroggerComponent.java index ae46af3..c27f6e4 100644 --- a/Frogger/src/FroggerComponent.java +++ b/Frogger/src/FroggerComponent.java @@ -1,145 +1,346 @@ -import java.awt.*; -import javax.swing.*; -import java.awt.event.*; -import java.util.*; - -public class FroggerComponent extends JComponent implements KeyListener, Runnable -{ - private FroggerLevelEngine engine; - private boolean upPressed, downPressed, leftPressed, rightPressed; - private Vector levels = new Vector(); - private int level = 0; - - public FroggerComponent() - { - super(); - levelInit(); - engine = new FroggerLevelEngine(levels.get(level)); - setPreferredSize(new Dimension(engine.WIDTH, engine.HEIGHT)); - - addKeyListener(this); - Thread run = new Thread(this); - run.start(); - } - - public void levelInit() - { - levels.add(new FroggerLevel( - new int[]{1,1,1}, - new String[]{"LLL LLL ", "RRRR RRRR RRRR ", - "RR BB LL MM "})); - - levels.add(new FroggerLevel( - new int[]{2,1,2,1,2}, - new String[]{"RR L ", "BB LL RR ", " RR MM ", - "MMM MMM ", "RR L "})); - - levels.add(new FroggerLevel( - new int[]{1,1,1,1,1,1,1}, - new String[]{"RR RR RR ", "B B B B B ", - "MMM MMM MMM ", "RR RR RR ", - "B B B B B B ", "MMM MMM MMM L ", - " BBB BBB L BBB"})); - - levels.add(new FroggerLevel( - new int[]{1,1,2,2,3,2,1}, - new String[]{"RR LL B ", "LLL BB R ", - "RRR LL ", "MMM MM ", "L L ", - "RR L M ", "RRR BL "})); - - levels.add(new FroggerLevel( - new int[]{1,2,3,4,5}, - new String[]{"BB L RRR M", "RR B MMM L ", - "MM LL BB ", "M L BB ", - "LL "})); - - levels.add(new FroggerLevel( - new int[]{1,3,4,3,1,2,3,4,5}, - new String[]{"MMM LL RR ", "BBB LL RR ", - "BB LL ", "BBB MM MM ", "MMM LL B R L B ", - "MM RR LL BB LL ", "BBB LL MMMM ", "L L LLL "})); - } - - public void run() - { - while(true) - { - try - { - Thread.sleep(20); - } - catch(Exception ex) - { - } - requestFocus(); - update(); - repaint(); - } - } - - public void paint(Graphics g) - { - synchronized(g) - { - engine.draw(g); - } - } - - public void update() - { - if(upPressed) - engine.moveUp(); - if(downPressed) - engine.moveDown(); - if(leftPressed) - engine.moveLeft(); - if(rightPressed) - engine.moveRight(); - - engine.update(); - - if(engine.getState() == FroggerState.WON) - { - level++; - if(level >= levels.size()) - { - JOptionPane.showMessageDialog(this, "You have beaten this game."); - System.exit(0); - } - engine = new FroggerLevelEngine(levels.get(level)); - } - } - - public void keyPressed(KeyEvent ke) - { - if(ke.getKeyCode() == KeyEvent.VK_DOWN) - downPressed = true; - else if(ke.getKeyCode() == KeyEvent.VK_UP) - upPressed = true; - else if(ke.getKeyCode() == KeyEvent.VK_LEFT) - leftPressed = true; - else if(ke.getKeyCode() == KeyEvent.VK_RIGHT) - rightPressed = true; - else if(ke.getKeyCode() == KeyEvent.VK_SPACE) - { - if(engine.getState() == FroggerState.HIT) - engine = new FroggerLevelEngine(levels.get(level)); - } - } - - public void keyReleased(KeyEvent ke) - { - if(ke.getKeyCode() == KeyEvent.VK_DOWN) - downPressed = false; - else if(ke.getKeyCode() == KeyEvent.VK_UP) - upPressed = false; - else if(ke.getKeyCode() == KeyEvent.VK_LEFT) - leftPressed = false; - else if(ke.getKeyCode() == KeyEvent.VK_RIGHT) - rightPressed = false; - } - - public void keyTyped(KeyEvent ke) - { - } -} \ No newline at end of file +import java.awt.*; +import java.util.prefs.*; +import javax.swing.*; +import java.awt.event.*; +import java.util.*; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class FroggerComponent extends JComponent implements KeyListener, Runnable { + + private FroggerLevelEngine engine; + private boolean upPressed, downPressed, leftPressed, rightPressed; + public static Vector levels = new Vector(); + private int level = 0; + //private JLabel l; + private int life=5; + private int score = 0; + private int highscore = readPreference(); + private static final String HIGHSCORE = "highscore1"; + + //creo playfrogger + //PlayFrogger pf = new PlayFrogger(); + public FroggerComponent() { + super(); + levelInit(); + engine = new FroggerLevelEngine(levels.get(level)); + setPreferredSize(new Dimension(engine.WIDTH, engine.HEIGHT)); + this.life=5; + addKeyListener(this); + Thread run = new Thread(this); + run.start(); + } + + public void levelInit() { + + + levels.add(new FroggerLevel( + new int[]{1, 2, 1}, + new String[]{" YYYY L ", " BB RR ", " RR MM "})); + levels.add(new FroggerLevel( + new int[]{1, 5, 1}, + new String[]{"LLL GGG RRR", "RRR MMM", + "RR MM LL RR RRR"})); + + levels.add(new FroggerLevel( + new int[]{2, 1, 2, 1, 2}, + new String[]{"RR L ", "BB CCCCCC RR ", " RR MM ", + "MMM MMM ", "RR L "})); + levels.add(new FroggerLevel( + new int[]{1, 2, 1, 3, 1}, + new String[]{"LLL MM RRR ", "RRR GGGG LL MMM ", + "RR MM LL RR RRR ", " LLLL BBBB MMM ", " MMMMM LLLL MMMM "})); + + levels.add(new FroggerLevel( + new int[]{1, 1, 1, 1, 1, 1, 1}, + new String[]{"RR RR RR ", "B B B B B ", + "MMM MMM MMM ", "RR RR RR ", + "Y Y B B B B ", "MMM MMM MMM L ", + " BBB BBB L BBB"})); + + levels.add(new FroggerLevel( + new int[]{1, 1, 2, 2, 3, 2, 1}, + new String[]{"RR LL B ", "LLL BB R ", + "RRR LL ", "MMM MM ", "L L ", + "RR L M ", "RRR BL "})); + + levels.add(new FroggerLevel( + new int[]{1, 2, 3, 4, 5}, + new String[]{"BB L RRR M", "RR B MMM L ", + "MM LL BB ", "M L BB ", + "LL "})); + levels.add(new FroggerLevel( + new int[]{2, 3, 1, 2, 3, 2}, + new String[]{"LLL LLL ", " RRRR RRRR ", + "RR BB LL MM ", "LLL BB RR ", "MMMMM RBRBR LLLL ", " BBB MMMM LLLLL"})); + + + levels.add(new FroggerLevel( + new int[]{1, 3, 4, 3, 1, 2}, + new String[]{"MMM LL RR ", "BBB LL RR ", + "BB LL ", "BBB MM MM ", "MMM LL B R L B " + })); + + } + + public void run() { + while (true) { + try { + Thread.sleep(20); + } catch (Exception ex) { + } + requestFocus(); + + try { + update(); + } catch (InterruptedException ex) { + Logger.getLogger(FroggerComponent.class.getName()).log(Level.SEVERE, null, ex); + } + + repaint(); + } + } + + public void paint(Graphics g) { + synchronized (g) { + engine.draw(g); + } + } + + public void update() throws InterruptedException { + if (upPressed) { + engine.moveUp(); + } + if (downPressed) { + engine.moveDown(); + } + if (leftPressed) { + engine.moveLeft(); + } + if (rightPressed) { + engine.moveRight(); + } + + engine.update(); + + if(life==0) + { + PlayFrogger.lab2.setText("♥♥♥♥♥"); + PlayFrogger.c.stop(); + JOptionPane.showMessageDialog(this, "Game Over","No more lifes",JOptionPane.ERROR_MESSAGE); + score=0; + downPressed=false; + leftPressed=false; + rightPressed=false; + upPressed=false; + level=0; + life=5; + engine = new FroggerLevelEngine(levels.get(level)); + PlayFrogger.c.inizio(); + } + if (engine.getState() == FroggerState.WON) { + level++; + score += 300; + if (level >= levels.size()) { + JOptionPane.showMessageDialog(this, "You have beaten this game."); + System.exit(0); + } + engine = new FroggerLevelEngine(levels.get(level)); + if (life>=5){ + String hearts=""; + for(int i=0;i highscore) { + highscore = score; + + } + + PlayFrogger.lab4.setText("HIGHSCORE: " + Integer.toString(highscore)); + PlayFrogger.lab4.setLocation((369 - PlayFrogger.lab4.getWidth()), 46); + PlayFrogger.lab4.setForeground(Color.RED); + savePreference(highscore); + + } + + public void savePreference(int highscore) { + Preferences prefs = Preferences.userNodeForPackage(FroggerComponent.class); + + prefs.putInt(HIGHSCORE, highscore); + } + + public int readPreference() { + Preferences prefs = Preferences.userNodeForPackage(FroggerComponent.class); + + return prefs.getInt(HIGHSCORE, 0); + } +} diff --git a/Frogger/src/FroggerLevel.java b/Frogger/src/FroggerLevel.java index 0de16b7..c7ee7c5 100644 --- a/Frogger/src/FroggerLevel.java +++ b/Frogger/src/FroggerLevel.java @@ -1,6 +1,6 @@ public class FroggerLevel implements java.io.Serializable { - public static final FroggerLevel TEST = new FroggerLevel(new int[]{1,1,1}, new String[]{"RRR LLL BB MM ","RRR LLL BB MM ","RRR LLL BB MM "}); + //public static final FroggerLevel TEST = new FroggerLevel(new int[]{1,1,1}, new String[]{"RRR LLL BB MM ","RRR LLL BB MM ","RRR LLL BB MM "}); private int[] speeds; private String[] patterns; diff --git a/Frogger/src/FroggerLevelEngine.java b/Frogger/src/FroggerLevelEngine.java index 0a3e9d0..1694869 100644 --- a/Frogger/src/FroggerLevelEngine.java +++ b/Frogger/src/FroggerLevelEngine.java @@ -77,16 +77,19 @@ public void moveRight() public void draw(Graphics g) { + frog.drawLevel(g,1); frog.draw(g); for(int i = 0; i < traffic.length; i++) { traffic[i].draw(g); } + + - if(state == FroggerState.HIT) - { - g.setColor(Color.BLACK); - g.drawString("YOU GOT HIT", WIDTH/2-50, HEIGHT/2); - } +// if(state == FroggerState.HIT) +// { +// g.setColor(Color.BLACK); +// g.drawString("YOU GOT HIT", WIDTH/2-50, HEIGHT/2); +// } } } \ No newline at end of file diff --git a/Frogger/src/PlayFrogger.java b/Frogger/src/PlayFrogger.java index 3fbf5a5..09c3095 100644 --- a/Frogger/src/PlayFrogger.java +++ b/Frogger/src/PlayFrogger.java @@ -1,19 +1,46 @@ + +import frogger.Cronometro; import javax.swing.*; import java.awt.*; -public class PlayFrogger extends JFrame -{ - public PlayFrogger() - { - getContentPane().setLayout(new FlowLayout()); - add(new FroggerComponent()); - pack(); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - setVisible(true); - } +public class PlayFrogger extends JFrame { + + public static JLabel lab1; + public static JLabel lab2; + public static JLabel lab3; + public static JLabel lab4; + public static Cronometro c; + + public PlayFrogger() { + setSize(310,800); + lab1 = new JLabel("LEVEL"); + lab1.setFont(new Font("Courier New", Font.ITALIC, 18)); + lab2=new JLabel("♥♥♥♥♥"); + lab3 = new JLabel("SCORE"); + lab3.setFont(new Font("Courier New", Font.TYPE1_FONT, 12)); + lab4 = new JLabel("HIGHSCORE"); + lab4.setFont(new Font("Courier New", Font.TYPE1_FONT, 12)); + c=new Cronometro(); + + c.inizio(); + GridLayout g=new GridLayout(2,2); + getContentPane().setLayout(g); + add(lab1); + add(lab2); + add(lab3); + add(lab4); + add(new FroggerComponent()); + setResizable(false); + setLocationRelativeTo(null); + pack(); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setVisible(true); + + //lab1.setLocation(75,40); + } - public static void main(String[] args) - { - new PlayFrogger(); - } -} \ No newline at end of file + public static void main(String[] args) { + new PlayFrogger(); + } + +} diff --git a/Frogger/src/TrafficPattern.java b/Frogger/src/TrafficPattern.java index 3ba063d..f300cf1 100644 --- a/Frogger/src/TrafficPattern.java +++ b/Frogger/src/TrafficPattern.java @@ -1,135 +1,156 @@ -import java.awt.*; -import java.util.*; - -public class TrafficPattern -{ - - // The pattern should be of the form "RRR BB L MMM B GG " - // R == RED - // B == BLUE - // L == BLACK - // M == MAGENTA - - private int speed; - private String pattern; - private boolean left; - private int next = 0; - private Rectangle bounds; - private Vector cars; - private int y; - - public TrafficPattern(int speed, String pattern, boolean left, Rectangle bounds, int y) - { - this.speed = speed; - this.pattern = pattern; - this.left = left; - this.bounds = bounds; - this.y = y; - initCars(); - } - - public void initCars() - { - cars = new Vector(); - for(next = 0; next*Car.WIDTH <= bounds.getWidth(); next++) - { - switch(pattern.charAt(next)) - { - case 'R': - cars.add(new Car(left?next*Car.WIDTH:(int)bounds.getWidth()-next*Car.WIDTH, y, speed, Color.RED)); - break; - case 'B': - cars.add(new Car(left?next*Car.WIDTH:(int)bounds.getWidth()-next*Car.WIDTH, y, speed, Color.BLUE)); - break; - case 'L': - cars.add(new Car(left?next*Car.WIDTH:(int)bounds.getWidth()-next*Car.WIDTH, y, speed, Color.BLACK)); - break; - case 'M': - cars.add(new Car(left?next*Car.WIDTH:(int)bounds.getWidth()-next*Car.WIDTH, y, speed, Color.MAGENTA)); - break; - default: - cars.add(new Car(left?next*Car.WIDTH:(int)bounds.getWidth()-next*Car.WIDTH, y, speed, null)); - } - } - } - - public void addCar() - { - next++; - if(next >= pattern.length()) - next = 0; - switch(pattern.charAt(next)) - { - case 'R': - cars.add(new Car(left?(int)bounds.getWidth():0, y, speed, Color.RED)); - break; - case 'B': - cars.add(new Car(left?(int)bounds.getWidth():0, y, speed, Color.BLUE)); - break; - case 'L': - cars.add(new Car(left?(int)bounds.getWidth():0, y, speed, Color.BLACK)); - break; - case 'M': - cars.add(new Car(left?(int)bounds.getWidth():0, y, speed, Color.MAGENTA)); - break; - default: - cars.add(new Car(left?(int)bounds.getWidth():0, y, speed, null)); - } - } - - public void moveCars() - { - for(int i = 0; i < cars.size(); i++) - { - if(cars.get(i) != null) - { - if(left) - { - cars.add(i, cars.get(i).moveLeft()); - cars.remove(i+1); - } - else - { - cars.add(i, cars.get(i).moveRight()); - cars.remove(i+1); - } - } - } - } - - public void testForNewCar() - { - if(!cars.get(0).intersects(bounds)) - { - cars.remove(0); - addCar(); - } - } - - public boolean intersects(Frog f) - { - for(int i = 0; i < cars.size(); i++) - { - if((cars.get(i) != null) && !cars.get(i).empty() && cars.get(i).intersects(f.getBounds())) - return true; - } - return false; - } - - public void draw(Graphics g) - { - //g.setColor(Color.DARK_GRAY); - //g.fillRect(0,y,(int)bounds.getWidth(), Car.HEIGHT); - for(int i = 0; i < cars.size(); i++) - { - if(cars.get(i) != null) - cars.get(i).draw(g); - } - } - - public void update() - { - moveCars(); - testForNewCar(); - } +import java.awt.*; +import java.util.*; + +public class TrafficPattern +{ + + // The pattern should be of the form "RRR BB L MMM B GG " + // R == RED + // B == BLUE + // L == BLACK + // M == MAGENTA + // Y == YELLOW + // C == CYAN + // G == GREEN + + private int speed; + private String pattern; + private boolean left; + private int next = 0; + private Rectangle bounds; + private Vector cars; + private int y; + + public TrafficPattern(int speed, String pattern, boolean left, Rectangle bounds, int y) + { + this.speed = speed; + this.pattern = pattern; + this.left = left; + this.bounds = bounds; + this.y = y; + initCars(); + } + + public void initCars() + { + cars = new Vector(); + for(next = 0; next*Car.WIDTH <= bounds.getWidth(); next++) + { + switch(pattern.charAt(next)) + { + case 'R': + cars.add(new Car(left?next*Car.WIDTH:(int)bounds.getWidth()-next*Car.WIDTH, y, speed, Color.RED)); + break; + case 'B': + cars.add(new Car(left?next*Car.WIDTH:(int)bounds.getWidth()-next*Car.WIDTH, y, speed, Color.BLUE)); + break; + case 'L': + cars.add(new Car(left?next*Car.WIDTH:(int)bounds.getWidth()-next*Car.WIDTH, y, speed, Color.BLACK)); + break; + case 'M': + cars.add(new Car(left?next*Car.WIDTH:(int)bounds.getWidth()-next*Car.WIDTH, y, speed, Color.MAGENTA)); + break; + case 'Y': + cars.add(new Car(left?next*Car.WIDTH:(int)bounds.getWidth()-next*Car.WIDTH, y, speed, Color.YELLOW)); + break; + case 'C': + cars.add(new Car(left?next*Car.WIDTH:(int)bounds.getWidth()-next*Car.WIDTH, y, speed, Color.CYAN)); + break; + case 'G': + cars.add(new Car(left?next*Car.WIDTH:(int)bounds.getWidth()-next*Car.WIDTH, y, speed, Color.GREEN)); + break; + default: + cars.add(new Car(left?next*Car.WIDTH:(int)bounds.getWidth()-next*Car.WIDTH, y, speed, null)); + } + } + } + + public void addCar() + { + next++; + if(next >= pattern.length()) + next = 0; + switch(pattern.charAt(next)) + { + case 'R': + cars.add(new Car(left?(int)bounds.getWidth():0, y, speed, Color.RED)); + break; + case 'B': + cars.add(new Car(left?(int)bounds.getWidth():0, y, speed, Color.BLUE)); + break; + case 'L': + cars.add(new Car(left?(int)bounds.getWidth():0, y, speed, Color.BLACK)); + break; + case 'M': + cars.add(new Car(left?(int)bounds.getWidth():0, y, speed, Color.MAGENTA)); + break; + case 'Y': + cars.add(new Car(left?(int)bounds.getWidth():0, y, speed, Color.YELLOW)); + break; + case 'C': + cars.add(new Car(left?(int)bounds.getWidth():0, y, speed, Color.CYAN)); + break; + case 'G': + cars.add(new Car(left?(int)bounds.getWidth():0, y, speed, Color.GREEN)); + break; + default: + cars.add(new Car(left?(int)bounds.getWidth():0, y, speed, null)); + } + } + + public void moveCars() + { + for(int i = 0; i < cars.size(); i++) + { + if(cars.get(i) != null) + { + if(left) + { + cars.add(i, cars.get(i).moveLeft()); + cars.remove(i+1); + } + else + { + cars.add(i, cars.get(i).moveRight()); + cars.remove(i+1); + } + } + } + } + + public void testForNewCar() + { + if(!cars.get(0).intersects(bounds)) + { + cars.remove(0); + addCar(); + } + } + + public boolean intersects(Frog f) + { + for(int i = 0; i < cars.size(); i++) + { + if((cars.get(i) != null) && !cars.get(i).empty() && cars.get(i).intersects(f.getBounds())) + return true; + } + return false; + } + + public void draw(Graphics g) + { + //g.setColor(Color.DARK_GRAY); + //g.fillRect(0,y,(int)bounds.getWidth(), Car.HEIGHT); + for(int i = 0; i < cars.size(); i++) + { + if(cars.get(i) != null) + cars.get(i).draw(g); + } + } + + public void update() + { + moveCars(); + testForNewCar(); + } } \ No newline at end of file