From 9ef15827f31010164e58816d460225f1e3f85378 Mon Sep 17 00:00:00 2001 From: Aaron Date: Wed, 5 Jan 2022 19:10:40 -0700 Subject: [PATCH] init --- .classpath | 11 + .project | 17 + .settings/org.eclipse.jdt.core.prefs | 12 + .../AnimatonClass.jar | Bin 0 -> 41804 bytes Animation Class (Version 1,5)/README.txt | 11 + .../javadoc/AppPackage/AnimationClass.html | 682 +++++++++++ .../AppPackage/class-use/AnimationClass.html | 114 ++ .../javadoc/AppPackage/package-frame.html | 20 + .../javadoc/AppPackage/package-summary.html | 132 +++ .../javadoc/AppPackage/package-tree.html | 123 ++ .../javadoc/AppPackage/package-use.html | 114 ++ .../javadoc/allclasses-frame.html | 19 + .../javadoc/allclasses-noframe.html | 19 + .../javadoc/constant-values.html | 114 ++ .../javadoc/deprecated-list.html | 114 ++ .../javadoc/help-doc.html | 215 ++++ .../javadoc/index-files/index-1.html | 123 ++ .../javadoc/index-files/index-2.html | 157 +++ .../javadoc/index.html | 65 ++ .../javadoc/overview-tree.html | 127 ++ .../javadoc/package-list | 1 + .../javadoc/resources/background.gif | Bin 0 -> 2313 bytes .../javadoc/resources/tab.gif | Bin 0 -> 291 bytes .../javadoc/resources/titlebar.gif | Bin 0 -> 10701 bytes .../javadoc/resources/titlebar_end.gif | Bin 0 -> 849 bytes .../javadoc/stylesheet.css | 474 ++++++++ README.md | 16 + bin/Credits | 15 + bin/GUI$1.class | Bin 0 -> 1291 bytes bin/GUI$10.class | Bin 0 -> 1003 bytes bin/GUI$11.class | Bin 0 -> 1094 bytes bin/GUI$12.class | Bin 0 -> 1094 bytes bin/GUI$13.class | Bin 0 -> 1094 bytes bin/GUI$14.class | Bin 0 -> 854 bytes bin/GUI$15.class | Bin 0 -> 1866 bytes bin/GUI$16.class | Bin 0 -> 2235 bytes bin/GUI$17.class | Bin 0 -> 638 bytes bin/GUI$18.class | Bin 0 -> 2847 bytes bin/GUI$2.class | Bin 0 -> 1065 bytes bin/GUI$3.class | Bin 0 -> 1065 bytes bin/GUI$4.class | Bin 0 -> 1065 bytes bin/GUI$5.class | Bin 0 -> 825 bytes bin/GUI$6.class | Bin 0 -> 1889 bytes bin/GUI$7.class | Bin 0 -> 2200 bytes bin/GUI$8.class | Bin 0 -> 2764 bytes bin/GUI$9.class | Bin 0 -> 1548 bytes bin/GUI.class | Bin 0 -> 21120 bytes bin/ImageCell.class | Bin 0 -> 2692 bytes bin/ImageCellRenderer.class | Bin 0 -> 1416 bytes bin/Pet$1$1$1$1$1.class | Bin 0 -> 1067 bytes bin/Pet$1$1$1$1.class | Bin 0 -> 1412 bytes bin/Pet$1$1$1.class | Bin 0 -> 1451 bytes bin/Pet$1$1.class | Bin 0 -> 1448 bytes bin/Pet$1.class | Bin 0 -> 2460 bytes bin/Pet.class | Bin 0 -> 7587 bytes bin/src/img/apple.png | Bin 0 -> 314 bytes bin/src/img/ball.png | Bin 0 -> 447 bytes bin/src/img/egg.png | Bin 0 -> 389 bytes bin/src/img/eraser.png | Bin 0 -> 14987 bytes bin/src/img/eyedropper.png | Bin 0 -> 1208 bytes bin/src/img/ground.png | Bin 0 -> 2142 bytes bin/src/img/heart.png | Bin 0 -> 492 bytes bin/src/img/newPet.png | Bin 0 -> 1488 bytes bin/src/img/pencil.png | Bin 0 -> 364 bytes bin/src/img/star.png | Bin 0 -> 197 bytes src/Credits | 15 + src/GUI.java | 1032 +++++++++++++++++ src/ImageCell.java | 80 ++ src/ImageCellRenderer.java | 46 + src/Pet.java | 404 +++++++ src/src/img/apple.png | Bin 0 -> 314 bytes src/src/img/ball.png | Bin 0 -> 447 bytes src/src/img/egg.png | Bin 0 -> 389 bytes src/src/img/eraser.png | Bin 0 -> 14987 bytes src/src/img/eyedropper.png | Bin 0 -> 1208 bytes src/src/img/ground.png | Bin 0 -> 2142 bytes src/src/img/heart.png | Bin 0 -> 492 bytes src/src/img/newPet.png | Bin 0 -> 1488 bytes src/src/img/pencil.png | Bin 0 -> 364 bytes src/src/img/star.png | Bin 0 -> 197 bytes 80 files changed, 4272 insertions(+) create mode 100755 .classpath create mode 100755 .project create mode 100755 .settings/org.eclipse.jdt.core.prefs create mode 100755 Animation Class (Version 1,5)/AnimatonClass.jar create mode 100755 Animation Class (Version 1,5)/README.txt create mode 100755 Animation Class (Version 1,5)/javadoc/AppPackage/AnimationClass.html create mode 100755 Animation Class (Version 1,5)/javadoc/AppPackage/class-use/AnimationClass.html create mode 100755 Animation Class (Version 1,5)/javadoc/AppPackage/package-frame.html create mode 100755 Animation Class (Version 1,5)/javadoc/AppPackage/package-summary.html create mode 100755 Animation Class (Version 1,5)/javadoc/AppPackage/package-tree.html create mode 100755 Animation Class (Version 1,5)/javadoc/AppPackage/package-use.html create mode 100755 Animation Class (Version 1,5)/javadoc/allclasses-frame.html create mode 100755 Animation Class (Version 1,5)/javadoc/allclasses-noframe.html create mode 100755 Animation Class (Version 1,5)/javadoc/constant-values.html create mode 100755 Animation Class (Version 1,5)/javadoc/deprecated-list.html create mode 100755 Animation Class (Version 1,5)/javadoc/help-doc.html create mode 100755 Animation Class (Version 1,5)/javadoc/index-files/index-1.html create mode 100755 Animation Class (Version 1,5)/javadoc/index-files/index-2.html create mode 100755 Animation Class (Version 1,5)/javadoc/index.html create mode 100755 Animation Class (Version 1,5)/javadoc/overview-tree.html create mode 100755 Animation Class (Version 1,5)/javadoc/package-list create mode 100755 Animation Class (Version 1,5)/javadoc/resources/background.gif create mode 100755 Animation Class (Version 1,5)/javadoc/resources/tab.gif create mode 100755 Animation Class (Version 1,5)/javadoc/resources/titlebar.gif create mode 100755 Animation Class (Version 1,5)/javadoc/resources/titlebar_end.gif create mode 100755 Animation Class (Version 1,5)/javadoc/stylesheet.css create mode 100644 README.md create mode 100755 bin/Credits create mode 100644 bin/GUI$1.class create mode 100644 bin/GUI$10.class create mode 100644 bin/GUI$11.class create mode 100644 bin/GUI$12.class create mode 100644 bin/GUI$13.class create mode 100644 bin/GUI$14.class create mode 100644 bin/GUI$15.class create mode 100644 bin/GUI$16.class create mode 100644 bin/GUI$17.class create mode 100644 bin/GUI$18.class create mode 100644 bin/GUI$2.class create mode 100644 bin/GUI$3.class create mode 100644 bin/GUI$4.class create mode 100644 bin/GUI$5.class create mode 100644 bin/GUI$6.class create mode 100644 bin/GUI$7.class create mode 100644 bin/GUI$8.class create mode 100644 bin/GUI$9.class create mode 100644 bin/GUI.class create mode 100644 bin/ImageCell.class create mode 100644 bin/ImageCellRenderer.class create mode 100644 bin/Pet$1$1$1$1$1.class create mode 100644 bin/Pet$1$1$1$1.class create mode 100644 bin/Pet$1$1$1.class create mode 100644 bin/Pet$1$1.class create mode 100644 bin/Pet$1.class create mode 100644 bin/Pet.class create mode 100755 bin/src/img/apple.png create mode 100755 bin/src/img/ball.png create mode 100755 bin/src/img/egg.png create mode 100755 bin/src/img/eraser.png create mode 100755 bin/src/img/eyedropper.png create mode 100755 bin/src/img/ground.png create mode 100755 bin/src/img/heart.png create mode 100755 bin/src/img/newPet.png create mode 100755 bin/src/img/pencil.png create mode 100755 bin/src/img/star.png create mode 100755 src/Credits create mode 100755 src/GUI.java create mode 100755 src/ImageCell.java create mode 100755 src/ImageCellRenderer.java create mode 100755 src/Pet.java create mode 100755 src/src/img/apple.png create mode 100755 src/src/img/ball.png create mode 100755 src/src/img/egg.png create mode 100755 src/src/img/eraser.png create mode 100755 src/src/img/eyedropper.png create mode 100755 src/src/img/ground.png create mode 100755 src/src/img/heart.png create mode 100755 src/src/img/newPet.png create mode 100755 src/src/img/pencil.png create mode 100755 src/src/img/star.png diff --git a/.classpath b/.classpath new file mode 100755 index 0000000..a436a85 --- /dev/null +++ b/.classpath @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/.project b/.project new file mode 100755 index 0000000..eee4719 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + Aaron-Gotchi Pets + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100755 index 0000000..021167a --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,12 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=9 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=9 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=9 diff --git a/Animation Class (Version 1,5)/AnimatonClass.jar b/Animation Class (Version 1,5)/AnimatonClass.jar new file mode 100755 index 0000000000000000000000000000000000000000..ef108d4095842a94ddd4dcdb02a86ff59e22ee22 GIT binary patch literal 41804 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 literal 0 HcmV?d00001 diff --git a/Animation Class (Version 1,5)/README.txt b/Animation Class (Version 1,5)/README.txt new file mode 100755 index 0000000..c047800 --- /dev/null +++ b/Animation Class (Version 1,5)/README.txt @@ -0,0 +1,11 @@ +Author: Mayur Singh (IamTeknik) +Version: 1.5 +Description: Custom Java swing animation class to move jLabels and jTextFields. More components to be added in future versions. + +**Important** +Make sure to use Null Layout for your projects GUI. + +To view the API, open the "javadoc" folder and locate the file named "index". This is an HTML file which will open in your browser and you may browse through descriptions on what each parameter requires. +You can ZIP the "javadoc" folder and add it to Eclipse or Netbeans so that it gives information while you use the class. It is more convinient but this is a very easy to use API so it's not needed. Follow the link next to the "Download" button on my website (www.teknikindustries.com) to watch an example on how to use the entire API. + +Thank you for downloading :) \ No newline at end of file diff --git a/Animation Class (Version 1,5)/javadoc/AppPackage/AnimationClass.html b/Animation Class (Version 1,5)/javadoc/AppPackage/AnimationClass.html new file mode 100755 index 0000000..6ace18e --- /dev/null +++ b/Animation Class (Version 1,5)/javadoc/AppPackage/AnimationClass.html @@ -0,0 +1,682 @@ + + + + + + +AnimationClass + + + + + + + + + + + +
+
AppPackage
+

Class AnimationClass

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • AppPackage.AnimationClass
    • +
    +
  • +
+
+
    +
  • +
    +
    +
    public class AnimationClass
    +extends java.lang.Object
    +
  • +
+
+
+
    +
  • + +
      +
    • + + +

      Constructor Summary

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

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Methods 
      Modifier and TypeMethod and Description
      voidjButtonXLeft(int start, + int stop, + int delay, + int increment, + javax.swing.JButton jButton) 
      voidjButtonXRight(int start, + int stop, + int delay, + int increment, + javax.swing.JButton jButton) 
      voidjButtonYDown(int start, + int stop, + int delay, + int increment, + javax.swing.JButton jButton) 
      voidjButtonYUp(int start, + int stop, + int delay, + int increment, + javax.swing.JButton jButton) 
      voidjLabelXLeft(int start, + int stop, + int delay, + int increment, + javax.swing.JLabel jLabel) 
      voidjLabelXRight(int start, + int stop, + int delay, + int increment, + javax.swing.JLabel jLabel) 
      voidjLabelYDown(int start, + int stop, + int delay, + int increment, + javax.swing.JLabel jLabel) 
      voidjLabelYUp(int start, + int stop, + int delay, + int increment, + javax.swing.JLabel jLabel) 
      voidjPasswordFieldXLeft(int start, + int stop, + int delay, + int increment, + javax.swing.JPasswordField jPasswordField) 
      voidjPasswordFieldXRight(int start, + int stop, + int delay, + int increment, + javax.swing.JPasswordField jPasswordField) 
      voidjPasswordFieldYDown(int start, + int stop, + int delay, + int increment, + javax.swing.JPasswordField jPasswordField) 
      voidjPasswordFieldYUp(int start, + int stop, + int delay, + int increment, + javax.swing.JPasswordField jPasswordField) 
      voidjTextAreaXLeft(int start, + int stop, + int delay, + int increment, + javax.swing.JScrollPane jScrollPane) 
      voidjTextAreaXRight(int start, + int stop, + int delay, + int increment, + javax.swing.JScrollPane jScrollPane) 
      voidjTextAreaYDown(int start, + int stop, + int delay, + int increment, + javax.swing.JScrollPane jScrollPane) 
      voidjTextAreaYUp(int start, + int stop, + int delay, + int increment, + javax.swing.JScrollPane jScrollPane) 
      voidjTextFieldXLeft(int start, + int stop, + int delay, + int increment, + javax.swing.JTextField jTextField) 
      voidjTextFieldXRight(int start, + int stop, + int delay, + int increment, + javax.swing.JTextField jTextField) 
      voidjTextFieldYDown(int start, + int stop, + int delay, + int increment, + javax.swing.JTextField jTextField) 
      voidjTextFieldYUp(int start, + int stop, + int delay, + int increment, + javax.swing.JTextField jTextField) 
      +
        +
      • + + +

        Methods inherited from class java.lang.Object

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

      Constructor Detail

      + + + +
        +
      • +

        AnimationClass

        +
        public AnimationClass()
        +
      • +
      +
    • +
    + +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        jLabelYUp

        +
        public void jLabelYUp(int start,
        +             int stop,
        +             int delay,
        +             int increment,
        +             javax.swing.JLabel jLabel)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jLabel - The variable name of the JLabel you want to move
        +
      • +
      + + + +
        +
      • +

        jLabelYDown

        +
        public void jLabelYDown(int start,
        +               int stop,
        +               int delay,
        +               int increment,
        +               javax.swing.JLabel jLabel)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jLabel - The variable name of the JLabel you want to move
        +
      • +
      + + + +
        +
      • +

        jLabelXLeft

        +
        public void jLabelXLeft(int start,
        +               int stop,
        +               int delay,
        +               int increment,
        +               javax.swing.JLabel jLabel)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jLabel - The variable name of the JLabel you want to move
        +
      • +
      + + + +
        +
      • +

        jLabelXRight

        +
        public void jLabelXRight(int start,
        +                int stop,
        +                int delay,
        +                int increment,
        +                javax.swing.JLabel jLabel)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jLabel - The variable name of the JLabel you want to move
        +
      • +
      + + + +
        +
      • +

        jTextFieldYUp

        +
        public void jTextFieldYUp(int start,
        +                 int stop,
        +                 int delay,
        +                 int increment,
        +                 javax.swing.JTextField jTextField)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jTextField - The variable of the JTextField you want to move
        +
      • +
      + + + +
        +
      • +

        jTextFieldYDown

        +
        public void jTextFieldYDown(int start,
        +                   int stop,
        +                   int delay,
        +                   int increment,
        +                   javax.swing.JTextField jTextField)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jTextField - The variable of the JTextField you want to move
        +
      • +
      + + + +
        +
      • +

        jTextFieldXLeft

        +
        public void jTextFieldXLeft(int start,
        +                   int stop,
        +                   int delay,
        +                   int increment,
        +                   javax.swing.JTextField jTextField)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jTextField - The variable of the JTextField you want to move
        +
      • +
      + + + +
        +
      • +

        jTextFieldXRight

        +
        public void jTextFieldXRight(int start,
        +                    int stop,
        +                    int delay,
        +                    int increment,
        +                    javax.swing.JTextField jTextField)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jTextField - The variable of the JTextField you want to move
        +
      • +
      + + + +
        +
      • +

        jButtonYUp

        +
        public void jButtonYUp(int start,
        +              int stop,
        +              int delay,
        +              int increment,
        +              javax.swing.JButton jButton)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jButton - The variable of the JButton you want to move
        +
      • +
      + + + +
        +
      • +

        jButtonYDown

        +
        public void jButtonYDown(int start,
        +                int stop,
        +                int delay,
        +                int increment,
        +                javax.swing.JButton jButton)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jButton - The variable of the JButton you want to move
        +
      • +
      + + + +
        +
      • +

        jButtonXLeft

        +
        public void jButtonXLeft(int start,
        +                int stop,
        +                int delay,
        +                int increment,
        +                javax.swing.JButton jButton)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jButton - The variable of the JButton you want to move
        +
      • +
      + + + +
        +
      • +

        jButtonXRight

        +
        public void jButtonXRight(int start,
        +                 int stop,
        +                 int delay,
        +                 int increment,
        +                 javax.swing.JButton jButton)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jButton - The variable of the JButton you want to move
        +
      • +
      + + + +
        +
      • +

        jPasswordFieldYUp

        +
        public void jPasswordFieldYUp(int start,
        +                     int stop,
        +                     int delay,
        +                     int increment,
        +                     javax.swing.JPasswordField jPasswordField)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jPasswordField - The variable of the PasswordField you want to move
        +
      • +
      + + + +
        +
      • +

        jPasswordFieldYDown

        +
        public void jPasswordFieldYDown(int start,
        +                       int stop,
        +                       int delay,
        +                       int increment,
        +                       javax.swing.JPasswordField jPasswordField)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jPasswordField - The variable of the PasswordField you want to move
        +
      • +
      + + + +
        +
      • +

        jPasswordFieldXLeft

        +
        public void jPasswordFieldXLeft(int start,
        +                       int stop,
        +                       int delay,
        +                       int increment,
        +                       javax.swing.JPasswordField jPasswordField)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jPasswordField - The variable of the PasswordField you want to move
        +
      • +
      + + + +
        +
      • +

        jPasswordFieldXRight

        +
        public void jPasswordFieldXRight(int start,
        +                        int stop,
        +                        int delay,
        +                        int increment,
        +                        javax.swing.JPasswordField jPasswordField)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jPasswordField - The variable of the PasswordField you want to move
        +
      • +
      + + + +
        +
      • +

        jTextAreaYUp

        +
        public void jTextAreaYUp(int start,
        +                int stop,
        +                int delay,
        +                int increment,
        +                javax.swing.JScrollPane jScrollPane)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jScrollPane - The TextArea variable. NOTE: Use the jScrollPane variable name for this parameter not the TextArea
        +
      • +
      + + + +
        +
      • +

        jTextAreaYDown

        +
        public void jTextAreaYDown(int start,
        +                  int stop,
        +                  int delay,
        +                  int increment,
        +                  javax.swing.JScrollPane jScrollPane)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jScrollPane - The TextArea variable. NOTE: Use the jScrollPane variable name for this parameter not the TextArea
        +
      • +
      + + + +
        +
      • +

        jTextAreaXLeft

        +
        public void jTextAreaXLeft(int start,
        +                  int stop,
        +                  int delay,
        +                  int increment,
        +                  javax.swing.JScrollPane jScrollPane)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jScrollPane - The TextArea variable. NOTE: Use the jScrollPane variable name for this parameter not the TextArea
        +
      • +
      + + + +
        +
      • +

        jTextAreaXRight

        +
        public void jTextAreaXRight(int start,
        +                   int stop,
        +                   int delay,
        +                   int increment,
        +                   javax.swing.JScrollPane jScrollPane)
        +
        Parameters:
        start - The pixel value where the component will start the animation from
        stop - The pixel value where the component will stop moving
        delay - Delay between each pixel increment
        increment - The number of pixels to move
        jScrollPane - The TextArea variable. NOTE: Use the jScrollPane variable name for this parameter not the TextArea
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + + + + + diff --git a/Animation Class (Version 1,5)/javadoc/AppPackage/class-use/AnimationClass.html b/Animation Class (Version 1,5)/javadoc/AppPackage/class-use/AnimationClass.html new file mode 100755 index 0000000..7baf42a --- /dev/null +++ b/Animation Class (Version 1,5)/javadoc/AppPackage/class-use/AnimationClass.html @@ -0,0 +1,114 @@ + + + + + + +Uses of Class AppPackage.AnimationClass + + + + + + + + + + +
+

Uses of Class
AppPackage.AnimationClass

+
+
No usage of AppPackage.AnimationClass
+ + + + + + diff --git a/Animation Class (Version 1,5)/javadoc/AppPackage/package-frame.html b/Animation Class (Version 1,5)/javadoc/AppPackage/package-frame.html new file mode 100755 index 0000000..21c1d01 --- /dev/null +++ b/Animation Class (Version 1,5)/javadoc/AppPackage/package-frame.html @@ -0,0 +1,20 @@ + + + + + + +AppPackage + + + + +

AppPackage

+
+

Classes

+ +
+ + diff --git a/Animation Class (Version 1,5)/javadoc/AppPackage/package-summary.html b/Animation Class (Version 1,5)/javadoc/AppPackage/package-summary.html new file mode 100755 index 0000000..9f37a1a --- /dev/null +++ b/Animation Class (Version 1,5)/javadoc/AppPackage/package-summary.html @@ -0,0 +1,132 @@ + + + + + + +AppPackage + + + + + + + + + + +
+

Package AppPackage

+
+
+
    +
  • + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    AnimationClass 
    +
  • +
+
+ + + + + + diff --git a/Animation Class (Version 1,5)/javadoc/AppPackage/package-tree.html b/Animation Class (Version 1,5)/javadoc/AppPackage/package-tree.html new file mode 100755 index 0000000..f013586 --- /dev/null +++ b/Animation Class (Version 1,5)/javadoc/AppPackage/package-tree.html @@ -0,0 +1,123 @@ + + + + + + +AppPackage Class Hierarchy + + + + + + + +
+ + + + + +
+ + +
+

Hierarchy For Package AppPackage

+
+
+

Class Hierarchy

+ +
+ +
+ + + + + +
+ + + + diff --git a/Animation Class (Version 1,5)/javadoc/AppPackage/package-use.html b/Animation Class (Version 1,5)/javadoc/AppPackage/package-use.html new file mode 100755 index 0000000..88c1e95 --- /dev/null +++ b/Animation Class (Version 1,5)/javadoc/AppPackage/package-use.html @@ -0,0 +1,114 @@ + + + + + + +Uses of Package AppPackage + + + + + + + +
+ + + + + +
+ + +
+

Uses of Package
AppPackage

+
+
No usage of AppPackage
+ +
+ + + + + +
+ + + + diff --git a/Animation Class (Version 1,5)/javadoc/allclasses-frame.html b/Animation Class (Version 1,5)/javadoc/allclasses-frame.html new file mode 100755 index 0000000..b9e90a4 --- /dev/null +++ b/Animation Class (Version 1,5)/javadoc/allclasses-frame.html @@ -0,0 +1,19 @@ + + + + + + +All Classes + + + + +

All Classes

+ + + diff --git a/Animation Class (Version 1,5)/javadoc/allclasses-noframe.html b/Animation Class (Version 1,5)/javadoc/allclasses-noframe.html new file mode 100755 index 0000000..0fa6250 --- /dev/null +++ b/Animation Class (Version 1,5)/javadoc/allclasses-noframe.html @@ -0,0 +1,19 @@ + + + + + + +All Classes + + + + +

All Classes

+ + + diff --git a/Animation Class (Version 1,5)/javadoc/constant-values.html b/Animation Class (Version 1,5)/javadoc/constant-values.html new file mode 100755 index 0000000..f3b4351 --- /dev/null +++ b/Animation Class (Version 1,5)/javadoc/constant-values.html @@ -0,0 +1,114 @@ + + + + + + +Constant Field Values + + + + + + + +
+ + + + + +
+ + +
+

Constant Field Values

+

Contents

+
+ +
+ + + + + +
+ + + + diff --git a/Animation Class (Version 1,5)/javadoc/deprecated-list.html b/Animation Class (Version 1,5)/javadoc/deprecated-list.html new file mode 100755 index 0000000..fc35554 --- /dev/null +++ b/Animation Class (Version 1,5)/javadoc/deprecated-list.html @@ -0,0 +1,114 @@ + + + + + + +Deprecated List + + + + + + + +
+ + + + + +
+ + +
+

Deprecated API

+

Contents

+
+ +
+ + + + + +
+ + + + diff --git a/Animation Class (Version 1,5)/javadoc/help-doc.html b/Animation Class (Version 1,5)/javadoc/help-doc.html new file mode 100755 index 0000000..a3418e3 --- /dev/null +++ b/Animation Class (Version 1,5)/javadoc/help-doc.html @@ -0,0 +1,215 @@ + + + + + + +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/Animation Class (Version 1,5)/javadoc/index-files/index-1.html b/Animation Class (Version 1,5)/javadoc/index-files/index-1.html new file mode 100755 index 0000000..df808a8 --- /dev/null +++ b/Animation Class (Version 1,5)/javadoc/index-files/index-1.html @@ -0,0 +1,123 @@ + + + + + + +A-Index + + + + + + + +
+ + + + + +
+ + +
A J  + + +

A

+
+
AnimationClass - Class in AppPackage
+
 
+
AnimationClass() - Constructor for class AppPackage.AnimationClass
+
 
+
AppPackage - package AppPackage
+
 
+
+A J 
+ +
+ + + + + +
+ + + + diff --git a/Animation Class (Version 1,5)/javadoc/index-files/index-2.html b/Animation Class (Version 1,5)/javadoc/index-files/index-2.html new file mode 100755 index 0000000..6f0c407 --- /dev/null +++ b/Animation Class (Version 1,5)/javadoc/index-files/index-2.html @@ -0,0 +1,157 @@ + + + + + + +J-Index + + + + + + + +
+ + + + + +
+ + +
A J  + + +

J

+
+
jButtonXLeft(int, int, int, int, JButton) - Method in class AppPackage.AnimationClass
+
 
+
jButtonXRight(int, int, int, int, JButton) - Method in class AppPackage.AnimationClass
+
 
+
jButtonYDown(int, int, int, int, JButton) - Method in class AppPackage.AnimationClass
+
 
+
jButtonYUp(int, int, int, int, JButton) - Method in class AppPackage.AnimationClass
+
 
+
jLabelXLeft(int, int, int, int, JLabel) - Method in class AppPackage.AnimationClass
+
 
+
jLabelXRight(int, int, int, int, JLabel) - Method in class AppPackage.AnimationClass
+
 
+
jLabelYDown(int, int, int, int, JLabel) - Method in class AppPackage.AnimationClass
+
 
+
jLabelYUp(int, int, int, int, JLabel) - Method in class AppPackage.AnimationClass
+
 
+
jPasswordFieldXLeft(int, int, int, int, JPasswordField) - Method in class AppPackage.AnimationClass
+
 
+
jPasswordFieldXRight(int, int, int, int, JPasswordField) - Method in class AppPackage.AnimationClass
+
 
+
jPasswordFieldYDown(int, int, int, int, JPasswordField) - Method in class AppPackage.AnimationClass
+
 
+
jPasswordFieldYUp(int, int, int, int, JPasswordField) - Method in class AppPackage.AnimationClass
+
 
+
jTextAreaXLeft(int, int, int, int, JScrollPane) - Method in class AppPackage.AnimationClass
+
 
+
jTextAreaXRight(int, int, int, int, JScrollPane) - Method in class AppPackage.AnimationClass
+
 
+
jTextAreaYDown(int, int, int, int, JScrollPane) - Method in class AppPackage.AnimationClass
+
 
+
jTextAreaYUp(int, int, int, int, JScrollPane) - Method in class AppPackage.AnimationClass
+
 
+
jTextFieldXLeft(int, int, int, int, JTextField) - Method in class AppPackage.AnimationClass
+
 
+
jTextFieldXRight(int, int, int, int, JTextField) - Method in class AppPackage.AnimationClass
+
 
+
jTextFieldYDown(int, int, int, int, JTextField) - Method in class AppPackage.AnimationClass
+
 
+
jTextFieldYUp(int, int, int, int, JTextField) - Method in class AppPackage.AnimationClass
+
 
