📄 clipper.txt
字号:
// "Snake" - A screen Saver for Clipper V5.
//
// Patrick Imbault
// 6 Rue de l'Ecluse
// 77000 MELUN
// FRANCE
// CIS:100012,1450
//
// call SNAKE() to use it, it returns always .T.
// compile CLIPPER snake /N /W
#Define SPEED .1
#Define LMAX 15
#Define FRAC(x) (x - INT(x))
#Define S_SNAKE(x) (SUBSTR(CHR(176) + CHR(177) + CHR(178) + CHR(219), x, 1))
#Define SIGN(x) IIF(x > 0, 1, IIF(x < 0, -1, 0))
STATIC seed
FUNCTION SNAKE
LOCAL i, nXd := 0, nYd := 0, nLon, nDiff, nAvis, nForm, nLon2, nP, nP2
LOCAL cSc, nrow := row(), ncol := col(), anc_cu
seed := FRAC(seconds() / 1000)
nP := ARRAY(LMAX, 2)
nP[1, 1] := 40
nP[1, 2] := 12
nAvis := MAX(5, alea(LMAX))
nForm := MAX(5, alea(LMAX))
cDir(@nXd, @nYd)
nLon := MAX(4, alea(10))
nLon2 := nLon
FOR i := 2 TO nLon
nP[i, 1] := nP[1, 1]
nP[i, 2] := nP[1, 2] - (i - 1)
NEXT i
cSc := savescreen(0, 0, maxrow(), maxcol())
CLEAR SCREEN
anc_cu := setcursor(0)
sdisp(nP, nLon)
DO WHILE inkey(SPEED) == 0
if nAvis-- < 0
nAvis := MAX(5, alea(LMAX))
cdir(@nXd, @nYd)
endif
if nForm-- < 0
nForm := MAX(5, alea(LMAX))
nLon2 := MAX(4, alea(10))
ENDIF
sundisp(nP, nLon)
nDiff := nLon2 - nLon
cPos(@nP, @nXd, @nYd, nLon, nDiff > 0)
nLon += SIGN(nDiff)
sdisp(nP, nLon)
ENDDO
restscreen(0, 0, maxrow(), maxcol(), cSc)
setcursor(anc_cu)
setpos(nrow, ncol)
RETURN .T.
FUNCTION sundisp(nP, nLon)
LOCAL j
FOR j := 1 TO nLon
@ nP[j, 2], nP[j, 1] say " "
NEXT j
RETURN NIL
FUNCTION sdisp(nP, nLon)
LOCAL i := 1, j
FOR j := nLon TO 1 STEP -1
@ nP[j, 2], nP[j, 1] say REPLICATE(S_SNAKE(INT(i)), 2)
i += (4 / nLon)
NEXT j
RETURN NIL
FUNCTION cpos(nPa, nXd, nYd, nLon, inc)
LOCAL i, x, y
x := nPa[1, 1] + nXd
y := nPa[1, 2] + nYd
DO WHILE x < 0 .OR. x > MAXCOL() .OR. y < 0 .OR. y > MAXROW()
cdir(@nXd, @nYd)
x := nPa[1, 1] + nXd
y := nPa[1, 2] + nYd
ENDDO
FOR i := nLon + IIF(inc <> NIL .AND. inc, 1, 0) TO 2 STEP -1
nPa[i, 1] := nPa[i - 1, 1]
nPa[i, 2] := nPa[i - 1, 2]
NEXT i
nPa[1, 1] := x
nPa[1, 2] := y
RETURN NIL
FUNCTION cdir(x, y)
x := alea(3) - 1
y := alea(3) - 1
DO WHILE x = 0 .AND. y = 0
x := alea(3) - 1
y := alea(3) - 1
ENDDO
RETURN NIL
FUNCTION alea(nX)
seed := FRAC(seed * 9821 + .211327)
RETURN INT(seed * nX)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -