User Tools

Site Tools


virtual_pet

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
virtual_pet [2026/02/26 13:35] frchrisvirtual_pet [2026/02/26 14:00] (current) – [Activity 5] frchris
Line 2: Line 2:
  
 [[https://www.bandai.com/amfile/file/download/file/173/product/1276535/|Example of a Virtual Pet]] [[https://www.bandai.com/amfile/file/download/file/173/product/1276535/|Example of a Virtual Pet]]
 +
 +===== Activity 3 =====
  
 <file java VirtualPet.java> <file java VirtualPet.java>
Line 124: Line 126:
 </file> </file>
 ===== Activity 4 ===== ===== Activity 4 =====
 +
 +<file java Food.java>
 +/**
 + * Activity 4 part A
 + * @author (your name)
 + * @version (a version number or a date)
 + */
 +public class Food
 +{
 +  /* enter code for instance variables, constructor,
 +     and accessor methods
 +  **/
 +}
 +</file>
 +
 <file java Game.java> <file java Game.java>
 /** /**
Line 137: Line 154:
  * and a 50% chance of returning false.   * and a 50% chance of returning false. 
  * Write the complete Game class, including the constructor   * Write the complete Game class, including the constructor 
- * and any required instance variables and their accessor method and the method isWinner(). Your implementation should meet all the specifications outlined above+ * and any required instance variables and their accessor method  
 + and the method isWinner(). 
  */  */
 public class Game public class Game
 { {
-  +  /** 
 +   * Activity 3 Part B 
 +   * @author (your name) 
 +   * @version (a version number or a date) 
 +   */ 
 +  public Game (String name, int happinessIncr, int weightDecr){ 
 +       
 +  } 
 +  public boolean isWinner(){ 
 +      return false; 
 +  }
 } }
 +</file>
 +
 +
 +<file java VirtualPetGUIRunner.java>
 +/**
 + * A GUI class to run the Virtual Pet Lab
 + * Requires javax.swing and java.awt
 + * @author Kim Hermans
 + * Image Credit: J.P. O'Hara & Jamie O'Hara
 + * @November 2024
 + */
 +import java.awt.BorderLayout;
 +import java.awt.Color;
 +import java.awt.Dimension;
 +import java.awt.GridBagConstraints;
 +import java.awt.GridBagLayout;
 +import java.awt.GridLayout;
 +import java.awt.event.ActionEvent;
 +import java.awt.event.ActionListener;
 +import java.io.IOException;
 +import java.util.concurrent.Executors;
 +import java.util.concurrent.ScheduledExecutorService;
 +import java.util.concurrent.TimeUnit;
 +import javax.swing.BorderFactory;
 +import javax.swing.Box;
 +import javax.swing.BoxLayout;
 +import javax.swing.ImageIcon;
 +import javax.swing.JButton;
 +import javax.swing.JFrame;
 +import javax.swing.JLabel;
 +import javax.swing.JMenu;
 +import javax.swing.JMenuBar;
 +import javax.swing.JMenuItem;
 +import javax.swing.JOptionPane;
 +import javax.swing.JPanel;
 +import javax.swing.Timer;
 +
 +public class VirtualPetGUIRunner 
 +{
 +    // CHANGE THIS VARIABLE VALUE TO TEST AT A DIFFERENT SPEED
 +    private final int INTERVAL_IN_SECONDS = 10;
 +    
 +    private String info;
 +    private int timerSeconds, animationTimerSeconds;
 +    private boolean isEating, isPlaying;
 +    private VirtualPet pet3;
 +    private ImageIcon imageHappy, imageSad, imageEat, imagePlay;
 +    private JFrame frame;
 +    private JPanel petPanel, menuPanel, mainPanel, statsPanel, timerPanel;
 +    private JLabel petLabel,statsLabel, messageLabel, timerLabel;
 +    private JButton foodButton, playButton;
 +    private JMenu newPetMenu;
 +    private JMenuItem petRunner3, petRunner4;
 +    private JMenuBar menuBar;
 +    
 +    public VirtualPetGUIRunner(String name) 
 +    {
 +        pet3 = new VirtualPet(name);
 +        isPlaying = isEating = false;
 +        
 +        // Automatically calls update after INTERVAL_IN_SECONDS time
 +        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
 +        scheduler.scheduleAtFixedRate(() -> { pet3.updateStatus(); }, INTERVAL_IN_SECONDS, INTERVAL_IN_SECONDS, TimeUnit.SECONDS);
 +        
 +        // Calls helper methods to initialize components of GUI
 +        initPetDisplayPanel();
 +        initTimerPanel();
 +        initStatsPanel();
 +        initButtons();
 +        fillLayout();
 +        initMenuBar();
 +        
 +        // Initializes the frame
 +        frame = new JFrame();
 +        frame.setPreferredSize(new Dimension(350, 500));
 +        frame.setTitle("Virtual Pet");
 +        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 +        
 +        // Adds all components to the frame and makes visible
 +        frame.add(mainPanel);
 +        frame.setJMenuBar(menuBar);
 +        frame.pack();
 +        frame.setVisible(true);
 +    }
 +    
 +    // Initializes the Feed and Play buttons and the panel that contains them
 +    public void initButtons()
 +    {
 +        GridBagConstraints c = new GridBagConstraints();
 +        
 +        foodButton = new JButton("Feed");
 +        foodButton.addActionListener(new FoodButtonListener());
 +        foodButton.setPreferredSize(new Dimension(80, 30));
 +        foodButton.setMaximumSize(new Dimension(80, 30));
 +        
 +        playButton = new JButton("Play");
 +        playButton.addActionListener(new PlayButtonListener());
 +        playButton.setPreferredSize(new Dimension(80, 30));
 +        playButton.setMaximumSize(new Dimension(80, 30));
 +        
 +        menuPanel = new JPanel();
 +        menuPanel.setLayout(new BoxLayout(menuPanel, BoxLayout.Y_AXIS)); 
 +        menuPanel.add(Box.createVerticalStrut(50));
 +        menuPanel.add(foodButton, c);
 +        menuPanel.add(Box.createVerticalStrut(10));
 +        menuPanel.add(playButton, c);
 +        menuPanel.add(Box.createVerticalStrut(10));
 +    }
 +    
 +    // Initializes the panel that contains the information text
 +    public void initStatsPanel()
 +    {
 +        info = "" + pet3.toString().replaceAll("\n", "") + "";
 +        statsLabel = new JLabel(info);
 +        statsLabel.setBorder(BorderFactory.createEmptyBorder(0, 15, 15, 0));
 +        
 +        messageLabel = new JLabel("Happy Birthday, " + pet3.getName() + "!");
 +        messageLabel.setForeground(Color.blue);
 +        messageLabel.setBorder(BorderFactory.createEmptyBorder(0, 15, 15, 0));
 +        
 +        statsPanel = new JPanel(new GridLayout(2,1));
 +        statsPanel.add(messageLabel);
 +        statsPanel.add(statsLabel);
 +    }
 +    
 +    // Initializes the panel that displays the VirtualPet
 +    public void initPetDisplayPanel() 
 +    {
 +        imageHappy = new ImageIcon("petHappy.gif");
 +        imageSad = new ImageIcon("petSad.gif");
 +        imageEat = new ImageIcon("petEat.gif");
 +        imagePlay = new ImageIcon("petPlay.gif");
 +        petLabel = new JLabel(imageHappy);
 +        
 +        petPanel = new JPanel(new BorderLayout());
 +        petPanel.add(petLabel);
 +    }
 +    
 +    // Initializes the timer that is displayed 
 +    public void initTimerPanel()
 +    {
 +        timerSeconds = 0;
 +        timerLabel = new JLabel("00:00");
 +        Timer timer = new Timer(1000, new ActionListener() {
 +            @Override
 +            public void actionPerformed(ActionEvent e) {
 +                timerSeconds++;
 +                int minutes = timerSeconds / 60;
 +                int remainingSeconds = timerSeconds % 60;
 +                timerLabel.setText(String.format("%02d:%02d", minutes, remainingSeconds));
 +                info = "" + pet3.toString().replaceAll("\n", "") + "";
 +                statsLabel.setText(info);
 +                if(!isPlaying && !isEating)
 +                {
 +                    if((ImageIcon)petLabel.getIcon() != imageSad && (pet3.getEnergyLevel() < 5 || pet3.getHappinessLevel() < 5))
 +                        petLabel.setIcon(imageSad);
 +                    else if((ImageIcon)petLabel.getIcon() != imageHappy && (pet3.getEnergyLevel() >= 5 && pet3.getHappinessLevel() >= 5))
 +                        petLabel.setIcon(imageHappy);
 +                }
 +            }
 +        });
 +        timer.start();
 +        timerPanel = new JPanel();
 +        timerPanel.add(timerLabel);
 +        timerPanel.setLayout(new GridBagLayout());
 +    }
 +    
 +    // Initializes the Menu Bar that allows you to create a new Virtual Pet
 +    public void initMenuBar()
 +    {
 +        petRunner3 = new JMenuItem("Activity 3");
 +        petRunner3.addActionListener(new NewPet3Listener());
 +        petRunner4 = new JMenuItem("Activity 4");
 +        petRunner4.addActionListener(new NewPet4Listener());
 +        newPetMenu = new JMenu("New Pet");
 +        newPetMenu.add(petRunner3);
 +        newPetMenu.add(petRunner4);
 +        menuBar = new JMenuBar();
 +        menuBar.add(newPetMenu);
 +    }
 +    
 +    // Organizes the layout for the main panel
 +    public void fillLayout()
 +    {
 +        mainPanel = new JPanel();
 +        mainPanel.setLayout(new GridBagLayout());
 +        GridBagConstraints c = new GridBagConstraints();
 +        c.fill = GridBagConstraints.BOTH;
 +        c.weightx = 60;
 +        c.weighty = 70;
 +        c.gridx = 0;
 +        c.gridy = 0;
 +        mainPanel.add(petPanel, c);
 +        c.weightx = 40;
 +        c.gridx = 1;
 +        mainPanel.add(menuPanel, c);
 +        c.weightx = 60;
 +        c.weighty = 30;
 +        c.gridx = 0; 
 +        c.gridy = 1;
 +        mainPanel.add(statsPanel, c);
 +        c.weightx = 40;
 +        c.gridx = 1;
 +        mainPanel.add(timerPanel, c);
 +    }
 +
 +    // Defines the action when the Feed button is clicked
 +    class FoodButtonListener implements ActionListener 
 +    {
 +        public void actionPerformed(ActionEvent e) 
 +        {
 +            pet3.feed();
 +            messageLabel.setText("You have fed " + pet3.getName());
 +            info = "" + pet3.toString().replaceAll("\n", "") + "";
 +            statsLabel.setText(info);
 +            animationTimerSeconds = 0;
 +            animationTimerSeconds = 0;
 +            isEating = true;
 +            petLabel.setIcon(imageEat);
 +            // Timer to show eating image for 2 seconds
 +            Timer animationTimer = new Timer(1000, new ActionListener() {
 +            @Override
 +                public void actionPerformed(ActionEvent e) {
 +                    animationTimerSeconds++;
 +                    if(animationTimerSeconds >= 2)
 +                    {
 +                        if(pet3.getEnergyLevel() < 5 || pet3.getHappinessLevel() < 5)
 +                            petLabel.setIcon(imageSad);
 +                        else
 +                            petLabel.setIcon(imageHappy);
 +                        isEating = false;
 +                        ((Timer) e.getSource()).stop();
 +                    }
 +                }
 +            });
 +            animationTimer.start();
 +        }
 +    }
 +    
 +    // Defines the action when the Play button is clicked
 +    class PlayButtonListener implements ActionListener 
 +    {
 +        public void actionPerformed(ActionEvent e) 
 +        {
 +            pet3.play();
 +            messageLabel.setText("You have played with " + pet3.getName());
 +            info = "" + pet3.toString().replaceAll("\n", "") + "";
 +            statsLabel.setText(info);
 +            animationTimerSeconds = 0;
 +            isPlaying = true;
 +            petLabel.setIcon(imagePlay);
 +            // Timer to show playing image for 2 seconds
 +            Timer animationTimer = new Timer(1000, new ActionListener() {
 +            @Override
 +                public void actionPerformed(ActionEvent e) {
 +                    animationTimerSeconds++;
 +                    if(animationTimerSeconds >= 2)
 +                    {
 +                        if(pet3.getEnergyLevel() < 5 || pet3.getHappinessLevel() < 5)
 +                            petLabel.setIcon(imageSad);
 +                        else
 +                            petLabel.setIcon(imageHappy);
 +                        isPlaying = false;
 +                        ((Timer) e.getSource()).stop();
 +                    }
 +                }
 +            });
 +            animationTimer.start();
 +        }
 +    }
 +    
 +    // Defines the action when a New Pet from Activity 3 is clicked
 +    class NewPet3Listener implements ActionListener
 +    {
 +        public void actionPerformed(ActionEvent e) 
 +        {
 +            try
 +            {        
 +                String input = JOptionPane.showInputDialog("Enter your virtual pet's name:");
 +                VirtualPetGUIRunner init = new VirtualPetGUIRunner(input);
 +                frame.dispose();
 +            }
 +            catch(Exception err)
 +            {
 +                System.out.println(err);
 +            }
 +        }
 +    }
 +    
 +    // Defines the action when a New Pet from Activity 4 is clicked
 +    class NewPet4Listener implements ActionListener
 +    {
 +        public void actionPerformed(ActionEvent e) 
 +        {
 + // "Uncomment" code when you complete Activity 4 and include
 + // VirtualPetGUIRunner4 in your project
 + /*
 +            try
 +            {
 +                String input = JOptionPane.showInputDialog("Enter your virtual pet's name:");
 +                VirtualPetGUIRunner4 init = new VirtualPetGUIRunner4(input);
 +                frame.dispose();
 +            }
 +            catch(Exception err)
 +            {
 +                System.out.println(err);
 +            }
 + */
 +        }
 +    }
 +    
 +    public static void main(String [] args) throws IOException
 +    {
 +        String input = JOptionPane.showInputDialog("Enter your virtual pet's name:");
 +        VirtualPetGUIRunner init = new VirtualPetGUIRunner(input);
 +    }
 +}
 +</file>
 +===== Activity 5 =====
 +
 +<file java VirtualPet4Runner.java>
 +import java.util.Scanner;
 +import java.util.concurrent.Executors;
 +import java.util.concurrent.ScheduledExecutorService;
 +import java.util.concurrent.TimeUnit;
 +
 +public class VirtualPetRunner4
 +{
 +    // Prints out menu and returns user choice
 +    public static int getChoice(Scanner input)
 +    {
 +      int selection = 0;
 +      while (selection < 1 || selection > 4)
 +      {
 +         System.out.println("------Virtual Pet Menu------");
 +         System.out.println("1. Get Pet Information");
 +         System.out.println("2. Feed Pet" );
 +         System.out.println("3. Play with Pet" );
 +         System.out.println("4. Quit" );
 +         System.out.print("Enter your choice ..... ");
 +         selection = input.nextInt();
 +      }
 +      return selection;
 +    }
 +    
 +    // Prints out food options and returns user choice
 +    public static int getPantry(Scanner input)
 +    {   
 +      int selection = 0;
 +      while (selection < 1 || selection > 5)
 +      {
 +        System.out.println("------Pantry Inventory------");
 +        System.out.println("1. Apple");
 +        System.out.println("2. Cupcake" );
 +        System.out.println("3. Broccoli" );
 +        System.out.println("4. Potato");
 +        System.out.println("5. Return to Menu" );
 +        selection = input.nextInt();
 +      }
 +      return selection;
 +
 +    }
 +    
 +     // Prints out game options and returns user choice
 +    public static int getGame(Scanner input)
 +    {
 +      int selection = 0;
 +      while (selection < 1 || selection > 4)
 +      {
 +        System.out.println("------Game Options------");
 +        System.out.println("1. Coin Toss");
 +        System.out.println("2. Hoop Jumping" );
 +        System.out.println("3. Simon Says" );
 +        System.out.println("4. Return to Menu" );
 +        selection = input.nextInt();
 +      }
 +      return selection;
 +    }
 +    
 +   // Displays a picture of the pet
 +    public static void printPet(String emo)
 +    {
 +        System.out.println(" /\\_/\\");  
 +        System.out.println("( o.o )"); 
 +        System.out.println(" > " + emo + " <");
 +    }
 +    
 +    public static void main(String[] args) 
 +    {
 +        // CHANGE THIS VARIABLE VALUE TO TEST AT A DIFFERENT SPEED
 +        final int INTERVAL_IN_SECONDS = 10;
 +        
 +        // Sets up Scanner for user input
 +        Scanner input = new Scanner(System.in);
 +        
 +        VirtualPet4 myPet = new VirtualPet4("Coco");
 +        
 +        // Instantiates Food objects
 +        Food apple = new Food("Apple", 2, 1, 1); 
 +        Food cupcake = new Food("Cupcake", 1, 2, 2);
 +        Food broccoli = new Food("Broccoli", 3, -1, 1);
 +        Food potato = new Food("Potato", 2, 0, 2);
 +        
 +        // Instantiates Game objects
 +        Game coinToss = new Game("Coin Toss", 1, 0);
 +        Game hoopJumping = new Game("Hoop Jumping", 2, 2);
 +        Game simonSays = new Game("Simon Says", 1, 2);
 +        
 +        // Sets up a ScheduledExecutorService object that will call updateStatus
 +        // every 1 minute.
 +        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
 +        scheduler.scheduleAtFixedRate(() -> { myPet.updateStatus(); }, 0, INTERVAL_IN_SECONDS, TimeUnit.SECONDS);
 +        
 +        System.out.println(myPet);
 +        printPet("ᵔ");
 +
 +        int choice = getChoice(input);        
 +        while (choice != 4)
 +        {
 +            if(choice == 1)
 +            {
 +              System.out.println(myPet);
 +            }
 +            else if (choice == 2)
 +            {
 +                System.out.println("Select a food option from the pantry.");
 +                int food = getPantry(input);
 +                Food f = null;
 +                if (food == 1)
 +                  f = apple;
 +                else if (food == 2)
 +                  f = cupcake;
 +                else if (food == 3)
 +                  f = broccoli;
 +                else if (food == 4)
 +                  f = potato;
 +                if (f != null)
 +                {
 +                  myPet.feed(f);
 +                  System.out.println("\n\nYou have fed " + myPet.getName() 
 +                                        + " 1 " + f.getName());
 +                }
 +            }
 +            else if (choice == 3)
 +            {
 +                System.out.println("Select a game to play.");
 +                int game = getGame(input);
 +                Game g = null;
 +                if (game == 1)
 +                  g = coinToss;
 +                else if (game == 2)
 +                  g = hoopJumping;
 +                else if (game == 3)
 +                  g = simonSays;
 +                if (g != null)
 +                {
 +                  boolean hasWon = myPet.play(g);
 +                  System.out.println("\n\nYou have played " + g.getName() 
 +                                        + " with " + myPet.getName());
 +                  if (hasWon)
 +                     System.out.println(myPet.getName() + " has won!");
 +                  else
 +                     System.out.println(myPet.getName() + " has lost!");
 +                }
 +            }
 +            if (myPet.getEnergyLevel() >= 5  && myPet.getHappinessLevel() >= 5)
 +                printPet("ᵕ");
 +            else
 +                printPet("ᵔ");
 +            System.out.println(myPet.getName().toUpperCase());
 +            choice = getChoice(input);
 +        }
 +        scheduler.shutdown();
 +    }
 +}
 +
 </file> </file>
  
virtual_pet.1772130954.txt.gz · Last modified: by frchris

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki