WPS表格 JSA 学习笔记 - 实现贪吃蛇

欢迎加入 551293360 QQ交流群
欢迎加入 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-贪吃蛇

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笑虾

多情黯叹痴情癫。情癫苦笑多情难

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值