还是照例贴一下JavaScript脚本源码,,,当然全中文开发也可以,这里就用英文的吧
/*
项目名称: ABC_Game
创建时间: 2020年7月25日
*/
oled = OLED({
"addr":0x78,
"scl":SYS.pin("D1"),
"sda":SYS.pin("D2")
});
oled.show(0,0,"A:00 B:00");
A = {
"pos":[8,2],
"dir":1,
"char":"A",
"score":0,
"t":0
};
B = {
"pos":[120,4],
"dir":2,
"char":"B",
"score":0,
"t":0
};
sa(A);
sa(B);
C = {
"pos":[24,4],
"char":"C"
};
function ca(obj)
{
global oled;
oled.show(obj.pos[0], obj.pos[1], " ");
}
function sa(obj)
{
global oled;
oled.show(obj.pos[0], obj.pos[1], obj.char);
}
function formatNum(n)
{
return n < 10 ? "0"+n : String(n);
}
function isWin(obj)
{
global oled, A, B;
oled.show(0,0," ");
oled.show(0,0,obj.char+"胜利!");
clearInterval(A.t);
clearInterval(B.t);
}
function addScore(c)
{
global oled, A, B, C;
condition = 100;
if (c.char === "B") {
++B.score;
} else {
++A.score;
}
if (A.score >= condition && B.score < condition) {
isWin(A);
} else if (A.score < condition && B.score >= condition) {
isWin(B);
} else {
oled.show(0, 0, "A:"+formatNum(A.score)+" B:"+formatNum(B.score));
}
}
function showC(obj)
{
global A, B;
ca(obj);
x = Math.rand(0,15) * 8;
y = Math.rand(1,3) * 2;
while ((x === A.pos[0] && y === A.pos[1]) || (x === B.pos[0] && y === B.pos[1])) {
x = Math.rand(0,15) * 8;
y = Math.rand(1,3) * 2;
}
obj.pos[0] = x;
obj.pos[1] = y;
sa(obj);
}
showC(C);
function move(obj)
{
global C;
ca(obj);
if (obj.dir === 8) {
obj.pos[1] -= 2; //上
} else if (obj.dir === 1) {
obj.pos[0] += 8; //右
} else if (obj.dir === 4) {
obj.pos[1] += 2; //下
} else if (obj.dir === 2) {
obj.pos[0] -= 8; //左
}
if (obj.pos[0] < 0 || obj.pos[0] > 120 || obj.pos[1] < 2 || obj.pos[1] > 6) {
clearInterval(obj.t);
return false;
}
if (obj.pos[0] === C.pos[0] && obj.pos[1] === C.pos[1]) {
//吃到C了
addScore(obj);
sa(obj);
//重新计算C的位置并显示
showC(C);
}
sa(obj);
//print(SYS.heapSize()+"\n");
return true;
}
function auto(obj)
{
global C;
if (C.pos[0] === obj.pos[0] && C.pos[1] > obj.pos[1]) {
obj.dir = 4; //C在对象正下方,自动向下
} else if (C.pos[0] === obj.pos[0] && C.pos[1] < obj.pos[1]) {
obj.dir = 8; //C在对象正上方,自动向上
} else if (C.pos[0] > obj.pos[0] && C.pos[1] === obj.pos[1]) {
obj.dir = 1; //C在对象右边,自动向右
} else if (C.pos[0] < obj.pos[0] && C.pos[1] === obj.pos[1]) {
obj.dir = 2; //C在对象左边,自动向左
} else if (C.pos[0] > obj.pos[0] && C.pos[1] > obj.pos[1]) {
obj.dir = 4; //C在对象右下边,先自动向下
} else if (C.pos[0] > obj.pos[0] && C.pos[1] < obj.pos[1]) {
obj.dir = 1; //C在对象右上边,先自动向右
} else if (C.pos[0] < obj.pos[0] && C.pos[1] < obj.pos[1]) {
obj.dir = 8; //C在对象左上边,先自动向上
} else if (C.pos[0] < obj.pos[0] && C.pos[1] > obj.pos[1]) {
obj.dir = 2; //C在对象左下边,先自动向左
}
}
A.t = setInterval(function(){
global A, B;
auto(A);
if (!move(A)) {
isWin(B);
}
}, 60 );
B.t = setInterval(function(){
global A, B;
auto(B);
if (!move(B)) {
isWin(A);
}
}, 50);
ev = EV1527(9,SYS.pin("D5"),function(data){
//print(this.parse(data)+"\n");
arr = this.parse(data);
global B;
B.dir = arr[1];
});
/*
项目名称: ABC_Game
创建时间: 2020年7月25日
*/
oled = OLED({
"addr":0x78,
"scl":SYS.pin("D1"),
"sda":SYS.pin("D2")
});
oled.show(0,0,"A:00 B:00");
A = {
"pos":[8,2],
"dir":1,
"char":"A",
"score":0,
"t":0
};
B = {
"pos":[120,4],
"dir":2,
"char":"B",
"score":0,
"t":0
};
sa(A);
sa(B);
C = {
"pos":[24,4],
"char":"C"
};
function ca(obj)
{
global oled;
oled.show(obj.pos[0], obj.pos[1], " ");
}
function sa(obj)
{
global oled;
oled.show(obj.pos[0], obj.pos[1], obj.char);
}
function formatNum(n)
{
return n < 10 ? "0"+n : String(n);
}
function isWin(obj)
{
global oled, A, B;
oled.show(0,0," ");
oled.show(0,0,obj.char+"胜利!");
clearInterval(A.t);
clearInterval(B.t);
}
function addScore(c)
{
global oled, A, B, C;
condition = 100;
if (c.char === "B") {
++B.score;
} else {
++A.score;
}
if (A.score >= condition && B.score < condition) {
isWin(A);
} else if (A.score < condition && B.score >= condition) {
isWin(B);
} else {
oled.show(0, 0, "A:"+formatNum(A.score)+" B:"+formatNum(B.score));
}
}
function showC(obj)
{
global A, B;
ca(obj);
x = Math.rand(0,15) * 8;
y = Math.rand(1,3) * 2;
while ((x === A.pos[0] && y === A.pos[1]) || (x === B.pos[0] && y === B.pos[1])) {
x = Math.rand(0,15) * 8;
y = Math.rand(1,3) * 2;
}
obj.pos[0] = x;
obj.pos[1] = y;
sa(obj);
}
showC(C);
function move(obj)
{
global C;
ca(obj);
if (obj.dir === 8) {
obj.pos[1] -= 2; //上
} else if (obj.dir === 1) {
obj.pos[0] += 8; //右
} else if (obj.dir === 4) {
obj.pos[1] += 2; //下
} else if (obj.dir === 2) {
obj.pos[0] -= 8; //左
}
if (obj.pos[0] < 0 || obj.pos[0] > 120 || obj.pos[1] < 2 || obj.pos[1] > 6) {
clearInterval(obj.t);
return false;
}
if (obj.pos[0] === C.pos[0] && obj.pos[1] === C.pos[1]) {
//吃到C了
addScore(obj);
sa(obj);
//重新计算C的位置并显示
showC(C);
}
sa(obj);
//print(SYS.heapSize()+"\n");
return true;
}
function auto(obj)
{
global C;
if (C.pos[0] === obj.pos[0] && C.pos[1] > obj.pos[1]) {
obj.dir = 4; //C在对象正下方,自动向下
} else if (C.pos[0] === obj.pos[0] && C.pos[1] < obj.pos[1]) {
obj.dir = 8; //C在对象正上方,自动向上
} else if (C.pos[0] > obj.pos[0] && C.pos[1] === obj.pos[1]) {
obj.dir = 1; //C在对象右边,自动向右
} else if (C.pos[0] < obj.pos[0] && C.pos[1] === obj.pos[1]) {
obj.dir = 2; //C在对象左边,自动向左
} else if (C.pos[0] > obj.pos[0] && C.pos[1] > obj.pos[1]) {
obj.dir = 4; //C在对象右下边,先自动向下
} else if (C.pos[0] > obj.pos[0] && C.pos[1] < obj.pos[1]) {
obj.dir = 1; //C在对象右上边,先自动向右
} else if (C.pos[0] < obj.pos[0] && C.pos[1] < obj.pos[1]) {
obj.dir = 8; //C在对象左上边,先自动向上
} else if (C.pos[0] < obj.pos[0] && C.pos[1] > obj.pos[1]) {
obj.dir = 2; //C在对象左下边,先自动向左
}
}
A.t = setInterval(function(){
global A, B;
auto(A);
if (!move(A)) {
isWin(B);
}
}, 60 );
B.t = setInterval(function(){
global A, B;
auto(B);
if (!move(B)) {
isWin(A);
}
}, 50);
ev = EV1527(9,SYS.pin("D5"),function(data){
//print(this.parse(data)+"\n");
arr = this.parse(data);
global B;
B.dir = arr[1];
});