युद्धपोत खेल: 4 से अधिक लंबाई वाले जहाजों पर हिट की अनुमति देना

मैं एक स्कूल प्रोजेक्ट के लिए जावास्क्रिप्ट में बैटलशिप बना रहा हूं और मैं अटक गया हूं।

कंप्यूटर यादृच्छिक रूप से नौकाएं उत्पन्न करता है और उपयोगकर्ता को निर्देशांक में प्रवेश करके सभी कंप्यूटर की नौकाओं को डुबोने का प्रयास करना पड़ता है। एक नाव पर हिट एक सरणी में सहेजे जाते हैं। सरणी में नाव की लंबाई को इंगित करने के लिए शून्य शामिल हैं (इसलिए लंबाई 4 के साथ नाव 4 शून्य के साथ एक सरणी है)। जब एक नाव मारा जाता है, 0 0 में बदल जाता है। यदि सभी तत्व 1 हैं, तो नाव डूब जाती है। समस्या यह है कि मेरा कोड हिट पंजीकृत करता है, लेकिन जब आप लंबाई 4 के साथ नाव को दबाते हैं तो केवल इसे सरणी में डाल देता है।

क्या कोई मेरी मदद कर सकता है? नीचे "गेम" का कोड है:

function game() {
    inputArray = [4, 3, 2];
    var boats = randomBoats(inputArray);
    var currentBoat = 0;
    var sunkenBoat = 0;
    var numberOfTurns = 0;
    while (sunkenBoat !== inputArray.length) {
        var hit = false;
        var target = "(" + prompt("Enter targetcoordinate (x,y)") + ")";
        var targetString = target.replace(/\s+/g, '');
        for (var i = 0; i !== inputArray.length; i++) {
            for (var j = 0; j !== boats[i].usedPositions().length; j++) {
                console.log(targetString)
                if (targetString === boats[i].usedPositions()[j].toString()) {
                    raak = true;
                    boats[i].hits[j] = 1;
                    console.log(boats[i].hits);
                    currentBoat = boats[i];
                } else {
                    currentBoat = boats[i];
                }
            }
        }
        console.log(currentBoat.hits);
        console.log(allEquals(currentBoat.hits, 1));
        if (hit)
            alert("Hit!");
        else
            alert("Miss!");
        if (allEquals(currentBoat.hits, 1)) {
            alert("Boat with length " + currentBoat.hits.length + " has sunken!");
            sunkenBoat++;
        }
        numberOfTurns++
    }
    alert("You've won! You did it in " + numberOfTurns + " turns.")
}
1
प्रयुक्त क्या है ()?
जोड़ा लेखक Benubird, स्रोत
ठीक है, मैंने 'गेम ही' का कोड शामिल किया है, जहां मुझे लगता है कि समस्या है।
जोड़ा लेखक Frederick Eskens, स्रोत
@ बेनबर्ड: यह प्रश्न में दिए गए पेस्टबिन लिंक में है: pastebin.com/7MeWWDdn
जोड़ा लेखक Qantas 94 Heavy, स्रोत
आम तौर पर हम उम्मीद करते हैं कि सभी प्रासंगिक कोड प्रश्न में शामिल किए जाएंगे, ताकि यह अभी भी समझ में आ जाए और उपयोगी हो, भले ही बाहरी साइटों के लिंक काम करना बंद कर दें।
जोड़ा लेखक Anthony Grist, स्रोत

1 उत्तर

मुद्दा आंतरिक लूप में अन्य के साथ है, क्योंकि आपने प्रत्येक जहाज (बाहरी पाश) और सभी पदों (आंतरिक पाश) को संसाधित किया है

else {
    currentBoat = boats[i];
} 

हमेशा मौजूदा नाव को अंतिम [i] सेट करने के लिए सेट करेगा;

जब आपको हिट मिलती है तो आपको किसी अन्य स्थिति या नौकाओं को संसाधित करने की आवश्यकता नहीं होती है, इसलिए जब आप इस तरह हिट का पता लगाते हैं तो जल्दी तोड़ें:

raak = false;
for(var i = 0; i < inputArray.length && !raak; i++) {

        for(var j = 0; j !== boats[i].usedPositions().length; j++) {

            console.log(targetString)

            if(targetString === boats[i].usedPositions()[j].toString()) {
                raak = true;
                boats[i].hits[j] = 1;
                console.log(boats[i].hits);
                currentBoat = boats[i];
                break;
            }
       }  
}
1
जोड़ा
बहुत बढ़िया। धन्यवाद! मेरे पास कोड का एक अलग संस्करण है जिसमें एक दृश्य इंटरफ़ेस शामिल है और अभी भी इसके साथ कुछ समस्याएं हैं। क्या मैं सिर्फ अपना प्रश्न संपादित कर सकता हूं या क्या मुझे एक नया शुरू करना चाहिए?
जोड़ा लेखक Frederick Eskens, स्रोत
आप, वास्तव में एक नया सवाल शुरू करना चाहिए
जोड़ा लेखक Code Uniquely, स्रोत