【问题标题】:Need help in building a logic in Javascript . Array Logic在 Javascript 中构建逻辑时需要帮助。阵列逻辑
【发布时间】:2015-02-27 17:43:41
【问题描述】:

以下是游戏 Master Mind 的硬编码页面。用户

我知道我需要

  1. 使用 Array 存储 RBGY 和一些与 indexOf(array 名称)我需要定义一个正确的答案(比如现在硬编码的 RRBY) 我需要检查用户键入的数组中的每个字母并进行比较 它与 RRBY。

    1. 我需要在页面上直观地显示两件事作为答案,以便用户知道哪个

      CLOSE : 错误位置的正确颜色 精确:正确位置的正确颜色

      例如:2 接近和 1 精确

    2. 另外,我需要用户在你输掉显示后只玩这个游戏 10 次。

    3. 胜利条件是用户得到正确的组合RRBY然后显示恭喜

如何设置所有这些。 JS新手。 第一个目标是让它工作,然后可能会在显示上变得复杂(接近和准确)。

有人可以帮我理解结构/功能,这样我就可以理解逻辑,然后我可以尝试编写语法(我不知道这是否有意义:)

任何帮助将不胜感激。

window.onload = init;
	
	function init(){
	var button = document.getElementById("usrButton");
	button.onclick = sayHello;
	}
	
		// my attempt at putting this logic
	var colors = ["R", "B", "Y", "G"];
	var correctAnswer = ["R", "Y", "Y", "G"];
	// maybe i thought I need to define what is the right answer in an array first
	
		
	

	if () {
	 // check if all the index in array CorrectAnswer are same as what   user typed. maybe using every method
	 // display success message
	}
	
	else
	// just display what the user types in on the page with display logic 
	
	else if {
	// if the user leaves the text box blank . Alert him to enter some values
	}
	

	function sayHello(){
	var usrTxt = document.getElementById("usrTxt");
	var usrName = usrTxt.value;
	var display = document.getElementById("displayHere");
	
	var currentOutput = display.innerHTML;  
	
	display.innerHTML = currentOutput + usrName '<br>'; 

	var div = document.getElementById("total");
	div.appendChild(p);
	
	//display.innerHTML = usrName;
	
	//var p = document.createElement("p");
	//p.innerHTML = "looks good";
	

	}
	
