लंबे शीर्षक के लिए खेद है।
इसे यथासंभव वर्णनात्मक होना चाहता था।PHP शब्द अनुमान लगाने का खेल (दाएं और गलत स्थिति में हाइलाइट अक्षरों - जैसे मास्टरमाइंड)
अस्वीकरण: यहां कुछ और "स्टैक ओवरफ्लो" पर कुछ "अंतर खोजें" कोड मिल सकता है, लेकिन मैं जिस कार्यक्षमता की तलाश में था, वह कुछ नहीं मिला।
मैं इन terminoligy पर बाद में उपयोग करेंगे:
'userguess': एक शब्द है कि उपयोगकर्ता द्वारा दर्ज किया जाएगा
'समाधान': गुप्त शब्द अनुमान लगाया जाना चाहिए ।
मैं खेल है जहाँ अनुमान लगा
एक शब्द बनाने के लिए आवश्यक:
- उपयोगकर्ता एक शब्द में प्रवेश करती है (मैं जावास्क्रिप्ट/jQuery के माध्यम से सुनिश्चित करेंगे कि में प्रवेश शब्द पर शब्द के रूप में अक्षरों की संख्या समान है)।
- एक PHP समारोह फिर 'userguess' और प्रकाश डाला (हरे रंग में) कि शब्द में पत्र जो सही स्थान पर हैं, और पर प्रकाश डाला (लाल रंग में) पत्र है कि सही जगह में अभी तक नहीं कर रहे हैं की जाँच करता है , लेकिन शब्द में कहीं और दिखाएं।
अक्षरों में दिखाई देने वाले अक्षरों को काला छोड़ दिया गया है।
ख़तरा परिदृश्य: - मान लीजिए कि 'समाधान' 'aabbc' है और उपयोगकर्ता 'abaac'
अनुमान लगा लेता उपरोक्त परिदृश्य इस में परिणाम होगा में करते हैं: (हरा) एक (/ हरा) (लाल) ख (/ लाल) (लाल) एक (/ लाल) (काला) एक (/ काला) (हरा) ग (/ हरी)
सूचना कैसे पिछले "एक" काला कारण 'userguess' है 3 एक है लेकिन 'समाधान' केवल 2
क्या मैं अब तक
कोड है कम या ज्यादा काम कर रहा है, लेकिन मुझे लगता है कि यह 10 गुना अधिक दुबला और मतलब हो सकता है।
मैं 2 नए Arrays (समाधान के लिए एक और उपयोगकर्ता के लिए एक) भर रहा हूं क्योंकि मैं गड़बड़ी से ऊपर (ऊपर देखें) को रोकने के लिए साथ जाता हूं।
function checkWord($toCheck) {
global $solution; // $solution word is defined outside the scope of this function
$goodpos = array(); // array that saves the indexes of all the right letters in the RIGHT position
$badpos = array(); // array that saves the indexes of all the right letters in the WRONG position
$newToCheck = array(); // array that changes overtime to help us with the Pitfall (see above)
$newSolution = array();// array that changes overtime to help us with the Pitfall (see above)
// check for all the right letters in the RIGHT position in entire string first
for ($i = 0, $j = strlen($toCheck); $i < $j; $i++) {
if ($toCheck[$i] == $solution[$i]) {
$goodpos[] = $i;
$newSolution[$i] = "*"; // RIGHT letters in RIGHT position are 'deleted' from solution
} else {
$newToCheck[] = $toCheck[$i];
$newSolution[$i] = $solution[$i];
}
}
// go over the NEW word to check for letters that are not in the right position but show up elsewhere in the word
for ($i = 0, $j = count($newSolution); $i <= $j; $i++) {
if (!(in_array($newToCheck[$i], $newSolution))) {
$badpos[] = $i;
$newSolution[$i] = "*";
}
}
// use the two helper arrays above 'goodpos' and 'badpos' to color the characters
for ($i = 0, $j = strlen($toCheck), $k = 0; $i < $j; $i++) {
if (in_array($i,$goodpos)) {
$colored .= "<span class='green'>";
$colored .= $toCheck[$i];
$colored .= "</span>";
} else if (in_array($i,$badpos)) {
$colored .= "<span class='red'>";
$colored .= $toCheck[$i];
$colored .= "</span>";
} else {
$colored .= $toCheck[$i];
}
}
// output to user
$output = '<div id="feedbackHash">';
$output .= '<h2>Solution was : ' . $solution . '</h2>';
$output .= '<h2>Color corrected: ' . $colored . '</h2>';
$output .= 'Correct letters in the right position : ' . count($goodpos) . '<br>';
$output .= 'Correct letters in the wrong position : ' . count($badpos) . '<br>';
$output .= '</div>';
return $output;
} // checkWord
"// दाएं स्थिति में सभी सही अक्षरों की जांच करें" क्या यह एक === जांच जैसा नहीं है? यदि अधिकांश पेपर इसे सही तरीके से प्राप्त करेंगे तो आपको "असफल पहले" के विपरीत करने की आवश्यकता है यानी जांच करें, पहले पास करें, वापसी करें। – Cups
+1, मैंने कभी नवागंतुक को इतना विस्तृत प्रश्न नहीं देखा है! :) – SuperSaiyan
+1 एक साफ सवाल के लिए +1 ... – Red