/*Imports*/ import java.applet.Applet; import java.io.*; import java.util.*; import java.awt.*; import java.lang.*; public class bowl extends Applet { /*Declares Varialbes*/ int[][] frameScore; int[] frameTotal, total, gameTotal; int frame, pd1, pd2, undropped, counter, place, c1, c2, frameCounter, scoreCounter; String temp; Random r; Date d; Button bowl, reset; Font font; Graphics g; public void init() { /*Drew buttons*/ bowl = new Button("Bowl Frame"); add(bowl); reset = new Button("Reset Game"); add(reset); /*Initialized variables*/ frameScore = new int[11][4]; total = new int[11]; frameTotal = new int [11]; gameTotal = new int [11]; frame = 1; for(c1 = 1; c1 <= 10; c1++) { for(c2 = 1; c2 <= 3; c2++) { frameScore[c1][c2] = 0; } } for (c1 = 1; c1 <= 10; c1++) { gameTotal[c1] = 0; } } public boolean action(Event e, Object arg) { /*Handles if 'bowl' button is pressed*/ if ((e.target == bowl) && (frame <= 10)) { frame(); update(); repaint(); frame++; } /*Handles if 'bowl' button is pressed and game is over*/ if ((e.target == bowl) && (frame >= 11)) { System.out.println("The game is over..."); } /*Handles if 'reset' button is pressed*/ if (e.target == reset) { frame = 1; gameTotal[0] = 0; for(c1 = 1; c1 <= 10; c1++) { for(c2 = 1; c2 <= 3; c2++) { frameScore[c1][c2] = 0; } } for (c1 = 1; c1 <= 10; c1++) { gameTotal[c1] = 0; } repaint(); } return super.action(e, arg); } public void frame() { /*Generates random pindrops*/ Date d = new Date(); r = new Random(d.getTime()); int pd1 = r.nextInt () % 11; frameScore[frame][1] = Math.abs(pd1); if (frameScore[frame][1] != 10) { undropped = (10 - frameScore[frame][1]); int pd2 = r.nextInt () % (undropped + 1); frameScore[frame][2] = Math.abs(pd2); } /*Sends program to subroutine if strike or spare is generated in tenth frame.*/ if ((frame == 10) && ((frameScore[frame][1] == 10) | (frameScore[frame][1] + frameScore[frame][2] == 10))) { tenFrame(); } strikeSpare (); return; } public void strikeSpare () { /*Handles scoreing of bonus frames for strikes and spares*/ if ((frame >= 3 ) && (frameScore[frame-2][1] == 10) && (frameScore[frame-1][1] == 10)) { frameScore[frame-2][3] = frameScore[frame][1]; } if ((frame >= 2) && (frameScore[frame-1][1] == 10)) { frameScore[frame-1][2] = frameScore[frame][1]; } if ((frame >= 2) && (frameScore[frame-1][1] == 10) && (frameScore[frame][1] != 10)) { frameScore[frame-1][2] = frameScore[frame][2] + frameScore[frame][1]; } if ((frame >= 2) && (frameScore[frame-1][1] + frameScore[frame-1][2] == 10)) { frameScore[frame-1][3] = frameScore[frame][1]; } return; } public void tenFrame () { /*Handles bonus balls if strike or spare is scored during 10th frame*/ if (frameScore[10][1] != 10) { Date d = new Date(); r = new Random(d.getTime()); int pd1 = r.nextInt () % 11; frameScore[10][3] = Math.abs(pd1); } else { Date d = new Date(); r = new Random(d.getTime()); int pd1 = r.nextInt () % 11; frameScore[10][2] = Math.abs(pd1); if (frameScore[10][2] == 10) { pd1 = r.nextInt () % 11; frameScore[10][3] = Math.abs(pd1); } else { undropped = frameScore[10][2] - 10; int pd2 = r.nextInt () % (undropped + 1); frameScore[10][3] = Math.abs(pd2); } } return; } /*Generates scores for frames*/ public void update () { gameTotal[0] = 0; frameCounter = 1; for (counter = 1; counter <= frame; counter++) { frameTotal[counter] = frameScore[counter][1] + frameScore[counter][2] + frameScore[counter][3]; gameTotal[counter] = gameTotal[counter - 1] + frameTotal[counter]; frameCounter++; } return; } public void paint(Graphics g) { /*Draws frames*/ for (place = 0; place <= 8; place++) { g.setColor(Color.black); g.drawRect(20 + (place * 40), 50, 40, 60); g.drawRect(30 + (place * 40), 50, 15, 20); g.drawRect(45 + (place * 40), 50, 15, 20); } g.drawRect(380, 50, 55, 60); g.drawRect(390, 50, 15, 20); g.drawRect(405, 50, 15, 20); g.drawRect(420, 50, 15, 20); /*Draw scores*/ if (frame < 11 && frame > 1) { for (scoreCounter = 0; scoreCounter < frame - 1; scoreCounter++) { if (frameScore[scoreCounter + 1][1] == 10) { g.setFont(new Font ("Helvetica", Font.PLAIN, 14)); g.drawString("X", (32 + (scoreCounter * 40)), 64); g.setFont(new Font ("Helvetica", Font.BOLD, 20)); temp = intToString(gameTotal[scoreCounter + 1]); g.drawString(temp, (25 + (scoreCounter * 40)), 100); } if ((frameScore[scoreCounter + 1][1] + frameScore[scoreCounter + 1][2] == 10) && (frameScore[scoreCounter + 1][1] != 10)) { g.setFont(new Font ("Helvetica", Font.PLAIN, 14)); temp = intToString(frameScore[scoreCounter + 1][1]); g.drawString(temp, (32 + (scoreCounter * 40)), 64); g.drawString("/", (47 + (scoreCounter * 40)), 64); g.setFont (new Font ("Helvetcia", Font.BOLD, 20)); temp = intToString(gameTotal[scoreCounter + 1]); g.drawString(temp, (25 + (scoreCounter *40)), 100); } if ((frameScore[scoreCounter + 1][1] + frameScore[scoreCounter + 1][2] != 10) && (frameScore[scoreCounter + 1][1] != 10)) { g.setFont(new Font ("Helvetica", Font.PLAIN, 14)); temp = intToString(frameScore[scoreCounter + 1][1]); g.drawString(temp, (32 + (scoreCounter * 40)), 64); temp = intToString(frameScore[scoreCounter + 1][2] + frameScore[scoreCounter + 1][1]); g.drawString(temp, (47 + (scoreCounter * 40)), 64); g.setFont (new Font ("Helvetcia", Font.BOLD, 20)); temp = intToString(gameTotal[scoreCounter + 1]); g.drawString(temp, (25 + (scoreCounter *40)), 100); } } } if (frame == 11) { for (scoreCounter = 0; scoreCounter <= 9; scoreCounter++) { if (frameScore[scoreCounter + 1][1] == 10) { g.setFont(new Font ("Helvetica", Font.PLAIN, 14)); g.drawString("X", (32 + (scoreCounter * 40)), 64); g.setFont(new Font ("Helvetica", Font.BOLD, 20)); temp = intToString(gameTotal[scoreCounter + 1]); g.drawString(temp, (25 + (scoreCounter * 40)), 100); } if (frameScore[scoreCounter + 1][1] + frameScore[scoreCounter + 1][2] == 10 && frameScore[scoreCounter + 1][1] != 10) { g.setFont(new Font ("Helvetica", Font.PLAIN, 14)); temp = intToString(frameScore[scoreCounter + 1][1]); g.drawString(temp, (32 + (scoreCounter * 40)), 64); g.drawString("/", (47 + (scoreCounter * 40)), 64); g.setFont (new Font ("Helvetcia", Font.BOLD, 20)); temp = intToString(gameTotal[scoreCounter + 1]); g.drawString(temp, (25 + (scoreCounter *40)), 100); } if (frameScore[scoreCounter + 1][1] + frameScore[scoreCounter + 1][2] != 10 && frameScore[scoreCounter + 1][1] != 10) { g.setFont(new Font ("Helvetica", Font.PLAIN, 14)); temp = intToString(frameScore[scoreCounter + 1][1]); g.drawString(temp, (32 + (scoreCounter * 40)), 64); temp = intToString(frameScore[scoreCounter + 1][2] + frameScore[scoreCounter + 1][1]); g.drawString(temp, (47 + (scoreCounter * 40)), 64); g.setFont (new Font ("Helvetcia", Font.BOLD, 20)); temp = intToString(gameTotal[scoreCounter + 1]); g.drawString(temp, (25 + (scoreCounter *40)), 100); } } if (frameScore[10][1] == 10 && frameScore[10][2] == 10 && frameScore[10][3] == 10) { g.setFont(new Font ("Helvetica", Font.PLAIN, 14)); g.drawString("X", 392, 64); g.drawString("X", 407, 64); g.drawString("X", 422, 64); g.setFont (new Font ("Helvetcia", Font.BOLD, 20)); temp = intToString(gameTotal[10]); g.drawString(temp, 385, 100); } if (frameScore[10][1] == 10 && frameScore[10][2] + frameScore[10][3] == 10 && frameScore[10][2] != 10) { g.setFont(new Font ("Helvetica", Font.PLAIN, 14)); g.drawString("X", 392, 64); temp = intToString(frameScore[10][2]); g.drawString(temp, 407, 64); g.drawString("/", 422, 64); g.setFont (new Font ("Helvetcia", Font.BOLD, 20)); temp = intToString(gameTotal[10]); g.drawString(temp, 385, 100); } if (frameScore[10][1] == 10 && frameScore [10][2] + frameScore [10][3] != 10 && frameScore[10][2] != 10 && frameScore[10][3] != 10) { g.setFont(new Font ("Helvetica", Font.PLAIN, 14)); g.drawString("X", 392, 64); temp = intToString(frameScore[10][2]); g.drawString(temp, 407, 64); temp = intToString(frameScore[10][3] + frameScore[10][2]); g.drawString(temp, 422, 64); g.setFont (new Font ("Helvetcia", Font.BOLD, 20)); temp = intToString(gameTotal[10]); g.drawString(temp, 385, 100); } if (frameScore[10][1] == 10 && frameScore [10][2] == 10 && frameScore [10][3] != 10) { g.setFont(new Font ("Helvetica", Font.PLAIN, 14)); g.drawString("X", 392, 64); g.drawString("X", 407, 64); temp = intToString(frameScore[10][3]); g.drawString(temp, 422, 64); g.setFont (new Font ("Helvetcia", Font.BOLD, 20)); temp = intToString(gameTotal[10]); g.drawString(temp, 385, 100); } if ((frameScore[10][1] + frameScore[10][2] == 10 && frameScore[10][1] != 10) && frameScore[10][3] == 10) { g.setFont(new Font ("Helvetica", Font.PLAIN, 14)); temp = intToString(frameScore[10][1]); g.drawString(temp, 392, 64); g.drawString("/", 407, 64); g.drawString("X", 422, 64); g.setFont (new Font ("Helvetcia", Font.BOLD, 20)); temp = intToString(gameTotal[10]); g.drawString(temp, 385, 100); } if (((frameScore[10][1] + frameScore[10][2] == 10) && frameScore[10][1] != 10) && frameScore[10][3] != 10) { g.setFont(new Font ("Helvetica", Font.PLAIN, 14)); temp = intToString(frameScore[10][1]); g.drawString(temp, 392, 64); g.drawString("/", 407, 64); temp = intToString(frameScore[10][3]); g.drawString(temp, 422, 64); g.setFont (new Font ("Helvetcia", Font.BOLD, 20)); temp = intToString(gameTotal[10]); g.drawString(temp, 385, 100); } if ((frameScore[10][1] + frameScore[10][2] != 10) && (frameScore[10][1] != 10)) { g.setFont(new Font ("Helvetica", Font.PLAIN, 14)); temp = intToString(frameScore[10][1]); g.drawString(temp, 392, 64); temp = intToString(frameScore[10][2] + frameScore[10][1]); g.drawString(temp, 407, 64); g.setFont (new Font ("Helvetcia", Font.BOLD, 20)); temp = intToString(gameTotal[10]); g.drawString(temp, 385, 100); } } } /*Converts intergers to strings*/ String intToString(int i) { String tmp = ""; return tmp.valueOf(i); } }