QB实现Matrix字幕

那段时间因为《Matrix》的火热,所以都流行用程序做出那种字幕效果。

我就用QB做了个,02年做的。

Matrix

CONST MatrixTextStreamLength% = 15  'REM 0<It<MaxColor

CONST LowestSpeed! = .3             'REM The lowest speed

CONST TextStreamCount% = 20         'REM Count of text streams



TYPE MatrixTextStreamType

    X AS INTEGER

    Y AS SINGLE

    Speed AS SINGLE

    Text AS STRING * MatrixTextStreamLength

END TYPE



CONST ScreenMode% = 12              'REM G:640*480*16, T:80*30

CONST ScreenTextWidth% = 80

CONST ScreenTextHeight% = 30

CONST FALSE% = 0

CONST TRUE% = NOT FALSE



DECLARE FUNCTION UpdateTextStream% (TextStream AS MatrixTextStreamType)

DECLARE SUB DisplayTextStream (TextStream AS MatrixTextStreamType)

DECLARE SUB GenerateTextStream (TextStream AS MatrixTextStreamType)

DECLARE SUB ChangeText (TextStream AS MatrixTextStreamType)

DECLARE SUB GenerateMatrixPalette ()



DIM MatrixTextStream(TextStreamCount) AS MatrixTextStreamType



SCREEN ScreenMode

CLS



DIM Count AS INTEGER



FOR Count = 1 TO TextStreamCount

    GenerateTextStream MatrixTextStream(Count)

NEXT



GenerateMatrixPalette



WHILE INKEY$ <> CHR$(27)

    FOR Count = 1 TO TextStreamCount

        DisplayTextStream MatrixTextStream(Count)

        IF UpdateTextStream(MatrixTextStream(Count)) THEN

            GenerateTextStream MatrixTextStream(Count)

        END IF

    NEXT

WEND



END



SUB ChangeText (TextStream AS MatrixTextStreamType)



    DIM Count AS INTEGER

    DIM TempText AS STRING



    RANDOMIZE TIMER

    FOR Count = 1 TO MatrixTextStreamLength - 1

        TempText = TempText + CHR$(RND * 222 + 33)

    NEXT



    TextStream.Text = " " + TempText



END SUB



SUB DisplayTextStream (TextStream AS MatrixTextStreamType)



    DIM Count AS INTEGER

    DIM CharX AS INTEGER, CharY AS SINGLE



    FOR Count = 1 TO MatrixTextStreamLength



        CharX = TextStream.X

        CharY = TextStream.Y + Count



        IF CharY < ScreenTextHeight + 1 AND CharY > 1 THEN

            IF CharX <= ScreenTextWidth AND CharX > 0 THEN

                LOCATE INT(CharY), CharX

                COLOR (MatrixTextStreamLength - Count + 1)

                PRINT MID$(TextStream.Text, Count, 1);

            END IF

        END IF



    NEXT



END SUB



SUB GenerateMatrixPalette

    DIM Count AS INTEGER

    DIM Red AS INTEGER, Green AS INTEGER, Blue AS INTEGER



    FOR Count = 1 TO MatrixTextStreamLength

        Red = 0

        Green = 63 - (Count - 1) * (64 / MatrixTextStreamLength)

        Blue = 43 - (Count - 1) * (44 / MatrixTextStreamLength)

        PALETTE Count, Red + Green * 256 + Blue * 65536

    NEXT



END SUB



SUB GenerateTextStream (TextStream AS MatrixTextStreamType)

    

    RANDOMIZE TIMER

    TextStream.X = INT(RND * ScreenTextWidth) + 1

    TextStream.Y = -RND * MatrixTextStreamLength

    TextStream.Speed = RND + LowestSpeed

    ChangeText TextStream



END SUB



FUNCTION UpdateTextStream% (TextStream AS MatrixTextStreamType)



    TextStream.Y = TextStream.Y + TextStream.Speed

    ChangeText TextStream

    IF TextStream.Y > ScreenTextHeight + 1 THEN

        UpdateTextStream = TRUE

        EXIT FUNCTION

    END IF

    UpdateTextStream = FALSE



END FUNCTION
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值