如何为我的石头剪刀布游戏编写一套更简洁的代码?

2024-02-17

下面是我在 Web 开发课程中必须进行的石头剪刀布游戏活动的 JS 文件。我能够让一切正常工作,但是我不喜欢 if-else 语句使我的代码花费了多长时间,并且想知道如何使其更加简洁并以更少的代码行数实现。

const imagePath=[];
imagePath.push("img/paper.png");
imagePath.push("img/rock.png");
imagePath.push("img/scissors.png");

let counter=1;
let counter2=1;
let images=document.querySelector("#player");
let images2=document.querySelector("#computer");
function ImageChange()
{

  images.src=imagePath[counter];
  counter++;
  if (counter == imagePath.length)
  {
    counter=0;
  }

  images2.src=imagePath[counter2];
  counter2++;
  if (counter2 == imagePath.length)
  {
    counter2=0;
  }
}

 let intervalObject=setInterval(ImageChange,500);


const playButton=document.querySelector("#play");

const div= document.querySelector("#message");

playButton.addEventListener("click",function(){

clearInterval(intervalObject);

let randomIndex=Math.floor(Math.random()*imagePath.length);
images.src=imagePath[randomIndex];

let randomIndex2=Math.floor(Math.random()*imagePath.length);
images2.src=imagePath[randomIndex2];


//paper=0,rock=1,scissors=2
if(randomIndex==randomIndex2)
{
  div.innerHTML="<h1>Tie!</h1>";
}

else if(randomIndex==0)
{
  if(randomIndex2==1)
  {
    div.innerHTML="<h1>Player Wins</h1>";
  }
  else
  {
    div.innerHTML="<h1>Computer Wins</h1>";
  }
}

else if(randomIndex==1)
{
   if(randomIndex2==2)
  {
    div.innerHTML="<h1>Player Wins</h1>";
  }
   else
  {
    div.innerHTML="<h1>Computer Wins</h1>";
  }
}

else if(randomIndex==2)
{
  if(randomIndex2==0)
  {
    div.innerHTML="<h1>Player Wins</h1>";
  }
  else
  {
    div.innerHTML="<h1>Computer Wins</h1>";
  }
}


});

就像我说的,一切正常,我有我的 html/css 文件。然而,我关心的只是我的 if 语句。我有更好的方法来编写它们吗?


我认为类似这样的东西会节省你很多代码行:

if(randomIndex==randomIndex2) {
  div.innerHTML="<h1>Tie!</h1>";
}
else {
  var playerWins = (randomIndex==0 && randomIndex2==1) || (randomIndex==1 && randomIndex2==2) || (randomIndex==2 && randomIndex2==0)
  div.innerHTML = playerWins ? "<h1>Player Wins</h1>" : "<h1>Computer Wins</h1>"
}

编辑: (这是使用下面的 mod (%) 建议进行的快速重写,请参阅 Megaaptera novaeangliae)

const imagePath = ["img/paper.png", "img/rock.png", "img/scissors.png"];

const playButton = document.querySelector("#play");
const playerImage = document.querySelector("#player");
const computerImage = document.querySelector("#computer");
const div = document.querySelector("#message");

let computerChoice, playerChoice;

function randomChoice() {
	return Math.floor(Math.random() * imagePath.length);
}

function randomize() {
	playerChoice = randomChoice();
	computerChoice = randomChoice();
	playerImage.src = imagePath[playerChoice];
	computerImage.src = imagePath[computerChoice];
}

let intervalObject = setTimeout(randomize, 500);

