Skip to content
Snippets Groups Projects
Commit 17ee9279 authored by Jie Luo's avatar Jie Luo
Browse files

pause/resume function added, game panel border added

parent f24706da
No related branches found
No related tags found
No related merge requests found
......@@ -9,7 +9,9 @@ import java.io.FileReader;
import java.util.HashSet;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
import model.*;
......@@ -82,6 +84,14 @@ public class GameController{
private long endTime;
private double timeElapsed;
private JButton pause;
private JButton resume;
private JButton save;
private JButton exit;
public GameController(GameView v, GameModel m){
this.v = v;
this.m = m;
......@@ -164,6 +174,47 @@ public class GameController{
gameDisplay.addKeyListener(new GameListener());
gameDisplay.setFocusable(true);
gameDisplay.setFocusTraversalKeysEnabled(false);
pause = this.v.getPause();
resume = this.v.getResume();
save = this.v.getSave();
exit = this.v.getExit();
pause.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
t.stop();
}
});
resume.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
t.start();
}
});
save.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO ADD SAVE METHOD
/* try{
PrintWriter writer = new PrintWriter("SavedGame.txt");
writer.println("The first line"); //first line = lives left
writer.println("The second line"); //second line = time played
writer.close();
} catch (Exception e1) {
}*/
}
});
exit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
w.setVisible(true); //show WelcomePage
t.stop();
gameFrame.dispose(); //close current JFrame(current game)
}
});
/**
* Initialize the start time and end time for a player
......@@ -203,6 +254,7 @@ public class GameController{
* - Do actions depending on the action performed
*/
if(source==w.getStart()){ // If clicked the start button
resetGame();
mode.setVisible(true); // Open the game mode page
w.setVisible(false);
}else if(source==w.load()){ // If clicked the load button
......@@ -272,6 +324,7 @@ public class GameController{
if(source == mode.getSingle()){ // If clicked the basic single mode button
mode.setVisible(false); // Start the game with single mode
gameFrame.setVisible(true);
t.start();
startTime = System.currentTimeMillis();
}
......@@ -329,6 +382,8 @@ public class GameController{
GameListener(){
t = new Timer(5,this);
t.setInitialDelay(1000);
resetGame();
}
/**
......@@ -344,7 +399,7 @@ public class GameController{
* - x direction
* - y direction
*/
if(ballX< 0 || ballX > frameWidth-1.5*ballSize){
if(ballX< 0 || ballX > frameWidth-8.5*ballSize){
/**
* - X-direction
* - If the ball is trying to go beyond the left/right border of the frame,
......@@ -388,13 +443,13 @@ public class GameController{
gameDisplay.setBottomScore(scoreBottom);
ai.decrementLife();
} else if(ballY+2.5*ballSize>frameHeight-inset-padHeight && velY > 0 && ballX + ballSize >= bottomPadX && ballX <= bottomPadX + padWidth){
} else if(ballY+2.5*ballSize>frameHeight-inset-padHeight && velY > 0 && ballX + 3*ballSize >= bottomPadX && ballX <= bottomPadX + padWidth){
/**
* If the ball is touching the bottom paddle
* - reverse the direction
*/
velY = -velY;
} else if(ballY<=inset+padHeight && velY < 0 && ballX + ballSize >= topPadX && ballX <= topPadX + padWidth){
} else if(ballY<=inset+padHeight && velY < 0 && ballX + 2.5*ballSize >= topPadX && ballX <= topPadX + padWidth){
/**
* If the ball is touching the top paddle
* - reverse the direction
......@@ -554,6 +609,8 @@ public class GameController{
}
/**
* @brief sets the display
* @details opens a window
......@@ -594,12 +651,20 @@ public class GameController{
endTime = System.currentTimeMillis();
timeElapsed = (endTime-startTime)/1000.0;
System.out.println(timeElapsed);
}
private void resetGame(){
player.resetScore();
ai.resetScore();
scoreTop = player.getScore();
scoreBottom = player.getScore();
gameDisplay.setBottomScore(scoreBottom);
gameDisplay.setTopScore(scoreTop);
}
......
package view;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.PrintWriter;
import javax.swing.*;
/**
......@@ -11,7 +18,7 @@ import javax.swing.*;
* @details This class import all different windows for display.
*/
public class GameView{
/**
* Variable declarations to store different pages
* - welcome page
......@@ -24,13 +31,23 @@ public class GameView{
private PongGameDisplay ponggame;
private Tutorial tutorial;
private JFrame gameFrame;
/**
* Constant declarations for the view
*/
private final int FRAMEWIDTH = 700;
private final int FRAMEHEIGHT = 500;
private final int FRAMEWIDTH = 700; //700
private final int FRAMEHEIGHT = 500; //500
/**
* Set up buttons on the game panel
*/
private JButton pause;
private JButton resume;
private JButton save;
private JButton exit;
private JPanel gameOptions;
/**
* @brief Constructor for the view
* @details declares all other windows
......@@ -43,10 +60,10 @@ public class GameView{
welcome = new Welcome();
mode = new Mode();
ponggame = new PongGameDisplay();
createGame();
}
/**
* @brief displays the welcome page.
* @details sets the visibility of the window to be true.
......@@ -54,7 +71,7 @@ public class GameView{
public void display(){
welcome.setVisible(true);
}
/**
* @brief gets welcome page window
* @return welcome page object
......@@ -62,7 +79,7 @@ public class GameView{
public Welcome getWelcome(){
return welcome;
}
/**
* @brief gets game mode page window
* @return game mode page object
......@@ -70,7 +87,7 @@ public class GameView{
public Mode getmode(){
return mode;
}
/**
* @brief gets game window
* @return game window object
......@@ -78,7 +95,7 @@ public class GameView{
public PongGameDisplay getGame(){
return ponggame;
}
/**
* @brief gets tutorial page window
* @return tutorial page object
......@@ -87,24 +104,80 @@ public class GameView{
return tutorial;
}
//TODO: ADD PANEL FOR OPTIONS IN THE GAME
/**
* @brief create the game for display
* @details create a frame under set dimension for the game
*/
public void createGame(){
gameFrame = new JFrame("FaultInOurPong");
gameFrame.setContentPane(ponggame);
gameFrame.setLayout(new BorderLayout());
gameOptions = new JPanel();
gameOptions.setLayout(new BoxLayout(gameOptions, BoxLayout.Y_AXIS));
pause = new JButton("Pause Game");
resume = new JButton("Resume Game");
save = new JButton("Save Game");
exit = new JButton("Exit to Main Page");
gameOptions.add(Box.createVerticalGlue());
addButton(gameOptions, pause, exit);
addButton(gameOptions, resume, exit);
addButton(gameOptions, save, exit);
addButton(gameOptions, exit, exit);
gameOptions.add(Box.createVerticalGlue());
gameOptions.setFocusable(false);
gameFrame.add(gameOptions, BorderLayout.LINE_START);
ponggame.setBorder(BorderFactory.createLineBorder(Color.black));
ponggame.setFocusable(true);
gameFrame.add(ponggame, BorderLayout.CENTER);
gameFrame.setSize(FRAMEWIDTH,FRAMEHEIGHT);
gameFrame.setResizable(false);
gameFrame.setResizable(true);
gameFrame.setLocationRelativeTo(null);
gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public JButton getPause(){
return pause;
}
public JButton getResume(){
return resume;
}
public JButton getSave(){
return save;
}
public JButton getExit(){
return exit;
}
/*
public void addListener(ActionListener listener){
pause.addActionListener(listener);
resume.addActionListener(listener);
save.addActionListener(listener);
exit.addActionListener(listener);
}
*/
public JPanel getGameOptionPanel(){
return gameOptions;
}
public void addButton(JPanel panel, JButton button, JButton prefer) {
button.setAlignmentX(Component.CENTER_ALIGNMENT);
button.setAlignmentY(Component.CENTER_ALIGNMENT);
button.setMaximumSize(prefer.getPreferredSize());
System.out.println(prefer.getPreferredSize());
panel.add(button);
panel.add(Box.createVerticalStrut(20));
}
/**
* @brief gets game object
* @return game object
......@@ -112,7 +185,7 @@ public class GameView{
public JFrame getGameFrame(){
return gameFrame;
}
// TODO: display a dialogue after successfully saving game records (high score)
/**
* @brief display message for error loading game record
......@@ -122,7 +195,7 @@ public class GameView{
JFrame errorFrame = new JFrame("Error");
JOptionPane.showMessageDialog(errorFrame, "No record available!");
}
/**
* @brief display message for error loading game
* @details create a frame for display
......@@ -131,13 +204,13 @@ public class GameView{
JFrame errorFrame = new JFrame("Error");
JOptionPane.showMessageDialog(errorFrame, "The record is either damaged or not available, please start a new game!");
}
/**
* @brief display message for game over
* @param whichplayer is the indicator for the player
*/
public void gameOver(int whichplayer){
/**
* - If the computer wins, display winning message for the computer
* - If the player wins, display winning message for the player
......@@ -152,9 +225,9 @@ public class GameView{
}
gameFrame.setVisible(false);
welcome.setVisible(true);
}
/**
* @brief create tutorial page
* @param img is the image for display
......@@ -162,7 +235,7 @@ public class GameView{
public void tutorialPage(ImageIcon img){
tutorial = new Tutorial(img);
}
/**
* @brief gets width of the window
* @return FRAMEWIDTH
......@@ -170,7 +243,7 @@ public class GameView{
public int getFrameWidth(){
return FRAMEWIDTH;
}
/**
* @brief gets height of the window
* @return FRAMEHEIGHT
......
......@@ -3,14 +3,9 @@ package view;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.ActionListener;
import java.awt.event.KeyListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
/**
* @file PongGameDisplay.java
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment