WPS表格 JSA 学习笔记 - 实现贪吃蛇
Posted 笑虾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPS表格 JSA 学习笔记 - 实现贪吃蛇相关的知识,希望对你有一定的参考价值。
欢迎加入 551293360 QQ交流群
let snake = Range("Y25:Y30");// 蛇身显示
let arr = []; // 蛇身数据
let toggle = false; // 总开关
let totalScore = 0; // 总得分
let scoreCount = 0; // 目标
let area = Range("B2:AY51"); // 活动区域
let scoreArea = Range("BA1"); // 记分区域
let snakeColor = '00FF00'; // 蛇颜色
let scoreColor = '0000FF'; // 得分块颜色
let bounds = {left : 2, top : 2, right : 51, down : 51}
let initlock = false; // 开始标记
function randTarget(){
var r = random(10);
if(scoreCount == 0 && r > 5){
buildTarget();
}
}
// 生成个得分格子
function buildTarget(len = 3){
len = len * 2;
var arr = Array(len).fill(1).map(v=>random(bounds.down, bounds.top));
for(let i=0; i<len; i+=2){
var item = Cells.Item(arr[i], arr[i+1]);
setRange(item, scoreColor);
item.Value2 = random(10);
scoreCount++;
}
}
function random(max, min = 1){
return Math.floor(Math.random()*(max-min))+min;
}
function setRange(cell, hexColor){
(obj=>{
obj.Color = parseInt(hexColor,16);
})(cell.Interior);
}
function clearRange(cell){
(obj=>{
obj.Pattern = xlPatternNone;
})(cell.Interior);
}
function startGame(){
toggle = true; // 游戏总开关
// 清理战场
area.Interior.Pattern = xlPatternNone; // 清理战场背景色
area.Formula = ""; // 清理战场单元格内容
totalScore = scoreArea.Value2 = 0; // 归零记分牌
scoreCount = 0; // 得分格数量归零
// 创建得分格子
buildTarget();
// 贪吃蛇归位
arr = Array.from(snake);
//setRange(snake, snakeColor);
Range("Y25").Select();
}
function gameOver(){
toggle = false; // 游戏总开关
initlock = false; // 开始标记
UserForm1.StartUpPostion = 1;
UserForm1.Show();
UserForm1.Label1.Caption = `恭喜!得分 ${scoreArea.Value2} \\n继续挑战吧!`
}
// 判断是否自食
function isFailure(Target){
var isF = arr.some(t=> t.Row === Target.Row && t.Column === Target.Column && initlock);
initlock = true;
return isF;
}
/**
* 开关按钮点击事件
*/
function ToggleButton1_Click()
{
gameOver()
}
/**
* 行动逻辑
*/
function Workbook_SheetSelectionChange(Sh, Target)
{
if(toggle){
if(isFailure(Target)){
gameOver();
Console.log("游戏结束");
return;
}
var tempCell = Target;
var x = Target.Column;
var y = Target.Row;
if(x > bounds.down){
tempCell = Cells.Item(y, bounds.top);
tempCell.Select();
}
if(x < bounds.left){
tempCell = Cells.Item(y, bounds.right);
tempCell.Select();
}
if(y > bounds.right){
tempCell = Cells.Item(bounds.left, x);
tempCell.Select();
}
if(y < bounds.top){
tempCell = Cells.Item(bounds.down, x);
tempCell.Select();
}
setRange(tempCell, snakeColor);
var targetScore = tempCell.Value2; // 取单元格值
if(targetScore){ // 有值表示得分格子
scoreArea.Value2 += targetScore; // 总分增加
tempCell.Value2 = undefined; // 清空得分格原来的内容
scoreCount--; // 得分格子数量减一
}else{
clearRange(arr.pop()); // 不是得分格子,蛇尾清理掉一格
}
arr.unshift(tempCell); // 新舌头压入蛇身数组
}
randTarget(); // 刷新得分格子
}
function UserForm1_CommandButton1_Click()
{
startGame();
// 关闭本窗体
UserForm1.Hide();
}
function Workbook_Open()
{
gameOver();
UserForm1.StartUpPostion = 3;
UserForm1.Show();
}
源文件
以上是关于WPS表格 JSA 学习笔记 - 实现贪吃蛇的主要内容,如果未能解决你的问题,请参考以下文章