From d03ce5806e5fff94f4068a9f41a9c62cc3748b45 Mon Sep 17 00:00:00 2001 From: sean-shelton Date: Sat, 19 Nov 2016 18:13:02 -0800 Subject: [PATCH 1/7] Updated some of README.md, need to add dev notes Need to further understand what each class does individually in order to write it in the developer notes. --- README.md | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6b72419..1ccc58e 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,46 @@ cs56-memory-card-game ===================== -A memory card game that the player tries to match all pairs of cards to go to next level before time runs out. +This is a memory card game in which the player tries to match pairs of cards +based on their pictures. -launch the game with command +The faster the player can match the cards, the higher their score will be. +Each time they make an incorrect match, they lose points. + +The first level begins with a small grid, and each level that follows gets +increasing more difficult (the grid goes larger and larger). + +At any point during the game, the player can click the reset button if they +would like to start over again. + +At the end of the game, if the user has reached a new high score, they get +to enter their name into the leaderboard. + + + +Instructions +============ + +Launch the game on terminal with ``` ant run ``` -Detailed instructions can be found by clicking on "instruction" in the main menu + +After launching the game, you can choose one of three options: + +### 1. Start the game +Allows the user to begin playing. + +### 2. Instructions +Gives the user detailed instructions on how to play the game. + +### 3. High Score +Lets the user view the current leaderboard, with the names and scores of the best players. + +Developer Notes +=============== + + project history =============== From 4acf1417c06b1ad157c0c9f7cfeb9b27c7d76549 Mon Sep 17 00:00:00 2001 From: sean-shelton Date: Sat, 19 Nov 2016 18:41:07 -0800 Subject: [PATCH 2/7] Dev notes in progress --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1ccc58e..1f06870 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,7 @@ Lets the user view the current leaderboard, with the names and scores of the bes Developer Notes =============== +IN PROGRESS project history From 772f86d6d8700f932af1f6e74aa03495d1d8a763 Mon Sep 17 00:00:00 2001 From: Sean Shelton Date: Sun, 20 Nov 2016 16:10:32 -0800 Subject: [PATCH 3/7] Pushing javadoc to gh-pages --- build.xml | 11 +- javadoc/allclasses-frame.html | 25 + javadoc/allclasses-noframe.html | 25 + javadoc/constant-values.html | 122 +++ javadoc/deprecated-list.html | 122 +++ .../games/memorycard/HighScoreBoard.html | 297 ++++++ .../projects/games/memorycard/MemoryCard.html | 355 ++++++++ .../games/memorycard/MemoryGameComponent.html | 845 ++++++++++++++++++ .../games/memorycard/MemoryGameGui.html | 321 +++++++ .../games/memorycard/MemoryGameLevel.html | 337 +++++++ .../games/memorycard/MemoryGameTest.html | 375 ++++++++ .../projects/games/memorycard/MemoryGrid.html | 482 ++++++++++ .../memorycard/class-use/HighScoreBoard.html | 147 +++ .../memorycard/class-use/MemoryCard.html | 150 ++++ .../class-use/MemoryGameComponent.html | 122 +++ .../memorycard/class-use/MemoryGameGui.html | 122 +++ .../memorycard/class-use/MemoryGameLevel.html | 122 +++ .../memorycard/class-use/MemoryGameTest.html | 122 +++ .../memorycard/class-use/MemoryGrid.html | 147 +++ .../games/memorycard/package-frame.html | 26 + .../games/memorycard/package-summary.html | 172 ++++ .../games/memorycard/package-tree.html | 149 +++ .../games/memorycard/package-use.html | 150 ++++ javadoc/help-doc.html | 223 +++++ javadoc/index-all.html | 471 ++++++++++ javadoc/index.html | 72 ++ javadoc/overview-tree.html | 153 ++++ javadoc/package-list | 1 + javadoc/script.js | 30 + javadoc/serialized-form.html | 274 ++++++ javadoc/stylesheet.css | 574 ++++++++++++ 31 files changed, 6541 insertions(+), 3 deletions(-) create mode 100755 javadoc/allclasses-frame.html create mode 100755 javadoc/allclasses-noframe.html create mode 100755 javadoc/constant-values.html create mode 100755 javadoc/deprecated-list.html create mode 100755 javadoc/edu/ucsb/cs56/projects/games/memorycard/HighScoreBoard.html create mode 100755 javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryCard.html create mode 100755 javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGameComponent.html create mode 100755 javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGameGui.html create mode 100755 javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGameLevel.html create mode 100755 javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGameTest.html create mode 100755 javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGrid.html create mode 100755 javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/HighScoreBoard.html create mode 100755 javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryCard.html create mode 100755 javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGameComponent.html create mode 100755 javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGameGui.html create mode 100755 javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGameLevel.html create mode 100755 javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGameTest.html create mode 100755 javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGrid.html create mode 100755 javadoc/edu/ucsb/cs56/projects/games/memorycard/package-frame.html create mode 100755 javadoc/edu/ucsb/cs56/projects/games/memorycard/package-summary.html create mode 100755 javadoc/edu/ucsb/cs56/projects/games/memorycard/package-tree.html create mode 100755 javadoc/edu/ucsb/cs56/projects/games/memorycard/package-use.html create mode 100755 javadoc/help-doc.html create mode 100755 javadoc/index-all.html create mode 100755 javadoc/index.html create mode 100755 javadoc/overview-tree.html create mode 100755 javadoc/package-list create mode 100755 javadoc/script.js create mode 100755 javadoc/serialized-form.html create mode 100755 javadoc/stylesheet.css diff --git a/build.xml b/build.xml index f0515e2..c32a254 100644 --- a/build.xml +++ b/build.xml @@ -9,14 +9,15 @@ - + - + + @@ -56,7 +57,11 @@ - + + + + + diff --git a/javadoc/allclasses-frame.html b/javadoc/allclasses-frame.html new file mode 100755 index 0000000..10976d2 --- /dev/null +++ b/javadoc/allclasses-frame.html @@ -0,0 +1,25 @@ + + + + + +All Classes + + + + + +

All Classes

+ + + diff --git a/javadoc/allclasses-noframe.html b/javadoc/allclasses-noframe.html new file mode 100755 index 0000000..15e8533 --- /dev/null +++ b/javadoc/allclasses-noframe.html @@ -0,0 +1,25 @@ + + + + + +All Classes + + + + + +

All Classes

+ + + diff --git a/javadoc/constant-values.html b/javadoc/constant-values.html new file mode 100755 index 0000000..8e2c286 --- /dev/null +++ b/javadoc/constant-values.html @@ -0,0 +1,122 @@ + + + + + +Constant Field Values + + + + + + + + + + + +
+

Constant Field Values

+

Contents

+
+ + + + + + diff --git a/javadoc/deprecated-list.html b/javadoc/deprecated-list.html new file mode 100755 index 0000000..da48776 --- /dev/null +++ b/javadoc/deprecated-list.html @@ -0,0 +1,122 @@ + + + + + +Deprecated List + + + + + + + + +
+ + + + + + + +
+ + +
+

Deprecated API

+

Contents

+
+ +
+ + + + + + + +
+ + + + diff --git a/javadoc/edu/ucsb/cs56/projects/games/memorycard/HighScoreBoard.html b/javadoc/edu/ucsb/cs56/projects/games/memorycard/HighScoreBoard.html new file mode 100755 index 0000000..58d79dd --- /dev/null +++ b/javadoc/edu/ucsb/cs56/projects/games/memorycard/HighScoreBoard.html @@ -0,0 +1,297 @@ + + + + + +HighScoreBoard + + + + + + + + + + + + +
+
edu.ucsb.cs56.projects.games.memorycard
+

Class HighScoreBoard

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • edu.ucsb.cs56.projects.games.memorycard.HighScoreBoard
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class HighScoreBoard
    +extends java.lang.Object
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      HighScoreBoard() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      voidadd(java.lang.String name, + int score) 
      javax.swing.JTextAreagetBoard() 
      intgetLowestScore() 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        HighScoreBoard

        +
        public HighScoreBoard()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getLowestScore

        +
        public int getLowestScore()
        +
      • +
      + + + +
        +
      • +

        add

        +
        public void add(java.lang.String name,
        +                int score)
        +
      • +
      + + + +
        +
      • +

        getBoard

        +
        public javax.swing.JTextArea getBoard()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryCard.html b/javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryCard.html new file mode 100755 index 0000000..33bc805 --- /dev/null +++ b/javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryCard.html @@ -0,0 +1,355 @@ + + + + + +MemoryCard + + + + + + + + + + + + +
+
edu.ucsb.cs56.projects.games.memorycard
+

Class MemoryCard

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • edu.ucsb.cs56.projects.games.memorycard.MemoryCard
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class MemoryCard
    +extends java.lang.Object
    +
    makes objects for cards
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + +
      Constructors 
      Constructor and Description
      MemoryCard() +
      default constructor for MemoryCard (sets flipped as false)
      +
      MemoryCard(int tVal) +
      constructor to set value (flipped still set as false)
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      booleanEquals(java.lang.Object o) +
      Equals method to check if values are equal
      +
      voidflip() +
      changes value of flipped (doesnt actually flip card)
      +
      intgetVal() +
      returns value
      +
      booleanisFlipped() +
      returns whether card is flipped
      +
      voidsetVal(int value) +
      Method to set value
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        MemoryCard

        +
        public MemoryCard()
        +
        default constructor for MemoryCard (sets flipped as false)
        +
      • +
      + + + +
        +
      • +

        MemoryCard

        +
        public MemoryCard(int tVal)
        +
        constructor to set value (flipped still set as false)
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        isFlipped

        +
        public boolean isFlipped()
        +
        returns whether card is flipped
        +
      • +
      + + + +
        +
      • +

        flip

        +
        public void flip()
        +
        changes value of flipped (doesnt actually flip card)
        +
      • +
      + + + +
        +
      • +

        getVal

        +
        public int getVal()
        +
        returns value
        +
      • +
      + + + +
        +
      • +

        setVal

        +
        public void setVal(int value)
        +
        Method to set value
        +
      • +
      + + + +
        +
      • +

        Equals

        +
        public boolean Equals(java.lang.Object o)
        +
        Equals method to check if values are equal
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGameComponent.html b/javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGameComponent.html new file mode 100755 index 0000000..a604dfe --- /dev/null +++ b/javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGameComponent.html @@ -0,0 +1,845 @@ + + + + + +MemoryGameComponent + + + + + + + + + + + + +
+
edu.ucsb.cs56.projects.games.memorycard
+

