保龄球-----计分程序
2014-10-29 20:50
423 查看
简单的保龄球计分程序
public class BowlingGame { public static final int TOTAL_ROUND = 10; // 总局数 private int[] scores; // 记录每局得分的数组 private int[][] numberOfHits; // 记录每局两球击倒瓶子个数的数组 private int lastOneHit, lastTwoHit; // 最后两次击球 private int totalScore; // 总成绩 private int currentRound; // 当前第几局 private boolean firstHit; // 是否是每局的第一次击球 public BowlingGame() { scores = new int[TOTAL_ROUND]; numberOfHits = new int[TOTAL_ROUND][2]; firstHit = true; } /** * 扔出一颗球 * @param num 打倒瓶子的数量 */ public void throwTheBall(int num) { if(firstHit) { // 第一颗 球 numberOfHits[currentRound][0] = num; if(num != 10) { firstHit = false; // 第一颗球没有全中则要打第二颗 } else { currentRound += 1; // 第一颗球全中直接进入下一局 } } else { numberOfHits[currentRound][1] = num; currentRound += 1; // 打完第二颗球进入下一局 firstHit = true; // 准备投掷下一局的第一颗球 } } public void calcScore() { // from round 1 to round 9 for(int i = 0; i < numberOfHits.length - 1; i++) { if(numberOfHits[i][0] == 10) { // Strike(全中) scores[i] += 10; if(numberOfHits[i + 1][0] == 10) { scores[i] += 10; if(i < 8) { scores[i] += numberOfHits[i + 2][0]; } else { scores[i] += lastOneHit; } } else { scores[i] += numberOfHits[i + 1][0] + numberOfHits[i + 1][1]; } } else if(numberOfHits[i][0] + numberOfHits[i][1] == 10) { // Spare(补中) scores[i] += 10; scores[i] += numberOfHits[i + 1][0]; } else { scores[i] += numberOfHits[i][0] + numberOfHits[i][1]; } } // the last round if(numberOfHits[9][0] == 10) { scores[9] += 10; scores[9] += lastOneHit + lastTwoHit; } else if(numberOfHits[9][0] + numberOfHits[9][1] == 10) { scores[9] += 10; scores[9] += lastOneHit; } else { scores[9] += numberOfHits[9][0] + numberOfHits[9][1]; } } /** * 设置最后第一球击倒瓶子数 * @param num 击倒瓶子数 */ public void setLastOneHit(int num) { this.lastOneHit = num; } /** * 设置最后第二球击倒瓶子数 * @param num 瓶子数 */ public void setLastTwoHit(int num) { this.lastTwoHit = num; } /** * 计算总分数 * @return 总分数 */ public int getTotalScore() { for(int i = 0; i < scores.length; i++) { totalScore += scores[i]; } return totalScore; } /** * 获得指定局数的累积得分 * @param round 局数 * @return 从第一局到指定局数的累积得分 */ public int getScoreByRound(int round) { int sum = 0; for(int i = 0; i <= round; i++) { sum += scores[i]; } return sum; } }
<pre name="code" class="java">import java.text.DecimalFormat;import java.util.Scanner;public class KaiDa {public static void main(String[] args) {DecimalFormat formatter = new DecimalFormat("00");Scanner sc = new Scanner(System.in);int firstHit = 0, secondHit = 0;BowlingGame game = new BowlingGame();for(int i = 0; i < BowlingGame.TOTAL_ROUND; i++) {System.out.println("=====第" + formatter.format(i + 1) + "回合=====");System.out.print("第一次击中: ");firstHit = sc.nextInt();game.throwTheBall(firstHit);if(firstHit < 10) { // 第一次没有全中就要打第二颗System.out.print("第二次击中: ");secondHit = sc.nextInt();game.throwTheBall(secondHit);}if(i == BowlingGame.TOTAL_ROUND - 1) {// 第十局如果全中或补中则要继续投掷球if(firstHit == 10 || firstHit + secondHit == 10) {System.out.print("加一球: ");int lastOne = sc.nextInt();game.setLastOneHit(lastOne);if(firstHit == 10) { // 第一颗球全中则还要再投掷一颗球System.out.print("加二球: ");int lastTow = sc.nextInt();game.setLastTwoHit(lastTow);}}}}game.calcScore(); // 计算成绩// 打印每一局的累积得分for(int i = 0; i < BowlingGame.TOTAL_ROUND; i++) {System.out.print(game.getScoreByRound(i) + "\t");}System.out.println("\n总分: " + game.getTotalScore()); // 打印总分数sc.close();}}
相关文章推荐
- java写一个程序给保龄球比赛计分的程序
- 程序设计大赛—保龄球计分系统
- 第12周报告2-2 大奖赛计分程序
- 保龄球娱乐计分
- JAVA程序设计(10)-----保龄球积分程序 说的是练习数组 其实完全就是个坑爹的数学题…………
- 第十五周计应151班第四组排球计分程序
- C语言课程设计:歌手大奖赛计分程序
- 第十六周计应151班第四组排球计分程序
- 保龄球规则计分
- 第一小组作业-排球比赛计分程序
- 计应1班第4小组“排球比赛计分程序”的典型用户、创立场景、用户故事
- fjnu 1710 保龄球娱乐计分
- 第12周报告2-2之大奖赛计分程序
- 保龄球计分
- TDD练习:保龄球计分
- C++第12周报告2-2(编写大奖赛用的计分程序)
- 一个英语演讲比赛的计分计时程序
- 初学者的C++练习题——(一)计分程序
- 第12周报告2-2(编写大奖赛用的计分程序)
- 排球计分程序功能说明书