WPS-js宏 做了一个“黑”棋

本文介绍了一种利用WPS的JS宏功能创建一个棋盘游戏的方法。游戏涉及九宫格、随机颜色分配、点击方块改变颜色及相邻方块响应的逻辑,旨在通过实践提升文档处理效率。教程详细阐述了从新建窗体、设置控件到编写初始化、点击事件和颜色判定等代码的过程。
摘要由CSDN通过智能技术生成

最近在研究wps的js宏,想要通过js宏提高工作中文档处理的效率。不过目前是自己摸索着去学习。

学习过程中使用js宏制作了一个“黑”棋小游戏(官方的游戏名不太清楚)

游戏概述:运行后会出现一个九宫格+一个开始按钮+一个显示下棋步数的控件

游戏规则:运行后九个正方形会随机变成黑色/红色,点击方块可以改变正方形的颜色(黑色红色互转),同时被点击的正方形的相邻(上下左右)正方形也会改变颜色,将9个正方形的颜色都点击为黑色,游戏即胜利同时会显示用到的步数。

以下是关于这个小游戏的制作教程:

(1)新建一个excel文件并打开WPS的js宏编辑器,在编辑器中新建一个窗体,然后就从控件区各种拉,这里拉了一个button(用于开始按钮)、一个标签框(用于显示游戏步数信息)、九个切换按钮(用于9个游戏方块)

(2)代码实现1:游戏加载时的初始化程序+开始按钮对应的程序

//游戏加载初始化程序
function allblack(){
	UserForm1.Close()
	UserForm5.Label1.Caption = ''
	UserForm5.StartUpPostion = 1
	//	设置9个切换按钮的显示值(这个是显示在切换按钮上的值,此处不需要所以设置为空)
	UserForm5.ToggleButton1.Caption = ''
	UserForm5.ToggleButton2.Caption = ''
	UserForm5.ToggleButton3.Caption = ''
	UserForm5.ToggleButton4.Caption = ''
	UserForm5.ToggleButton5.Caption = ''
	UserForm5.ToggleButton6.Caption = ''
	UserForm5.ToggleButton7.Caption = ''
	UserForm5.ToggleButton8.Caption = ''
	UserForm5.ToggleButton11.Caption = ''
	//	显示窗体
	UserForm5.Show()
}
//点击开始按钮程序
function UserForm5_CommandButton1_Click()
{
	UserForm5.Label1.Caption = '-1'
	//	设置切换按钮的值(不是显示值!是值,0和1分别代表切换按钮的两种状态)
	//	这里设置了随机数,实现9个方块随机值的效果
	UserForm5.ToggleButton1.Value = Math.round(Math.random()) 
	UserForm5.ToggleButton2.Value = Math.round(Math.random()) 
	UserForm5.ToggleButton3.Value = Math.round(Math.random()) 
	UserForm5.ToggleButton4.Value = Math.round(Math.random()) 
	UserForm5.ToggleButton5.Value = Math.round(Math.random()) 
	UserForm5.ToggleButton6.Value = Math.round(Math.random()) 
	UserForm5.ToggleButton7.Value = Math.round(Math.random()) 
	UserForm5.ToggleButton8.Value = Math.round(Math.random()) 
	UserForm5.ToggleButton11.Value = Math.round(Math.random()) 
	//	值是随机的但是此时方块不会有颜色,调用颜色更新的程序
	color()
}

 (3)代码实现2:根据切换按钮的值判断方块颜色程序+游戏结束判定程序+记录步数程序

