一个JS的问题,绕不过去了。

2012-10-21 11:17:02 +08:00
 Dummy
刚学JS编程, 哥哥给出了道JS的题,有个思考绕不过去,求指点:

有四张卡片,每张都有正反面。
程序开始执行,五秒后第一张卡片翻面,过五秒再翻回来,再过10秒下一张卡片翻面,也是五秒之后再翻回来...

依次类推到第四次卡片翻回来之后,再翻第一张卡片。。

怎么用卡片翻面的脚本应该很简单就不求解了,只想请教一下这个逻辑怎么写?

请V2EX的同学能够帮助一下我。
4001 次点击
所在节点    JavaScript
11 条回复
hyq
2012-10-21 11:40:14 +08:00
http://gist.github.com/3925580
不知道这个是不是你想要的
54sword
2012-10-21 12:11:23 +08:00
//true 正面, false 反面
var card = ['false', 'false', 'false', 'false'];
var index = 0;
function startTurnCard() {
if (index == card.length) index = 0;
var time = 5000 * index;
setTimeout(function() {
card[index] = true;
console.log((index + 1) + "卡片被翻到正面");
setTimeout(function() {
card[index] = false;
console.log((index + 1) + "卡片被翻回反面");
index++;
startTurnCard();
}, 5000);
}, 5000 + time);
}
startTurnCard();

也尝试写了一下,看看是否正确。
zhangxiao
2012-10-21 13:44:21 +08:00
// 第一个函数,负责翻一张卡片,参数是卡片
f1(card_id) {
//翻卡片
}

// 第二个函数,负责每隔5s调用第一个函数,参数是卡片和调用次数(这里是2)
f2(card_id, times) {
for i in [0..times]
f1(card_id)
sleep(5)
}

// 第三个函数,负责每隔10s调用第二个函数,参数是卡片们
f3(card_ids) {
while true
for i in [0..card_ids.length]
f2(card_ids[i])
}

都是伪代码,逻辑应该能表示清楚了
zhangxiao
2012-10-21 13:45:22 +08:00
呃...上面的f3里忘记sleep(10)了
Dummy
2012-10-21 13:51:09 +08:00
@hyq 结果不对。

5.002 "卡片0正面"
10.004 "卡片0反面"
20.007 "卡片1正面"
25.009 "卡片1反面"
40.011 "卡片2正面" //这儿好像不对,应该是 35才对。。
hyq
2012-10-21 16:13:33 +08:00
@Dummy 那个时间的序列是 5 5 10 5 10 5 10 5...?
Dummy
2012-10-21 16:46:54 +08:00
@hyq 以下是你的程序算出的结果:

5.001 "卡片0正面" //正确
10.003 "卡片0反面" //正确
20.005 "卡片1正面" //正确
25.006 "卡片1反面" //正确
40.007 "卡片2正面" //错误,应该是35
45.008 "卡片2反面" //上一个不正确,这一个自然就错了,应该是 40
65.009 "卡片3正面" //应该是 50,原因同上。
hyq
2012-10-21 17:10:15 +08:00
@Dummy 那就是我理解有误,你把order+1全部替换成2就行了
Dummy
2012-10-21 18:03:33 +08:00
@hyq 也不对。
hyq
2012-10-21 20:18:40 +08:00
5 "卡片0正面"
10.001 "卡片0反面"
20.001 "卡片1正面"
25.002 "卡片1反面"
35.002 "卡片2正面"
40.002 "卡片2反面"
50.002 "卡片3正面"
55.002 "卡片3反面"
这个结果,不知道你是指哪里有问题
tshwangq
2012-10-21 22:25:21 +08:00
思路,牌+空档共有3个状态,4张牌12个状态也就是12位
var cards = 0x6db,seq = 0,bits = 12;

window.setInterval(function () {
seq++;
if ((cards & (0x1 << (seq-1) % bits)) > 0) {
console.debug(seq * 5 + ":" + ~~(seq / 3)%4 + "/" + ((seq % 2) ^ ( ~~(seq / 3)%2)));
} else {
console.debug(seq * 5 + ":");
}
}, 500);

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/50509

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX