Disaster Survival
Disaster Survival
/*
* Soham Dwivedi
* Period 2
* 4/23/24
* Working on:
* The final game project of the year. This project will encompass all
we have done
* throughout the year, and will be worked on for 5 weeks.
*/
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Font;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Insets;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.CardLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JRadioButton;
import javax.swing.ButtonGroup;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JCheckBox;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.AdjustmentEvent;
import javax.swing.event.ChangeEvent;
Page 1 of 9
DisasterSurvival (2) 4/26/24, 12:45 AM
import javax.swing.event.ChangeListener;
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setLocation(0,0);
frame.setResizable(false);
DisasterHolder dh = new DisasterHolder();
frame.getContentPane().add( dh );
frame.setVisible(true);
}
}
// holds the panels and adds them to CardLayout
class DisasterHolder extends JPanel
{
public DisasterHolder()
{
Page 2 of 9
DisasterSurvival (2) 4/26/24, 12:45 AM
the difficulty
* can be stored in a variable, later used in the GamePanel. The field
vars
* are the components being used in handler classes or actionPerformed
methods.
* The StartPanel is a null layout.
*/
class StartPanel extends JPanel implements ActionListener,
ChangeListener
{
private DisasterHolder panCards; //card stuff
private CardLayout cards;
private int diff; //difficulty
private JSlider diffSlide; //difficulty slider so it can be
accessed by handlers
private JButton instruct; // same for these as above but for
// respective components
private JButton play;
private JButton exit;
//constructor initializes all components
public StartPanel(DisasterHolder panelCardsIn, CardLayout
cardsIn)
{
setLayout(null);
setBackground(Color.GREEN);
cards = cardsIn;
panCards = panelCardsIn;
Page 3 of 9
DisasterSurvival (2) 4/26/24, 12:45 AM
instruct.setFont(font);
instruct.setForeground(Color.ORANGE);
instruct.setBackground(Color.BLACK);
instruct.setOpaque(true);
instruct.setBorder(null);
play.addActionListener(this);
instruct.addActionListener(this);
add(instruct);
add(diffSlide);
add(play);
add(slideLabel);
add(exit);
}
// decides which card to show, and exits when exit button is
pressed
public void actionPerformed(ActionEvent evt)
{
if(evt.getSource()== instruct)
cards.show(panCards, "instructions");
else if(evt.getSource() == play)
cards.show(panCards, "game");
else if(evt.getSource() == exit)
System.exit(1);
}
// stateChanged gets the change event of the slider, which
decides the
// difficulty.
public void stateChanged(ChangeEvent evt)
{
int val = diffSlide.getValue();
if(val==1)
diff = 1;
else if(val==2)
diff = 2;
else
diff = 3;
Page 4 of 9
DisasterSurvival (2) 4/26/24, 12:45 AM
}
/* paintComponent draws the background image and the title
image,
* calling the mthod getMyImage
*/
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Image bg = null;
String imgName2 = new String("BackgroundImage.png");
bg = getMyImage(imgName2, bg);
g.drawImage(bg, 0, 0, 800, 600, null);
Page 5 of 9
DisasterSurvival (2) 4/26/24, 12:45 AM
Page 6 of 9
DisasterSurvival (2) 4/26/24, 12:45 AM
}
//paintComponent draws the background image for this panel.
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Image bg = null;
String imgName2 = new String("BackgroundImage.png");
bg = getMyImage(imgName2, bg);
g.drawImage(bg, 0, 0, 800, 600, null);
}
//try-catch block reads image
public Image getMyImage(String imgNameIn, Image image)
{
File imageFile = new File(imgNameIn);
try
{
image = ImageIO.read(imageFile);
}
catch(IOException e)
{
System.err.println("\n\n\n" + imgNameIn + "
can't be found.");
e.printStackTrace();
}
return image;
}
//handles the check box
class AgreementsHandler implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
cards.show(panelCards, "start");
}
}
}
/* Game panel uses radio buttons and draws images to switch between
it's cards,
* allowing the user to well, play the game!
*/
class GamePanel extends JPanel implements ActionListener
{
private DisasterHolder panelCards; //used to switch between
cards inside GamePanel
private CardLayout cards; //holds all cards so they can be
accessed
private JButton exit; // allows user to exit the game, needs
to be FV so handlers
// can access
public GamePanel(DisasterHolder panelCardsIn, CardLayout
cardsIn)
Page 7 of 9
DisasterSurvival (2) 4/26/24, 12:45 AM
{
Font font = new Font("Serif", Font.BOLD, 20);
cards = cardsIn;
panelCards = panelCardsIn;
setLayout(new BorderLayout());
setBackground(Color.BLUE);
add(exit, BorderLayout.NORTH);
bg.add(b1);
bg.add(b2);
bg.add(b3);
bg.add(b4);
bg.add(b5);
radioButtonsHolder.add(b1);
radioButtonsHolder.add(b2);
radioButtonsHolder.add(b3);
radioButtonsHolder.add(b4);
radioButtonsHolder.add(b5);
radioButtonsHolder.setBackground(Color.ORANGE);
add(radioButtonsHolder, BorderLayout.WEST);
}
//actionPerformed currently only handles the exit button.
public void actionPerformed(ActionEvent evt)
{
if(evt.getSource() == exit)
System.exit(1);
}
Page 8 of 9
DisasterSurvival (2) 4/26/24, 12:45 AM
Page 9 of 9