diff --git a/21 Calendar/java/Calendar.java b/21 Calendar/java/Calendar.java new file mode 100644 index 00000000..4202a4dc --- /dev/null +++ b/21 Calendar/java/Calendar.java @@ -0,0 +1,175 @@ +/** + * Game of Calendar + *

+ * Based on the BASIC game of Calendar here + * https://github.com/coding-horror/basic-computer-games/blob/main/21%20Calendar/calendar.bas + *

+ * Note: The idea was to create a version of the 1970's BASIC game in Java, without introducing + * new features - no additional text, error checking, etc has been added. + * + * Converted from BASIC to Java by Darren Cardenas. + */ + +public class Calendar { + + private static final int NUM_WEEK_ROWS = 6; + private static final int NUM_DAYS_PER_WEEK = 7; + private static final int NUM_MONTHS_PER_YEAR = 12; + private static final int[] daysPerMonth = { 0, 31, 28, 31, 30, 31, 30, + 31, 31, 30, 31, 30, 31 }; + + public void play() { + + showIntro(); + startGame(); + + } // End of method play + + private static void showIntro() { + + System.out.println(" ".repeat(31) + "CALENDAR"); + System.out.println(" ".repeat(14) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"); + System.out.println("\n\n"); + + } // End of method showIntro + + private void startGame() { + + int dayOfMonth = 0; + int dayOfWeek = 0; + int dayOfYear = 0; + int daysTotal = 0; + int index = 0; + int month = 0; + int row = 0; + + String lineContent = ""; + + for (index = 1; index <= 6; index++) { + System.out.println(""); + } + + daysTotal = -1; + dayOfYear = 0; + + System.out.println(""); + + // Begin loop through all months + for (month = 1; month <= NUM_MONTHS_PER_YEAR; month++) { + + System.out.println(""); + + dayOfYear = dayOfYear + daysPerMonth[month - 1]; + + lineContent = String.format("** %-3d" + "*".repeat(18), dayOfYear); + + switch (month) { + case 1: + lineContent += " JANUARY "; + break; + case 2: + lineContent += " FEBRUARY"; + break; + case 3: + lineContent += " MARCH "; + break; + case 4: + lineContent += " APRIL "; + break; + case 5: + lineContent += " MAY "; + break; + case 6: + lineContent += " JUNE "; + break; + case 7: + lineContent += " JULY "; + break; + case 8: + lineContent += " AUGUST "; + break; + case 9: + lineContent += "SEPTEMBER"; + break; + case 10: + lineContent += " OCTOBER "; + break; + case 11: + lineContent += " NOVEMBER"; + break; + case 12: + lineContent += " DECEMBER"; + break; + default: + break; + } + + lineContent += "*".repeat(18) + " " + (365 - dayOfYear) + "**"; + + System.out.println(lineContent); + System.out.println(""); + + System.out.print(" S M T W"); + System.out.println(" T F S"); + System.out.println(""); + + System.out.println("*".repeat(59)); + + // Begin loop through each week row + for (row = 1; row <= NUM_WEEK_ROWS; row++) { + + System.out.println(""); + + lineContent = " "; + + // Begin loop through days of the week + for (dayOfWeek = 1; dayOfWeek <= NUM_DAYS_PER_WEEK; dayOfWeek++) { + + daysTotal++; + + dayOfMonth = daysTotal - dayOfYear; + + if (dayOfMonth > daysPerMonth[month]) { + row = 6; + break; + } + + if (dayOfMonth > 0) { + lineContent += dayOfMonth; + } + + while (lineContent.length() < (4 + 8 * dayOfWeek)) { + lineContent += " "; + } + + } // End loop through days of the week + + if (dayOfMonth == daysPerMonth[month]) { + row = 6; + daysTotal += dayOfWeek; + System.out.println(lineContent); + break; + } + + System.out.println(lineContent); + + } // End loop through each week row + + daysTotal -= dayOfWeek; + + } // End loop through all months + + for (index = 1; index <= 6; index++) { + System.out.println(""); + } + + } // End of method startGame + + public static void main(String[] args) { + + Calendar game = new Calendar(); + game.play(); + + } // End of method main + +} // End of class Calendar