+
+A J 
+ +
+ + + + + +
+ + + + diff --git a/Animation Class (Version 1,5)/javadoc/index.html b/Animation Class (Version 1,5)/javadoc/index.html new file mode 100755 index 0000000..4f26850 --- /dev/null +++ b/Animation Class (Version 1,5)/javadoc/index.html @@ -0,0 +1,65 @@ + + + + + + +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="AppPackage/package-summary.html">Non-frame version</a>.</p> + + + diff --git a/Animation Class (Version 1,5)/javadoc/overview-tree.html b/Animation Class (Version 1,5)/javadoc/overview-tree.html new file mode 100755 index 0000000..2ffac57 --- /dev/null +++ b/Animation Class (Version 1,5)/javadoc/overview-tree.html @@ -0,0 +1,127 @@ + + + + + + +Class Hierarchy + + + + + + + +
+ + + + + +
+ + +
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ +
+ + + + + +
+ + + + diff --git a/Animation Class (Version 1,5)/javadoc/package-list b/Animation Class (Version 1,5)/javadoc/package-list new file mode 100755 index 0000000..0c0e5c6 --- /dev/null +++ b/Animation Class (Version 1,5)/javadoc/package-list @@ -0,0 +1 @@ +AppPackage diff --git a/Animation Class (Version 1,5)/javadoc/resources/background.gif b/Animation Class (Version 1,5)/javadoc/resources/background.gif new file mode 100755 index 0000000000000000000000000000000000000000..f471940fde2f39ef8943a6af9569bcf986b1579b GIT binary patch literal 2313 zcmV+k3HJ6!Nk%w1VKM-40OkMy00030|NlK(aXwsfKV5S}VtGJbbVOr%L0@%CZH88Q zl{{NzcR^uxNo<2iYk@pjY)*5FJz8x~bc{)B zfk z+1T6M-s9WdW8dcJ-wO*3@9+W*5AY543-j^$^!EPz_4eHZ2#>)41`h@dc!2OAgN6$a zCS2I?;lqgx6IR4nkpTe;1RN0f=zxMq2O=q`94V5d$&e>Unta)^<;;^G3>e7yp=ZvW z6DIW3xpSvaogXF?_4%`@(V;s}NR^5J!3hrtJV@1QRV&r5S*L!zYE|rss${iFkg&!? zTN5V#)~=bmMorwgZsEpdOE)iExo+FO-8;8Kga{=HbSQCnF=E6W3?o*|ID%uwi5**> zJXy127Y9m+=HQ|PhXWi+xNwoWv}n_%Pq%(e+H~mGqhq5kv4Mo|-n~g|7!F*xZ{xv< zCpXS~dGg^IGK?4@J-T%b(XnUHFul6n<@2&4)zzyO2) z3Q8`i0+UKY*`$}e9mmp;tg*))`|PsK1|hAo%u0K$vDwm4gaSkm0j{`26k#qAKmbuhxZ#cquDR>B zD{s8+&TH-uNg$C#68QG}1HMBHfrP&L@@w$F_!itRzXdCN@V|LDAu%3!IDtq1#1UV7 z#1RxvT=B(DWbCoU5l=ia$Pp`Hgb_?Mp@hmtxZDI2N-)v#$}PXVvdm1d>@v(v`0TUJ zF)Pu89(q`zv=w^nVTIF3@3BYIPA}c`(@ZCAwbNBEt@PDUKe5CTR8aB66IE1!w%Amt zy+jpcn~k>GZpVFg+H6x{_uOksvBlq0OyT$6TyQZ37k(cOxZr|JEx1sGm<(M9gH z-~PMqyn|tT=))UN`|-FFFUA#KToK0fUOaz=7}Z~KeHhVC&%O27cTfHQ^WBU8z4p&T zp#>D|V}XShTD;Hx745Iz{`>K-Z$A|7!*Boo{mY;G21vjH8t{M!OrQc6$iN0V@PQDF zpadsK!3tXNf*8!81~qnXWuHZ)kytd=_y+ADWvw31ouV;CdZ#ya*(l7-A-C-Y^+iit8O zBy3*`Ls$|5Hn4m_^I^|C7{m7EFn|5vTk;|oywIgCc9Bb*=L+Y$)M>9GC<|HGs@6NB zHLY%03!dDf=eDRt2O6lVSFRcsuWZEwU?=z$CZ0W?#VJfdN>HG(l%oKpyiftJc|Y)xkjSJYCrQal-0PC~()T9xwF!Jf zVi1UA#3BBbh(i8r5&v#Pz!cF41KjbCc?4u2@@Q~oKLirt2TM30;y6b+zyX2`Yl9u; z`0$3;v0-YUp&7NdPT#q`cZlbij$jvbRk6R>8g*>}*b9E+WDwmpHAAxYzyT aU_pX{M6b8i>#Dq3onfZy}_nli%!Q$ZV%e&!tN2 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 YpWXKgmku8Vj|K)Vje`mzEKCg608Q#dYybcN literal 0 HcmV?d00001 diff --git a/Animation Class (Version 1,5)/javadoc/stylesheet.css b/Animation Class (Version 1,5)/javadoc/stylesheet.css new file mode 100755 index 0000000..0e0d70c --- /dev/null +++ b/Animation Class (Version 1,5)/javadoc/stylesheet.css @@ -0,0 +1,474 @@ +/* Javadoc style sheet */ +/* +Overall document style +*/ +body { + background-color:#ffffff; + color:#353833; + font-family:Arial, Helvetica, sans-serif; + font-size:76%; + margin:0; +} +a:link, a:visited { + text-decoration:none; + color:#4c6b87; +} +a:hover, a:focus { + text-decoration:none; + color:#bb7a2a; +} +a:active { + text-decoration:none; + color:#4c6b87; +} +a[name] { + color:#353833; +} +a[name]:hover { + text-decoration:none; + color:#353833; +} +pre { + font-size:1.3em; +} +h1 { + font-size:1.8em; +} +h2 { + font-size:1.5em; +} +h3 { + font-size:1.4em; +} +h4 { + font-size:1.3em; +} +h5 { + font-size:1.2em; +} +h6 { + font-size:1.1em; +} +ul { + list-style-type:disc; +} +code, tt { + font-size:1.2em; +} +dt code { + font-size:1.2em; +} +table tr td dt code { + font-size:1.2em; + vertical-align:top; +} +sup { + font-size:.6em; +} +/* +Document title and Copyright styles +*/ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:.8em; + z-index:200; + margin-top:-7px; +} +.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; + background-image:url(resources/titlebar.gif); + background-position:left top; + background-repeat:no-repeat; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* +Navigation bar styles +*/ +.bar { + background-image:url(resources/background.gif); + background-repeat:repeat-x; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:1em; + margin:0; +} +.topNav { + background-image:url(resources/background.gif); + background-repeat:repeat-x; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; +} +.bottomNav { + margin-top:10px; + background-image:url(resources/background.gif); + background-repeat:repeat-x; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; +} +.subNav { + background-color:#dee3e9; + border-bottom:1px solid #9eadc0; + float:left; + width:100%; + overflow:hidden; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding:3px 6px; +} +ul.subNavList li{ + list-style:none; + float:left; + font-size:90%; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; +} +.navBarCell1Rev { + background-image:url(resources/tab.gif); + background-color:#a88834; + color:#FFFFFF; + margin: auto 5px; + border:1px solid #c9aa44; +} +/* +Page header and footer styles +*/ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexHeader { + margin:10px; + position:relative; +} +.indexHeader h1 { + font-size:1.3em; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 25px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:1.2em; +} +/* +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-top:1px solid #9eadc0; + border-bottom:1px solid #9eadc0; + margin:0 0 6px -8px; + padding:2px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border-top:1px solid #9eadc0; + border-bottom:1px solid #9eadc0; + margin:0 0 6px -8px; + padding:2px 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:1.0em; +} +.indexContainer h2 { + font-size:1.1em; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:1.1em; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:10px 0 10px 20px; +} +.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:25px; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #9eadc0; + background-color:#f9f9f9; +} +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:1px solid #9eadc0; + border-top:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; + border-bottom:1px solid #9eadc0; +} +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 +*/ +.contentContainer table, .classUseContainer table, .constantValuesContainer table { + border-bottom:1px solid #9eadc0; + width:100%; +} +.contentContainer ul li table, .classUseContainer ul li table, .constantValuesContainer ul li table { + width:100%; +} +.contentContainer .description table, .contentContainer .details table { + border-bottom:none; +} +.contentContainer ul li table th.colOne, .contentContainer ul li table th.colFirst, .contentContainer ul li table th.colLast, .classUseContainer ul li table th, .constantValuesContainer ul li table th, .contentContainer ul li table td.colOne, .contentContainer ul li table td.colFirst, .contentContainer ul li table td.colLast, .classUseContainer ul li table td, .constantValuesContainer ul li table td{ + vertical-align:top; + padding-right:20px; +} +.contentContainer ul li table th.colLast, .classUseContainer ul li table th.colLast,.constantValuesContainer ul li table th.colLast, +.contentContainer ul li table td.colLast, .classUseContainer ul li table td.colLast,.constantValuesContainer ul li table td.colLast, +.contentContainer ul li table th.colOne, .classUseContainer ul li table th.colOne, +.contentContainer ul li table td.colOne, .classUseContainer ul li table td.colOne { + padding-right:3px; +} +.overviewSummary caption, .packageSummary caption, .contentContainer ul.blockList li.blockList caption, .summary caption, .classUseContainer caption, .constantValuesContainer caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#FFFFFF; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + margin:0px; +} +caption a:link, caption a:hover, caption a:active, caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .packageSummary caption span, .contentContainer ul.blockList li.blockList caption span, .summary caption span, .classUseContainer caption span, .constantValuesContainer caption span { + white-space:nowrap; + padding-top:8px; + padding-left:8px; + display:block; + float:left; + background-image:url(resources/titlebar.gif); + height:18px; +} +.overviewSummary .tabEnd, .packageSummary .tabEnd, .contentContainer ul.blockList li.blockList .tabEnd, .summary .tabEnd, .classUseContainer .tabEnd, .constantValuesContainer .tabEnd { + width:10px; + background-image:url(resources/titlebar_end.gif); + background-repeat:no-repeat; + background-position:top right; + position:relative; + float:left; +} +ul.blockList ul.blockList li.blockList table { + margin:0 0 12px 0px; + width:100%; +} +.tableSubHeadingColor { + background-color: #EEEEFF; +} +.altColor { + background-color:#eeeeef; +} +.rowColor { + background-color:#ffffff; +} +.overviewSummary td, .packageSummary td, .contentContainer ul.blockList li.blockList td, .summary td, .classUseContainer td, .constantValuesContainer td { + text-align:left; + padding:3px 3px 3px 7px; +} +th.colFirst, th.colLast, th.colOne, .constantValuesContainer th { + background:#dee3e9; + border-top:1px solid #9eadc0; + border-bottom:1px solid #9eadc0; + text-align:left; + padding:3px 3px 3px 7px; +} +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; +} +td.colFirst, th.colFirst { + border-left:1px solid #9eadc0; + white-space:nowrap; +} +td.colLast, th.colLast { + border-right:1px solid #9eadc0; +} +td.colOne, th.colOne { + border-right:1px solid #9eadc0; + border-left:1px solid #9eadc0; +} +table.overviewSummary { + padding:0px; + margin-left:0px; +} +table.overviewSummary td.colFirst, table.overviewSummary th.colFirst, +table.overviewSummary td.colOne, table.overviewSummary th.colOne { + width:25%; + vertical-align:middle; +} +table.packageSummary td.colFirst, table.overviewSummary th.colFirst { + width:25%; + vertical-align:middle; +} +/* +Content styles +*/ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} +/* +Formatting effect styles +*/ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:.9em; +} +.block { + display:block; + margin:3px 0 0 0; +} +.strong { + font-weight:bold; +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..1109889 --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# Aaron-Gotchi Pets + +This is a Tamagotchi pet simulator created using the Java Swing library. +This was made as a project for my grade 11 Computer Science class. +All data for the application is stored in the directory `User/pets` +The data consists of the .png files of the pets, and information about the pets' food, and happiness levels. + +# Creating A Pet + +To create a pet the user is sent to an image editor where they will create the pixel art for their pet in an 8x8 grid. +This art is then saved as a .png file in `pets/img/petName.png` and is used to preview the pet, as well as in animations to play with the pet. + +# The Time Machine + +This application uses System time to update the pets' age, however having to wait hours to test and showcase the app isn't ideal. +This is why for purposes of testing the app and showcasing it, there is an "Add Hour" button to increase the pets' age. \ No newline at end of file diff --git a/bin/Credits b/bin/Credits new file mode 100755 index 0000000..cf6cf76 --- /dev/null +++ b/bin/Credits @@ -0,0 +1,15 @@ +Credits: + +- Developed By Aaron Cohen +- All code used from other sources have been credited in their respective classes +- Pencil image from https://favicon.io/emoji-favicons/pencil/ +- Egg image from https://tamagotchi.fandom.com/wiki/Egg_(growth_stage)?file=Egg_sprite_pluscolor.gif +- Heart image from https://opengameart.org/content/heart-pixel-art +- Apple image from https://opengameart.org/content/food-items-16x16 +- Star image from https://www.pixilart.com/art/star-sprite-8bfe7c1ce79530e +- Swing animation API from https://drive.google.com/file/d/1y7oeJrSyhCT2K81J-jcf0rKZtUh8qm7u/view + - I found the API in the description of this youtube video https://www.youtube.com/watch?v=slNJzG8lIf4&ab_channel=TechnoKID +- Ball image from https://es.pixilart.com/art/beach-ball-44b02b66028b3d3 +- Eraser image from https://www.pixilart.com/art/eraser-16x16-0ddb417a2f8ebda?ft=album&ft_id=94901 +- Eye-Dropper image from https://icons8.com/icons/set/eyedropper +- Ground image from https://www.pixilart.com/art/ground-grass-2dfight-game-02cb93a52eb1bd5 \ No newline at end of file diff --git a/bin/GUI$1.class b/bin/GUI$1.class new file mode 100644 index 0000000000000000000000000000000000000000..9a2eaed5fcb4950530c9341d11f1d3f2e066774d GIT binary patch literal 1291 zcmaJ=TTc@~6#ix@Y*`m6C?Xd{1+=Y~T5ev7ms$ZAw@^hf@om_Su(Iqn-R1TJOw_2+ z7$5uvJd+?2AB@lbCZnF&7J-OvvNLDS^*i63`Tq0ER{(=}s6t_=9eZf>q*X*1I-c?+ zp5n_vN-POCNaejnUu28C6o@iIT`*_+Jr^m$q>v0LhHcjlt}{gAp(ZiS5XpH(Q4fX# zI%-j;p#}{)R2*ceiA#q@({{zg;=+t5Kj1TtU}!cyi#yZ2Y|C?18Ii>pRGGLZO~v#D z2`1;**1RY(9FLp(fgO>!Gl^*pM{ra{D^;ZgI@-`qFu7$3KWt$eu^}BhbsWR-9ebLg zv)WOm$YNkSscgB-S54awG8#_cl!}uKhe8Z{%{sc#Lv?3Gz|aym5|tbdcV|~4nv4MWK3xQ!7??EjTGLR?L&7~7^b zWNc)`5~aZQTxyYKrQ<)hPMkU1udv4qhPILj9&vxd3#u&b%GI*#QvRrE${MBuZq4U; zDI7x;1xoYJIb+bKyv4F5Mr}FAQJS<1(wXjO#I+pHC#v%znDb~}b;ET8h0iZ>^y_ zzhmDwU_C@+ViKcNU*b&?J}A!-RbHS=d5Me4D_mDzBdffDsk}u&c?Yh%ho^i9drBfA zaaVhi(j6F-HA;gsj=R)X0bMYWCuxE_TT$}^S@sJJP*gCLO4BmhMdk02S;2iw(H^1a O0X(2zqhyjc`hEi)ks8kc literal 0 HcmV?d00001 diff --git a/bin/GUI$10.class b/bin/GUI$10.class new file mode 100644 index 0000000000000000000000000000000000000000..aeb9a5231c6d1e048c56624a0b10849fc3587d6f GIT binary patch literal 1003 zcmaJXdCL1%&xA1aSf`8A<|j;oYG-jAGZ4wt!suJNy|Y zIEfd=Yk!3oYT}}=X5N_K+Zi1nsMp$KX%-XIU z&M|c5BTr$2AzAV2G6jb796GuTB#`DvA;XZ!tAKRPcIETE=BD)5#ik<}dTO2}oDJdI z>K;3jij0sIFv%viw21VqN`K4qo3hR@oUi>;@}iPoE^HXMi~${2h?-D129YI1VOcT= za+3_%Saus_FSH$V!S}_XD!HtZuW}4yiI&AjB*O&pwXFxNLP+YOi@F& zsQtmVtgkxa&~_UP?3GeI&1vW*!j3DQBH06{OMPPo2NZ9v+fC_Hq4)7n#{-6LRmhp2 z9A!1RWDt703i=Vp9Oh3NGEFRPrpd|KlkfcY+mqjae*6MZ#DI|D&x+@KSC|LmDG0u2Nf4;JAkCq-L0=@cm4Yw%SGxMLy~Nq2=u8&l-j!?2?Kb z3}aILbYa`|n!?j1`g#~9F^)+U6Ab-l6cyKYJ&v2WMNMB-pD?64h~Z*M!zeP+jynuP zT^op2YZCh&aw@XqN_YPVj3bXJhNLfoh~mtJbDYs?+l2=l)7_h&m+Uhf1YS=RtYN6MhRc3Yk)HY_QPSUd1+iU-+1$F;?hPVX2gyWr}*}uOdPDBt>)d zEHheu>N{PI!M}tx19Xj34U}1=DCRPThRYbFJHr(WwG}>-u2guL{|4;@!#^?l?kmRP z$GCljyHWCfl+^!8&R$HmC5})$!BPh#O)a1lF|5oZuPk6ySwurw3c=D*^EMb^;4xMR aO~EQb^P`{X8bdxD?~!#Bq{hJK8TJ2 zqcc8$59N3^DYSx}X>xM*QRLvrJ7H8(w@BEc~H!8|Z^^DxxK zfp9~8(`yEz+%P|e!l%k`*A8-14Ba()r$mWG+qJ_bhEzVv6t)-=hSv~jFkIs3MpA=< z9u5_~3`$-W^wn%vylC!k3;&I|?FfecnrE5Lmg(E_xs^=FW~3~I36Hw*eMw_DwzVf3 z45Rtl|7a@`yj0lIkj0RStJIbhIIiJ3shO4~f*?0fTWujnBA@i&&~|t9XLZvRPD#ZL zh7qZLy0Go}4dLq&eKiWx7{$1XF^1kV3d3_epW`NOQPWqIHHJ(ZFFghaaTGDZkPbu`Q=GYQjx%0ux$uBvvUBrul6{I}T5@);*2>0n zY1TuI+0L>Bi89ZzfJY2HJJiy&_I7-)>5}>V`NGAmW$}cggvGYc^yX0P^ZDv%60G`|ltYZM$V)46rJj%w1_6E;#!Uu&;f3WaMx>a7$EceOe?fK zw=Vqmp1&_gW~{^USic;VoX!l*Sk-lfZ#ZTUhydd>#tMBZER&J5Oi>s8Rir4Nrf8O) zWkxGbe5cDX_?M`rkFH6ofwF=O#azbFa2fq{XSjj^x=Mx5q$?F(7QaC|!Qf8}zx#@j zkc?8Kys7{kB^H8bk^vdA|>W5#|q{d61gyw-(iTA-MUDE;TlIL;u;im zaj58KP;#=Mr)D`~wQ;yBye(tb77Xc{YZ~^B;aT#znT*M1q%4IAkGk!mjJpg{MpOr7%ol2qP+n8M-eh%C7Bt9CvY#nr>8HF{E0E;bKw40J74K2MoP! z8;Dk`68jPIDstpXd;bWGqkvI{q%VSq;=+YXoY892g(njQ(!3&Ne=2||}oBff`m#f1`Fr%}q zI-%{8bSSN|wgHTeltJ5c8=fhaEjcs^I@K|05lvLZF>TkU16&cozFX%ggUs(S%)oM; zHQ~K?y+b)N!)=a7`lYbsd}e6Is*WSPvTgXj@G(MTtk9>zQYksh6m`&FMS}84il*pU zX0*cSce*O8_>!wvK{6+V-$R9G*3gLa0#pBQ-e6@&3p z+&{s?DET-_>i;C4UQIS7PB49j=Pi&7wScmYK4k+1WfKd^7S@#Q5G)flZ-Nm9USgim Z6f6)_2NqGHdyJ-I2^ESoT9aF$-(Oj^^UweQ literal 0 HcmV?d00001 diff --git a/bin/GUI$14.class b/bin/GUI$14.class new file mode 100644 index 0000000000000000000000000000000000000000..53c1588977629f26b67670f335d528c024513e2f GIT binary patch literal 854 zcmah{U2oGs5S)wCICV{90+d35gf>8umZnG`fr5}wRH~xzAr>-5INsD5NJm8g^?**G$dErGc{>AC{`v5Xr=#pKZR zuk>d*p7(UD)81HXqf&xPkE0~Yo(QZp^YDLwTLXb&Pmk0*1S&pUl&y8%$2>d_4leju zz(oP4X`z*Vl&F_SheMUVk;7OCRQo!V@j#}LJx?!-wtRuI%}yxVSEG<*&W^sG-h0`zp&NU^&fJ&fJkFRMpDT^{|SDi#7JZa(vvv zZHCA&RK_$O3M|ivG!tgqEr*t2Ph|qN{}e3X?dhX5RL>$SOPQ%QZQaytI|*ZLIP4cH z8|#seyV&Hl46{fluT}b9r-zE7)Fz_jHB1zFnnQjmLKSxtK9623jZp@54$9%0Lm>$4 zAq;97uB?>SnJcy_o~+UsXnY;T+)Xn#iaV-CE;e~Cai@32JM1`&$OSmsXo zadk?wLmEq5X`hni6u~E~e8J7%G@f-kAr_rcPPH_FPpK^F9W+ViphcPj+F0jaTUQ%Z6#h<5$Ryzu(m|Ylq1x3=DH{X1LVL zPw+p~C!g)Ilx3H`x|XlL>OXP0+-D|*q@r1Ca?b4i&Axp5^4s4({Q_VF%0P@EapPXO ze|W?|oFTJjZkq+ibXN+q%WKjK3?vv%hf;GVD9CN;28D4eu$5c2{Xn|XBMZT*?e||~ zXseQ~BEyMo)9Lr6Lk5&rQf^?{A+WouE$tTk9h*GdnloML5Ik|!cJ1IAL+?On;3!nC z#t<*5x=ewgQ@}t{-;N8UkWPc6OQ0Ry417RCJFDdJ_SVL-^zNF=j%3JIm1R0L)3fz^ zLm1bQGbFWJ;(%i5G{fZPr1wa98?w%Db|8$W@M`{3nu}ttmP9W@Y_^id8T1)AOCgXo zfpa)dmQBl&zTba^;Z&4dt~I-9&)ks3B>EXdX;mp-_LY>Qyfog%fPr@ydRjP}-PGJ` z<^*!cQ_1{QwG&AvZPQUJ3_(-GCAG1sTpekYMN@5?CG&wtB`KE6Ezy-N%W#~AV)Ub&JKE@py%ZciEsY0z1RZ=%{sHRvdxU1*p9z*xP zd{aequnPj8V3F#igAM&LoQc4%L=g7bMHbzf71Zj`a?FzkfIy>`&&(M({dWKB?IkG>5z!UVJARzcUUZcDIh@j}f zNjjPK9GPJc$hbE1XZ&aIMV>u1Ka>9v9s4*sT`xuNr+(#h- z4YoZ&_fxzVy^Zc+Y~g$KHgt(6IDVkJu62>(`T@GMhZ_yq3se@LVkYq%^LwZ@5Ye%; zheP1#QNX1L_}PKEr3hs<%xO|MG$~`~psR~CS2)kVK!JN0<34Wk05!gaI^V%A-^I85 zF}~wpVvm1?U-{SggMSke*%y)3Ad+Z99g?U_<99s53e{wlyrdBO3l#(QNrJDDAcl1~ SbjGQBH{jAOO&{r+(C;6O5X@8n literal 0 HcmV?d00001 diff --git a/bin/GUI$16.class b/bin/GUI$16.class new file mode 100644 index 0000000000000000000000000000000000000000..62bd25fe6a5ece72e032f62b973fdf679efd568d GIT binary patch literal 2235 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 literal 0 HcmV?d00001 diff --git a/bin/GUI$2.class b/bin/GUI$2.class new file mode 100644 index 0000000000000000000000000000000000000000..52eca050fa4eefe085fc37230ce752ddf6e8b03e GIT binary patch literal 1065 zcmZuw?M@R>5IvWcZo6EdB2*MX)T%8g3&@9B1fdjDEe5}u`17*8ft6*K>~29H#0SwR z5KVjlpToqjcQDS~t+awodOLS!?#!7pr(b@5{0v|kD;nAu+V4LvXD2np83ta8U15m5 zz>vGr35->@?#soR*a@V^kO(#{KRZq@D)gj4jycP*f_a8yF7)K94Dq5{lPNHCaI_<# zBZf{64P6YeoJ#1fSdM&D-(HvAGqG+5m-vp7dEg=tFP&rZ{%4a8xQSBAf5IUB}zEZpE2YaM<@VISw1P&nI{ zDvQO3imaO)Q>|&U3d#(}EN(G$Zcs~MZf$sO-68UOa`}^^WpIb1fVn2m^s+zV`FM6H z1T)%Y*$HW%prtg^TJ#sKltF*$);&|MSV}WV+Ul61hy+z~OxyKofvYmubZZ<%5cwT7 z%ipoZ>tzv85-D^|Dq)b2%8nzwqAh%1`WPmu#^~R`(rKkvvfAjYAxZueSyOaZ9(`o= z104t8Z^N8!Iun!wd_|g09@;uip@(h^r_tM}@P_KD3XezLLq9~{Ck(uJhrz@FF7M-N z5IvWcZo6EdB2*MX)T%8gi+rj@5K1xCV(_bpKQG%GSXp+-?iTbxd=QNS z(ZmPvaZLRBW1PENX$70~cJ9pFnKNfjzx@9A8Nf7FG_*0a-+x}tPHKoV47?P(!Vr6b zA$O${7^`mGmy0#A6G)FC5o}t1cAQ>R=t+SbbCzQT^9;#c=*d?Z;zhS6Q()-eXh%Xv z44oVrx)@?PmC#+W9Qmley)M0HV%?SuJr&m!c2#(mx;LD0)r>(?g|m~?jBhJ2McXpB zWQ}1cSNR{r!jX1C z!+C~5RsC;Z-SukHGZgZr&`eKS2j#xN`Gm17?xWO^jI{dW4KF)Dd;cQ>3 zEEXRsvL-pETGM6~lo^g$++yh5pq9ei+VI@EL*)15@+U{j;0{Ltb4{MJO&}R+0enLrzLQ3NU;#g|hF>ADOw_yqj9}m{<_TJivedBm Tut>jglE4y5Wa$)BW6|diRVD0@ literal 0 HcmV?d00001 diff --git a/bin/GUI$4.class b/bin/GUI$4.class new file mode 100644 index 0000000000000000000000000000000000000000..4f23d525ef56b26cfcc6ba3e7016d9f226acd50c GIT binary patch literal 1065 zcmZvbeN)pw5XPUQFKNR86``UCqE>B-5|jdJ5rk5lYH{itGyZv`HxLO4lcb;@#1EpQ z!03!0zz^lPmlRsTPJ7wx?d|^V+3oK?KYjt2#hQj5hQzaXwOmOp;Xex28M8){7f~nY+xg(nl z8 z7l?Li3i}QU8uBDccl`*Aqlig{v@e5*;#7q*oY8Jug?k)R-It$L?9&|g6=!0lzFc{s z#G2tKb%)IWio1B$?Bn>h7|eJWR>V$dGzAscUq3X zzl1RZv?eJ=eKTZpWkAOT4APU~B8F&H89q~9mEl$K8}wrg|HSC~uNX@n;pQQ3N6x#E z)A+~v;JmY);t;dPc+>&OQVFmahFKg%mcSBAqQSHfEE^SXgAoRvV3E*bSR$w%JjF6S R<1_**sFJ1Ap1KNs{sKCA=IsCg literal 0 HcmV?d00001 diff --git a/bin/GUI$5.class b/bin/GUI$5.class new file mode 100644 index 0000000000000000000000000000000000000000..08426986b576870becfa9aee479e88fd51223a9c GIT binary patch literal 825 zcmaiy-EPxB5QWdgX`DKyaRUv70u8MJCoOevB7uUq38gA>0jZGtjk9W885?=GDLfWZ z3y2FIfQLfNrjZC2fTi{Ro&9#^%>MZK?K^-jc5Rdh3;S;m{H~2M!8;KX5vC$L4qpvV zWUOse2raYvAyj7xugi(dbl4xWMn;L!GLr?NqQ{BycNrEjtw(StBK4I_nUVAUS~Smi z(a+Po=#TSU$%4g|CrOs*r-aR5di)>a_JC0C=OeiYLfwUpsu?Z2ScK!i!c`YFTq9V4 zk=COmlP^!-4Q2603{y#HM0qUIfhZC)pDmV6_ypVB?srZ2N((J7vm6mNfsizKbG(mex4#gRpYFz0#*nn?ilT+YmT-?KbJ|f~+ zD&;>Stj>8fcg$p4jSb;QYQp+|0wy>|`Dqc$=ZSHp%2(}}xY@G3EKYO9wLX-3oR3^Q z#15f0O4R#Qe0(M}i>g8NTAH-ks)LN5KtB~qNre^{!{WAplINM~0A9n?h96vsTMaJn zUg6PWo?G14J6ji6>TF-Y>wH1u(^R;^{|XC1%V_f09AYW1W0iaM7&m8_ea0AYy>rf# zb9kSz_7!)3V;r+hD_ElD6xF8)E2V2~ixeD6|dF1e(xtzaW`}VU3 literal 0 HcmV?d00001 diff --git a/bin/GUI$6.class b/bin/GUI$6.class new file mode 100644 index 0000000000000000000000000000000000000000..35e38465eb3e98b13d0edcb47afc3f3e83157c6e GIT binary patch literal 1889 zcmaJ>-&Yey6#ga&*(8h*0~T9BX^ol$Bw{O8VyzHBBSENWDA-zu%?OLj4&7bA{t^8j z>{FlXQRK9zeeF4Y?Q8p=^z`)3?h1*e%{iNyo%`*b?|%2kZ-4*z3xF&5+CYq<(Dt7&{+>wr7o-ln&Id#kPr6XO2q`z)?`Ag)f zPOd5pCw7FL_oPh@lv`DfFRTFATi2eRmAzeyZn(1`9BC6gdEIg>{{};UA#iXMs@Pyi zR8>=^!O+cNAf;5U#!}aAy-$Xup7d)^m}xe z(99VOeQkb>sC0`Uwgu@vQSPQ}GMp&{bjojsKdq&x6dNh@GsNa+GdPVw180Z5G##U?(ZpIaxvXVlcfmhd+^5kGu*~-n}JPHObF!Z%aHov8%*TQiW zQKF1_>uNVVow9_j))@R2##Obsr5w#PjG`sAttX4VOBt!uYHjRlrgAC||M$bNN-D*g z4u6>AB1Ra}QPiVU5~(Qc0C0(86qj27qqGkJwPGVpENsC_46EiiSm%K?R=}xK4R*(=V`c+`y-lC()$*mX1^_OjD5bLkTsH369BD9#{2E zQykNnVK}xX{YhayU31m8L%wr`Hb0ctiiY3jsNoL5y>@s{8x@T%HVo9G27J>ttIBOk zx2y|%GT5eZ7YhdF8M+P{H7FvE&v1{raAouyI2itaWA zI)eDU=_!UzGiZ>2JI#v2Xj-RI*p}4ND(Dny?w%tmn6zK?DN%D`E0_cZsBbchYTGsC zjHSm#ikf&t%Skg~+A(eAQG?7$e_b^>94Mj_mFSf42}E_iAoV<;+O0V>?W(r$Jn3PO zrc|7s4#cuqJ+^>sP7f`bz%hC{!O41zcGu`VPHT5*=oPw3!>^Dny+-bb0C|Y&ddM+ literal 0 HcmV?d00001 diff --git a/bin/GUI$7.class b/bin/GUI$7.class new file mode 100644 index 0000000000000000000000000000000000000000..64a9f1e619cf49c6c375e5b9bb17ea094490d67b GIT binary patch literal 2200 zcmZux&sP&y6#gy=3B;!&h`&&4Emep=QngeIwp2pYXpqz(2)5NBdBxEogUNtsTkW!c z11ooKx~Zoir=HVQSKW2dU6)<;FX*q+)9=lUaiY#S$-D2pd+)pVe&4-6|M$a>00!`N z5-oz(b64`cCzFT^dTv=uR>r#PW%QD+dYLhIv98ZltOZZk1PSk^UGIH|76qCN3DlD1 z^m?xA6zsYu=qecV)}V<7ES*o4g~#IR4H18)jqea7YHf?d^@7UySm zZNi#$G*cR-XKt{>3UsP1bh4Z0;{BlfDbk4Cd5;M-J?R6ha0>4WHrBN_VwG>t)!fA@v*?Os5qRmJOoG{NYS7O= zPGJxqm@*REWM7`2NpS!lDV)Iw{W6!R-_E|*gg1y$g&fY3C;HB!Wmwc5zVBG1>GlwZ@L!pFEAQ8-39P+&6c zbTOfD1!Rb-*!2a+y5|>;)N5vO&?n}}s|wSYc@ZKj-xI~A(SFZO2Jnf(r}&J}S`}75 z-BkVg1-I&xCkpKIL-XDZ1uOabYhVmpD;3ZG++vtp!hCVP>@ zi#}i)H-%Z)2HjiCwkala8$#_U%%jSh84CHn8%^*$(eU-))^CCg78LG8gB~yu)fGGw zQS5SVl;kNpcKNohj90UqO)TPz_#(3}=qy31Y=+H*Thg3!8%rM9JZ3F~U7ISoi?y;o zYn#4qWB(jA)nU`;s%6Kma~O_k@1|Q(_zDjM8$zTE-sy3&VN z(VafBitXv{_$qd$yIWV$lirzF#h&z2yz!lHzn}jJ+Czr%7G-5*96&GL<|>p92Hsl^ zG9pGP57XbHdkuXnI6-MUe>;!!ugCm#t>fq#-lepsaULF*9?Ln3#xnj0Llh&X&oDS0 z~D@Yvyq@*1)$_?0?cujsAAMA9|Aj*Iad>lim1%JjMQ z2};3kY7N(>9%FZSmw1FNjl1jSF1Wbf&>ju~r=#o7FgyJOmBdrrT*K{9BUoI9*-)H% zouV5khGnEXH_)nu?hI@(7}#d8jc|-0C0Xp3QJj<MnTFB{)3T!;U+P-<8R)?aF6FLxQ{Qm#yMHO#6wCc+8T24`yV(#4-)_Y literal 0 HcmV?d00001 diff --git a/bin/GUI$8.class b/bin/GUI$8.class new file mode 100644 index 0000000000000000000000000000000000000000..725de18f544480852b7f980cbf66119d58863a52 GIT binary patch literal 2764 zcmb7G`F9gl6#gDbJ876MM8Jv^R4S&WG=Q=Os-s5n+ya6>W*2%R?M+7=~!3)F`4uXR0=fcQ)|SF$zhrCV(m%K&SpC8yeBi#6{z$E z?R?`JYU-q_xIopgXLt3Isc{ zDOm-9t4tUOsof$IRS2uy)h6b{RJ&_TRHG)00IoGri=_gAsJdR;X=mjA!cf0-4_f_> zr01R4q~-KluC3lnhe4G*0YkanxQU_ES~|Vm(jCaULoy|>JgObn0hc4NQ=t)W>NU_P zuyh(Ed&o-5*!IG}fOKUlq29t+ftAX;o0zI-B9Un74WkLG3^dcNE8#KGg4Kj5Exqkl z^8U1&EoA6OB-%9NiJ$r~VpwZ{;MYt$pud<{hns1QDh}-4u9K2bZmc)4LA#OH9}H{~ zF!fbC8{1_&(!ds`SD$Di_ININv%O$DDd~o=mGmm)rQ14~9b#N4D6h(R{LRMH}()NGO{4M2L7SaFPgbk zZpL1P!0lwwTwe5su#ZfS<)oL7*+c1A7@N^$q8oQGi&ict6#}d0y6R(67CTGH(0CJ-|Sxi5tHnw$e$7Eb*ozVWeRj z7^HcYkcnfspUzpyq|E0V*RnADj!=TR;Mq>B-F2-Ks(-}|43SUTwGQ?x16iu+mY!02 z+=L63X4RA~(m7O8Mk;4ePyv9ZKcSN#nD8W?I}W1LmH2ocnpu11$4_yKw97l6Hnr)ne6dGDNpZolh?@&;|08A;6;H2v*@Qjns^znu)f#@dZfci!%juqM@h7(Hg*!P znRp#(K4T6mZ%?-1CZ%ed1cmf(RnnXxJ2Ocqn`htL zC%wUJ%Eb5hf!0%YKId2`c32*T$Yq~hY`}>OCwYfsp0Z{d@2yEt5c&7sEeq< zr&o?Wy>jUBpNM&UYEeh&1>Ei6dj;1e&8x-`X>J+A!sgXuSloO~a18a$<5+TD-)Z1) zCGSA=V;T3R+G7cp(>4!rJ#O$dia+>`8pYa4tmvx?)rBg?apS%~+c~TaYzUsi(w2rr z!RDW^uwmVz;JPBBMYI-i%juw)I=*=J@^7aDqCp99|LY_+_Dy1QUnD+(Z4>AiMa@qqvSh*|;@IPJea9Vp^?e>=eKt3Sgj;!PgZkKx_(OyCGkvEt7VOqK990tGRE zYLP}n45D7xXyv+%?+KB?h{&;x9LH&q$0gy33Q-W%Vp!CR5wS*$YM|N(8^I_6rFI|U zBU-8!jW~;s34blN;1hgGn~M;|XWRwp#|3VHSgWzOoL l0b$@v9vhq|+@4V+{F?If@D0A@8e|Lm4vIiwT2zGL-{0#o#Ss7i literal 0 HcmV?d00001 diff --git a/bin/GUI$9.class b/bin/GUI$9.class new file mode 100644 index 0000000000000000000000000000000000000000..07150703459a23968453f5e3b7416c3696a51152 GIT binary patch literal 1548 zcmZux|8^5a6#ix!y6rNhX{ZGe1fAth-;Qv$6hPBznY%Vsz3Zi_yO zzJUMuj~om+dX5j^1NbtY!|~2;Qqsbnv%52Q?tJ%t-@P;cy!!KR09WA{;0#CZJSfdB z7)UTAcjTVTInr(ARvSCY3Jr`hoQbURS(sCM$_;aiR%m-}*$zVGDxcx#o^)p0DhOmt zF{H|`L299IyRAIK=uO+T!&?mRq~Bc5)EN>5uc^ktFd<-I%)|&L1;&wN7)fh~$+GRL zmECqj`RlUbM1ed@I(6yWdfqoC!fiWXFv<}riaaT!Y^%!O^8B`HGMw$FaF|e0lgnr7 zCQjm%fp-~By_I<6C-5FllVB|s#&Q(Ac3ZjxKb_9JNpTGClhEsSTlpr=;R6Hb52zgr zC2#?=B$oPNS31PvfLL)s@|jH&b4VNbh?F6c0vTi(#-(LZ1!gZ_jRe~?@G+G_=l^3a zct%CYEth3OIVR?DQ44Eom`ehe@#)a+YYZo1c@A!iWSPSiL0v;W`_Zm5%=Gyl+Mom7 z5Lm$H0Xfdy0 zZwnMaixUL9@2ls0e#M?Z`^_%P1ST zcUZh=RiJ_uN=-H?TJ}J+cE@w0_8CriVAP;hf&03f4PSMn?S@+Zn!q|949R(e4nlfU zx8O1!3OvFFb%U?k-X8UPzc9I2i~+WGp2If+kMZpg(t_@uxDf{oqwXVuPaq9^&oDLI z9nqpdL#LPsLa)QXDCX(cbcWA+?BA-FZ>RphH-6 zEyoL}4J#_#_L>4aFsWd}1*r@!5K(gJS}8a(2vk6ag#@Sf2v{T;@GduqWMD`_){T}&D(RY-5z>7%HSm-hBI*w`jlRlW~Bm7I~8ewa`ixa6cU7YayAXUCDSi*5t{6AEuDasbjI9k}Ie}ekN##0(;<+K*`{0}B~ZEFAk literal 0 HcmV?d00001 diff --git a/bin/GUI.class b/bin/GUI.class new file mode 100644 index 0000000000000000000000000000000000000000..e737e2e0e3334ee1607d2ffd8f4247a67ab49b24 GIT binary patch literal 21120 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 literal 0 HcmV?d00001 diff --git a/bin/ImageCellRenderer.class b/bin/ImageCellRenderer.class new file mode 100644 index 0000000000000000000000000000000000000000..0ad4a7d0ff11d394aba2d27177f79fc45562e9c6 GIT binary patch literal 1416 zcmZuxT~8B16g>lN$JRv!3tC0xOKcUX-zZg-Rtkkh4Mh@2jMe^QU8Y;LoF&V%^|=W~{MU9};G}toT8O?Gm`Izg9A~v_E`VB#$(2@CG9hZc_p^KVa}p;>YF~tBR!un)-Az2Z??N1>kdinp za4dMR(CE0HfipNOkT6TrGm9^$7bcharmY$2lS?3pa|X`if#_COvir)< zs}1GkgR@R|#lVP87k@mtFc;LJ(NP0gjYjk4WMM9WG_LCw-w+r|mkw5W@SIsnU>LUy zO7IQ?v+gjR!1?{nYqAQhEMMa8!RDA&ML9<>E-*Odd9F9!_q?w9_H;8!v1o|~Jxpg3 z7{h%{^npNk^L+z}mwk_lW(vNmL&a$EwZ2a%Bi6fNIgLQJLAP7RBS)jn`Pmc@CHCE} zmzBe@QEa7H5iqKxF=N$>ZnZ&e$E*J&n{0icrjQw~qwKSr^VYjyDkSDOtA{u-Q`v2J zRaLb0IQ8sR{&$#1^%eAkGs$0+gWtw4r;%%%r!2pM-{|EXBt8XZgKI1RQ|RE{2pwJ^m>7O`q0gC(j0hB3ZPdrnWE=Y03q?;k$_EMrqcgfO-v{X+Hp(hwsU$Kq5}Y~dVM zUhf@C)7LOcmxV?o0M!bpHs$O<7HBKtT-Rq;r}LvAFabSz={B7Ig9 z0lfBB60ySq zCd&5+B8H*X2r#m0iTDqQ@STFrU&mNm<@YGdOnL4M>2m%IM)^CkUjpD&evUE_l)?n- zio{S{!*!OVB8P51u^Z)hz5EsF9&Yw>r&HD5dKatq?8~51mq?NRohS~h$srEm5UY&c93BP|DBct1k$9_94@|x527;` zW@N?(@Sz;{BwPhar`^q-&F;6~x9RUcKYsz3z_NxALqkEx#8~jr5MeNO_&(3r+}X-} zEbfSs)KJIJ>qq&4%!qyA$V|2*E!W9go)nI#GSta!%S((?z5IE>DF%I?+X?PiWiDOH z>dt2?l>#sA@-30c`eCXvYje*#ORfl+=S5*N+|8?=hZ*m{A}ou3l(HIC$s)Jy)3jD~ zFI~y)g3Z5V%kG{d8CZ@mOd+8VUb~KZ z#FckXM+0=_b?ImfydE8Q&=f})_jMTPV+bczp{Bg$h~>Rj3~ZH!g;4;yB=-%l91c(hK6?x_2;DNNZ=v8N;!w#H2+-@o`w%Jk)NVri9tKf zMnA1wn7&a&4MXiEV6>>M^eyeAZ)qcaOZ!NF1!4LcXr`xH$Xi4Rb!7X^p&DAvbPa9h za19-1XQYNsvn^Ufw|R`-@01gwexPgyum~QIuPdLT0~jRB6mP dCmX>6-XlkzNu)25RaZVRbQWBythz=5^B1l)DkJ~^ literal 0 HcmV?d00001 diff --git a/bin/Pet$1$1$1.class b/bin/Pet$1$1$1.class new file mode 100644 index 0000000000000000000000000000000000000000..1b811c2365df7c64a6ca200a70b0678fba99c119 GIT binary patch literal 1451 zcmb_c+foxj5IvI%3vq=7L=6`~h?*>ch<61q;U>YLDFv$VZ4yRU-0Y@y2h_ju6ST@e zl~(xyeiUWTBp?X#eiyuO zR%_`??v`BsDPQ%sJ;}fdglNj~9QlNyls<%X27uGHJ1thotTM!A{B_X=LTSQ4tMV?I zXhTAImrb05sk~kj=Nn$XiFR}(5XBV}76uujX;rAB=y>AgcC{>mWnOj#Ls!wSaCeml zj#@W^F~u&!xr2kGCWwj-u6s}t!8<>wigkv;v__o!yG?VdWs{lJ1a2T>AkC2cXD3Y9 z7^OCDX@b{QYSg!Mfu7UI$gCO|W9U5Es%57t0s}dMdnl~bL;~ZOP)8?;ygqCQo#X$s zB!MjMsPcCiM$!$eCulfOt7amL`z9XXAwwb*^0lZ5E{Wn;`mN$Ai%Anxs!#Dy@_;0j zAZae}aGIpY(0>-s4DDepaHI%VYMKm&?qlTXAT_X+S1KY5Q#VOHM=8l1w3%`eZ~X0` zBIX^XjaDLbTyag!pYtlNAJW}e5^~dDH}IUnXcBHBg==*E3Lf1}eZNF#-~}BNS6dRVwj^C`Nx1a2h|;joN&o61ZxIo+kR7r|>*%(#b@bR{bzHKO zu{x4=PrQykdk+I&DJMevfwCFR`?yN8sr?}gV}w>rp`}^X{Y)6tPA~0m=&`sp6OWO1 zX&2Xz1(Fo_f$W;~@dw7&Z1qm1(MZzh+r!O0++NB?cX2Pfi${M@^eWUWf=(92FpFW9 z^`gM~u*CW`vZ2QAO=N@vkMV@C%@VGsc!r48iae&9XccO8syJ=h{e_&9M~zT4iW&WG c7IS1{n8yMNNaSlsMV*#Y$<{1>e< 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 HQ$iB}Hh*=A literal 0 HcmV?d00001 diff --git a/bin/src/img/ball.png b/bin/src/img/ball.png new file mode 100755 index 0000000000000000000000000000000000000000..38fdd77b1b856293ea0b957ed1409d25eab3450a GIT binary patch literal 447 zcmV;w0YLtVP)ydv%?W}OWLyq+Oq|pJIoC;6;(SX zWcTpS*SxqTp_F8pV%ZP=wn9ysY*DS%ji4BDpG6#i8K#@_KvMw~XQmtdAhM!f+~VEl zMT7ky!t3QnsZLLVDdVa67_oJm4AX!3xSu$F5CPD;&BN8C$(E0o{Q%N?oVNwzsly9+ zaSN+?SAxW`7zPxdts*Ldg!(~*tEV~d7O=c-l;`hT0Ofv}VzgtEwxcX)>Q;jZFWVtK pbfDm%KcxVnrT?1p3aBZ1;J>LO%}SF~OMCzT002ovPDHLkV1nb;@5JlexpM!?Rw8l+>)o|}SdfqF7We}AmHV7c5VUCXJcV}M0jAa7IXxb{v( z?Y1b|snyB^25Sw+`a)ylkQ%U@BQcCpn)c$jIvzT+raDn6T1!v6UHiE~hocCr1%jJ5 z%Ec(fdWEh1yd5up)g{^^JszrE`{0V|<{B|IQMklqBC-MCscaW~&c=cKPUl5Y^`L$c zAk5Ur*zd>kDmg!8c&1~{!@eB$WB2Yd=Cg|QpAj_Dj+^^%nE<>z)8| j`7&Ro){E2xUbN*8E^V?X5`>#>00000NkvXXu0mjfON6cZ literal 0 HcmV?d00001 diff --git a/bin/src/img/eraser.png b/bin/src/img/eraser.png new file mode 100755 index 0000000000000000000000000000000000000000..0315176ac93f74c5c296674054d92693c7fa7061 GIT binary patch literal 14987 zcmeHNd03L^+J9}cDbpI8G}lf|*%lhXoDnNcEOrI;(03krf(qt%o#XDrR! zrYt>zKx%HdpqV=6Rv97!f|;4Jr6{O~p4aC4{yf*2^IhK`Gaa7mg7*UM=izzo_r8Dk z@A_-x z_(*nUwa2+zhr?^pX;$YB)O>#&Zg7SX>L`7b^{s)l_@#L4(Dpu$U#TyBzWLDd-Hzxj z2&3)%rz_8`U9Z3D2=(tzkJoyPv^o#-jLZEE4y!vd@v>T^&8CQFa<>C>VNp03q^ZJ}Z3bQUI8?Z8Qav@ZKyt{r~;6IGH8O!0upMxt0fx2!iAO zNbSXI5&)VnHjRPC4}Yn6NW$Aj_5p>a7cNX&~1%@$p`mRWfG(Gu}@q5T!by4QxqMc#o< zCb3v(yW3hoc%eu%G0>Sc+;Yu4ok2V5<6|YvP90<13M!jubsX647{TAy8|oGYrs2?! zEF4^x0ywb|C!dq6w0S-HyWWwjXG$GYD-u%gH_VB2PeoMWPl{)TxwwS3j=`ryhfD4To^m zeMCGSpP627gNPL5K-<+KQDC6!2A)<@{tz@$rbx|`N>@qUHtJmq46@zft!hdBI05;T z=NbUe0O4nd_l8EBfyk4R^v2wqZ2Fm=JN&js_Te=Pf)12pP}z#4pUL~CUy>qvryAo0 z!990E77{ZTY6%sIVO&L=_2kcA^0YR+o4d(gf##5u$SQl${I97YBa{B;^Y27#3AW?h zWYF4MKwt>8*)H0(>*$lW&7z3(-a}g)3xTyS?ID?6=tG>0g;i1|m6raE52t7HSFTHJ znfV)JMCr;aF2J(vnu)QYN@Vo}E;wvJWrHiaLw++{-A>BLb6rT-k#<8kkS0}pXiT$E zV(vlnT&vfIy6Z5Ed(L8;-aT>w<`%{nVzKy6;y^tD9S#o}taS82WMFb#EGm?bR!iY{ z{P6Ss{u9N@C+om<{K}bm_h8hMomv`X%&KfpUTtuM!`0ucvNy}H%}KX?dRKf`<^&`J z^3%?{43!86%A}8Cu>MW!GKtY%4`b;`(a#8bcw4ph?{_dvJ?gd{TBQuF)H%Z8xvp$D z7qH;!0{|v_SV45oS{~l993@M|R#~U#Ie)?y4XMzOtHnV0%xaAPh3mja7R1xS-Kw+W zYkY;9S;h&UqvdEoXjqhURSf20f5&BKeV*3s2T?F2q1F_W7aOiRPN#+w)%l@b2;yYP z36{?eyTLkZQm#j$jjRH3d-+nJ^?=Xag5VcjUC>MiNRi2=51u}EbL#5U9xt9>jt4XO zcBb4KY0Se7zYz7n6S2YgNxsZ)XJVX!V|yB9J>0b|cZSP!mO!hQ0w!C1dXAd-9pEXXG$cd+0aYRz)eNX4=~nQyadSnlB77)?eh~Lc@?k?~L*w zd|KNHssZ4HW~}Wcm~8&wiMUBx{hH9kmEs2oephE|{2ZV6@orTcs?RU-Z&A#f4x7iL8;3$3s zl_c==_yZdwofmPvcSvS4jTmNZ@Q|;I8GX0v*zBd*ce908Tx?)@^TSwXfBeXpv$wQ6 zQ(L;rLp5`AcyKl8PHAzgkf)6BXKu#SbiUQBRN_21U{QD;M5Hi}xmcO%t3=hSPW;B+_>~e_e@z|UfGZgs zp=U+)h?!p5^*;Pvf!Se;x8fe1tRSY=`&_jR?eBKn3*ItEvWvNs)K@SyFtZ1vr91!X zBs1DF=>aH*0Konvq3$Q}(gJzeVq3OS`suoMQm7bdS$2c{=<*YY{)MbJ;T2T=;~KtH>YU>&zZKubN$CTEB_pmu$_~+8XhkJcb_`AI z#uMcxi#hSHY23Dyl_mulrwBm}L;Ytg$tb#Ga2pWml+xW(@5n1Dmo#3zXb*8{@@OG^ zE#|hel!Wr8P-1B4LOJSv;&h5q&M7V!mPbdcL*g#jdV+OFm!)`wkW~2_v5ICA67|0T zYN1UdqtCbYeCQSV-t^BmdLRDQGrw*;S$oSU!JS1%ZB_Ke)JPnY?N zAMKR(x?c`BW{2fLw#Bd|mF$4&b6!~+n{n=R3~|I|Y6PVoYc#;WCxVN;Q$dw`j2}hC z&CV;;&A94&YzB5GMhDX4p{gbkho-G3-w#!-Fg`#2rc#io7BiVFJNMkPl=*h%gy&T5 zH8V2fQlNJ_VKQZtO+sTyCH6_R7J#f7lt;VM86&ym(Me&{-6jVyyr8F_Fjj<{Z#JN0 zLe(LdgDMMZC*J;m*c44vDPm*FGOedtE~z9_b5o)zYr))mbg^=qEpy~*5Y}Dwpe)N> zd+$|YSIY&o1@dDUi4x9bl=_)IR~Vppj~)w5{A{!uM0U%b3{MD`Jwm0L)*D+;x%Kq6 zNJd@wa{t?PJ_49yEqkSO=rlFtbp@+jGB4iP9ZM}}=`8rD|2yLT>u}O&)1OL^MuPt< zO7Qm#H)oy0vWi_fL%vgl-B>I|p&+NXLwxrEkrcQkxmQHy6o>4i`f`q#F$#+AA0tZ` z=j&f)c{7o0TwJH!Ppnks9gZTFm4IX^S9qj&7mmGoN*Sp2tVBw)c~7>MH7-+bxg-nf z>i_QcJD!DkpP-HBCaaOwt8}fh!@l->RS}+3uac6}++kWt@Qx540-H4;@7BvQ+7qVZ zctv$7XhgWMkrg&w+QjpePr%~5vON+%nhhDnm{@rA>ce6~W7%1G5@k;V?t&dQ;@N9b zU$S)4%`0MZS>N_l%#&7Zck6;A$ACFKevN`Xf?nVG5d}9_rRuR|Y6Zq;jRg&1lX|X? z#vGp<-8cAr1-RqOJoq0@;rK>72-=?D+nIUQ9f!w#qyZxjLIWMj@rD7L%QpHk=5{pa?49uZ6tdj ziiF`YNd0_yy)?1ag-k;!(}a8K5{_;(I0iIO1MoGcy4~R}-5w}P^TY8O)kOd>I<$Be zp#R3v!V>$4T~S}B=u686HypX5a!RpwB#-@FJ|cR{qO>N~Ii}gwSoDH_yO3MB*(TCZ zY((1M12JI54*#gCiiJT~k(d0ZZ;(L}*+6<7)6{*LV!R}vXQk8x-*i~1?z5^Q4YfFo zj!MEC2>})bIhz0za&O$HCvL(iP$5{%bB#)-@xx*qd?xkqp5fbR1!IOa2Ft1tZ^06R z3dzBH6IKBYyMyXzAzU)21BpH+k1y{TeP5iBT5dLQ{(eCOcYwx_RFLbH=M0;QykpRK zWV!s=I7$R55Y%02E$9ZE{L=E&&pntU$)cNG*{!d-Mqq--VHcSySy^9sfACrG)>_i= zh+tkp1{ul2uK?kxS1~N>4dwC_qq33y7#X z`&=q@Hm@BTyj@?t;Z^b#P#0S+&(iYu8{g`z0@n+6na|HS&+0UjdUf+i0Da8nLRV%)mFxEKSVrk^R^q2w@{#LOqe{43e6PmMcx*9ps zx;%d)G}Lkf@uxKa57#RiQz}9n#6j7S=ADtHbtR~v1AZvWkl|R{eBa&aQ6;9r>5FU~d4AS0i*~$6RE3MOO*{L_GN(f( zq(wL~6y%_FBj+@`;Kh{Gr~#jcDx!bDbu&b+22Z%m**Gdvn`q<1+9oj3;K{y^IBbsn zeOkEEyptjL`76P}Syq7;AUypgkM!(Gd>EHZbD1^(0OCDkd`m$%rEc8X1lEZ|^w216 z9~nXGxjn%W>M7Rb(WT~Rm^?l;#-p}qmkemVE+np}At<=FH^^xgl-St47&QRY;>ylY ztx&WPD`c^OHHy|29TI19w5dpOnA=;~ok#b~i*HGD{bg|V?PfB4WMJYlQ#GzFb+18M zzBexUn6)4Ow$&tz`~5y@}aw@CBTrI4C{xmPFmK5wT>dL3R*>&{;wW8}c52JM}i zOaVQh(GNc>9aaCpGVtsiv)6~^0D;tW1sr<47t(2wHr7i?JuQPgMy=7aj{P6ThI~*& zX5kR{_Q$Vo1+0{+ZRF?^tPmzBQt=_ReOkZM`?zEYr`Rlhc67E7L!k7E%Exa#2v#Ke zM9%D%skn~w^X7>Wb$%V8{F*gmhW85+6;bBumT}Z}z{Gv=K%Vfc6nI;L3{386o^$?2 zPEnq!$P+auzSb4-=Al;7`KDm7b|=9Mq2*rvu?u@GZiV(+zdxi4@W>i1WnoO8ZoN_B*8QIv+Lr{1{Ip&C)z?r2ir!nVG=l2OH%oziwt@^h-!aH7}x!-^)vy8vOQdJNs zP17shOIQKQ7DpEkt`KwN6r-!u{enBSkt z*7@It`+uXswAL(t7xvz2kfAmQsKRCHw?|>L+`SH9y_0bnG6c%;cjEC0<~47B+ym1B zh43C|o^tjFH6=G${Rv6_c=z8vJs$t#_8QASmj{wu|6KFY%;rDzfF=R|Lx=r;nkw%C@ znu?%6i`flr1zSsuCYpUQF%&CF>BBV2BBCWF803LJ79lo$kQj|V_+-?IDJgBUwcXjB z-I=-f`p|4cp_Fb}G|}(*&iQ@kJNKRe{_i4>vUvM}PoAVIUneDTQAw`0cJ2H5A2FZ@ zb;i9~FC}#AipLcdAo90gY%ZlZ)!1JDDglv?%zz%$ne;9CYVi^psNUwGnl^<<#yQS? zW|$LEak!;xe^>fE%{E+kwZ6q=O68XAxzlh60mjEs8L-@%n;yFJ8#UYTlBH^3%L^W& zq+1gL+=v2#qo@$DEtF@?KsX$xrPiuQD$aM?8W}1pqswQ)Ik+(n2o3-kAE!_?+`6;I zf=3VzhiQqqs@LadFW0xMR{Vag+~raTP2VaZX27`s`UhCtNkPwwfxNNuU3mq{_U(IC z(7XbM+Wjjr8Kby%$%N#5I`%aD(iP2|oWMZYu;*x24BRcoD0b{!fmlqDeHUU0$*15# z0GBUo=EyMVXNJA4?ra^;iUCH9v(cy+K6BzvY1;w-psE5}Yu#khVC3uTn&EKZ;uX!j zeR~QX>JHg=*ICdW(1SWl`Sbhy%ZfK>ZjIQ{5!CJ}CB%tB3J10=@#UF>8IL(grDVT$ zA2_gp1oWWJtit?0|FYsh#Y>y$Q#;lZ#aAMGKfal?Qd11Z2%g`W<5n1vmQ6puA3S3N z>CU}NiUJioHxjB)a0!%DJx#6rQt`!^q-opJTNa8!qy+dJCFgG--Fe}%;=sDyn+a7F zI6~sqqyt9+%b%^t`O9E9ciKo8lM?59;)&RVykHa#_RLjxUUy)6=4C~Jid~y#z-=KR zg}~tXelsyNa)S})SIfaGjFFRLd4mVS;jnlp1A0(rmapKdZ)xF%IpMcPzomAx=3wW+ z)O?ysYt9j53Xc{>?|a!YHn5P+^G3_x{GcgvIuir4jzACUjCyl#__?!ovsZ-z08+v> zO+X3=0M{*-90eUvjYQRCzFQ-vRb<4K+qt=T-6;Cw$b)8|*6e>nZ|EAmvkWa6WRz=69GaH;g-8W$n?RKhls5K>^s zA^1VKcmlY_;^uSdy)KCOjtGRp;krWrtgINYIj{LCNw4{YLn$P#TP_Yo`8{D<@3wU| z^Z-CdQ{+7XBHB9ly#rv*H9H^O^9(y)J5i}p+6Mp@7u(v7H(UV#J*elzJ&J3}sdBjW zc>P-s3kPO-1+AS8-#CJ-cLZ6Vh66xi5qm~j%J-VZNVeb^>u6J?y1ng`=U;*UXZ1HR Wq;BHB9z@vy0000a6}0J literal 0 HcmV?d00001 diff --git a/bin/src/img/ground.png b/bin/src/img/ground.png new file mode 100755 index 0000000000000000000000000000000000000000..d90670a8dbe890b8ef9d33f98535bb25ceb0e980 GIT binary patch literal 2142 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 literal 0 HcmV?d00001 diff --git a/bin/src/img/pencil.png b/bin/src/img/pencil.png new file mode 100755 index 0000000000000000000000000000000000000000..6e743f87ef60c607fb0bd767aedf0f75fbf1f8c0 GIT binary patch literal 364 zcmV-y0h9iTP)YU6oB#X-lP?2`kx3YE+UE`3U;U11nlBdY=Y8tBE|=-rY~6AR63W-aRNq+bkRTPfz3 zwqw1!fgAjVVEAQ<8tkKsLZ^K;6qBc0`59Za(VJeV$FKFHO>Kz`=bpy v{d0HjFPLd#o*$Obvo`y~NoMxrvgz!Ht{HvxV*lX petListArray; + private int timeMachine; //time machine is the number of hours the user adds, this feature is purely for demonstration purposes + private JButton addHour; + + private JButton feedButton; + private JButton playButton; + private JButton deleteButton; + private JButton editButton; + + private Color selectedColor; + + private final ImageIcon ICON = new ImageIcon(new ImageIcon(GUI.class.getResource("/src/img/egg.png")).getImage().getScaledInstance(500, 500, Image.SCALE_DEFAULT)); + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public GUI() { + //try to set the application icon in the taskbar if the OS supports it + try { + Taskbar taskbar = Taskbar.getTaskbar(); + taskbar.setIconImage(ICON.getImage()); + } catch (UnsupportedOperationException | SecurityException e) { + //nothing should be here + } + + //set up constant instance variables + petCreator = new Pet("New Pet", "/src/img/pencil.png", timeMachine, true); + newPet = new ImageCell("New Pet", "/src/img/newPet.png", petCreator, true); + + //Load pet list and time machine + try { + readPetListArrayBin(); + loadTimeMachine(); + } catch (ClassNotFoundException | IOException e) { + petListArray = new ArrayList(); + timeMachine = 0; + JOptionPane.showMessageDialog(frame, "Welcome To Aaron-Gotchi Pets!", "Welcome", JOptionPane.PLAIN_MESSAGE); + //make directories for the files to be stored in upon saving + File binDirectory = new File(System.getProperty("user.home") + "/pets/bin"); + binDirectory.mkdirs(); + File imgDirectory = new File(System.getProperty("user.home") + "/pets/img"); + imgDirectory.mkdirs(); + } + + //set up frame + frame = new JFrame(); + frame.setResizable(false); + frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + frame.addWindowListener(this); + frame.setTitle("Aaron-Gotchi Pets"); + frame.setSize(743, 390); + //Add Aaron-Gotchi pets icon + frame.setIconImage(ICON.getImage()); + + //set up panel + panel = new JPanel(); + panel.setLayout(null); + + //ScrollPane with Pet List + scroll = new ScrollPane(ScrollPane.SCROLLBARS_NEVER); + scroll.setBackground(Color.LIGHT_GRAY); + scroll.setForeground(Color.LIGHT_GRAY); + scroll.setBounds(6, 5, 281, 353); + + pets = new JList(); + pets.setBackground(Color.LIGHT_GRAY); + pets.setForeground(Color.LIGHT_GRAY); + pets.setBounds(scroll.getBounds()); + pets.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, Color.GRAY, Color.DARK_GRAY)); + pets.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + pets.setCellRenderer(new ImageCellRenderer()); + updatePetList(); + //mouse listener for when the user selects a cell on the JList + pets.addMouseListener(mouseListener); + //add the pets list to the panel + scroll.add(pets); + panel.add(scroll); + + //Name + petName = new JLabel("Aaron-Gotchi Pets", SwingConstants.LEFT); + petName.setFont(new Font("Lucida Grande", Font.BOLD, 24)); + petName.setBounds(293, 32, 332, 52); + + //Image + petImg = new JLabel("", new ImageIcon(new ImageIcon(GUI.class.getResource("/src/img/egg.png")).getImage().getScaledInstance(100, 100, Image.SCALE_DEFAULT)), SwingConstants.CENTER); + petImg.setFont(new Font("Lucida Grande", Font.BOLD, 24)); + petImg.setBounds(625, 10, 100, 100); + + //Set Correct Pet Display and add to panel + updatePetDisplay(-1); + panel.add(petImg); + panel.add(petName); + + //seperator for looks + JSeparator separator = new JSeparator(); + separator.setBackground(Color.LIGHT_GRAY); + separator.setForeground(Color.GRAY); + separator.setBounds(293, 118, 444, 17); + panel.add(separator); + + //display/petPanel + displayPanel = new JPanel(); + displayPanel.setBackground(Color.LIGHT_GRAY); + displayPanel.setLayout(null); + displayPanel.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, Color.GRAY, Color.DARK_GRAY)); + displayPanel.setBounds(293, 133, 444, 225); + panel.add(displayPanel); + + //initial messages on the display panel + JLabel welcomeMessage = new JLabel("Welcome To Aaron-Gotchi Pets!"); + welcomeMessage.setBounds(6, 6, 432, 16); + displayPanel.add(welcomeMessage); + + JLabel welcomeMessageLine2 = new JLabel("Select a pet from the menu or create a new one to get started"); + welcomeMessageLine2.setBounds(6, 22, 432, 16); + displayPanel.add(welcomeMessageLine2); + + //finalize the frame + frame.getContentPane().add(panel); + frame.setVisible(true); + + } //end of class constructor + + private JPanel color1; + private JPanel color2; + private JPanel color3; + private int colorPanelsToAdd; + + @SuppressWarnings("unchecked") + public void displayData(Pet pet) { + //clear all the components off of the display panel and add new ones below + displayPanel.removeAll(); + + //add pet information or display the pet creator + if (pet.equals(petListArray.get(petListArray.size()-1).getPet())) { + //for the name + JLabel nameLabel = new JLabel("Name: "); + nameLabel.setFont(new Font("Lucida Grande", Font.BOLD, 13)); + nameLabel.setBounds(16, 16, 70, 14); + displayPanel.add(nameLabel); + + JTextField nameInput = new JTextField(); + nameInput.setBounds(59, 13, 150, 20); + nameInput.setColumns(10); + displayPanel.add(nameInput); + + //for the toolbar + @SuppressWarnings("rawtypes") + JList toolList = new JList(); + toolList.setCellRenderer(new ImageCellRenderer()); + toolList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + toolList.setBackground(Color.LIGHT_GRAY); + toolList.setForeground(Color.LIGHT_GRAY); + Object[] tools = {new ImageCell("","/src/img/pencil.png", null, true).getCellPanel(true), new ImageCell("","src/img/eraser.png", null, true).getCellPanel(true), new ImageCell("","src/img/eyedropper.png", null, true).getCellPanel(true)}; + toolList.setListData(tools); + toolList.setBounds(217,13,50,150); + toolList.setSelectedIndex(0); + displayPanel.add(toolList); + + //for the image of the pet + JPanel[][] cells = new JPanel[8][8]; + Color[][] pixels = new Color[8][8]; + + selectedColor = Color.BLACK; + + //recent colors panel + JLabel recentColors = new JLabel("Recent Colors:"); + recentColors.setBounds(16, 118, 100, 14); + displayPanel.add(recentColors); + + colorPanelsToAdd = 1; + color1 = new JPanel(); + color1.setBounds(16, 135, 50, 50); + color1.setBackground(selectedColor); + color1.setBorder(new LineBorder(Color.RED, 3)); + displayPanel.add(color1); + color1.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent clickedInPanel1) { + color1.setBorder(new LineBorder(Color.RED,3)); //set the border of this pane to be selected and others to be non, selected + color2.setBorder(new LineBorder(Color.BLACK,3)); + color3.setBorder(new LineBorder(Color.BLACK,3)); + selectedColor = color1.getBackground(); + } + }); + + color2 = new JPanel(); + color2.setBounds(68, 135, 50, 50); + color2.setBackground(new Color(0,0,0,0)); + color2.setBorder(new LineBorder(Color.BLACK,3)); + color2.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent clickedInPanel2) { + color2.setBorder(new LineBorder(Color.RED,3)); //set the border of this pane to be selected and others to be non, selected + color1.setBorder(new LineBorder(Color.BLACK,3)); + color3.setBorder(new LineBorder(Color.BLACK,3)); + selectedColor = color2.getBackground(); + } + }); + + color3 = new JPanel(); + color3.setBounds(121, 135, 50, 50); + color3.setBackground(new Color(0,0,0,0)); + color3.setBorder(new LineBorder(Color.BLACK,3)); + color3.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent clickedInPanel3) { + color3.setBorder(new LineBorder(Color.RED,3)); //set the border of this pane to be selected and others to be non, selected + color1.setBorder(new LineBorder(Color.BLACK,3)); + color2.setBorder(new LineBorder(Color.BLACK,3)); + selectedColor = color3.getBackground(); + } + }); + + JPanel selectorContainer = new JPanel(); + JColorChooser selector = new JColorChooser(); + selector.setChooserPanels(new AbstractColorChooserPanel[] {selector.getChooserPanels()[2]}); + selector.setPreviewPanel(new JPanel()); + selector.setBounds(10,77,250,137); + selectorContainer.add(selector); + + selector.getSelectionModel().addChangeListener(new ChangeListener(){ + @Override + public void stateChanged(ChangeEvent colorSet) { + //update color based on what the user selects + selectedColor = selector.getColor(); + } + + }); + + JButton chooseColorButton = new JButton("Choose Color"); + chooseColorButton.setBounds(16, 191, 117, 23); + displayPanel.add(chooseColorButton); + chooseColorButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent chooseColor) { + Object[] options = {"OK"}; + JOptionPane.showOptionDialog(frame, selectorContainer, "Choose Color", JOptionPane.PLAIN_MESSAGE, JOptionPane.PLAIN_MESSAGE, null, options, options[0]); + //this code runs after the user clicks ok on the optionpane + colorPanelsToAdd++; + if (colorPanelsToAdd == 2) { + displayPanel.add(color2); + } else if (colorPanelsToAdd == 3) { + displayPanel.add(color3); + } + color3.setBackground(color2.getBackground()); + color3.setBorder(new LineBorder(Color.BLACK,3)); + color2.setBackground(color1.getBackground()); + color2.setBorder(new LineBorder(Color.BLACK,3)); + color1.setBackground(selectedColor); + color1.setBorder(new LineBorder(Color.RED,3)); + } + }); + + for (int x = 0; x < cells.length; x++) { + for (int y = 0; y < cells[x].length; y++) { + //re-define x and y positions so the MouseAdapter has access to it + int xPos = x; + int yPos = y; + + //set up the JPanel and add add all cells with MouseAdapters + cells[x][y] = new JPanel(); + cells[x][y].setBounds(274+(x*20), 13+(y*20), 20, 20); + cells[x][y].setBorder(new LineBorder(new Color(0, 0, 0))); + cells[x][y].setBackground(new Color(0,0,0,0)); + pixels[x][y] = new Color(0,0,0,0); + displayPanel.add(cells[x][y]); + cells[x][y].addMouseListener(new MouseAdapter(){ + @Override + public void mousePressed(MouseEvent clickedOnCell) { + if (toolList.getSelectedIndex() == 0) { //pen tool + cells[xPos][yPos].setBackground(selectedColor); + pixels[xPos][yPos] = selectedColor; + } else if (toolList.getSelectedIndex() == 1) { //eraser tool + cells[xPos][yPos].setBackground(new Color(0,0,0,0)); + pixels[xPos][yPos] = new Color(0,0,0,0); + } else if (toolList.getSelectedIndex() == 2) { //eye dropper tool + Color colorToSet = cells[xPos][yPos].getBackground(); + if (!colorToSet.equals(new Color(0,0,0,0))) { //if the selected color isn't an empty pixel + selectedColor = cells[xPos][yPos].getBackground(); + colorPanelsToAdd++; + if (colorPanelsToAdd == 2) { + displayPanel.add(color2); + } else if (colorPanelsToAdd == 3) { + displayPanel.add(color3); + } + color3.setBackground(color2.getBackground()); + color3.setBorder(new LineBorder(Color.BLACK,3)); + color2.setBackground(color1.getBackground()); + color2.setBorder(new LineBorder(Color.BLACK,3)); + color1.setBackground(selectedColor); + color1.setBorder(new LineBorder(Color.RED,3)); + } + } + } + }); + } + } + + JButton createButton = new JButton("Create Pet"); + createButton.setBounds(335, 191, 99, 23); + displayPanel.add(createButton); + createButton.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent petCreated) { + //create the image + BufferedImage image = new BufferedImage(8,8, BufferedImage.TYPE_INT_ARGB); + for (int x = 0; x < cells.length; x++) { + for (int y = 0; y < cells[x].length; y++) { + image.setRGB(x, y, cells[x][y].getBackground().getRGB()); + } + } + + //save the image as a png file + File imageOutput = new File(System.getProperty("user.home") + "/pets/img/" + nameInput.getText() + ".png"); + try { + ImageIO.write(image, "png", imageOutput); + } catch (IOException e) {} + + petListArray.add(0, new ImageCell(nameInput.getText(), System.getProperty("user.home") + "/pets/img/" + nameInput.getText() + ".png", new Pet(nameInput.getText(), System.getProperty("user.home") + "/pets/img/" + nameInput.getText() + ".png", timeMachine))); + updatePetList(); + updatePetDisplay(0); + pets.setSelectedIndex(0); + petListArray.get(0).getPet().imageArray = pixels; + } + }); + + + } else { //pet information + pet.softUpdate(timeMachine); //update the pet to calculate pet information + //age + JLabel ageLabel = new JLabel("Age: "); + ageLabel.setFont(new Font("Lucida Grande", Font.BOLD, 13)); + ageLabel.setBounds(6, 6, 34, 16); + displayPanel.add(ageLabel); + + JLabel ageInformation = new JLabel(pet.age(timeMachine) + " Days Old"); + if (pet.age(timeMachine) == 1) { + ageInformation.setText(pet.age(timeMachine) + " Day Old"); //if the pet is 1 day old, remove the s + } else if (pet.age(timeMachine) < 1) { //display time in hours if pet is less than one day old + if (pet.ageInHours(timeMachine) == 1) { + ageInformation.setText(pet.ageInHours(timeMachine) + " Hour Old"); + } else { + ageInformation.setText(pet.ageInHours(timeMachine) + " Hours Old"); + } + } + ageInformation.setBounds(40, 6, 398, 16); + displayPanel.add(ageInformation); + + //health + JLabel healthLabel = new JLabel("Health: "); + healthLabel.setFont(new Font("Lucida Grande", Font.BOLD, 13)); + healthLabel.setBounds(6, 34, 51, 16); + displayPanel.add(healthLabel); + + //hearts + ImageIcon heart = new ImageIcon(new ImageIcon(GUI.class.getResource("/src/img/heart.png")).getImage().getScaledInstance(16, 16, Image.SCALE_DEFAULT)); + + JLabel heart1 = new JLabel(heart); + heart1.setBounds(57, 34, 16, 16); + if (pet.getHealth() < 1) { + heart1.setEnabled(false); + } + displayPanel.add(heart1); + + JLabel heart2 = new JLabel(heart); + heart2.setBounds(76, 34, 16, 16); + if (pet.getHealth() < 2) { + heart2.setEnabled(false); + } + displayPanel.add(heart2); + + JLabel heart3 = new JLabel(heart); + heart3.setBounds(95, 34, 16, 16); + if (pet.getHealth() < 3) { + heart3.setEnabled(false); + } + displayPanel.add(heart3); + + JLabel heart4 = new JLabel(heart); + heart4.setBounds(114, 34, 16, 16); + if (pet.getHealth() < 4) { + heart4.setEnabled(false); + } + displayPanel.add(heart4); + + JLabel heart5 = new JLabel(heart); + heart5.setBounds(133, 34, 16, 16); + if (pet.getHealth() < 5) { + heart5.setEnabled(false); + } + displayPanel.add(heart5); + + //food + JLabel foodLabel = new JLabel("Food: "); + foodLabel.setFont(new Font("Lucida Grande", Font.BOLD, 13)); + foodLabel.setBounds(6, 62, 41, 16); + displayPanel.add(foodLabel); + + feedButton = new JButton("Feed"); + feedButton.setBounds(81, 190, 75, 29); + if (pet.isAlive()) { + displayPanel.add(feedButton); + } + feedButton.addActionListener(this); + + //apples + ImageIcon apple = new ImageIcon(new ImageIcon(GUI.class.getResource("/src/img/apple.png")).getImage().getScaledInstance(16, 16, Image.SCALE_DEFAULT)); + + JLabel apple1 = new JLabel(apple); + apple1.setBounds(46, 62, 16, 16); + if (pet.getFood() < 1) { + apple1.setEnabled(false); + } + displayPanel.add(apple1); + + JLabel apple2 = new JLabel(apple); + apple2.setBounds(65, 62, 16, 16); + if (pet.getFood() < 2) { + apple2.setEnabled(false); + } + displayPanel.add(apple2); + + JLabel apple3 = new JLabel(apple); + apple3.setBounds(84, 62, 16, 16); + if (pet.getFood() < 3) { + apple3.setEnabled(false); + } + displayPanel.add(apple3); + + JLabel apple4 = new JLabel(apple); + apple4.setBounds(103, 62, 16, 16); + if (pet.getFood() < 4) { + apple4.setEnabled(false); + } + displayPanel.add(apple4); + + JLabel apple5 = new JLabel(apple); + apple5.setBounds(122, 62, 16, 16); + if (pet.getFood() < 5) { + apple5.setEnabled(false); + } + displayPanel.add(apple5); + + //Happiness + JLabel happinessLabel = new JLabel("Happiness: "); + happinessLabel.setFont(new Font("Lucida Grande", Font.BOLD, 13)); + happinessLabel.setBounds(6, 90, 78, 16); + displayPanel.add(happinessLabel); + + //stars + ImageIcon star = new ImageIcon(new ImageIcon(GUI.class.getResource("/src/img/star.png")).getImage().getScaledInstance(16, 16, Image.SCALE_DEFAULT)); + + JLabel star1 = new JLabel(star); + star1.setBounds(84, 90, 16, 16); + if (pet.getHappiness() < 1) { + star1.setEnabled(false); + } + displayPanel.add(star1); + + JLabel star2 = new JLabel(star); + star2.setBounds(103, 90, 16, 16); + if (pet.getHappiness() < 2) { + star2.setEnabled(false); + } + displayPanel.add(star2); + + JLabel star3 = new JLabel(star); + star3.setBounds(122, 90, 16, 16); + if (pet.getHappiness() < 3) { + star3.setEnabled(false); + } + displayPanel.add(star3); + + JLabel star4 = new JLabel(star); + star4.setBounds(141, 90, 16, 16); + if (pet.getHappiness() < 4) { + star4.setEnabled(false); + } + displayPanel.add(star4); + + JLabel star5 = new JLabel(star); + star5.setBounds(160, 90, 16, 16); + if (pet.getHappiness() < 5) { + star5.setEnabled(false); + } + displayPanel.add(star5); + + playButton = new JButton("Play"); + playButton.setBounds(6, 190, 75, 29); + if (pet.isAlive()) { + displayPanel.add(playButton); + } + playButton.addActionListener(this); + + //time machine + addHour = new JButton("Add Hour"); + addHour.setBounds(156, 190, 104, 29); + addHour.addActionListener(this); + if (pet.isAlive()) { + displayPanel.add(addHour); + } + + //Edit Pet Button + editButton = new JButton("Edit Pet"); + editButton.setBounds(347, 6, 91, 29); + if (pet.isAlive()) { + displayPanel.add(editButton); + } + editButton.addActionListener(this); + + //Delete Pet Button + deleteButton = new JButton("Delete Pet"); + deleteButton.setBounds(331, 190, 107, 29); + displayPanel.add(deleteButton); + deleteButton.addActionListener(this); + } + + //refresh the panel to display proper information + displayPanel.repaint(); + } + + private static Timer messageTimer; + private static JLabel cantFeedPet; + private static boolean removeMessage; + public static void displayPanelMessage(String message) { + + removeMessage = false; + + ActionListener listener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (e.getActionCommand().equals("Timer")) { + + if (!removeMessage) { + cantFeedPet = new JLabel(message); + cantFeedPet.setBounds(12, 172, 354, 16); + cantFeedPet.setForeground(Color.RED); + displayPanel.add(cantFeedPet); + displayPanel.repaint(); + removeMessage = true; + } else { + displayPanel.remove(cantFeedPet); + displayPanel.repaint(); + messageTimer.stop(); + } + + } + } + }; + + messageTimer = new Timer(2000, listener); + messageTimer.setInitialDelay(0); + messageTimer.setActionCommand("Timer"); + messageTimer.start(); + } + + private void updatePetDisplay(int petIndex) { + try { + //remove the animationListener if the user switches pets while playing with their pet + petListArray.get(petIndex).getPet().softUpdate(timeMachine); + //set new name + petName.setText(petListArray.get(petIndex).getPet().getPetName()); + if (petListArray.get(petIndex).getPet().getHealth() == 0 && !petListArray.get(petIndex).getPet().isPetCreator) { //if the pet is dead make the name red and add (dead) + petName.setForeground(Color.RED); + updatePetList(); + } else { + petName.setForeground(Color.BLACK); + } + //get icon and scale image + ImageIcon unscaled = petListArray.get(petIndex).getPet().getPetImg(); + Icon scaled = new ImageIcon(unscaled.getImage().getScaledInstance(100, 100, Image.SCALE_DEFAULT)); + //set new icon + petImg.setIcon(scaled); + //add the petPanel + displayData(petListArray.get(petIndex).getPet()); + } catch (Exception NoPetSelectedException) { + //nothing is supposed to happen here but i have to have the catch block here anyways + } + } + + @SuppressWarnings("unchecked") + private void updatePetList() { + /* + * when creating the Object[] array make sure to use the ImageCell.getCellPanel() + * method or it will return with an error + */ + readPetListArray(); + //set the JList data + pets.setListData(petList); + } + + //the code to handle when the user clicks on one of the options in the JList + private MouseListener mouseListener = new MouseAdapter() { + public void mouseClicked(MouseEvent e) { + try { + int lastPet = selectedPet; + if (petListArray.get(lastPet).getPet().finishedPlaying) { + selectedPet = pets.getSelectedIndex(); + //Make an ArrayList with the same values that are in the petList + updatePetDisplay(selectedPet); + } else { + pets.setSelectedIndex(lastPet); + } + } catch (Exception petWasNotPlayingException) { + selectedPet = pets.getSelectedIndex(); + //Make an ArrayList with the same values that are in the petList + updatePetDisplay(selectedPet); + } + } + }; + + //IO + private void writePetListArrayBin() throws IOException { + FileOutputStream out = new FileOutputStream(System.getProperty("user.home") + "/pets/bin/petList.bin"); + ObjectOutputStream s = new ObjectOutputStream(out); + s.writeObject(petListArray); + s.close(); + out.close(); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + private void readPetListArrayBin() throws IOException, ClassNotFoundException { + FileInputStream in = new FileInputStream(System.getProperty("user.home") + "/pets/bin/petList.bin"); + ObjectInputStream s = new ObjectInputStream(in); + petListArray = (ArrayList) s.readObject(); + s.close(); + in.close(); + } + + private void readPetListArray() { + //create petList + if (petListArray.size() == 0) { + petListArray.add(newPet); + petList = new Object[petListArray.size()]; + } else { + petList = new Object[petListArray.size()]; + } + for (int i = 0; i < petListArray.size(); i++) { + if (petListArray.get(i).getPet().getHealth() == 0 && petListArray.get(i).getPet().isAlive() && !petListArray.get(i).getPet().isPetCreator) { //if the pet is dead, add (dead) to the pet name + petListArray.get(i).getPet().setPetName(petListArray.get(i).getPet().getPetName() + " (dead)"); + petListArray.get(i).setText(petListArray.get(i).getText() + " (dead)"); + petListArray.get(i).getPet().kill(timeMachine); + updatePetDisplay(selectedPet); + } + petList[i] = petListArray.get(i).getCellPanel(); + } + } + + private void loadTimeMachine() throws IOException, ClassNotFoundException { + FileInputStream in = new FileInputStream(System.getProperty("user.home") + "/pets/bin/timeMachine.bin"); + ObjectInputStream s = new ObjectInputStream(in); + timeMachine = (int) s.readObject(); + s.close(); + in.close(); + } + + private void saveTimeMachine() throws IOException { + FileOutputStream out = new FileOutputStream(System.getProperty("user.home") + "/pets/bin/timeMachine.bin"); + ObjectOutputStream s = new ObjectOutputStream(out); + s.writeObject(timeMachine); + s.close(); + out.close(); + } + + //load GUI + public static void main(String[] args) { + new GUI(); + } + + private Timer waitForFinished; + @SuppressWarnings("unchecked") + @Override + public void actionPerformed(ActionEvent e) { + if (e.getSource().equals(addHour)) { + timeMachine++; + updatePetDisplay(selectedPet); + } else if (e.getSource().equals(feedButton)) { + //when the user feeds the pet + petListArray.get(selectedPet).getPet().addFood(timeMachine); + updatePetDisplay(selectedPet); + } else if (e.getSource().equals(playButton)) { + //when the user plays with the pet + petListArray.get(selectedPet).getPet().play(timeMachine); + waitForFinished = new Timer(500, new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (petListArray.get(selectedPet).getPet().finishedPlaying) { + waitForFinished.stop(); + updatePetDisplay(selectedPet); + } + + } + + }); + waitForFinished.start(); + } else if (e.getSource().equals(deleteButton)) { + //code to delete the pet + petListArray.remove(selectedPet); //remove the pet from the list + + //reset the displayPanel to its default state + //add welcome messages + displayPanel.removeAll(); + JLabel welcomeMessage = new JLabel("Welcome To Aaron-Gotchi Pets!"); + welcomeMessage.setBounds(6, 6, 432, 16); + displayPanel.add(welcomeMessage); + + JLabel welcomeMessageLine2 = new JLabel("Select a pet from the menu or create a new one to get started"); + welcomeMessageLine2.setBounds(6, 22, 432, 16); + displayPanel.add(welcomeMessageLine2); + + //refresh panel content + displayPanel.repaint(); + + //reset header text, image, and text color + petName.setForeground(Color.BLACK); + petName.setText("Aaron-Gotchi Pets"); + petImg.setIcon(new ImageIcon(new ImageIcon(GUI.class.getResource("/src/img/egg.png")).getImage().getScaledInstance(100, 100, Image.SCALE_DEFAULT))); + + //update pet list to remove deleted pet + updatePetList(); + } else if (e.getSource().equals(editButton)) { + displayPanel.removeAll(); + //for the name + JLabel nameLabel = new JLabel("Name: "); + nameLabel.setFont(new Font("Lucida Grande", Font.BOLD, 13)); + nameLabel.setBounds(16, 16, 70, 14); + displayPanel.add(nameLabel); + + JTextField nameInput = new JTextField(); + nameInput.setBounds(59, 13, 150, 20); + nameInput.setColumns(10); + displayPanel.add(nameInput); + nameInput.setText(petListArray.get(selectedPet).getText()); + + //for the toolbar + @SuppressWarnings("rawtypes") + JList toolList = new JList(); + toolList.setCellRenderer(new ImageCellRenderer()); + toolList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + toolList.setBackground(Color.LIGHT_GRAY); + toolList.setForeground(Color.LIGHT_GRAY); + Object[] tools = {new ImageCell("","/src/img/pencil.png", null, true).getCellPanel(true), new ImageCell("","src/img/eraser.png", null, true).getCellPanel(true), new ImageCell("","src/img/eyedropper.png", null, true).getCellPanel(true)}; + toolList.setListData(tools); + toolList.setBounds(217,13,50,150); + toolList.setSelectedIndex(0); + displayPanel.add(toolList); + + //for the image of the pet + JPanel[][] cells = new JPanel[8][8]; + Color[][] updatedArray = petListArray.get(selectedPet).getPet().imageArray; + + selectedColor = Color.BLACK; + + //recent colors panel + JLabel recentColors = new JLabel("Recent Colors:"); + recentColors.setBounds(16, 118, 100, 14); + displayPanel.add(recentColors); + + colorPanelsToAdd = 1; + color1 = new JPanel(); + color1.setBounds(16, 135, 50, 50); + color1.setBackground(selectedColor); + color1.setBorder(new LineBorder(Color.RED, 3)); + displayPanel.add(color1); + color1.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent clickedInPanel1) { + color1.setBorder(new LineBorder(Color.RED,3)); //set the border of this pane to be selected and others to be non, selected + color2.setBorder(new LineBorder(Color.BLACK,3)); + color3.setBorder(new LineBorder(Color.BLACK,3)); + selectedColor = color1.getBackground(); + } + }); + + color2 = new JPanel(); + color2.setBounds(68, 135, 50, 50); + color2.setBackground(new Color(0,0,0,0)); + color2.setBorder(new LineBorder(Color.BLACK,3)); + color2.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent clickedInPanel2) { + color2.setBorder(new LineBorder(Color.RED,3)); //set the border of this pane to be selected and others to be non, selected + color1.setBorder(new LineBorder(Color.BLACK,3)); + color3.setBorder(new LineBorder(Color.BLACK,3)); + selectedColor = color2.getBackground(); + } + }); + + color3 = new JPanel(); + color3.setBounds(121, 135, 50, 50); + color3.setBackground(new Color(0,0,0,0)); + color3.setBorder(new LineBorder(Color.BLACK,3)); + color3.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent clickedInPanel3) { + color3.setBorder(new LineBorder(Color.RED,3)); //set the border of this pane to be selected and others to be non, selected + color1.setBorder(new LineBorder(Color.BLACK,3)); + color2.setBorder(new LineBorder(Color.BLACK,3)); + selectedColor = color3.getBackground(); + } + }); + + JPanel selectorContainer = new JPanel(); + JColorChooser selector = new JColorChooser(); + selector.setChooserPanels(new AbstractColorChooserPanel[] {selector.getChooserPanels()[2]}); + selector.setPreviewPanel(new JPanel()); + selector.setBounds(10,77,250,137); + selectorContainer.add(selector); + + selector.getSelectionModel().addChangeListener(new ChangeListener(){ + @Override + public void stateChanged(ChangeEvent colorSet) { + //update color based on what the user selects + selectedColor = selector.getColor(); + } + + }); + + JButton chooseColorButton = new JButton("Choose Color"); + chooseColorButton.setBounds(16, 191, 117, 23); + displayPanel.add(chooseColorButton); + chooseColorButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent chooseColor) { + Object[] options = {"OK"}; + JOptionPane.showOptionDialog(frame, selectorContainer, "Choose Color", JOptionPane.PLAIN_MESSAGE, JOptionPane.PLAIN_MESSAGE, null, options, options[0]); + //this code runs after the user clicks ok on the optionpane + colorPanelsToAdd++; + if (colorPanelsToAdd == 2) { + displayPanel.add(color2); + } else if (colorPanelsToAdd == 3) { + displayPanel.add(color3); + } + color3.setBackground(color2.getBackground()); + color3.setBorder(new LineBorder(Color.BLACK,3)); + color2.setBackground(color1.getBackground()); + color2.setBorder(new LineBorder(Color.BLACK,3)); + color1.setBackground(selectedColor); + color1.setBorder(new LineBorder(Color.RED,3)); + } + }); + + for (int x = 0; x < cells.length; x++) { + for (int y = 0; y < cells[x].length; y++) { + //re-define x and y positions so the MouseAdapter has access to it + int xPos = x; + int yPos = y; + + //set up the JPanel and add add all cells with MouseAdapters + cells[x][y] = new JPanel(); + cells[x][y].setBounds(274+(x*20), 13+(y*20), 20, 20); + cells[x][y].setBorder(new LineBorder(new Color(0, 0, 0))); + cells[x][y].setBackground(petListArray.get(selectedPet).getPet().imageArray[x][y]); + displayPanel.add(cells[x][y]); + cells[x][y].addMouseListener(new MouseAdapter(){ + @Override + public void mousePressed(MouseEvent clickedOnCell) { + if (toolList.getSelectedIndex() == 0) { //pen tool + cells[xPos][yPos].setBackground(selectedColor); + updatedArray[xPos][yPos] = selectedColor; + } else if (toolList.getSelectedIndex() == 1) { //eraser tool + cells[xPos][yPos].setBackground(new Color(0,0,0,0)); + updatedArray[xPos][yPos] = new Color(0,0,0,0); + } else if (toolList.getSelectedIndex() == 2) { //eye dropper tool + Color colorToSet = cells[xPos][yPos].getBackground(); + if (!colorToSet.equals(new Color(0,0,0,0))) { //if the selected color isn't an empty pixel + selectedColor = cells[xPos][yPos].getBackground(); + colorPanelsToAdd++; + if (colorPanelsToAdd == 2) { + displayPanel.add(color2); + } else if (colorPanelsToAdd == 3) { + displayPanel.add(color3); + } + color3.setBackground(color2.getBackground()); + color3.setBorder(new LineBorder(Color.BLACK,3)); + color2.setBackground(color1.getBackground()); + color2.setBorder(new LineBorder(Color.BLACK,3)); + color1.setBackground(selectedColor); + color1.setBorder(new LineBorder(Color.RED,3)); + } + } + + } + }); + } + } + + JButton cancelButton = new JButton("Cancel"); + cancelButton.setBounds(224, 191, 77, 23); + displayPanel.add(cancelButton); + cancelButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + updatePetDisplay(selectedPet); + } + + }); + + JButton saveChangesButton = new JButton("Save Changes"); + saveChangesButton.setBounds(311, 191, 123, 23); + displayPanel.add(saveChangesButton); + saveChangesButton.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent petChanged) { + //create the image + BufferedImage image = new BufferedImage(8,8, BufferedImage.TYPE_INT_ARGB); + for (int x = 0; x < cells.length; x++) { + for (int y = 0; y < cells[x].length; y++) { + image.setRGB(x, y, cells[x][y].getBackground().getRGB()); + } + } + + //save the image as a png file + File imageOutput = new File(System.getProperty("user.home") + "/pets/img/" + nameInput.getText() + ".png"); + try { + ImageIO.write(image, "png", imageOutput); + } catch (IOException e) {} + + petListArray.get(selectedPet).setText(nameInput.getText()); + petListArray.get(selectedPet).setImg(new ImageIcon(System.getProperty("user.home") + "/pets/img/" + nameInput.getText() + ".png")); + petListArray.get(selectedPet).getPet().setPetName(nameInput.getText()); + petListArray.get(selectedPet).getPet().setPetImgPath(System.getProperty("user.home") + "/pets/img/" + nameInput.getText() + ".png"); + updatePetList(); + pets.setSelectedIndex(selectedPet); + updatePetDisplay(selectedPet); + petListArray.get(selectedPet).getPet().imageArray = updatedArray; + } + }); + displayPanel.repaint(); + } + } + + @Override + public void windowClosing(WindowEvent e) { //code to save petListArray to a bin file + try { + petListArray.get(selectedPet).getPet().finishedPlaying = true; + writePetListArrayBin(); + saveTimeMachine(); + } catch (IOException e1) { + e1.printStackTrace(); + JOptionPane.showMessageDialog(frame, "Error Saving Pet Information"); + } + } + + //useless from here on but this all has to be here or I get errors + @Override + public void windowOpened(WindowEvent e) { + + + } + + @Override + public void windowClosed(WindowEvent e) { + + + } + + @Override + public void windowIconified(WindowEvent e) { + + + } + + @Override + public void windowDeiconified(WindowEvent e) { + + + } + + @Override + public void windowActivated(WindowEvent e) { + + } + + @Override + public void windowDeactivated(WindowEvent e) { + + } +} diff --git a/src/ImageCell.java b/src/ImageCell.java new file mode 100755 index 0000000..77dfba2 --- /dev/null +++ b/src/ImageCell.java @@ -0,0 +1,80 @@ +//Aaron Cohen + +//Computer Science 20 + +//Henry Wise Wood High School + +//2020-2021 Semester 1 + +//Great help from https://docs.oracle.com/javase/tutorial/uiswing/components/icon.html + +import java.awt.Color; +import java.awt.FlowLayout; +import java.awt.Image; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JPanel; + +@SuppressWarnings("serial") +public class ImageCell implements java.io.Serializable { + + private String text; + private ImageIcon img; + private Pet pet; + + public ImageCell(String text, String imageLocation, Pet pet) { + this.text = text; + this.img = new ImageIcon(imageLocation, this.text); + this.pet = pet; + } + + public ImageCell(String text, String imageLocation, Pet pet, boolean isSrcImg) { + this.text = text; + this.img = new ImageIcon(ImageCell.class.getResource(imageLocation), this.text); + this.pet = pet; + } + + public Pet getPet() { + return pet; + } + + public void setPet(Pet pet) { + this.pet = pet; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public ImageIcon getImg() { + return img; + } + + public void setImg(ImageIcon img) { + this.img = img; + } + + public JPanel getCellPanel() { + JLabel label = new JLabel(this.text, new ImageIcon(this.img.getImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT)), JLabel.LEFT); + JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + if (this.getPet().getHealth() == 0 && !this.getPet().isPetCreator) { //if the pet is dead, make the label red + label.setForeground(Color.RED); + } else { + label.setForeground(Color.BLACK); + } + panel.add(label); + return panel; + } + + public JPanel getCellPanel(boolean tool) { + JLabel label = new JLabel(new ImageIcon(this.img.getImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT))); + JPanel panel = new JPanel(); + panel.add(label); + return panel; + } + +} diff --git a/src/ImageCellRenderer.java b/src/ImageCellRenderer.java new file mode 100755 index 0000000..73a0238 --- /dev/null +++ b/src/ImageCellRenderer.java @@ -0,0 +1,46 @@ +//Aaron Cohen + +//Computer Science 20 + +//Henry Wise Wood High School + +//2020-2021 Semester 1 + +/* + * Credit to https://alvinalexander.com/java/jlist-image-jlabel-renderer/ for some of the code + * Really helpful guide to setting up this class for the CellRenderer and explaining how it all works + */ + +import java.awt.Color; +import java.awt.Component; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.ListCellRenderer; +import javax.swing.border.BevelBorder; +import javax.swing.border.SoftBevelBorder; + +@SuppressWarnings("rawtypes") +public class ImageCellRenderer implements ListCellRenderer{ + + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + + if (value instanceof JPanel) { + Component component = (Component) value; + component.setForeground (Color.LIGHT_GRAY); + component.setBackground (isSelected ? Color.GRAY : Color.LIGHT_GRAY); + ((JComponent) component).setBorder(isSelected ? new SoftBevelBorder(BevelBorder.LOWERED, Color.DARK_GRAY, Color.BLACK) : null); + return component; + } + + else { + return new JLabel("Error: Use ImageCell.getCellPanel()"); + } + } +} + + + + diff --git a/src/Pet.java b/src/Pet.java new file mode 100755 index 0000000..f93496e --- /dev/null +++ b/src/Pet.java @@ -0,0 +1,404 @@ +//Aaron Cohen + +//Computer Science 20 + +//Henry Wise Wood High School + +//2020-2021 Semester 1 + +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.Timer; +import AppPackage.AnimationClass; + +import java.awt.Color; +import java.awt.Image; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; + +@SuppressWarnings("serial") +public class Pet implements java.io.Serializable { + + public boolean isPetCreator; + + private String petName; + private ImageIcon petImg; + private String petImgPath; + + private LocalDateTime birthday; + private LocalDateTime deathDay; + + private int health; + private int tempHealth; + private int food; + private LocalDateTime lastFed; + private int tempFood; + private boolean alive; + + private int happiness; + private int tempHappiness; + private LocalDateTime lastPlayed; + + public Color[][] imageArray; + + public Pet(String petName, String petImgPath) { + this.petName = petName; + this.petImgPath = petImgPath; + this.petImg = new ImageIcon(petImgPath, petName); + this.birthday = LocalDateTime.now(); + this.health = 5; + this.tempHealth = 5; + this.food = 5; + this.tempFood = 5; + this.happiness = 5; + this.tempHappiness = 5; + this.lastFed = LocalDateTime.now(); + this.lastPlayed = LocalDateTime.now(); + this.alive = true; + this.finishedPlaying = true; + } + + public Pet(String petName, String petImgPath, int timeMachineAdjustment) { + this.petName = petName; + this.petImgPath = petImgPath; + this.petImg = new ImageIcon(petImgPath, petName); + this.birthday = LocalDateTime.now().plusHours(timeMachineAdjustment); + this.health = 5; + this.tempHealth = 5; + this.food = 5; + this.tempFood = 5; + this.happiness = 5; + this.tempHappiness = 5; + this.lastFed = LocalDateTime.now().plusHours(timeMachineAdjustment); + this.lastPlayed = LocalDateTime.now().plusHours(timeMachineAdjustment); + this.alive = true; + this.finishedPlaying = true; + } + + public Pet(String petName, String petImgPath, int timeMachineAdjustment, boolean isPetCreator) { + this.petName = petName; + this.petImgPath = petImgPath; + this.petImg = new ImageIcon(Pet.class.getResource(petImgPath), petName); + this.birthday = LocalDateTime.now().plusHours(timeMachineAdjustment); + this.health = 5; + this.tempHealth = 5; + this.food = 5; + this.tempFood = 5; + this.happiness = 5; + this.tempHappiness = 5; + this.lastFed = LocalDateTime.now().plusHours(timeMachineAdjustment); + this.lastPlayed = LocalDateTime.now().plusHours(timeMachineAdjustment); + this.alive = true; + this.finishedPlaying = true; + + this.isPetCreator = isPetCreator; + } + + /* + * TODO - IMPORTANT: Never set this.alive to false, if the pet is supposed to be dead, + * set this.health to 0, for the GUI to display accurate information, it must be able to read + * that the health is at 0, update information, and call the kill() method so it knows that + * everything has been properly updated to register the pet as dead. + * + * If this.alive = false, it means that in the system the pet has been registered as dead. + * Manually setting this.alive to false will not register the pet as dead. + */ + + public void softUpdate(int timeMachineAdjustment) { + //if the pet has gone an hour without being fed, remove one hunger point for each hour it hasn't been fed + this.tempFood = this.food - (int) lastFed.until(LocalDateTime.now().plusHours(timeMachineAdjustment), ChronoUnit.HOURS); + this.tempHappiness = this.happiness - (int) lastPlayed.until(LocalDateTime.now().plusHours(timeMachineAdjustment), ChronoUnit.HOURS); + + //update tempHealth + if (this.tempHappiness <= 0) { + this.tempHealth = this.health - (((int) Math.abs(tempHappiness/5)) + 1); + } + + //if the pet is dead from starvation + if (this.tempFood <= 0) { + this.food = 0; + this.tempFood = 0; + this.health = 0; + this.tempHealth = 0; + this.happiness = 0; + this.tempHappiness = 0; + } + + //if the pet is dead from not being happy + if (this.tempHappiness <= -25) { + this.food = 0; + this.tempFood = 0; + this.health = 0; + this.tempHealth = 0; + this.happiness = 0; + this.tempHappiness = 0; + } + + //if the pet is dead from dying + if (this.tempHealth <= 0) { + this.food = 0; + this.tempFood = 0; + this.health = 0; + this.tempHealth = 0; + this.happiness = 0; + this.tempHappiness = 0; + } + + } + + public int getHappiness() { + if (!this.alive) { + return 0; + } + int calculate = tempHappiness; + + while (calculate <= 0) { + calculate += 5; + } + + return calculate; + } + + public int getFood() { + return tempFood; + } + + public void addFood(int timeMachineAdjustment) { + if (this.getFood() < 5 && (int) lastFed.until(LocalDateTime.now().plusHours(timeMachineAdjustment), ChronoUnit.MINUTES) >= 30) { + food = this.getFood() + 1; + lastFed = LocalDateTime.now().plusHours(timeMachineAdjustment); + } else if (food < 5 && lastFed.until(LocalDateTime.now().plusHours(timeMachineAdjustment), ChronoUnit.MINUTES) < 30){ + //pet is still hungry but cannot eat + String cantFeedPet = "You Cannot Feed Your Pet For Another " + (30 - (int) lastFed.until(LocalDateTime.now().plusHours(timeMachineAdjustment), ChronoUnit.MINUTES)) + " Minutes"; + GUI.displayPanelMessage(cantFeedPet); + } else { + //pet is not hungry + String cantFeedPet = "Your Pet Is Not Hungry"; + GUI.displayPanelMessage(cantFeedPet); + } + } + + private int currentPlayAmount; + public boolean finishedPlaying; + private boolean inAnimation; + + public void play(int timeMachineAdjustment) { + if (this.getHappiness() < 5 && (int) lastPlayed.until(LocalDateTime.now().plusHours(timeMachineAdjustment), ChronoUnit.MINUTES) >= 30) { + //so the GUI class doesn't get rid of the panel immediately + finishedPlaying = false; + inAnimation = false; + + //clear the components from the display panel + GUI.displayPanel.removeAll(); + //add the new components here + JLabel ground = new JLabel(new ImageIcon(new ImageIcon(Pet.class.getResource("/src/img/ground.png")).getImage().getScaledInstance(438, 78, Image.SCALE_DEFAULT))); + ground.setBounds(3, 147, 438, 78); + GUI.displayPanel.add(ground); + + ImageIcon ball = new ImageIcon(new ImageIcon(Pet.class.getResource("/src/img/ball.png")).getImage().getScaledInstance(50, 50, Image.SCALE_DEFAULT)); + + JLabel ballLabel = new JLabel(ball); + ballLabel.setBounds(78, 97, 50, 50); + GUI.displayPanel.add(ballLabel); + + JLabel petLabel = new JLabel(new ImageIcon(this.getPetImg().getImage().getScaledInstance(50, 50, Image.SCALE_DEFAULT))); + petLabel.setBounds(28, 97, 50, 50); + GUI.displayPanel.add(petLabel); + + //refresh the display panel with the new components + GUI.displayPanel.repaint(); + + //for the animation and then adding the happiness point to the pet, see the MouseAdapter below + currentPlayAmount = 0; + int totalPlayAmount = ((int) (Math.random() * 3)) + 3; //random number between 3 and 5 + AnimationClass animator = new AnimationClass(); + GUI.displayPanel.addMouseListener(new MouseAdapter() { + public void finished() { + health = tempHealth; + + happiness = getHappiness() + 1; + lastPlayed = LocalDateTime.now().plusHours(timeMachineAdjustment); + GUI.displayPanel.removeMouseListener(this); + finishedPlaying = true; + } + + @Override + public void mouseClicked(MouseEvent e) { + if (!inAnimation) { + + inAnimation = true; + + //the code that will run when the user clicks on the JPanel + currentPlayAmount++; + + //move the ball to the other side of the screen and start the animation + animator.jLabelXLeft(316, 28, 0, 316-28, petLabel); + animator.jLabelXRight(78, 366, 0, 288, ballLabel); + animator.jLabelYUp(97, 47, 0, 50, ballLabel); + + //move the ball down + try { + Thread.sleep(30); + } catch (InterruptedException e1) {} + animator.jLabelYDown(47, 97, 4, 1, ballLabel); + + Timer ballDownTimer = new Timer(4*50, new ActionListener(){ + @Override + public void actionPerformed(ActionEvent ballHitsFloor) { + //this code runs when the ball hits the floor + animator.jLabelXRight(28, 316, 5, 1, petLabel); + Timer petRightTimer = new Timer((5*(366)), new ActionListener(){ + @Override + public void actionPerformed(ActionEvent petHasBall) { + //start pet jump with ball animation + animator.jLabelYUp(97, 67, 2, 1, petLabel); + animator.jLabelYUp(97, 67, 2, 1, ballLabel); + Timer spritesUpTimer = new Timer(60*2, new ActionListener(){ + @Override + public void actionPerformed(ActionEvent jumpAtPeak) { + //when the pet and ball reach the peak of the jump + animator.jLabelYDown(67, 97, 2, 1, petLabel); + animator.jLabelYDown(67, 97, 2, 1, ballLabel); + + Timer finishedTimer = new Timer(60*2, new ActionListener(){ + @Override + public void actionPerformed(ActionEvent animationFinished) { //runs when the animation is completely finished to see if it should remove the 'play panel' + inAnimation = false; + if (currentPlayAmount == totalPlayAmount) { + finished(); + } + } + + }); + finishedTimer.setRepeats(false); + finishedTimer.start(); + } + + }); + spritesUpTimer.setRepeats(false); + spritesUpTimer.start(); + } + + }); + petRightTimer.setRepeats(false); + petRightTimer.start(); + } + + }); + ballDownTimer.setRepeats(false); + ballDownTimer.start(); + } + } + }); + + + + } else if (happiness < 5 && lastPlayed.until(LocalDateTime.now().plusHours(timeMachineAdjustment), ChronoUnit.MINUTES) < 30){ + //pet is still hungry but cannot eat + String cantFeedPet = "You Cannot Play With Your Pet For Another " + (30 - (int) lastPlayed.until(LocalDateTime.now().plusHours(timeMachineAdjustment), ChronoUnit.MINUTES)) + " Minutes"; + GUI.displayPanelMessage(cantFeedPet); + } else { + //pet is not hungry + String cantFeedPet = "Your Pet Is Does Not Want To Play"; + GUI.displayPanelMessage(cantFeedPet); + } + } + + public void removeFood() { + food--; + } + + public void kill() { + this.alive = false; + deathDay = LocalDateTime.now(); + } + + public void kill(int timeMachineAdjustment) { + this.alive = false; + deathDay = LocalDateTime.now().plusHours(timeMachineAdjustment); + } + + public boolean isAlive() { + return alive; + } + + public void addHealth() { + if (health < 5) { + health++; + } + } + + public void removeHealth() { + if (health > 0) { + health--; + } + } + + public int getHealth() { + return tempHealth; + } + + public LocalDateTime getBirthday() { + return birthday; + } + + public int age() { + if (this.alive) { + return (int) birthday.until(LocalDateTime.now(), ChronoUnit.DAYS); //returns the age in days of the pet (how many days from when the constructor was called) + } else { + return (int)birthday.until(deathDay, ChronoUnit.DAYS); + } + } + + public int age(int timeMachineAdjustment) { + if (this.alive) { + return (int) birthday.until(LocalDateTime.now().plusHours(timeMachineAdjustment), ChronoUnit.DAYS); //returns the age in days of the pet (how many days from when the constructor was called) + } else { + return (int) birthday.until(deathDay, ChronoUnit.DAYS); //returns the age in days of the pet (how many days from when the constructor was called) + } + } + + public int ageInHours() { + if (this.alive) { + return (int) birthday.until(LocalDateTime.now(), ChronoUnit.HOURS); + } else { + return (int) birthday.until(deathDay, ChronoUnit.HOURS); + } + } + + public int ageInHours(int timeMachineAdjustment) { + if (this.alive) { + return (int) birthday.until(LocalDateTime.now().plusHours(timeMachineAdjustment), ChronoUnit.HOURS); + } else { + return (int) birthday.until(deathDay, ChronoUnit.HOURS); + } + } + public String getPetName() { + return petName; + } + + public void setPetName(String petName) { + this.petName = petName; + } + + public ImageIcon getPetImg() { + return petImg; + } + + public void setPetImg(ImageIcon petImg) { + this.petImg = petImg; + } + + public String getPetImgPath() { + return petImgPath; + } + + public void setPetImgPath(String petImgPath) { + this.petImgPath = petImgPath; + } + +} diff --git a/src/src/img/apple.png b/src/src/img/apple.png new file mode 100755 index 0000000000000000000000000000000000000000..e117204307b36cb133c89390a00ac0ecfc9c01e0 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKU}W@kaSXBOO-^xO^5RnapZKPl z|C~Y6WM}bo$FP995H`JwnP)%zzt?QsW6--Z?G4X$`TFD=hZ8=@-xLsI(|PddEIW_f zX9h%$;LA8;@+^6=`iaLlVoNMwgV;)FY#=aUCy{9>sS`UN``C`p-qyOQjr%# zU$2sSRH7Frejw(e>KFc_YHUDIVz@?A@TP!-^fG~XGj@ij*P0a_$_pO@!-T=p)z4*} HQ$iB}Hh*=A literal 0 HcmV?d00001 diff --git a/src/src/img/ball.png b/src/src/img/ball.png new file mode 100755 index 0000000000000000000000000000000000000000..38fdd77b1b856293ea0b957ed1409d25eab3450a GIT binary patch literal 447 zcmV;w0YLtVP)ydv%?W}OWLyq+Oq|pJIoC;6;(SX zWcTpS*SxqTp_F8pV%ZP=wn9ysY*DS%ji4BDpG6#i8K#@_KvMw~XQmtdAhM!f+~VEl zMT7ky!t3QnsZLLVDdVa67_oJm4AX!3xSu$F5CPD;&BN8C$(E0o{Q%N?oVNwzsly9+ zaSN+?SAxW`7zPxdts*Ldg!(~*tEV~d7O=c-l;`hT0Ofv}VzgtEwxcX)>Q;jZFWVtK pbfDm%KcxVnrT?1p3aBZ1;J>LO%}SF~OMCzT002ovPDHLkV1nb;@5JlexpM!?Rw8l+>)o|}SdfqF7We}AmHV7c5VUCXJcV}M0jAa7IXxb{v( z?Y1b|snyB^25Sw+`a)ylkQ%U@BQcCpn)c$jIvzT+raDn6T1!v6UHiE~hocCr1%jJ5 z%Ec(fdWEh1yd5up)g{^^JszrE`{0V|<{B|IQMklqBC-MCscaW~&c=cKPUl5Y^`L$c zAk5Ur*zd>kDmg!8c&1~{!@eB$WB2Yd=Cg|QpAj_Dj+^^%nE<>z)8| j`7&Ro){E2xUbN*8E^V?X5`>#>00000NkvXXu0mjfON6cZ literal 0 HcmV?d00001 diff --git a/src/src/img/eraser.png b/src/src/img/eraser.png new file mode 100755 index 0000000000000000000000000000000000000000..0315176ac93f74c5c296674054d92693c7fa7061 GIT binary patch literal 14987 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 Wq;BHB9z@vy0000a6}0J literal 0 HcmV?d00001 diff --git a/src/src/img/ground.png b/src/src/img/ground.png new file mode 100755 index 0000000000000000000000000000000000000000..d90670a8dbe890b8ef9d33f98535bb25ceb0e980 GIT binary patch literal 2142 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 literal 0 HcmV?d00001 diff --git a/src/src/img/pencil.png b/src/src/img/pencil.png new file mode 100755 index 0000000000000000000000000000000000000000..6e743f87ef60c607fb0bd767aedf0f75fbf1f8c0 GIT binary patch literal 364 zcmV-y0h9iTP)YU6oB#X-lP?2`kx3YE+UE`3U;U11nlBdY=Y8tBE|=-rY~6AR63W-aRNq+bkRTPfz3 zwqw1!fgAjVVEAQ<8tkKsLZ^K;6qBc0`59Za(VJeV$FKFHO>Kz`=bpy v{d0HjFPLd#o*$Obvo`y~NoMxrvgz!Ht{HvxV*lX