body { color: black; background-color: #d0e4fe; margin-left: 45px; padding: 0;}
	h1 { color: black; text-align: center; text-transform: uppercase;}
	p { font-family: arial, verdana; font-size: 12px;}
<html>
<head></head>
<body>
<h1> Master Mind</h1>
<p> <b>Game Rules</b>
<ul>
<li>The user gets 10 chances to enter their guess of 4 colors from RGBY. After which you lose</li>
<li>Right Answer is  - Correct Color in the Right Spot </li>
<li>Close Answer is  - Correct Color but in the wrong Spot</li>

<li></li>
</ul>

Enter your name and click Submit.</p>
<input type="text" id="usrTxt">
<input type="button" onclick="" id="usrButton" value="Submit">
<div id="total">
<p id="displayHere"></p>
</div>
</body>
</html>

================================================ ===

	window.onload = init;
	
	function init(){
	var button = document.getElementById("usrButton");
	button.onclick = submitAnswer;
	}

// global counter variable 
//var i = 0;
	
	function submitAnswer(){
		var usrTxt;
		var answers = []; 
			//define a new variable and make a empty array
		
		answers.push(document.getElementById('usrTxt').value);
			// push the content the user types as array in a variable called answers

		//defined a new variable so that I can display what the user entered as it is 
		var display = document.getElementById("displayHere");
		display.innerHTML = usrTxt; 
		
		}
	body { color: black; background-color: #d0e4fe; margin-left: 45px; padding: 0;}
	h1 { color: black; text-align: center; text-transform: uppercase;}
	p { font-family: arial, verdana; font-size: 12px;}
<html>
<head></head>
<body>
<h1> Master Mind</h1>
<p> <b>Game Rules</b>
<ul>
<li>The user gets 10 chances to enter their guess of 4 colors from RGBY. After which you lose</li>
<li>Right Answer is  - Correct Color in the Right Spot </li>
<li>Close Answer is  - Correct Color but in the wrong Spot</li>

<li></li>
</ul>

Enter your Guess and click Submit.</p>
<input type="text" id="usrTxt">
<input type="button" onclick="submitAnswer()" id="usrButton" value="Submit">
<div id="total">
<p id="displayHere"></p>
</div>
</body>
</html>

【问题讨论】:

  • 对我来说好像是作业。你真的尝试过什么,我没有看到任何真正实现的逻辑。但是,如果您需要帮助,请从这里开始。回答你的4个问题。 1. 编写一个函数,从用户那里获取输入字符串并设置为一个数组。 2. 写两个检查,1 用于索引检查 0, 1, 2, 3 用于 4 种颜色。如果其中任何一个匹配,请通知用户哪个索引上的正确颜色。再次检查数组的颜色 contains() 并再次通知。 3. 遍历一个整数,设置为 0,每次提交时计数加 1。 9 点返回你就输了。 4. 用户数组匹配设置的答案,返回你赢。
  • 泰勒谢谢我确实需要帮助。这4个答案有帮助。我会尝试这些。
  • Tyler 我试图编写第一个函数,但我的浏览器返回 undefined 并且日志中没有错误。我究竟做错了什么。谢谢

标签: javascript arrays if-statement logic


【解决方案1】:

试试这样的:

answer='RYYG'
function haveAguess(){
    guess=textBox.value
    guessDiv.innerText=guess
    if(!guess){
        alert('No Guess Entered!')
        return
    }
        else if(guess==answer){
            alert('Congratulations')
            return
        }
            else{
                result=[]
                x='Wrong'
                y='Wrong'
                for(i in guess){
                    if(guess[i]==answer[i]){
                        x='Correct';    y='Right'
                    }
                        else if(answer.indexOf(guess[i])>=0)    x='Correct';
                    result.push('Color ['+i+'] is the: '+x+' Color in the '+y+' Spot');
                }
                displayDiv.innerText=result.join('\n')
            }
}

我认为它满足您的所有需求...

已编辑

这就是它的工作原理......

  1. guess=textBox.value;从文本框中检索用户的猜测。
  2. guessDiv.innerText=guess;在屏幕上显示猜测。
  3. if(!guess); !guessguess=='' 相同,或者没有输入猜测,所以提醒用户并返回/结束函数。
  4. else if(guess==answer);如果猜测与answer 变量相同,则恭喜用户并结束函数。
  5. else;如果用户输入了一些文本,即:guess!='',并且猜测与答案匹配,即:guess!=answer,则:
    5.1。 result=[];准备一个数组以返回结果。
    5.2. x='Wrong'; y='Wrong';将 x & y 默认设置为“错误”。
    5.3. for(i in guess);循环遍历guess 字符串中的每个字符。
    5.3.1。 if(guess[i]==answer[i]);如果guess[i] 处的字符与answer[i] 处的字符匹配,即:guess[i]=='R' &amp;&amp; answer[i]=='R',则结果为“正确位置的正确颜色”,因此更改xy 以匹配.
    5.3.2. else if(answer.indexOf(guess[i])&gt;=0);如果guess[i] 处的字符answer[i] 处的字符匹配,即:guess[i]=='Y' &amp;&amp; answer[i]=='R',则answer.indexOf() 检查answer 是否包含值guess[i],如果false返回-1,如果true返回guess[i]的索引。 &gt;=0 如果返回值(-1 或 index)大于或等于 0,则 guess[i] 存在于 answer 中,因此更改 x,因为结果是“正确颜色错误的地方'。
    5.3.3. result.push(...);现在 xy 已修改为正确显示,使用 .push() 将显示字符串附加到 results 数组的末尾。
    5.4. displayDiv.innerText;现在循环已经完成,results 包含用户猜测的字符串,您只需在 显示 div 中显示它。
    5.4.1。 result.join('\n');与 '\n' 一起加入 results 数组,然后显示为 innerText...

需要更多帮助?!试试这些:
http://www.w3schools.com/
https://developer.mozilla.org/en-US/

【讨论】:

  • 非常感谢。我试图运行它,它在 chrome 中引发错误“未捕获的 ReferenceError:未定义文本框”。我添加了一个 document.addEventListener 来检查文本框是否被识别。我可以看到文本框正在显示我的值。
  • 这对我来说是第一次。所以请耐心等待。我明白了,直到猜测为空,然后我迷路了,然后检查正确的答案。
  • Sorry textBox & displayDiv 是我自己对您使用的元素的名称,textBox.valuedocument.getElementById('textBox').value 的简写,displayDiv 也是如此,只需交换 .value对于.innerText... 为迟到的轻率解释道歉!我试图在上面解释得更好^^^。 PS 作为一个新手,我肯定会推荐w3schools.com 那是我开始的地方,直到今天我仍在使用它们!
  • 非常感谢您的解释!!。我正在经历它,很抱歉让你迟到了 :) 自两周以来我每天都在 w3 学校网站上 :) 我也会推荐 mozilla。目前我正在用 HTML 和 Javascript 从 Head 开始练习。
  • 解释你的意思是“从头开始练习......”