Xin lỗi cho tiêu đề dài.
Muốn nó mô tả càng tốt.Trò chơi đoán từ PHP (đánh dấu các chữ cái ở vị trí đúng và sai - giống như mastermind)
Tuyên bố từ chối: Có thể tìm thấy một số mã "tìm sự khác biệt" ở đây và ở nơi khác trên Stackoverflow, nhưng không hoàn toàn là chức năng tôi đang tìm kiếm.
tôi sẽ sử dụng những terminoligy sau:
'userguess': một từ sẽ được nhập vào bởi người sử dụng
'giải pháp': từ bí mật mà cần phải được đoán .
Những gì tôi cần phải tạo ra
Một từ trò chơi đoán nơi:
- Người dùng nhập một từ (Tôi sẽ đảm bảo thông qua Javascript/jQuery rằng từ bước chứa cùng một số chữ cái như từ để được đoán).
- Chức năng PHP sau đó kiểm tra 'userguess' và đánh dấu (màu xanh lá cây) các chữ cái trong từ đó ở đúng vị trí và các điểm nổi bật (màu đỏ) các chữ cái chưa ở đúng nơi , nhưng hiển thị ở một nơi khác trong từ.
Các chữ cái không hiển thị trong 'giải pháp' bị để lại màu đen.
Pitfall Kịch bản: - Hãy nói rằng 'giải pháp' là 'aabbc' và người dùng đoán 'abaac'
Trong kịch bản ở trên này sẽ cho kết quả: (màu xanh) một (/ xanh) (màu đỏ) b (/ đỏ) (màu đỏ) một (/ đỏ) (màu đen) một (/ đen) (màu xanh) c (/ xanh)
Thông báo như thế nào cuối cùng "một" là nguyên nhân đen 'userguess' có 3 một là nhưng 'giải pháp' chỉ có 2
Những gì tôi có cho đến nay
Mã đang làm việc nhiều hơn hoặc ít hơn, nhưng tôi có cảm giác nó có thể gầy hơn và có ý nghĩa hơn gấp 10 lần.
Tôi đang điền 2 mảng mới (một cho giải pháp và một cho userguess) khi tôi đi cùng để ngăn chặn các pitfall (xem ở trên) từ những điều rối tung lên.
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
"// kiểm tra tất cả các chữ cái bên phải ở vị trí RIGHT" không phải chỉ giống như kiểm tra ===? Nếu hầu hết các pple sẽ nhận được nó ngay sau đó bạn cần phải làm ngược lại của "không đầu tiên" tức là kiểm tra, vượt qua đầu tiên, trở lại. – Cups
+1, Không bao giờ tôi thấy một người mới viết câu hỏi chi tiết như vậy! :) – SuperSaiyan
+1 cho câu hỏi gọn gàng ... – Red