import java.awt.*;
import java.util.*;
import java.io.*;
import javax.swing.*;
import javax.swing.JOptionPane;
import javax.swing.Timer;
import java.awt.event.*;
public class PegGame extends JFrame
{
/* peg1, peg2, peg3, peg4, peg5, peg6, peg7, peg8, peg9, peg10, peg11, peg12, peg13, peg14, and peg15 - The 15 Peg objects that correspond to the 15 pegs in the game.
panel- the JPanel object
timer- a Timer object that I might need to redraw the pegs
fileReader- reads the high score file (Is handled if it doesn't exist.)
file - the File object that contains the high scores , but where to put it, I don't know.
highScoreRank - the ranking like 1, 2, 3, ,4 and so on. Has no maximum limit.
textRank- a String, could be either "Peg Master" (1 peg left) "Not Bad"(2 pegs left), "Needs Improvement"(3 pegs left) or "Hopeless" (4 or more pegs left).
name- the String to corresponders to the name of the high score holder
date- the date the person in question got the high score (note, this is a String, not a Date or Calendar object.)
newText- this is to correspond to the stuff read in. It is saved and then altered when more is added if someone gets a high score.
It was created so that I don't have to mess with the getText() method of the JLabel and risk getting the header text read in/out and causing errors later on.
oldText- the original label headings.
scoreLabel - a JLabel that contains the text for the high score page. */
private Peg peg1,peg2, peg3, peg4, peg5, peg6, peg7,
peg8, peg9, peg10, peg11, peg12, peg13, peg14, peg15;
private JPanel panel;
private Timer timer;
private Scanner fileReader;
private File file;
private Integer highScoreRank;
private Integer pegsLeft;
private String textRank;
private String name;
private String date;
private String newText;
private String oldText;
private JLabel scoreLabel;
private JFileChooser load2, save2;
//private FileChooserFilter pegFilter;
private Scanner fileReader2;
private FileWriter writer;
private JMenuBar jMenuBar;
private JMenu file2, about;
private HelpMenu hm;
private JMenuItem load, save, newWindow, exit, help, about2, highScores2;
private ImageIcon logo;
private File logoFile;
private String month;
private Integer month2;
private String dayOfWeek;
private Integer dayOfWeek2;
private String year;
private Integer year2;
private String dayOfMonth;
private Integer dayOfMonth2;
private String hour;
private Integer hour2;
private String minute;
private Integer minute2;
private String second;
private Integer second2;
private Integer hourOfDay;
private String time;
private String dateString;
private Timer tadTimer;
private TimeAndDateListener tadl;
private String tadString;
private GamePanel gamp;
private HighScoreFile hsf;
private String minutes3;
private Long millis;
private String seconds3;
private Long seconds4;
private String hours3;
private Long hours4;
private Long minutes4;
private Timer gameTimer;
private Long millis2;
private JLabel gameTimerLabel;
private Date dateObject;
private Long millis3;
private Long timerSeconds;
private String minuteString3;
private String secondString3;
private String hourString3;
private class GameTimer implements ActionListener
{
private Clock clock;
private class Clock
{
private Long hours, minutes5, seconds, milliseconds;
public Clock(Long hours, Long minutes5, Long seconds, Long milliseconds)
{
setHours(hours);
setMinutes(minutes5);
setSeconds(seconds);
}
public void setHours(Long hours)
{
this.hours = hours;
}
public Long getHours()
{
return hours;
}
public void setMinutes(Long minutes5)
{
this.minutes5 = minutes5;
if (minutes5 > 59)
{
setMinutes(new Long(0));
setHours(getHours() + 1);
}
}
public Long getMinutes()
{
return minutes5;
}
public void setSeconds(Long seconds)
{
this.seconds = seconds;
if (seconds > 59)
{
setSeconds(new Long(0));
setMinutes(getMinutes() + 1);
}
}
public Long getSeconds()
{
return seconds;
}
public void setMilliseconds(Long milliseconds)
{
this.milliseconds = milliseconds;
if (milliseconds > 999)
{
setMilliseconds(new Long(0));
setSeconds(getSeconds() + 1);
}
}
public Long getMilliseconds()
{
return milliseconds;
}
}
public void actionPerformed(ActionEvent e)
{
dateObject = new Date();
millis = dateObject.getTime();
millis2 = System.currentTimeMillis();
millis3 = millis2 - millis;
clock = new Clock(new Long(0), new Long(0), new Long(0), millis3);
Long l = clock.getSeconds();
if (l < 10)
secondString3 = "0" + l.toString();
else
secondString3 = l.toString();
}
}
private class TimeAndDateListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
Calendar cal = Calendar.getInstance();
month2 = cal.get(Calendar.MONTH);
if (month2 == 0)
month = "January";
else if (month2 ==1)
month = "February";
else if (month2 ==2)
month = "March";
else if (month2 ==3)
month = "April";
else if (month2 == 4)
month = "May";
else if (month2 == 5)
month = "June";
else if (month2 == 6)
month = "July";
else if (month2 == 7)
month = "August";
else if (month2 == 8)
month = "September";
else if (month2 == 9)
month = "October";
else if (month2 == 10)
month = "November";
else
month = "December";
dayOfWeek2 = cal.get(Calendar.DAY_OF_WEEK);
if (dayOfWeek2 == 1)
dayOfWeek = "Sunday";
else if (dayOfWeek2 == 2)
dayOfWeek = "Monday";
else if (dayOfWeek2 == 3)
dayOfWeek = "Tuesday";
else if (dayOfWeek2 == 4)
dayOfWeek = "Wednesday";
else if (dayOfWeek2 == 5)
dayOfWeek = "Thursday";
else if (dayOfWeek2 == 6)
dayOfWeek = "Friday";
else
dayOfWeek = "Saturday";
dayOfMonth2 = cal.get(Calendar.DAY_OF_MONTH);
dayOfMonth = dayOfMonth2.toString();
year2 = cal.get(Calendar.YEAR);
year = year2.toString();
dateString = dayOfWeek + "," + month +" " + dayOfMonth + "," + year;
System.out.println("Date String:" + dateString);
hourOfDay = cal.get(Calendar.HOUR_OF_DAY);
minute2 = cal.get(Calendar.MINUTE);
second2 = cal.get(Calendar.SECOND);
if (hourOfDay > 0 && hourOfDay < 12 )
{ // beginning of if
if (minute2 < 10)
{ // beginning of if
if (second2 < 10)
{ // beginning of if
hour2 = hourOfDay;
time = hour2 + ":0" + minute2 + ":0" + second2 + " a.m.";
} // end if
else
{ // begin else
hour2 = hourOfDay;
time = hour2 + ":0" + minute2 + ":" + second2 + " a.m.";
} // end else
} // end if
else
{ // begin else
if (second2 < 10)
{ // begin if
hour2 = hourOfDay;
time = hour2 + ":" + minute2 + ":0" + second2 + " a.m.";
} // end if
else
{ // begin else
hour2 = hourOfDay;
time = hour2 + ":" + minute2 + ":" + second2 + " a.m.";
} // end else
} // end else
} // end if
else if (hourOfDay == 12)
{ // begin else if
if (minute2 < 10)
{ // beginning of if
if (second2 < 10)
{ // beginning of if
hour2 = hourOfDay;
time = hour2 + ":0" + minute2 + ":0" + second2 + " p.m.";
} // end if
else
{ // begin else
hour2 = hourOfDay;
time = hour2 + ":0" + minute2 + ":" + second2 + " p.m.";
} // end else
} // end if
else
{ // begin else
if (second2 < 10)
{ // begin if
hour2 = hourOfDay;
time = hour2 + ":" + minute2 + ":0" + second2 + " p.m.";
} // end if
else
{ // begin else
hour2 = hourOfDay;
time = hour2 + ":" + minute2 + ":" + second2 + " p.m.";
} // end else
} // end else
} // end else if
else if (hourOfDay ==0)
{ // begin else if
if (minute2 < 10)
{ // beginning of if
if (second2 < 10)
{ // beginning of if
hour2 = hourOfDay;
time = "12" + ":0" + minute2 + ":0" + second2 + " a.m.";
} // end if
else
{ // begin else
hour2 = hourOfDay;
time = "12" + ":0" + minute2 + ":" + second2 + " a.m.";
} // end else
} // end if
else
{ // begin else
if (second2 < 10)
{ // begin if
hour2 = hourOfDay;
time = "12" + ":" + minute2 + ":0" + second2 + " a.m.";
} // end if
else
{ // begin else
hour2 = hourOfDay;
time = "12" + ":" + minute2 + ":" + second2 + " a.m.";
} // end else
} // end else
} // end of else if
else
{ // begin else
if (minute2 < 10)
{ // beginning of if
if (second2 < 10)
{ // beginning of if
hour2 = hourOfDay - 12;
time = hour2 + ":0" + minute2 + ":0" + second2 + " p.m.";
} // end if
else
{ // begin else
hour2 = hourOfDay - 12;
time = hour2 + ":0" + minute2 + ":" + second2 + " p.m.";
} // end else
} // end if
else
{ // begin else
if (second2 < 10)
{ // begin if
hour2 = hourOfDay - 12;
time = hour2 + ":" + minute2 + ":0" + second2 + " p.m.";
} // end if
else
{ // begin else
hour2 = hourOfDay - 12;
time = hour2 + ":" + minute2 + ":" + second2 + " p.m.";
} // end else
} // end else
} // end else
System.out.println("Time:" + time);
System.out.println("Date String now is:" + dateString);
tadString = dateString + " " + time;
System.out.println("Tad String is:" + tadString);
gamp.repaint();
}
}
private class HelpMenu extends JFrame
{
private JPanel panel;
private JLabel label;
public HelpMenu()
{
super("Help Menu");
panel = new JPanel();
String str = "<html><br> Welcome to the Take All but One Peg Game. </br>" +" <br> The object of the game is to take all but one peg. </br>" +" <br>You can jump a peg but can't move if it's not a jump. </br>" +"<br> The files are saved as .peg extensions. </br></html>";
label = new JLabel(str);
label.setForeground(new Color(23, 255, 23));
label.setFont(new Font("Kristen ITC", Font.BOLD + Font.ITALIC, 20));
panel.setBackground(new Color(234, 124, 54));
panel.add(label);
setVisible(true);
setContentPane(panel);
}
}
private class HighScoreFile extends JFrame
{
private JButton reset;
private JPanel panel;
private JScrollPane pane;
public HighScoreFile()
{
super("High Scores");
panel = new JPanel();
panel.setBackground(Color.BLUE);
pane = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
// setVisible(true);
reset = new JButton("Reset");
file = new File("C:/Users/HighScores.txt");
newText = "";
String str = "<html><br>High Scores</br>" + "<br><b>Rank </b> " + "<b>Pegs Left </b> " + "<b> Title </b>"+ "<b> Name </b>" + "<b> Date </b></br></html>";
scoreLabel = new JLabel(str);
oldText = scoreLabel.getText();
try
{
fileReader = new Scanner(file);
while (fileReader.hasNext())
{
highScoreRank = fileReader.nextInt();
pegsLeft = fileReader.nextInt();
textRank = fileReader.nextLine();
name = fileReader.nextLine();
date = fileReader.nextLine();
newText = newText + "<html><br>" + highScoreRank.toString() + " " + pegsLeft.toString() + " " + textRank + " " + name + " " + date + "</html></br>";
scoreLabel.setText(scoreLabel.getText() + newText);
}
}
catch(FileNotFoundException fnfeRef)
{
scoreLabel.setText(scoreLabel.getText() + "<html><br> NO HIGH SCORES YET </br></html>");
}
catch(Exception e)
{
e.printStackTrace();
}
panel.add(scoreLabel);
panel.add(reset);
reset.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e)
{
scoreLabel.setText(oldText + "<html><br> NO HIGH SCORES YET </html></br>");
}
});
// panel.setLayout(new GridLayout(2,1));
pack();
setContentPane(pane);
}
}
private class Peg
{
private Point location;
private Color color;
private int x, y;
public Peg(Point location, Color color)
{
this.location = location;
this.color = color;
}
public void setPoint(Point location)
{
this.location = location;
}
public Point getPoint()
{
return location;
}
public void setColor(Color color)
{
this.color = color;
}
public Color getColor()
{
return color;
}
public void setX(int x)
{
setPoint(new Point(x,(int) location.getY()));
}
public void setY(int y)
{
setPoint(new Point((int) location.getX(), y));
}
public void setPoint2(int x, int y)
{
setPoint(new Point(x,y));
}
public boolean canJump(Peg p)
{
return false;
}
}
private class GamePanel extends JPanel
{
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
drawBoard(g);
drawWindowFeatures(g);
}
public void drawBoard(Graphics g)
{
Polygon poly = new Polygon();
poly.addPoint(600, 95);
poly.addPoint(280, 512);
poly.addPoint(925, 512);
g.setColor(new Color(251, 148, 79));
g.fillPolygon(poly);
g.setColor(Color.BLACK);
g.drawPolygon(poly);
}
public void drawWindowFeatures(Graphics g)
{
g.drawLine(327, 50, 327, 83);
g.drawLine(500, 83, 327, 83);
g.setColor(new Color(0, 206,206));
g.setFont(new Font("Papyrus", Font.BOLD + Font.ITALIC, 23));
g.drawString("THE JUMP ALL BUT ONE PEG GAME", 327, 80);
Font f = g.getFont().deriveFont(20);
g.setFont(f);
g.drawString(tadString, 920, 80);
}
}
public PegGame()
{
super("Jump All But One Peg Game");
System.out.println(dateString);
setVisible(true);
gamp = new GamePanel();
hm = new HelpMenu();
tadl = new TimeAndDateListener();
tadTimer = new Timer(0,tadl);
tadTimer.setDelay(1000);
tadTimer.start();
hm.setVisible(false);
// hmdll = new DoublyLinkedList<HelpMenu>();
jMenuBar = new JMenuBar();
setJMenuBar(jMenuBar);
//panel.add(jMenuBar);
file2 = new JMenu("File");
jMenuBar.add(file2);
about = new JMenu("About");
jMenuBar.add(about);
help = new JMenuItem("Help");
about.add(help);
about.addSeparator();
load = new JMenuItem("Load");
file2.add(load);
file2.addSeparator();
save = new JMenuItem("Save");
file2.add(save);
file2.addSeparator();
gamp.setBackground(new Color(40, 255, 40));
hsf = new HighScoreFile();
hsf.setVisible(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
help.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e)
{
if (!hm.isShowing())
{
hm.setVisible(true);
}
else
{
JOptionPane.showMessageDialog(null, "You already have the help menu open!", "Help menu is already open!", JOptionPane.WARNING_MESSAGE);
}
}});
highScores2 = new JMenuItem("High scores");
file2.add(highScores2);
file2.addSeparator();
highScores2.addActionListener(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if (!hsf.isShowing())
{
hsf.setVisible(true);
}
else
{
JOptionPane.showMessageDialog(null, "You already have the high score menu open!", "High score menu is already open!", JOptionPane.WARNING_MESSAGE);
}
}});
setContentPane(gamp);
}
public static void main(String[] args)
{
PegGame pg = new PegGame();
}
}