最近在研究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,可以评论区集合讨论一波~