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-贪吃蛇

以上是关于WPS表格 JSA 学习笔记 - 实现贪吃蛇的主要内容,如果未能解决你的问题,请参考以下文章

WPS表格 JSA 学习笔记 - 实现设置编号并添加到自定义选项卡

WPS表格 JSA 学习笔记 - 批量设置表格

WPS表格 JSA 学习笔记 - 批量设置表格

WPS表格 JSA 学习笔记

WPS表格 JSA 学习笔记

WPS表格 JSA 学习笔记 - 批量设置图片