Node.js:telnet“石头、纸、剪刀”程序不工作

Posted

技术标签:

【中文标题】Node.js:telnet“石头、纸、剪刀”程序不工作【英文标题】:Node.js: telnet "Rock, Paper, Scissors" Program not working 【发布时间】:2017-07-16 15:32:50 【问题描述】:

所以我正在尝试创建这个 Rock, Paper, Scissors 程序以在 telnet 服务器上运行。除了它不允许我输入“岩石”、“纸”或“剪刀”等词。

    第一个 CPUhand 显示为未定义,并且未设置为我的 if 语句中的选项之一。 第二次,每当我在命令提示符中输入单个字符时,它都会显示“无效,重试!” else 语句并跳到下一行。

是否有人能够弄清楚为什么我的 CPUhand 的 if 语句不起作用或者为什么我不能在命令提示符中输入多个字符?

Screenshot1Screenshot2

"use strict"; 
const 
  net = require('net'), 
  server = net.createServer(function(connection)  //create server
      
      let randomNum = randomNumber(1, 3);
      let CPUhand
      
      if(randomNum == 1)
          CPUhand == "Rock";
       else if(randomNum == 2)
          CPUhand == "Paper";
       else if(randomNum == 3)
          CPUhand == "Scissors";
      
    
	connection.write("Enter: Rock, Paper, or Scissors!\r\n");
      
	connection.on('data', function(chunk)  //collect data from user
		
		let USERhand = chunk.toString();
		
		if(CPUhand === "Rock" && USERhand === "Scissors" || USERhand === "Rock" && CPUhand === "Scissors")
			connection.write("Rock beats Scissors!\r\n");
		 
		else if(CPUhand === "Paper" && USERhand === "Rock" || USERhand === "Paper" && CPUhand === "Rock")
			connection.write("Paper beats Rock!\r\n");
		 
		else if(CPUhand === "Scissors" && USERhand === "Paper" || USERhand === "Scissors" && CPUhand === "Paper")
			connection.write("Scissors beats Paper!\r\n");
		
        else if(CPUhand === USERhand)
            connection.write("Draw!\r\n");
        
		else
			connection.write("Invalid! Try Again! \r\n");
				
		
	);

); server.listen(5432); //bind port

    function randomNumber(min, max) 
        min = Math.ceil(min);
        max = Math.floor(max);
        return Math.floor(Math.random() * (max - min + 1)) + min;
    

【问题讨论】:

.on('data') 会在程序接收到任何数据时触发,当您键入内容时,通常一次输入一个字符。您必须将数据收集到变量中,直到它收到换行符。另一个问题是因为您尝试使用 == 而不是 = 分配值。 【参考方案1】:

1) 块中的错字:

if(randomNum == 1) CPUhand == "Rock"; else ...

应该是:

if(randomNum == 1) CPUhand = "Rock"; else ...

2) 在用户输入中,您还有换行符:

let USERhand = chunk.toString();

替换为:

let USERhand = chunk.toString().trim();

【讨论】:

以上是关于Node.js:telnet“石头、纸、剪刀”程序不工作的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB 中的石头、纸、剪刀

如何在 C# 中的石头、纸、剪刀游戏中随机化数组中的变量? [复制]

为啥我的函数 if/else if/else if 语句返回相同的答案?

无法从 Node.js 连接到 Telnet 服务器

Vector 和 for 不产生结果

如何向用户刷新问题?