保齡球BowlingGame-計分程序

保齡球

相對籃球什么的谬盐,保齡球的游戲規(guī)則就有點過于復(fù)雜了程剥,要想用代碼實現(xiàn)其積分規(guī)則還是有點費(fèi)腦子变过,我覺得Java基礎(chǔ)要相當(dāng)?shù)暮弥狨猓趴梢詫懗鐾晟频耐昝赖臐M意的實現(xiàn)程序吧症脂!

代碼如下:

1、定義BowlingGame類
public class BowlingGame {
    public static final int TOTAL_ROUND = 10;   // 總局?jǐn)?shù)

    private int[] scores;                       // 記錄每局得分的數(shù)組
    private int[][] numberOfHits;               // 記錄每局兩球擊倒瓶子個數(shù)的數(shù)組
    private int lastOneHit, lastTwoHit;         // 最后兩次擊球
    private int totalScore;                     // 總成績

    private int currentRound;                   // 當(dāng)前第幾局
    private boolean firstHit;                   // 是否是每局的第一次擊球

    public BowlingGame() {
        scores = new int[TOTAL_ROUND];
        numberOfHits = new int[TOTAL_ROUND][2];
        firstHit = true;
    }

    /**
     * 扔出一顆球
     * @param num 打倒瓶子的數(shù)量
     */
    public void throwTheBall(int num) {
        if(firstHit) {  // 第一顆  球
            numberOfHits[currentRound][0] = num;
            if(num != 10) {
                firstHit = false;   // 第一顆球沒有全中則要打第二顆
            }
            else {
                currentRound += 1;  // 第一顆球全中直接進(jìn)入下一局
            }
        }
        else {
            numberOfHits[currentRound][1] = num;
            currentRound += 1;      // 打完第二顆球進(jìn)入下一局
            firstHit = true;        // 準(zhǔn)備投擲下一局的第一顆球
        }
    }

    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(補(bǔ)中)
                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];
        }
    }

    /**
     * 設(shè)置最后第一球擊倒瓶子數(shù)
     * @param num 擊倒瓶子數(shù)
     */
    public void setLastOneHit(int num) {
        this.lastOneHit = num;
    }

    /**
     * 設(shè)置最后第二球擊倒瓶子數(shù)
     * @param num 瓶子數(shù)
     */
    public void setLastTwoHit(int num) {
        this.lastTwoHit = num;
    }

    /**
     * 計算總分?jǐn)?shù)
     * @return 總分?jǐn)?shù)
     */
    public int getTotalScore() {
        for(int i = 0; i < scores.length; i++) {
            totalScore += scores[i];
        }
        return totalScore;
    }

    /**
     * 獲得指定局?jǐn)?shù)的累積得分
     * @param round 局?jǐn)?shù)
     * @return 從第一局到指定局?jǐn)?shù)的累積得分
     */
    public int getScoreByRound(int round) {
        int sum = 0;
        for(int i = 0; i <= round; i++) {
            sum += scores[i];
        }
        return sum;
    }
}
2淫僻、測試
import java.text.DecimalFormat;
import java.util.Scanner;

class Test01 {

    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) {
                // 第十局如果全中或補(bǔ)中則要繼續(xù)投擲球
                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());    // 打印總分?jǐn)?shù)
        
        sc.close();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诱篷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子雳灵,更是在濱河造成了極大的恐慌棕所,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悯辙,死亡現(xiàn)場離奇詭異琳省,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)躲撰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門针贬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拢蛋,你說我怎么就攤上這事桦他。” “怎么了谆棱?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵快压,是天一觀的道長圆仔。 經(jīng)常有香客問我,道長嗓节,這世上最難降的妖魔是什么荧缘? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮拦宣,結(jié)果婚禮上截粗,老公的妹妹穿的比我還像新娘。我一直安慰自己鸵隧,他們只是感情好绸罗,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著豆瘫,像睡著了一般珊蟀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上外驱,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天育灸,我揣著相機(jī)與錄音,去河邊找鬼昵宇。 笑死磅崭,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瓦哎。 我是一名探鬼主播砸喻,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蒋譬!你這毒婦竟也來了割岛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤犯助,失蹤者是張志新(化名)和其女友劉穎癣漆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體剂买,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扑媚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了雷恃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疆股。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖倒槐,靈堂內(nèi)的尸體忽然破棺而出旬痹,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布两残,位于F島的核電站永毅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏人弓。R本人自食惡果不足惜沼死,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望崔赌。 院中可真熱鬧意蛀,春花似錦、人聲如沸健芭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慈迈。三九已至若贮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間痒留,已是汗流浹背谴麦。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留伸头,地道東北人匾效。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像熊锭,于是被迫代替她去往敵國和親弧轧。 傳聞我的和親對象是個殘疾皇子雪侥,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,182評論 25 707
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法碗殷,類相關(guān)的語法,內(nèi)部類的語法速缨,繼承相關(guān)的語法锌妻,異常的語法,線程的語...
    子非魚_t_閱讀 31,643評論 18 399
  • 滂沱大雨下了一天旬牲,傍晚的時候雨停了仿粹,路面上并沒有深深的積水,足見新城區(qū)的下水系統(tǒng)是下了功夫的原茅。 空氣...
    sunyz碩閱讀 271評論 0 0
  • 為解決如林小姐一樣眾多大齡女士求偶的煩惱,22世紀(jì)最具創(chuàng)造性的愛情速測機(jī)應(yīng)運(yùn)而生吭历。 就那么一個大小形狀如紐...
    水仙書生閱讀 185評論 0 0
  • 梧婷閱讀 54評論 0 0