//颜色判定
function color(){
	//	上一步切换按钮生成了随机值0或1,这里值为1背景色为黑色,值为2背景色为红色
	//	此时的颜色值是用的十进制,可能会觉得看不懂
	if(UserForm5.ToggleButton1.Value){
		UserForm5.ToggleButton1.BackColor = 0
	}else{
		UserForm5.ToggleButton1.BackColor = 16711680
	}
	if(UserForm5.ToggleButton2.Value){
		UserForm5.ToggleButton2.BackColor = 0
	}else{
		UserForm5.ToggleButton2.BackColor = 16711680
	}
	if(UserForm5.ToggleButton3.Value){
		UserForm5.ToggleButton3.BackColor = 0
	}else{
		UserForm5.ToggleButton3.BackColor = 16711680
	}
	if(UserForm5.ToggleButton4.Value){
		UserForm5.ToggleButton4.BackColor = 0
	}else{
		UserForm5.ToggleButton4.BackColor = 16711680
	}
	if(UserForm5.ToggleButton5.Value){
		UserForm5.ToggleButton5.BackColor = 0
	}else{
		UserForm5.ToggleButton5.BackColor = 16711680
	}
	if(UserForm5.ToggleButton6.Value){
		UserForm5.ToggleButton6.BackColor = 0
	}else{
		UserForm5.ToggleButton6.BackColor = 16711680
	}
	if(UserForm5.ToggleButton7.Value){
		UserForm5.ToggleButton7.BackColor = 0
	}else{
		UserForm5.ToggleButton7.BackColor = 16711680
	}
	if(UserForm5.ToggleButton8.Value){
		UserForm5.ToggleButton8.BackColor = 0
	}else{
		UserForm5.ToggleButton8.BackColor = 16711680
	}
	if(UserForm5.ToggleButton11.Value){
		UserForm5.ToggleButton11.BackColor = 0
	}else{
		UserForm5.ToggleButton11.BackColor = 16711680
	}
	//	更新完颜色后会触发记录步数的程序和游戏结束判定的程序
	jibu()
	end()
}
//结束判定
function end()
{
	//	当切换按钮(游戏方块)的值全为1,游戏结束!
	if (UserForm5.ToggleButton1.Value == 1 && 
		UserForm5.ToggleButton2.Value == 1 && 
		UserForm5.ToggleButton3.Value == 1 && 
		UserForm5.ToggleButton4.Value == 1 && 
		UserForm5.ToggleButton5.Value == 1 && 
		UserForm5.ToggleButton6.Value == 1 && 
		UserForm5.ToggleButton7.Value == 1 && 
		UserForm5.ToggleButton8.Value == 1 && 
		UserForm5.ToggleButton11.Value == 1
		)
		{
			let a = UserForm5.Label1.Caption
			UserForm5.Label1.Caption = "success" + a
		}
}
//记录步数
function jibu()
{
	UserForm5.Label1.Caption ++
}

  (4)代码实现3:9个切换按钮(游戏方块)被按下后更换值的程序

//以下9段程序为9个切换按钮(游戏方块)的对应程序
//当方块被点击时,程序会让该方块的上下左右四面的相邻方块的值变化(0和1的转换),并执行颜色更新的程序
//!!!此处不需要写被点击的方块更改值的程序,因为切换按钮被点击会自动切换!!!
function UserForm5_ToggleButton1_Click()
{
	UserForm5.ToggleButton2.Value = 1 ^ (UserForm5.ToggleButton2.Value ? 1 : 0)
	UserForm5.ToggleButton4.Value = 1 ^ (UserForm5.ToggleButton4.Value ? 1 : 0)
	color()
}
function UserForm5_ToggleButton2_Click()
{
	UserForm5.ToggleButton1.Value = 1 ^ (UserForm5.ToggleButton1.Value ? 1 : 0)
	UserForm5.ToggleButton3.Value = 1 ^ (UserForm5.ToggleButton3.Value ? 1 : 0)
	UserForm5.ToggleButton5.Value = 1 ^ (UserForm5.ToggleButton5.Value ? 1 : 0)
	color()
}
function UserForm5_ToggleButton3_Click()
{
	UserForm5.ToggleButton2.Value = 1 ^ (UserForm5.ToggleButton2.Value ? 1 : 0)
	UserForm5.ToggleButton6.Value = 1 ^ (UserForm5.ToggleButton6.Value ? 1 : 0)
	color()
}
function UserForm5_ToggleButton4_Click()
{
	UserForm5.ToggleButton1.Value = 1 ^ (UserForm5.ToggleButton1.Value ? 1 : 0)
	UserForm5.ToggleButton7.Value = 1 ^ (UserForm5.ToggleButton7.Value ? 1 : 0)
	UserForm5.ToggleButton5.Value = 1 ^ (UserForm5.ToggleButton5.Value ? 1 : 0)
	color()
}
function UserForm5_ToggleButton5_Click()
{
	UserForm5.ToggleButton2.Value = 1 ^ (UserForm5.ToggleButton2.Value ? 1 : 0)
	UserForm5.ToggleButton4.Value = 1 ^ (UserForm5.ToggleButton4.Value ? 1 : 0)
	UserForm5.ToggleButton8.Value = 1 ^ (UserForm5.ToggleButton8.Value ? 1 : 0)
	UserForm5.ToggleButton6.Value = 1 ^ (UserForm5.ToggleButton6.Value ? 1 : 0)
	color()
}
function UserForm5_ToggleButton6_Click()
{
	UserForm5.ToggleButton3.Value = 1 ^ (UserForm5.ToggleButton3.Value ? 1 : 0)
	UserForm5.ToggleButton11.Value = 1 ^ (UserForm5.ToggleButton11.Value ? 1 : 0)
	UserForm5.ToggleButton5.Value = 1 ^ (UserForm5.ToggleButton5.Value ? 1 : 0)
	color()
}
function UserForm5_ToggleButton7_Click()
{
	UserForm5.ToggleButton4.Value = 1 ^ (UserForm5.ToggleButton4.Value ? 1 : 0)
	UserForm5.ToggleButton8.Value = 1 ^ (UserForm5.ToggleButton8.Value ? 1 : 0)
	color()
}
function UserForm5_ToggleButton8_Click()
{
	UserForm5.ToggleButton7.Value = 1 ^ (UserForm5.ToggleButton7.Value ? 1 : 0)
	UserForm5.ToggleButton11.Value = 1 ^ (UserForm5.ToggleButton11.Value ? 1 : 0)
	UserForm5.ToggleButton5.Value = 1 ^ (UserForm5.ToggleButton5.Value ? 1 : 0)
	color()
}
function UserForm5_ToggleButton11_Click()
{
	UserForm5.ToggleButton6.Value = 1 ^ (UserForm5.ToggleButton6.Value ? 1 : 0)
	UserForm5.ToggleButton8.Value = 1 ^ (UserForm5.ToggleButton8.Value ? 1 : 0)
	color()
}

 到此完成

另:目前网上关于JS宏的教程少且乱,毕竟是在VBA宏之后出现的,所以搜索问题时经常会出现vba宏的教程和讲解,这对于个人学习JS宏真的太难了,如果有同样需求同样问题的bro,可以评论区集合讨论一波~

wps-js是一种用于WPS办公软件的自动化处理工具,可以通过编写JavaScript脚本来实现对文档的自动化操作。 要返回行号,我们可以通过以下步骤实现: 1. 获取当前活动文档中的所有行数据。 使用WPS JS中的`getActiveWorksheet`函数获取当前活动文档,并使用`getRows`方法获取所有行数据。 2. 获取当前行号。 遍历所有行数据,找到与指定数据匹配的行,并记录当前的行号。 3. 返回行号。 将获取的行号返回给调用者,可以使用`alert`函数弹出提示框显示行号。 下面是一个示例代码: ```javascript function findRowNumber(targetData) { var activeWorksheet = wps.api.core.getActiveWorksheet(); var rows = activeWorksheet.getRows(); var rowNumber = -1; for (var i = 0; i < rows.length; i++) { var rowData = rows[i]; if (rowData.indexOf(targetData) !== -1) { // 判断当前行是否包含目标数据 rowNumber = i + 1; // 行号从1开始计数 break; } } return rowNumber; } var targetData = "目标数据"; var rowNumber = findRowNumber(targetData); alert("目标数据所在行号为:" + rowNumber); ``` 以上代码中,我们定义了一个名为`findRowNumber`的函数,它接收一个参数`targetData`表示要查找的目标数据。通过调用`getActiveWorksheet`函数获取当前活动文档,然后使用`getRows`方法获取所有行数据。再通过遍历行数据的方式找到与目标数据匹配的行,并记录行号。最后,将获取的行号通过弹出的提示框返回给用户。 当我们调用`findRowNumber`函数并传入目标数据后,它会在当前文档中查找该数据所在的行,并通过提示框显示行号。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值