Class MemoryGameComponent

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • java.awt.Component
    • +
    • +
        +
      • java.awt.Container
      • +
      • +
          +
        • javax.swing.JComponent
        • +
        • +
            +
          • edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    java.awt.event.ActionListener, java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, java.util.EventListener
    +
    +
    +
    +
    public class MemoryGameComponent
    +extends javax.swing.JComponent
    +implements java.awt.event.ActionListener
    +
    A Swing component for playing the Memory Card Game
    +
    +
    Version:
    +
    CS56 Fall 2016
    +
    Author:
    +
    Bryce McGaw and Jonathan Yau (with some of Phill Conrad's code as a basis), Ryan Halbrook and Yun Suk Chang, Mathew Glodack, Christina Morris, Xiaohe He, Shaoyi Zhang, Hyemin Yoo
    +
    See Also:
    +
    MemoryGrid, +Serialized Form
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Nested Class Summary

      +
        +
      • + + +

        Nested classes/interfaces inherited from class javax.swing.JComponent

        +javax.swing.JComponent.AccessibleJComponent
      • +
      +
        +
      • + + +

        Nested classes/interfaces inherited from class java.awt.Container

        +java.awt.Container.AccessibleAWTContainer
      • +
      +
        +
      • + + +

        Nested classes/interfaces inherited from class java.awt.Component

        +java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
      • +
      +
    • +
    + +
      +
    • + + +

      Field Summary

      + + + + + + + + + + +
      Fields 
      Modifier and TypeField and Description
      javax.swing.JComponentrestartB 
      +
        +
      • + + +

        Fields inherited from class javax.swing.JComponent

        +listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
      • +
      +
        +
      • + + +

        Fields inherited from class java.awt.Component

        +accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
      • +
      +
        +
      • + + +

        Fields inherited from interface java.awt.image.ImageObserver

        +ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
      • +
      +
    • +
    + + + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      voidactionPerformed(java.awt.event.ActionEvent e) +
      Callback from the timer.
      +
      voidbuildTiles() +
      buildTiles() constructs the tiles
      +
      voidendGame() +
      Ends the game and starts a new game if the user selects new game + from a dialog menu.
      +
      voidflipBack() +
      If two cards are showing, flips them back over
      +
      voidloadImageIcons() +
      Loads the imageIcons
      +
      voidnewGame(int lvl) +
      Starts a new level or restarts the current level
      +
      voidpause() +
      pause() pauses the time
      +
      voidpauseB() +
      Resume the game timer.
      +
      voidpauseGame() +
      Pause the timer and the game by showing a dialog box, + preventing the user from playing the game until they resume.
      +
      voidpauseTimer() +
      Pause just the game timer.
      +
      voidplayFlipSound() +
      Play sound effect after flipping
      +
      voidplayMatchSound() +
      Play sound effect if two cards matched
      +
      voidplayMusic() +
      Play background music
      +
      voidplaySound(java.lang.String filepath) +
      Play sound from a WAV filepath + This is a helper method
      +
      voidplayWinSound() +
      Play sound effect after winning the game
      +
      voidreset() +
      Resets the game
      +
      voidresume() +
      resume() resumes the game
      +
      voidsetHighScoreBoard(HighScoreBoard h) 
      voidsetLabel(javax.swing.JLabel label) +
      setLabel()
      +
      voidsetLevelLabel(javax.swing.JLabel l) 
      voidsetMainFrame(javax.swing.JFrame f) 
      voidsetMusicButton(javax.swing.JButton b) +
      setMusicButton
      +
      voidsetPauseButton(javax.swing.JButton b) +
      setPauseButton
      +
      voidsetScoreLabel(javax.swing.JLabel l) 
      voidshowHighScoreBoard() 
      voidstopMusic() +
      Stop background music
      +
      voidstoreHighScore() 
      +
        +
      • + + +

        Methods inherited from class javax.swing.JComponent

        +addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, paramString, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update, updateUI
      • +
      +
        +
      • + + +

        Methods inherited from class java.awt.Container

        +add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree
      • +
      +
        +
      • + + +

        Methods inherited from class java.awt.Component

        +action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getAccessibleContext, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
      • +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        restartB

        +
        public javax.swing.JComponent restartB
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        MemoryGameComponent

        +
        public MemoryGameComponent(MemoryGrid game)
        +
        Constructor
        +
        +
        Parameters:
        +
        game - an object that implements the MemoryGrid interface + to keep track of the moves in each game, ensuring the rules are + followed and detecting when the user has won.
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        pauseGame

        +
        public void pauseGame()
        +
        Pause the timer and the game by showing a dialog box, + preventing the user from playing the game until they resume.
        +
      • +
      + + + +
        +
      • +

        pauseTimer

        +
        public void pauseTimer()
        +
        Pause just the game timer.
        +
      • +
      + + + +
        +
      • +

        playSound

        +
        public void playSound(java.lang.String filepath)
        +
        Play sound from a WAV filepath + This is a helper method
        +
      • +
      + + + +
        +
      • +

        playFlipSound

        +
        public void playFlipSound()
        +
        Play sound effect after flipping
        +
      • +
      + + + +
        +
      • +

        playMatchSound

        +
        public void playMatchSound()
        +
        Play sound effect if two cards matched
        +
      • +
      + + + +
        +
      • +

        playWinSound

        +
        public void playWinSound()
        +
        Play sound effect after winning the game
        +
      • +
      + + + +
        +
      • +

        playMusic

        +
        public void playMusic()
        +
        Play background music
        +
      • +
      + + + +
        +
      • +

        stopMusic

        +
        public void stopMusic()
        +
        Stop background music
        +
      • +
      + + + +
        +
      • +

        pauseB

        +
        public void pauseB()
        +
        Resume the game timer. In other words, recalculate total pause + time and start the timer.
        +
      • +
      + + + +
        +
      • +

        pause

        +
        public void pause()
        +
        pause() pauses the time
        +
      • +
      + + + +
        +
      • +

        resume

        +
        public void resume()
        +
        resume() resumes the game
        +
      • +
      + + + +
        +
      • +

        actionPerformed

        +
        public void actionPerformed(java.awt.event.ActionEvent e)
        +
        Callback from the timer. This is used to update the time remaining + label and to check if the game has ended as a result of the level + time running out.
        +
        +
        Specified by:
        +
        actionPerformed in interface java.awt.event.ActionListener
        +
        +
      • +
      + + + +
        +
      • +

        setLabel

        +
        public void setLabel(javax.swing.JLabel label)
        +
        setLabel()
        +
        +
        Parameters:
        +
        label - sets the timeLabel
        +
        +
      • +
      + + + +
        +
      • +

        setMainFrame

        +
        public void setMainFrame(javax.swing.JFrame f)
        +
      • +
      + + + +
        +
      • +

        setScoreLabel

        +
        public void setScoreLabel(javax.swing.JLabel l)
        +
      • +
      + + + +
        +
      • +

        setLevelLabel

        +
        public void setLevelLabel(javax.swing.JLabel l)
        +
      • +
      + + + +
        +
      • +

        setHighScoreBoard

        +
        public void setHighScoreBoard(HighScoreBoard h)
        +
      • +
      + + + +
        +
      • +

        setPauseButton

        +
        public void setPauseButton(javax.swing.JButton b)
        +
        setPauseButton
        +
        +
        Parameters:
        +
        b - sets the pauseButton
        +
        +
      • +
      + + + +
        +
      • +

        setMusicButton

        +
        public void setMusicButton(javax.swing.JButton b)
        +
        setMusicButton
        +
        +
        Parameters:
        +
        b - sets the musicButton
        +
        +
      • +
      + + + +
        +
      • +

        buildTiles

        +
        public void buildTiles()
        +
        buildTiles() constructs the tiles
        +
      • +
      + + + +
        +
      • +

        newGame

        +
        public void newGame(int lvl)
        +
        Starts a new level or restarts the current level
        +
        +
        Parameters:
        +
        lvl - changes the level of the game
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Resets the game
        +
      • +
      + + + +
        +
      • +

        endGame

        +
        public void endGame()
        +
        Ends the game and starts a new game if the user selects new game + from a dialog menu.
        +
      • +
      + + + +
        +
      • +

        flipBack

        +
        public void flipBack()
        +
        If two cards are showing, flips them back over
        +
      • +
      + + + +
        +
      • +

        loadImageIcons

        +
        public void loadImageIcons()
        +
        Loads the imageIcons
        +
      • +
      + + + +
        +
      • +

        storeHighScore

        +
        public void storeHighScore()
        +
      • +
      + + + +
        +
      • +

        showHighScoreBoard

        +
        public void showHighScoreBoard()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGameGui.html b/javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGameGui.html new file mode 100755 index 0000000..38bc42b --- /dev/null +++ b/javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGameGui.html @@ -0,0 +1,321 @@ + + + + + +MemoryGameGui + + + + + + + + + + + + +
+
edu.ucsb.cs56.projects.games.memorycard
+

Class MemoryGameGui

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • edu.ucsb.cs56.projects.games.memorycard.MemoryGameGui
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class MemoryGameGui
    +extends java.lang.Object
    +
    +
    Version:
    +
    CS56 Fall 2016 + Edited Professor Phill Conrad's code from Lab06
    +
    Author:
    +
    Bryce McGaw and Jonathan Yau, Ryan Halbrook and Yun Suk Chang, Mathew Glodack, Christina Morris, Xiaohe He, Shaoyi Zhang, Hyemin Yoo
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      MemoryGameGui() 
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethod and Description
      static voidaddInstruction() +
      Adds instruction to the screen
      +
      static voidgo() 
      static voidmain(java.lang.String[] args) +
      main method to open JFrame
      +
      static voidmenu() 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        MemoryGameGui

        +
        public MemoryGameGui()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        menu

        +
        public static void menu()
        +
      • +
      + + + +
        +
      • +

        main

        +
        public static void main(java.lang.String[] args)
        +
        main method to open JFrame
        +
      • +
      + + + +
        +
      • +

        go

        +
        public static void go()
        +
      • +
      + + + +
        +
      • +

        addInstruction

        +
        public static void addInstruction()
        +
        Adds instruction to the screen
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGameLevel.html b/javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGameLevel.html new file mode 100755 index 0000000..0c7e614 --- /dev/null +++ b/javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGameLevel.html @@ -0,0 +1,337 @@ + + + + + +MemoryGameLevel + + + + + + + + + + + + +
+
edu.ucsb.cs56.projects.games.memorycard
+

Class MemoryGameLevel

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • edu.ucsb.cs56.projects.games.memorycard.MemoryGameLevel
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class MemoryGameLevel
    +extends java.lang.Object
    +
    +
    Version:
    +
    CS56 Spring 2013 + Class representing a level of the memory game including time to complete + the level, time to flip two cards back over and the size of the grid
    +
    Author:
    +
    Ryan Halbrook
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      MemoryGameLevel(int gridSize, + int secondsToSolve, + int flipTime) +
      Constructor to fully initialize the level
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      intgetFlipTime() +
      Get the delay time befoe two cards flip back over
      +
      intgetGridSize() +
      Get the grid size for this level
      +
      intgetSecondsToSolve() +
      Get the target time for completing the level
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        MemoryGameLevel

        +
        public MemoryGameLevel(int gridSize,
        +                       int secondsToSolve,
        +                       int flipTime)
        +
        Constructor to fully initialize the level
        +
        +
        Parameters:
        +
        gridSize - the grid size for this level
        +
        secondsToSolve - the target time in seconds to complete the level
        +
        flipTime - the time in milliseconds before two cards flip back over
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getGridSize

        +
        public int getGridSize()
        +
        Get the grid size for this level
        +
        +
        Returns:
        +
        the number of squares in the grid
        +
        +
      • +
      + + + +
        +
      • +

        getSecondsToSolve

        +
        public int getSecondsToSolve()
        +
        Get the target time for completing the level
        +
        +
        Returns:
        +
        the target time in seconds for completing the level
        +
        +
      • +
      + + + +
        +
      • +

        getFlipTime

        +
        public int getFlipTime()
        +
        Get the delay time befoe two cards flip back over
        +
        +
        Returns:
        +
        the time in milliseconds before the two flipped cars turn back over
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGameTest.html b/javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGameTest.html new file mode 100755 index 0000000..31ea501 --- /dev/null +++ b/javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGameTest.html @@ -0,0 +1,375 @@ + + + + + +MemoryGameTest + + + + + + + + + + + + +
+
edu.ucsb.cs56.projects.games.memorycard
+

Class MemoryGameTest

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • edu.ucsb.cs56.projects.games.memorycard.MemoryGameTest
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class MemoryGameTest
    +extends java.lang.Object
    +
    The test class MemoryGameTest - tests the MemoryGame class
    +
    +
    Version:
    +
    1.0.0 5/14/2012
    +
    Author:
    +
    Bryce McGaw and Jonathan Yau + + Minor changes made by Ryan Halbrook for cs56 proj1, Spring 2013 + I only made minor changes in this file because I added a parameter + to the MemoryGrid constructor. I just put in a grid size of 16 to + all constructors to make this compile. A good change would be to test + other parameters.
    +
    See Also:
    +
    MemoryGame.java
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        MemoryGameTest

        +
        public MemoryGameTest()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        testConstructor01

        +
        public void testConstructor01()
        +
      • +
      + + + +
        +
      • +

        testRandom

        +
        public void testRandom()
        +
      • +
      + + + +
        +
      • +

        testEquals

        +
        public void testEquals()
        +
      • +
      + + + +
        +
      • +

        testisOneFlipped

        +
        public void testisOneFlipped()
        +
      • +
      + + + +
        +
      • +

        testisTwoFlipped

        +
        public void testisTwoFlipped()
        +
      • +
      + + + +
        +
      • +

        testgetFlipped

        +
        public void testgetFlipped()
        +
      • +
      + + + +
        +
      • +

        testgetFlipped2

        +
        public void testgetFlipped2()
        +
      • +
      + + + +
        +
      • +

        testisOver

        +
        public void testisOver()
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGrid.html b/javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGrid.html new file mode 100755 index 0000000..7d2e741 --- /dev/null +++ b/javadoc/edu/ucsb/cs56/projects/games/memorycard/MemoryGrid.html @@ -0,0 +1,482 @@ + + + + + +MemoryGrid + + + + + + + + + + + + +
+
edu.ucsb.cs56.projects.games.memorycard
+

Class MemoryGrid

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • edu.ucsb.cs56.projects.games.memorycard.MemoryGrid
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class MemoryGrid
    +extends java.lang.Object
    +
    makes the grid (ArrayList of MemoryCards) for the game
    +
    +
    Version:
    +
    CS56, S13, 5/8/13
    +
    Author:
    +
    Mathew Glodack, Christina Morris
    +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

      + + + + + + + + +
      Constructors 
      Constructor and Description
      MemoryGrid(int gridSize) +
      MemoryGrid constructor that takes in a parameter
      +
      +
    • +
    + +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethod and Description
      booleancontains2(MemoryCard temp) +
      Method contains2 + Checks if array contains 2 of same value
      +
      voidflip(int i) +
      Method flip(int i) + flips MemoryCard[i]
      +
      booleanflippedEquals(int i) +
      Method flippedEquals(int i) + Checks if two MemoryCards are equal
      +
      intgetFlipped() +
      Method getFlipped()
      +
      intgetFlipped(int i) +
      Method getFlipped(int i)
      +
      intgetSize() +
      Method getSize()
      +
      intgetVal(int i) +
      Methd getVal(int i)
      +
      booleanisOneFlipped() +
      Method isOneFlipped() + Checks array if one object is flipped
      +
      booleanisOver() +
      Method isOver()
      +
      booleanisTwoFlipped() +
      Method is TwoFlipped() + Checks array to see if 2 objects are flipped
      +
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • +
      +
    • +
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        MemoryGrid

        +
        public MemoryGrid(int gridSize)
        +
        MemoryGrid constructor that takes in a parameter
        +
        +
        Parameters:
        +
        gridSize - for the size the of the grid
        +
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getSize

        +
        public int getSize()
        +
        Method getSize()
        +
        +
        Returns:
        +
        the size of the grid (total number of MemoryCard objects)
        +
        +
      • +
      + + + +
        +
      • +

        contains2

        +
        public boolean contains2(MemoryCard temp)
        +
        Method contains2 + Checks if array contains 2 of same value
        +
        +
        Parameters:
        +
        temp - check to see if temp memory card is in the memorycard arraylist twice
        +
        +
      • +
      + + + +
        +
      • +

        isOneFlipped

        +
        public boolean isOneFlipped()
        +
        Method isOneFlipped() + Checks array if one object is flipped
        +
        +
        Returns:
        +
        boolean true if one card is flipped, false otherwise
        +
        +
      • +
      + + + +
        +
      • +

        isTwoFlipped

        +
        public boolean isTwoFlipped()
        +
        Method is TwoFlipped() + Checks array to see if 2 objects are flipped
        +
        +
        Returns:
        +
        boolean true if two cards are flipped, false otherwise
        +
        +
      • +
      + + + +
        +
      • +

        flippedEquals

        +
        public boolean flippedEquals(int i)
        +
        Method flippedEquals(int i) + Checks if two MemoryCards are equal
        +
        +
        Parameters:
        +
        i - the location in the arraylist of the memorycard that is being compared
        +
        Returns:
        +
        boolean true if the indexed card is equal to the memory card that is being compared
        +
        +
      • +
      + + + +
        +
      • +

        getFlipped

        +
        public int getFlipped()
        +
        Method getFlipped()
        +
        +
        Returns:
        +
        retval the position of the flipped MemoryCard
        +
        +
      • +
      + + + +
        +
      • +

        getFlipped

        +
        public int getFlipped(int i)
        +
        Method getFlipped(int i)
        +
        +
        Returns:
        +
        retval the position of the flipped MemoryCard that is not index i
        +
        +
      • +
      + + + +
        +
      • +

        isOver

        +
        public boolean isOver()
        +
        Method isOver()
        +
        +
        Returns:
        +
        boolean true if the came is over, false if the game is not over
        +
        +
      • +
      + + + +
        +
      • +

        getVal

        +
        public int getVal(int i)
        +
        Methd getVal(int i)
        +
        +
        Returns:
        +
        value of MemoryCard[i]
        +
        +
      • +
      + + + +
        +
      • +

        flip

        +
        public void flip(int i)
        +
        Method flip(int i) + flips MemoryCard[i]
        +
        +
        Parameters:
        +
        i - location in memory grid that should be flipped
        +
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/HighScoreBoard.html b/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/HighScoreBoard.html new file mode 100755 index 0000000..428fcc9 --- /dev/null +++ b/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/HighScoreBoard.html @@ -0,0 +1,147 @@ + + + + + +Uses of Class edu.ucsb.cs56.projects.games.memorycard.HighScoreBoard + + + + + + + + + + + +
+

Uses of Class
edu.ucsb.cs56.projects.games.memorycard.HighScoreBoard

+
+
+ +
+ + + + + + diff --git a/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryCard.html b/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryCard.html new file mode 100755 index 0000000..dfd2c0d --- /dev/null +++ b/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryCard.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class edu.ucsb.cs56.projects.games.memorycard.MemoryCard + + + + + + + + + + + +
+

Uses of Class
edu.ucsb.cs56.projects.games.memorycard.MemoryCard

+
+
+ +
+ + + + + + diff --git a/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGameComponent.html b/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGameComponent.html new file mode 100755 index 0000000..e61b4db --- /dev/null +++ b/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGameComponent.html @@ -0,0 +1,122 @@ + + + + + +Uses of Class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent + + + + + + + + + + + +
+

Uses of Class
edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent

+
+
No usage of edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+ + + + + + diff --git a/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGameGui.html b/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGameGui.html new file mode 100755 index 0000000..5bead1f --- /dev/null +++ b/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGameGui.html @@ -0,0 +1,122 @@ + + + + + +Uses of Class edu.ucsb.cs56.projects.games.memorycard.MemoryGameGui + + + + + + + + + + + +
+

Uses of Class
edu.ucsb.cs56.projects.games.memorycard.MemoryGameGui

+
+
No usage of edu.ucsb.cs56.projects.games.memorycard.MemoryGameGui
+ + + + + + diff --git a/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGameLevel.html b/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGameLevel.html new file mode 100755 index 0000000..736728b --- /dev/null +++ b/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGameLevel.html @@ -0,0 +1,122 @@ + + + + + +Uses of Class edu.ucsb.cs56.projects.games.memorycard.MemoryGameLevel + + + + + + + + + + + +
+

Uses of Class
edu.ucsb.cs56.projects.games.memorycard.MemoryGameLevel

+
+
No usage of edu.ucsb.cs56.projects.games.memorycard.MemoryGameLevel
+ + + + + + diff --git a/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGameTest.html b/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGameTest.html new file mode 100755 index 0000000..7e6f762 --- /dev/null +++ b/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGameTest.html @@ -0,0 +1,122 @@ + + + + + +Uses of Class edu.ucsb.cs56.projects.games.memorycard.MemoryGameTest + + + + + + + + + + + +
+

Uses of Class
edu.ucsb.cs56.projects.games.memorycard.MemoryGameTest

+
+
No usage of edu.ucsb.cs56.projects.games.memorycard.MemoryGameTest
+ + + + + + diff --git a/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGrid.html b/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGrid.html new file mode 100755 index 0000000..18b415a --- /dev/null +++ b/javadoc/edu/ucsb/cs56/projects/games/memorycard/class-use/MemoryGrid.html @@ -0,0 +1,147 @@ + + + + + +Uses of Class edu.ucsb.cs56.projects.games.memorycard.MemoryGrid + + + + + + + + + + + +
+

Uses of Class
edu.ucsb.cs56.projects.games.memorycard.MemoryGrid

+
+
+ +
+ + + + + + diff --git a/javadoc/edu/ucsb/cs56/projects/games/memorycard/package-frame.html b/javadoc/edu/ucsb/cs56/projects/games/memorycard/package-frame.html new file mode 100755 index 0000000..d868275 --- /dev/null +++ b/javadoc/edu/ucsb/cs56/projects/games/memorycard/package-frame.html @@ -0,0 +1,26 @@ + + + + + +edu.ucsb.cs56.projects.games.memorycard + + + + + +

edu.ucsb.cs56.projects.games.memorycard

+ + + diff --git a/javadoc/edu/ucsb/cs56/projects/games/memorycard/package-summary.html b/javadoc/edu/ucsb/cs56/projects/games/memorycard/package-summary.html new file mode 100755 index 0000000..366a23d --- /dev/null +++ b/javadoc/edu/ucsb/cs56/projects/games/memorycard/package-summary.html @@ -0,0 +1,172 @@ + + + + + +edu.ucsb.cs56.projects.games.memorycard + + + + + + + + + + + +
+

Package edu.ucsb.cs56.projects.games.memorycard

+
+
+ +
+ + + + + + diff --git a/javadoc/edu/ucsb/cs56/projects/games/memorycard/package-tree.html b/javadoc/edu/ucsb/cs56/projects/games/memorycard/package-tree.html new file mode 100755 index 0000000..2f35875 --- /dev/null +++ b/javadoc/edu/ucsb/cs56/projects/games/memorycard/package-tree.html @@ -0,0 +1,149 @@ + + + + + +edu.ucsb.cs56.projects.games.memorycard Class Hierarchy + + + + + + + + + + + +
+

Hierarchy For Package edu.ucsb.cs56.projects.games.memorycard

+
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • java.awt.Component (implements java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable) +
        +
      • java.awt.Container +
          +
        • javax.swing.JComponent (implements java.io.Serializable) +
            +
          • edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent (implements java.awt.event.ActionListener)
          • +
          +
        • +
        +
      • +
      +
    • +
    • edu.ucsb.cs56.projects.games.memorycard.HighScoreBoard
    • +
    • edu.ucsb.cs56.projects.games.memorycard.MemoryCard
    • +
    • edu.ucsb.cs56.projects.games.memorycard.MemoryGameGui
    • +
    • edu.ucsb.cs56.projects.games.memorycard.MemoryGameLevel
    • +
    • edu.ucsb.cs56.projects.games.memorycard.MemoryGameTest
    • +
    • edu.ucsb.cs56.projects.games.memorycard.MemoryGrid
    • +
    +
  • +
+
+ + + + + + diff --git a/javadoc/edu/ucsb/cs56/projects/games/memorycard/package-use.html b/javadoc/edu/ucsb/cs56/projects/games/memorycard/package-use.html new file mode 100755 index 0000000..1c05788 --- /dev/null +++ b/javadoc/edu/ucsb/cs56/projects/games/memorycard/package-use.html @@ -0,0 +1,150 @@ + + + + + +Uses of Package edu.ucsb.cs56.projects.games.memorycard + + + + + + + + + + + +
+

Uses of Package
edu.ucsb.cs56.projects.games.memorycard

+
+
+ +
+ + + + + + diff --git a/javadoc/help-doc.html b/javadoc/help-doc.html new file mode 100755 index 0000000..4cdd6f7 --- /dev/null +++ b/javadoc/help-doc.html @@ -0,0 +1,223 @@ + + + + + +API Help + + + + + + + + + + + +
+

How This API Document Is Organized

+
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+
+
+
    +
  • +

    Package

    +

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:

    +
      +
    • Interfaces (italic)
    • +
    • Classes
    • +
    • Enums
    • +
    • Exceptions
    • +
    • Errors
    • +
    • Annotation Types
    • +
    +
  • +
  • +

    Class/Interface

    +

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
      +
    • Class inheritance diagram
    • +
    • Direct Subclasses
    • +
    • All Known Subinterfaces
    • +
    • All Known Implementing Classes
    • +
    • Class/interface declaration
    • +
    • Class/interface description
    • +
    +
      +
    • Nested Class Summary
    • +
    • Field Summary
    • +
    • Constructor Summary
    • +
    • Method Summary
    • +
    +
      +
    • Field Detail
    • +
    • Constructor Detail
    • +
    • Method Detail
    • +
    +

    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

    +
  • +
  • +

    Annotation Type

    +

    Each annotation type has its own separate page with the following sections:

    +
      +
    • Annotation Type declaration
    • +
    • Annotation Type description
    • +
    • Required Element Summary
    • +
    • Optional Element Summary
    • +
    • Element Detail
    • +
    +
  • +
  • +

    Enum

    +

    Each enum has its own separate page with the following sections:

    +
      +
    • Enum declaration
    • +
    • Enum description
    • +
    • Enum Constant Summary
    • +
    • Enum Constant Detail
    • +
    +
  • +
  • +

    Use

    +

    Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

    +
  • +
  • +

    Tree (Class Hierarchy)

    +

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.

    +
      +
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • +
    • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
    • +
    +
  • +
  • +

    Deprecated API

    +

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

    +
  • +
  • +

    Index

    +

    The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

    +
  • +
  • +

    Prev/Next

    +

    These links take you to the next or previous class, interface, package, or related page.

    +
  • +
  • +

    Frames/No Frames

    +

    These links show and hide the HTML frames. All pages are available with or without frames.

    +
  • +
  • +

    All Classes

    +

    The All Classes link shows all classes and interfaces except non-static nested types.

    +
  • +
  • +

    Serialized Form

    +

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

    +
  • +
  • +

    Constant Field Values

    +

    The Constant Field Values page lists the static final fields and their values.

    +
  • +
+This help file applies to API documentation generated using the standard doclet.
+ + + + + + diff --git a/javadoc/index-all.html b/javadoc/index-all.html new file mode 100755 index 0000000..1c17b3f --- /dev/null +++ b/javadoc/index-all.html @@ -0,0 +1,471 @@ + + + + + +Index + + + + + + + + +
+ + + + + + + +
+ + +
A B C E F G H I L M N P R S T  + + +

A

+
+
actionPerformed(ActionEvent) - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
Callback from the timer.
+
+
add(String, int) - Method in class edu.ucsb.cs56.projects.games.memorycard.HighScoreBoard
+
 
+
addInstruction() - Static method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameGui
+
+
Adds instruction to the screen
+
+
+ + + +

B

+
+
buildTiles() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
buildTiles() constructs the tiles
+
+
+ + + +

C

+
+
contains2(MemoryCard) - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGrid
+
+
Method contains2 + Checks if array contains 2 of same value
+
+
+ + + +

E

+
+
edu.ucsb.cs56.projects.games.memorycard - package edu.ucsb.cs56.projects.games.memorycard
+
 
+
endGame() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
Ends the game and starts a new game if the user selects new game + from a dialog menu.
+
+
Equals(Object) - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryCard
+
+
Equals method to check if values are equal
+
+
+ + + +

F

+
+
flip() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryCard
+
+
changes value of flipped (doesnt actually flip card)
+
+
flip(int) - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGrid
+
+
Method flip(int i) + flips MemoryCard[i]
+
+
flipBack() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
If two cards are showing, flips them back over
+
+
flippedEquals(int) - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGrid
+
+
Method flippedEquals(int i) + Checks if two MemoryCards are equal
+
+
+ + + +

G

+
+
getBoard() - Method in class edu.ucsb.cs56.projects.games.memorycard.HighScoreBoard
+
 
+
getFlipped() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGrid
+
+
Method getFlipped()
+
+
getFlipped(int) - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGrid
+
+
Method getFlipped(int i)
+
+
getFlipTime() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameLevel
+
+
Get the delay time befoe two cards flip back over
+
+
getGridSize() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameLevel
+
+
Get the grid size for this level
+
+
getLowestScore() - Method in class edu.ucsb.cs56.projects.games.memorycard.HighScoreBoard
+
 
+
getSecondsToSolve() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameLevel
+
+
Get the target time for completing the level
+
+
getSize() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGrid
+
+
Method getSize()
+
+
getVal() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryCard
+
+
returns value
+
+
getVal(int) - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGrid
+
+
Methd getVal(int i)
+
+
go() - Static method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameGui
+
 
+
+ + + +

H

+
+
HighScoreBoard - Class in edu.ucsb.cs56.projects.games.memorycard
+
 
+
HighScoreBoard() - Constructor for class edu.ucsb.cs56.projects.games.memorycard.HighScoreBoard
+
 
+
+ + + +

I

+
+
isFlipped() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryCard
+
+
returns whether card is flipped
+
+
isOneFlipped() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGrid
+
+
Method isOneFlipped() + Checks array if one object is flipped
+
+
isOver() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGrid
+
+
Method isOver()
+
+
isTwoFlipped() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGrid
+
+
Method is TwoFlipped() + Checks array to see if 2 objects are flipped
+
+
+ + + +

L

+
+
loadImageIcons() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
Loads the imageIcons
+
+
+ + + +

M

+
+
main(String[]) - Static method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameGui
+
+
main method to open JFrame
+
+
MemoryCard - Class in edu.ucsb.cs56.projects.games.memorycard
+
+
makes objects for cards
+
+
MemoryCard() - Constructor for class edu.ucsb.cs56.projects.games.memorycard.MemoryCard
+
+
default constructor for MemoryCard (sets flipped as false)
+
+
MemoryCard(int) - Constructor for class edu.ucsb.cs56.projects.games.memorycard.MemoryCard
+
+
constructor to set value (flipped still set as false)
+
+
MemoryGameComponent - Class in edu.ucsb.cs56.projects.games.memorycard
+
+
A Swing component for playing the Memory Card Game
+
+
MemoryGameComponent(MemoryGrid) - Constructor for class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
Constructor
+
+
MemoryGameGui - Class in edu.ucsb.cs56.projects.games.memorycard
+
 
+
MemoryGameGui() - Constructor for class edu.ucsb.cs56.projects.games.memorycard.MemoryGameGui
+
 
+
MemoryGameLevel - Class in edu.ucsb.cs56.projects.games.memorycard
+
 
+
MemoryGameLevel(int, int, int) - Constructor for class edu.ucsb.cs56.projects.games.memorycard.MemoryGameLevel
+
+
Constructor to fully initialize the level
+
+
MemoryGameTest - Class in edu.ucsb.cs56.projects.games.memorycard
+
+
The test class MemoryGameTest - tests the MemoryGame class
+
+
MemoryGameTest() - Constructor for class edu.ucsb.cs56.projects.games.memorycard.MemoryGameTest
+
 
+
MemoryGrid - Class in edu.ucsb.cs56.projects.games.memorycard
+
+
makes the grid (ArrayList of MemoryCards) for the game
+
+
MemoryGrid(int) - Constructor for class edu.ucsb.cs56.projects.games.memorycard.MemoryGrid
+
+
MemoryGrid constructor that takes in a parameter
+
+
menu() - Static method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameGui
+
 
+
+ + + +

N

+
+
newGame(int) - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
Starts a new level or restarts the current level
+
+
+ + + +

P

+
+
pause() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
pause() pauses the time
+
+
pauseB() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
Resume the game timer.
+
+
pauseGame() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
Pause the timer and the game by showing a dialog box, + preventing the user from playing the game until they resume.
+
+
pauseTimer() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
Pause just the game timer.
+
+
playFlipSound() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
Play sound effect after flipping
+
+
playMatchSound() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
Play sound effect if two cards matched
+
+
playMusic() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
Play background music
+
+
playSound(String) - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
Play sound from a WAV filepath + This is a helper method
+
+
playWinSound() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
Play sound effect after winning the game
+
+
+ + + +

R

+
+
reset() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
Resets the game
+
+
restartB - Variable in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
 
+
resume() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
resume() resumes the game
+
+
+ + + +

S

+
+
setHighScoreBoard(HighScoreBoard) - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
 
+
setLabel(JLabel) - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
setLabel()
+
+
setLevelLabel(JLabel) - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
 
+
setMainFrame(JFrame) - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
 
+
setMusicButton(JButton) - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
setMusicButton
+
+
setPauseButton(JButton) - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
setPauseButton
+
+
setScoreLabel(JLabel) - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
 
+
setVal(int) - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryCard
+
+
Method to set value
+
+
showHighScoreBoard() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
 
+
stopMusic() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
+
Stop background music
+
+
storeHighScore() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent
+
 
+
+ + + +

T

+
+
testConstructor01() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameTest
+
 
+
testEquals() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameTest
+
 
+
testgetFlipped() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameTest
+
 
+
testgetFlipped2() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameTest
+
 
+
testisOneFlipped() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameTest
+
 
+
testisOver() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameTest
+
 
+
testisTwoFlipped() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameTest
+
 
+
testRandom() - Method in class edu.ucsb.cs56.projects.games.memorycard.MemoryGameTest
+
 
+
+A B C E F G H I L M N P R S T 
+ +
+ + + + + + + +
+ + + + diff --git a/javadoc/index.html b/javadoc/index.html new file mode 100755 index 0000000..2f937d5 --- /dev/null +++ b/javadoc/index.html @@ -0,0 +1,72 @@ + + + + + +Generated Documentation (Untitled) + + + + + + +<noscript> +<div>JavaScript is disabled on your browser.</div> +</noscript> +<h2>Frame Alert</h2> +<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="edu/ucsb/cs56/projects/games/memorycard/package-summary.html">Non-frame version</a>.</p> + + + diff --git a/javadoc/overview-tree.html b/javadoc/overview-tree.html new file mode 100755 index 0000000..c0371b1 --- /dev/null +++ b/javadoc/overview-tree.html @@ -0,0 +1,153 @@ + + + + + +Class Hierarchy + + + + + + + + + + + +
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • java.awt.Component (implements java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable) +
        +
      • java.awt.Container +
          +
        • javax.swing.JComponent (implements java.io.Serializable) +
            +
          • edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent (implements java.awt.event.ActionListener)
          • +
          +
        • +
        +
      • +
      +
    • +
    • edu.ucsb.cs56.projects.games.memorycard.HighScoreBoard
    • +
    • edu.ucsb.cs56.projects.games.memorycard.MemoryCard
    • +
    • edu.ucsb.cs56.projects.games.memorycard.MemoryGameGui
    • +
    • edu.ucsb.cs56.projects.games.memorycard.MemoryGameLevel
    • +
    • edu.ucsb.cs56.projects.games.memorycard.MemoryGameTest
    • +
    • edu.ucsb.cs56.projects.games.memorycard.MemoryGrid
    • +
    +
  • +
+
+ + + + + + diff --git a/javadoc/package-list b/javadoc/package-list new file mode 100755 index 0000000..9f955cd --- /dev/null +++ b/javadoc/package-list @@ -0,0 +1 @@ +edu.ucsb.cs56.projects.games.memorycard diff --git a/javadoc/script.js b/javadoc/script.js new file mode 100755 index 0000000..b346356 --- /dev/null +++ b/javadoc/script.js @@ -0,0 +1,30 @@ +function show(type) +{ + count = 0; + for (var key in methods) { + var row = document.getElementById(key); + if ((methods[key] & type) != 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) +{ + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} diff --git a/javadoc/serialized-form.html b/javadoc/serialized-form.html new file mode 100755 index 0000000..37a13e8 --- /dev/null +++ b/javadoc/serialized-form.html @@ -0,0 +1,274 @@ + + + + + +Serialized Form + + + + + + + + + + + +
+

Serialized Form

+
+
+
    +
  • +

    Package edu.ucsb.cs56.projects.games.memorycard

    +
      +
    • + + +

      Class edu.ucsb.cs56.projects.games.memorycard.MemoryGameComponent extends javax.swing.JComponent implements Serializable

      +
        +
      • +

        Serialized Fields

        +
          +
        • +

          buttons

          +
          javax.swing.JButton[] buttons
          +
        • +
        • +

          imgIcons

          +
          java.util.ArrayList<E> imgIcons
          +
        • +
        • +

          restartB

          +
          javax.swing.JComponent restartB
          +
        • +
        • +

          imgBlank

          +
          javax.swing.Icon imgBlank
          +
        • +
        • +

          pauseButton

          +
          javax.swing.JButton pauseButton
          +
        • +
        • +

          musicButton

          +
          javax.swing.JButton musicButton
          +
        • +
        • +

          timeLabel

          +
          javax.swing.JLabel timeLabel
          +
        • +
        • +

          scoreLabel

          +
          javax.swing.JLabel scoreLabel
          +
        • +
        • +

          levelLabel

          +
          javax.swing.JLabel levelLabel
          +
        • +
        • +

          timer

          +
          javax.swing.Timer timer
          +
        • +
        • +

          grid

          +
          MemoryGrid grid
          +
        • +
        • +

          currentLevel

          +
          int currentLevel
          +
        • +
        • +

          totalLevels

          +
          int totalLevels
          +
        • +
        • +

          levels

          +
          MemoryGameLevel[] levels
          +
        • +
        • +

          level

          +
          MemoryGameLevel level
          +
        • +
        • +

          firstImageFlipped

          +
          boolean firstImageFlipped
          +
        • +
        • +

          gameCounter

          +
          int gameCounter
          +
        • +
        • +

          startTime

          +
          long startTime
          +
        • +
        • +

          cheatEnabled

          +
          boolean cheatEnabled
          +
        • +
        • +

          isOver

          +
          boolean isOver
          +
        • +
        • +

          score

          +
          int score
          +
        • +
        • +

          text

          +
          javax.swing.JTextField text
          +
        • +
        • +

          inputBoard

          +
          javax.swing.JFrame inputBoard
          +
        • +
        • +

          textLabel

          +
          javax.swing.JLabel textLabel
          +
        • +
        • +

          mainFrame

          +
          javax.swing.JFrame mainFrame
          +
        • +
        • +

          board

          +
          HighScoreBoard board
          +
        • +
        • +

          pauseTime

          +
          long pauseTime
          +
        • +
        • +

          pauseStart

          +
          long pauseStart
          +
        • +
        • +

          MGP

          +
          sun.audio.AudioPlayer MGP
          +
        • +
        • +

          BGM

          +
          sun.audio.AudioStream BGM
          +
        • +
        • +

          MD

          +
          sun.audio.AudioData MD
          +
        • +
        • +

          images8

          +
          java.lang.String[] images8
          +
        • +
        • +

          images10

          +
          java.lang.String[] images10
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+ + + + + + diff --git a/javadoc/stylesheet.css b/javadoc/stylesheet.css new file mode 100755 index 0000000..98055b2 --- /dev/null +++ b/javadoc/stylesheet.css @@ -0,0 +1,574 @@ +/* Javadoc style sheet */ +/* +Overall document style +*/ + +@import url('resources/fonts/dejavu.css'); + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a:hover, a:focus { + text-decoration:none; + color:#bb7a2a; +} +a:active { + text-decoration:none; + color:#4A6782; +} +a[name] { + color:#353833; +} +a[name]:hover { + text-decoration:none; + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +/* +Document title and Copyright styles +*/ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* +Navigation bar styles +*/ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.subNavList li{ + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* +Page header and footer styles +*/ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexHeader { + margin:10px; + position:relative; +} +.indexHeader span{ + margin-right:15px; +} +.indexHeader h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* +Heading styles +*/ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* +Page layout container styles +*/ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Sans Mono',monospace; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* +List styles +*/ +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* +Table styles +*/ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { + width:100%; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; + +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colLast, th.colOne, .constantsSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + white-space:nowrap; + font-size:13px; +} +td.colLast, th.colLast { + font-size:13px; +} +td.colOne, th.colOne { + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.useSummary td.colFirst, .useSummary th.colFirst, +.overviewSummary td.colOne, .overviewSummary th.colOne, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colOne, .memberSummary th.colOne, +.typeSummary td.colFirst{ + width:25%; + vertical-align:top; +} +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor { + background-color:#FFFFFF; +} +.rowColor { + background-color:#EEEEEF; +} +/* +Content styles +*/ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} + +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} + +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} + +td.colLast div { + padding-top:0px; +} + + +td.colLast a { + padding-bottom:3px; +} +/* +Formatting effect styles +*/ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} + +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} + +div.contentContainer ul.blockList li.blockList h2{ + padding-bottom:0px; +} From 3e1727fea03478a5716a4f178738176c1437d64f Mon Sep 17 00:00:00 2001 From: Sean Shelton Date: Sun, 20 Nov 2016 16:32:28 -0800 Subject: [PATCH 4/7] trying a push... --- .nfs0000000008967c4700000005 | Bin 0 -> 16384 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 .nfs0000000008967c4700000005 diff --git a/.nfs0000000008967c4700000005 b/.nfs0000000008967c4700000005 new file mode 100644 index 0000000000000000000000000000000000000000..608e947084972ef75e7c09f33e4e7116aec39586 GIT binary patch literal 16384 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 SZ3ojs+T~()k?xVZ68`}(zJ`nd literal 0 HcmV?d00001 From 3cef1fe0f39083c4a1475573fb3bc89a2fd7283d Mon Sep 17 00:00:00 2001 From: hyeminyoo Date: Sun, 20 Nov 2016 17:05:58 -0800 Subject: [PATCH 5/7] Wrote developer notes --- README.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1f06870..d7cd335 100644 --- a/README.md +++ b/README.md @@ -40,8 +40,26 @@ Lets the user view the current leaderboard, with the names and scores of the bes Developer Notes =============== -IN PROGRESS +### HighScoreBoard.java +Creates the highscore board and the information that goes on the board +### MemoryGameComponent.java +A Swing component for playing the Memory Card Game + +### MemoryGameLevel.java +Has the constructor to fully initialize the level, such as target time, grid size, and delay time before two cards flip back over + +### MemoryGrid.java +makes the grid (arraylist of MemoryCards) for the game + +### MemoryCard.java +makes objects for cards + +### MemoryGameGui.java +GUI for the game, and has the main class + +### MemoryGameTest.java +tests the MemoryGame class project history =============== From 09f575b3a8a91fdb7d26942a4ef5bee0e7349fbb Mon Sep 17 00:00:00 2001 From: Hyemin Yoo Date: Sun, 20 Nov 2016 18:46:26 -0800 Subject: [PATCH 6/7] fixed #43, #46, #48, #51 --- dist/cs56_13S_memorycard.jar | Bin 2491254 -> 2491859 bytes .../games/memorycard/MemoryGameGui.java | 91 ++++++++++++------ 2 files changed, 61 insertions(+), 30 deletions(-) diff --git a/dist/cs56_13S_memorycard.jar b/dist/cs56_13S_memorycard.jar index b47fe69c15a290ab29812196986f5eba3fe2d809..b79b413fe766509ed345f58f5fe2dadec8091e03 100644 GIT binary patch delta 19035 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 ArT_o{ delta 18574 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

GO_OgVhsgIz{HKz`q?V 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 menu()); + frame.add(BorderLayout.NORTH, menu); + frame.pack(); + frame.setVisible(true); + + } }; @@ -304,7 +317,7 @@ public void actionPerformed(ActionEvent e){ mgc.setMusicButton(music); mgc.setScoreLabel(score); mgc.setLevelLabel(level); - mgc.setHighScoreBoard(board); + mgc.setHighScoreBoard(highscoreBoard); // to make sure that grids go left to right frame.applyComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); frame.setSize(WINDOW_SIZE, WINDOW_SIZE); @@ -317,6 +330,7 @@ public void actionPerformed(ActionEvent e){ */ public static void addInstruction(){ File file = new File("instructions.txt"); + //JTextArea instructionTextArea = new JTextArea(); try { BufferedReader br = new BufferedReader( new InputStreamReader( @@ -330,5 +344,22 @@ public static void addInstruction(){ e.printStackTrace(); } } + public static JTextArea getInstructions(){ + File file = new File("instructions.txt"); + JTextArea instructionTextArea = new JTextArea(); + try { + BufferedReader br = new BufferedReader( + new InputStreamReader( + new FileInputStream(file))); + String line; + while((line = br.readLine()) != null){ + instructionTextArea.append(line + "\n"); + } + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return instructionTextArea; + } } From 9187365d47e4976fc5f6ab36239f8ec324d8d36a Mon Sep 17 00:00:00 2001 From: Hyemin Yoo Date: Sun, 20 Nov 2016 23:01:26 -0800 Subject: [PATCH 7/7] Fixed issues #24 and #41 --- dist/cs56_13S_memorycard.jar | Bin 2491859 -> 2495547 bytes .../projects/games/memorycard/GameTimer.txt | 13 +++ .../games/memorycard/MemoryGameComponent.java | 49 +++++++++--- .../games/memorycard/MemoryGameGui.java | 75 +++++++++++++++++- 4 files changed, 123 insertions(+), 14 deletions(-) create mode 100644 src/edu/ucsb/cs56/projects/games/memorycard/GameTimer.txt diff --git a/dist/cs56_13S_memorycard.jar b/dist/cs56_13S_memorycard.jar index b79b413fe766509ed345f58f5fe2dadec8091e03..8d4d63c1eb0ca37cfa1191e75949100c640c73d9 100644 GIT binary patch delta 23147 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 diff --git a/src/edu/ucsb/cs56/projects/games/memorycard/GameTimer.txt b/src/edu/ucsb/cs56/projects/games/memorycard/GameTimer.txt new file mode 100644 index 0000000..419e88c --- /dev/null +++ b/src/edu/ucsb/cs56/projects/games/memorycard/GameTimer.txt @@ -0,0 +1,13 @@ +package edu.ucsb.cs56.projects.games.memorycard; + +import javax.swing.Timer; + +public class GameTimer extends Timer{ + private static Timer instance = new Timer(); + private GameTimer() {} + + public static Timer getInstance() { + return instance; + } + +} diff --git a/src/edu/ucsb/cs56/projects/games/memorycard/MemoryGameComponent.java b/src/edu/ucsb/cs56/projects/games/memorycard/MemoryGameComponent.java index 7c6ffe5..4c27e99 100644 --- a/src/edu/ucsb/cs56/projects/games/memorycard/MemoryGameComponent.java +++ b/src/edu/ucsb/cs56/projects/games/memorycard/MemoryGameComponent.java @@ -55,7 +55,7 @@ public class MemoryGameComponent extends JComponent implements ActionListener // Therefore, this total pause time is used to // adjust the elapsed time to the actual play time. private long pauseTime = 0; - private long pauseStart; + private long pauseStart = 0; /** Constructor @@ -74,7 +74,7 @@ public MemoryGameComponent(MemoryGrid game) { int gridSize = grid.getSize(); buttons= new JButton[gridSize]; - loadLevelSet1(); + levels = loadLevelSet1(); loadImageIcons(); // loads the array list of icons and sets imgBlank buildTiles(); startTime = new Date().getTime(); @@ -115,7 +115,7 @@ public void pauseTimer() { This is a helper method */ public void playSound(String filepath){ - AudioPlayer myPlyaer = AudioPlayer.player; + AudioPlayer myPlayer = AudioPlayer.player; AudioStream sound; try{ InputStream test = new FileInputStream(filepath); @@ -243,7 +243,7 @@ private void updateLevel(){ public void actionPerformed(ActionEvent e) { long finalTime = new Date().getTime(); long deltaTime = (long)((finalTime - startTime) / 1000.0); - long timeRemaining = (long)(level.getSecondsToSolve() - deltaTime + pauseTime / 1000.0); + long timeRemaining = (long)(level.getSecondsToSolve() - deltaTime - pauseTime / 1000.0); if (timeRemaining < 0) { endGame(); @@ -294,14 +294,37 @@ public void setMusicButton(JButton b){ /** * Loads a basic set of levels for the game */ - private void loadLevelSet1() { - levels = new MemoryGameLevel[4]; - levels[0] = new MemoryGameLevel(16, 75, 1500); - levels[1] = new MemoryGameLevel(16, 40, 750); - levels[2] = new MemoryGameLevel(36, 300, 1000); - levels[3] = new MemoryGameLevel(36, 150, 500); + public MemoryGameLevel[] loadLevelSet1() { + MemoryGameLevel[] levelSet = new MemoryGameLevel[4]; + levelSet[0] = new MemoryGameLevel(4, 75, 1500); + levelSet[1] = new MemoryGameLevel(4, 40, 750); + levelSet[2] = new MemoryGameLevel(16, 300, 1000); + levelSet[3] = new MemoryGameLevel(16, 150, 500); currentLevel = 0; - level = levels[currentLevel]; + level = levelSet[currentLevel]; + return levelSet; + } + + public MemoryGameLevel[] loadLevelSet2() { + MemoryGameLevel[] levelSet = new MemoryGameLevel[4]; + levelSet[0] = new MemoryGameLevel(16, 75, 1500); + levelSet[1] = new MemoryGameLevel(16, 40, 750); + levelSet[2] = new MemoryGameLevel(36, 300, 1000); + levelSet[3] = new MemoryGameLevel(36, 150, 500); + currentLevel = 0; + level = levelSet[currentLevel]; + return levelSet; + } + + public MemoryGameLevel[] loadLevelSet3() { + MemoryGameLevel[] levelSet = new MemoryGameLevel[4]; + levelSet[0] = new MemoryGameLevel(36, 75, 1000); + levelSet[1] = new MemoryGameLevel(36, 40, 500); + levelSet[2] = new MemoryGameLevel(64, 300, 3000); + levelSet[3] = new MemoryGameLevel(64, 150, 1500); + currentLevel = 0; + level = levelSet[currentLevel]; + return levelSet; } // The first 8 images. These will be used @@ -696,4 +719,8 @@ public void showHighScoreBoard(){ scoreboard.setLocation((int)(screenSize2.getWidth()/2 - scoreboard.getSize().getWidth()/2), (int)(screenSize2.getHeight()/2 - scoreboard.getSize().getHeight()/2)); scoreboard.setVisible(true); } + + public void setLevels(MemoryGameLevel[] newLevels) { + levels = newLevels; + } } diff --git a/src/edu/ucsb/cs56/projects/games/memorycard/MemoryGameGui.java b/src/edu/ucsb/cs56/projects/games/memorycard/MemoryGameGui.java index d9463d8..83d0444 100644 --- a/src/edu/ucsb/cs56/projects/games/memorycard/MemoryGameGui.java +++ b/src/edu/ucsb/cs56/projects/games/memorycard/MemoryGameGui.java @@ -41,9 +41,13 @@ public class MemoryGameGui { static JTextArea text = new JTextArea(15,25); static JButton highscore = new JButton("High Score"); static HighScoreBoard highscoreBoard = new HighScoreBoard(); - static JButton start = new JButton("Start/Resume"); + static JButton start = new JButton("Start"); + static JButton resume = new JButton("Resume"); + static JButton beginner = new JButton("Beginner"); + static JButton intermediate = new JButton("Intermediate"); + static JButton advanced = new JButton("Advanced"); static JButton binstruction = new JButton("instruction"); - static JButton menu = new JButton("menu"); + static JButton menu = new JButton("Menu"); static Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); static ActionListener highscoreListener = new ActionListener(){ public void actionPerformed(ActionEvent e){ @@ -164,6 +168,16 @@ public void actionPerformed(ActionEvent e) { // the menu page public static void menu() { + ActionListener resumeListener = new ActionListener(){ + public void actionPerformed(ActionEvent e) { + //clear up the frame + frame.getContentPane().removeAll(); + frame.getContentPane().revalidate(); + frame.getContentPane().repaint(); + go(); + mgc.resume(); + } + }; ActionListener startListener = new ActionListener(){ public void actionPerformed(ActionEvent e) { //clear up the frame @@ -171,6 +185,43 @@ public void actionPerformed(ActionEvent e) { frame.getContentPane().revalidate(); frame.getContentPane().repaint(); go(); + mgc.reset(); + } + }; + + ActionListener beginnerListener = new ActionListener(){ + public void actionPerformed(ActionEvent e) { + //clear up the frame + frame.getContentPane().removeAll(); + frame.getContentPane().revalidate(); + frame.getContentPane().repaint(); + go(); + mgc.setLevels(mgc.loadLevelSet1()); + mgc.reset(); + } + }; + + ActionListener intermediateListener = new ActionListener(){ + public void actionPerformed(ActionEvent e) { + //clear up the frame + frame.getContentPane().removeAll(); + frame.getContentPane().revalidate(); + frame.getContentPane().repaint(); + go(); + mgc.setLevels(mgc.loadLevelSet2()); + mgc.reset(); + } + }; + + ActionListener advancedListener = new ActionListener(){ + public void actionPerformed(ActionEvent e) { + //clear up the frame + frame.getContentPane().removeAll(); + frame.getContentPane().revalidate(); + frame.getContentPane().repaint(); + go(); + mgc.setLevels(mgc.loadLevelSet3()); + mgc.reset(); } }; @@ -178,8 +229,12 @@ public void actionPerformed(ActionEvent e) { frame.getContentPane().revalidate(); frame.getContentPane().repaint(); start.addActionListener(startListener); + resume.addActionListener(resumeListener); highscore.addActionListener(highscoreListener); binstruction.addActionListener(instructionListener); + beginner.addActionListener(beginnerListener); + intermediate.addActionListener(intermediateListener); + advanced.addActionListener(advancedListener); JPanel p = new JPanel(); @@ -188,17 +243,29 @@ public void actionPerformed(ActionEvent e) { //change the font of the buttons Font bigFont = new Font("serif", Font.BOLD, 60); start.setFont(bigFont); + beginner.setFont(bigFont); + intermediate.setFont(bigFont); + advanced.setFont(bigFont); + resume.setFont(bigFont); highscore.setFont(bigFont); binstruction.setFont(bigFont); //set the buttons highscore.setAlignmentX(Component.CENTER_ALIGNMENT); start.setAlignmentX(Component.CENTER_ALIGNMENT); + beginner.setAlignmentX(Component.CENTER_ALIGNMENT); + intermediate.setAlignmentX(Component.CENTER_ALIGNMENT); + advanced.setAlignmentX(Component.CENTER_ALIGNMENT); + resume.setAlignmentX(Component.CENTER_ALIGNMENT); binstruction.setAlignmentX(Component.CENTER_ALIGNMENT); p.add(highscore); p.add(Box.createVerticalGlue()); - p.add(start); + //p.add(start); + p.add(beginner); + p.add(intermediate); + p.add(advanced); + //p.add(resume); p.add(Box.createVerticalGlue()); p.add(binstruction); @@ -274,6 +341,7 @@ public void actionPerformed(ActionEvent e){ ActionListener menuListener = new ActionListener(){ public void actionPerformed(ActionEvent e){ + mgc.pauseTimer(); menu(); } }; @@ -318,6 +386,7 @@ public void actionPerformed(ActionEvent e){ mgc.setScoreLabel(score); mgc.setLevelLabel(level); mgc.setHighScoreBoard(highscoreBoard); + //mgc.resume(); // to make sure that grids go left to right frame.applyComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); frame.setSize(WINDOW_SIZE, WINDOW_SIZE);