Chinaunix

标题: 修复 shell版俄罗斯方块 的bug [打印本页]

作者: yjfkdm    时间: 2003-10-29 21:49
标题: 修复 shell版俄罗斯方块 的bug
游戏只能消除一半的满行,(如果有两行要消除,只能消除一行,如果有三行,只能消除两行,如果有五行,只能消除三行。。。)
下面是修改过的Box2Map()函数,在里面增加了一行((j += iTrayWidth))
function Box2Map()
{
local j i x y xp yp line
for ((j = 0; j < 8; j += 2))
do
((i = j + 1))
((y = ${boxCur[$j]} + boxCurY))
((x = ${boxCur[$i]} + boxCurX))
((i = y * iTrayWidth + x))
iMap[$i]=$cBoxCur
done

line=0

for ((j = 0; j < iTrayWidth * iTrayHeight; j += iTrayWidth))
do
for ((i = j + iTrayWidth - 1; i >= j; i--))
do
if ((${iMap[$i]} == -1)); then break; fi
done
if ((i >= j)); then continue; fi

((line++))
for ((i = j - 1; i >= 0; i--))
do
((x = i + iTrayWidth))
iMap[$x]=${iMap[$i]}
done
for ((i = 0; i < iTrayWidth; i++))
do
iMap[$i]=-1
done
((j += iTrayWidth)) #增加了这一行
done

if ((line == 0)); then return; fi

((x = iLeft + iTrayWidth * 2 + 7))
((y = iTop + 11))
((iScore += line * 2 - 1))
echo -ne "\33[1m\33[3${cScoreValue}m\33[${y};${x}H${iScore} "
if ((iScore % iScoreEachLevel < line * 2 - 1))
then
if ((iLevel < 20))
then
((iLevel++))
((y = iTop + 14))
echo -ne "\33[3${cScoreValue}m\33[${y};${x}H${iLevel} "
fi
fi
echo -ne "\33[0m"


for ((y = 0; y < iTrayHeight; y++))
do
((yp = y + iTrayTop + 1))
((xp = iTrayLeft + 1))
((i = y * iTrayWidth))
echo -ne "\33[${yp};${xp}H"
for ((x = 0; x < iTrayWidth; x++))
do
((j = i + x))
if ((${iMap[$j]} == -1))
then
echo -ne " "
else
echo -ne "\33[1m\33[7m\33[3${iMap[$j]}m\33[4${iMap[$j]}m[]\33[0m"
fi
done
done
}

作者: 飞灰橙    时间: 2003-11-03 18:48
标题: 修复 shell版俄罗斯方块 的bug
A very serious bug, thank you!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2