playButton.addEventListener("click", function() {
	clearInterval(intervalObject);

	// paper=0, rock=1, scissors=2
	if (playerChoice == computerChoice) {
		div.innerHTML = "<h1>Tie!</h1>";
	} else if (playerChoice == (computerChoice + 1) % imagePath.length) {
		div.innerHTML = "<h1>Player Wins</h1>";
	} else {
		div.innerHTML = "<h1>Computer Wins</h1>";
	}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为我的石头剪刀布游戏编写一套更简洁的代码? 的相关文章

随机推荐

  • 使用php通过android volley发送图像[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在用数据和图像从 android 到 php 发布帖子 我正在 android 中缩小图像并对其进行 base 64 编码 当通过齐射
  • [Firestore][I-FST000001] 无法到达 Firestore 后端

    我已经配置了 Firebase Firestore 但 Firestore 曾返回此错误 Firestore I FST000001 无法到达 Firestore 后端 我正在使用 Swift 4 和 Xcode 9 有什么想法吗 2018
  • 程序部署后 JNI 找不到共享库

    将导出的 Java 项目从开发计算机移至生产环境后 我遇到了麻烦 java项目 一个Eclipse插件 有一个我写的JNI库 它依赖于一个开源库 而这个库又依赖于Boost 我在我的 SLES11 机器上编译了所有内容 包括 Boost 并
  • 使用节点 8 async/await 和 Angular 6 调试量角器时出错

    我无法让量角器调试器与节点 8 async await 和 Angular 6 一起使用 以旧方式返回到节点 7elementExplorer browser pause and browser debugger 不是一个选择 也因为在未来
  • Try and Catch on TSQL - catch 不捕获

    我有一个存储过程似乎没有正确记录其错误 代码出错 但 catch 块似乎没有生效 try 块相当长 但错误部分很简单并且就在最后 所以我已经精确说明了这一点 BEGIN TRY insert into tbl X select from t
  • 为什么我在此文件夹上收到 UnauthorizedAccessException?

    据 MSDN 报道 目录 存在 https msdn microsoft com en us library system io directory exists v vs 110 aspx如果目录不可访问 则应返回 false 我有一条路
  • 使用 jQuery 无法找到动态添加的 HTML 元素

    我正在 HTML 中实现一个树浏览器 单击节点时 我调用一个添加该节点的子元素的函数 到目前为止 一切都很好 我现在想立即调用其中一个子元素的单击处理程序来展开它 我的问题是 jQuery 找不到刚刚添加的子元素 当我在调试器中单步调试时
  • x/y 坐标的排序向量

    我有一个向量 u32 u32 表示 10 x 10 网格上坐标的元组 坐标未排序 因为标准sort函数也没有产生我想要的结果 我为他们编写了一个这样的排序函数 vec sort by a b if a 0 gt b 0 return Ord
  • 使用 SQL 批量更新记录

    我在 SQL Server 2008 环境中有两个表 其结构如下 Table1 ID DescriptionID Description Table2 ID Description Table1 DescriptionID 映射到Table
  • 在依赖注入中检查 null 的更好方法

    通过构造函数使用依赖项注入时 我始终需要在将实例传递给内部属性之前检查是否为空 例如 public UserManager User user IStateManager stateManager if user null throw ne
  • 使用谷歌直方图创建日期直方图

    如何创建适用于日期的 Google 直方图 1 我已经放置了示例代码 带有工作号码和非工作日期示例 http jsfiddle net Qquse 417 http jsfiddle net Qquse 417 和下面的代码 2 1 htt
  • 为什么 Spring 允许在私有方法上进行控制器注释的请求映射?

    今天刚刚在 Spring MVC 控制器类中遇到了这个 RequestMapping value foo method RequestMethod GET private String doThing final WebRequest re
  • 为什么表单提交会打开新窗口/选项卡?

    我发现了很多问题 如何在新窗口中打开表单结果 https stackoverflow com search q spring 20form 20new 20window 但我面临着相反的问题 我有表格
  • 使用 twitter bootstrap 3 将 9 列布局居中

    我的代码就像 div class container fluid div class row div class col md 3 div div class col md 3 div div class col md 3 div div
  • 使用 Google Analytics 管理 API 和应用脚本提取 GA4 媒体资源列表

    想知道是否有人有使用新的 Analytics Admin API 将 GA 帐户和属性列表导出到电子表格的经验 我过去曾使用管理 API 来实现此目的 但这限制了我们只能使用 UA 属性 我希望也能在此处包含 GA4 属性 我尝试过将旧脚本
  • simplemembership MVC4 通过 userId 获取用户名

    使用 MVC4 和 SIMPLEMEMBERSHIP 的人知道如何通过 userId 获取用户名 用户未登录 我想删除它 要删除我必须使用 Membership DeleteUser string username 你可以使用GetUser
  • 连接来自不同服务器的表

    有什么建议如何在存储过程中连接来自不同服务器的表吗 如果没有更多细节 很难给出直接的例子 但基本思想如下 首先 在存储过程之外 主机服务器 存储过程所在的服务器 必须了解第二台服务器 包括 可能 登录信息 在您的主服务器上 运行sp add
  • TestCafe——断言元素可见的正确方法

    根据各种论坛讨论 TestCafe 文档以及尝试比较结果 我仍然不确定哪种是断言页面元素可见的正确 或最佳 方法 await t expect Selector elementId visible ok vs await t expect
  • 使用 Javascript 在 Span 标记内动态插入链接

    我有这个 span class image img src something jpg span 我想使用 javascript 将其转换为 span class image a href domain img src something
  • 如何为我的石头剪刀布游戏编写一套更简洁的代码?

    下面是我在 Web 开发课程中必须进行的石头剪刀布游戏活动的 JS 文件 我能够让一切正常工作 但是我不喜欢 if else 语句使我的代码花费了多长时间 并且想知道如何使其更加简洁并以更少的代码行数实现 const imagePath i