2014-10-18 97 views
-4

我一直負責用javascript創建保齡球比分計算器。使用Javascript的10 Pin保齡球比分計算器

我是一個完整的JavaScript新手,所以我不知道從哪裏開始。這個具體項目有沒有簡單的例子可以作爲參考?

我不斷髮現它長而曲折的代碼,並沒有多大意義......

+0

也許你應該先了解一些JavaScript? – charlietfl 2014-10-18 12:40:50

+0

這就是練習的要點。 – 2014-10-18 15:03:57

+1

@enigmacoder如果你不做一些重新搜索和嘗試自己的東西...那麼沒有意義.. – 2014-10-18 17:23:28

回答

0

提出的問題是有點含糊,因爲不清楚您正在使用什麼平臺,如果有任何預期的UI類型或僅邏輯的類型,並且期望由您編寫的這種計算器的參考可幫助簡化答案。

作爲堅持代碼的一般經驗法則,我會建議從構建項目開始。佈置任何需要稍後工作的東西。 你會需要超過幾個方法/功能嗎?如果是這樣,佈置通緝的結構。 作爲一個普通的例子,我想創建一個:

╔════════════════╦═══════════════════════════════════════════════════════════════════╗ 
║ File   ║ Purpose               ║ 
╠════════════════╬═══════════════════════════════════════════════════════════════════╣ 
║ calc.html  ║ Main view (if implemented as html). May have a CSS attached to it.║ 
║ calcView.js ║ JS view controller. To be used for any logic related to views. ║ 
║ calcMain.js ║ Main JS calculator implementation, to separate calculation logic. ║ 
║ ops.html(...) ║ Optional options page, other related extras, and so on.   ║ 
╚════════════════╩═══════════════════════════════════════════════════════════════════╝ 

通過創建空文件開始,然後通過實現一切你一定,你需要開始。沿着這個過程很容易找出還需要什麼。

我建議你開始與主JS,而實際上正在寫作的第一步:

function mainCalculation(input){ 

return output; 
} 

然後填滿它。 在這個過程中,試着弄清楚什麼應該分離到它自己的方法,以及這是什麼。

這可能會導致你喜歡的東西:

function parseRequest(inputRequestObject){ 
    // TODO 
    return outputRequestData; 
} 

function calcScore(inputRequestData){ 
    // TODO 
    return outputAsINT; 
} 

function generateResponseObject(intScore){ 
    // TODO 
    return outputObject; 
} 

function handleRequest(input){ 

    // This is your main flow of handling a single calculation. 
    // Try to include the minimal amount of logic possible here. 

    var parsedInput = parseRequest(input);  
    var intScore = calcScore(parsedInput); 
    var output = generateResponseObject(intScore); 

    // At this point your response might include extra info, and not just intScore. 
    // Example: the original request data, or error data, if the client needs it. 

    return output; 
} 

一旦這個模型就完成了,你是能夠成功地返回結果,嘗試設計的UI(如果需要),並計算之間的連接這兩個使用視圖控制器。

當你到達這一點時,你將確切地知道如何轉移到額外的東西,如選項頁面,選項控制器等。

最後一個提示: 您可以嘗試尋找更多的一般示例,因爲您的項目非常具體。 例如,檢查this example用於創建Javscript計算器。我不喜歡使用的格式,但作爲一個基本指南,它並不壞。

如果您仍然覺得有必要,請穿過偉大的W3Schools JavaScript Tutorial,適合初學者,也可以考慮在JS Examples page的相關示例中進行回顧。

祝你好運!

+0

非常感謝您的努力!這非常有幫助。 – 2014-10-18 15:11:20

+0

當然,隨時。 :) – Selfish 2014-10-19 08:31:00

-1

下面是一個例子,你可以看看。這使用所提供的遊戲的字符串表示來計算分數。

bowlingScore('11 11 11 11 11 11 11 11 11 11'); // 20

function bowlingScore(frames) { 
 
    var framesArr = frames.split(' ').map((frame) => [...frame]); 
 
    var result = 0; 
 
    
 
    for (var i=0; i < framesArr.length; i++) { 
 
    var current = framesArr[i]; 
 
    
 
    if(current[0] === 'X' && i < 9) { 
 
     result += 10 + getNextElementsScore(framesArr, i, 2); 
 
    } else if(current.length === 2 && current[1] === '/' && i < 9) { 
 
     result += 10 + getNextElementsScore(framesArr, i, 1); 
 
    } else if(current.length === 3) { 
 
     result += getThreeRollScore(current); 
 
    } else { 
 
     result += getElementScore(current, 0) + getElementScore(current, 1); 
 
    } 
 
    } 
 
    return result; 
 
} 
 

 
function getNextElementsScore(framesArr, index, count) { 
 
    var result = getElementScore(framesArr[index + 1], 0); 
 
    var result2 = getElementScore(framesArr[index + 1], 1) 
 
    
 
    if (framesArr[index + 1].length === 1) { 
 
    return count === 1 ? result : result + getElementScore(framesArr[index + 2], 0); 
 
    } 
 
    return count === 1 ? result : (result2 === 10 && result !== 10 ? result2 : result2 + result); 
 
} 
 
    
 
function getElementScore(frame, index) { 
 
    if (frame[index] === 'X' || frame[index] === '/') { 
 
    return 10; 
 
    } 
 
    return parseInt(frame[index]); 
 
} 
 

 
function getThreeRollScore(current) { 
 
    var third = getElementScore(current, 2); 
 
    var second = getElementScore(current, 1); 
 
    var first = getElementScore(current, 0); 
 

 
    return third === 10 && second !== 10 ? third + first : (second === 10 && first !== 10 ? third + second : first + second + third); 
 
}

您可以在這裏找到同樣的代碼: bowlingScoreCalculator.js

+0

儘管此鏈接可能會回答問題,但最好在此處包含答案的基本部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/17295971) – 2017-09-11 11:45:22