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:46] frchrisvirtual_pet [2026/02/26 14:00] (current) – [Activity 5] frchris
Line 126: 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 145: Line 160:
 { {
   /**   /**
-   * Activity 3+   * Activity 3 Part B
    * @author (your name)    * @author (your name)
    * @version (a version number or a date)    * @version (a version number or a date)
Line 157: Line 172:
 } }
 </file> </file>
-==== Activity 5 ====+ 
 + 
 +<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() < || 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> <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.1772131565.txt.gz · Last modified: by frchris

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki