批量法滚屏的详解
先得了解文曲星的屏幕,为159*80,存图是每横向8个点为一个元素,因此一行有160/8=20个元素(注:第一个元素只有7个点,因此一行是159个点)。那么整屏总共是20*80=1600个元素,每个元素用一个数据存储,所以一个图形的数据文件就是1600大小。
下面直接以滚屏程序讲解。
(一)安装程序:
0 :
5 PRINT "正准备安装..."
(首先搞清,A$--H$八个字串是用来表示屏幕的。而Z$()二十四个字串是用来存图的。)
10 A$="":B$="":C$="":D$="":E$="":F$="":G$="":H$=""
(在这里定义八个字串,在后面运用批量法时,会将它们定义为每个字串都为200的大小,那么八个就1600的大小,正好可以表示一个屏幕的数据)
14 DIM Z$(24)
(因为是滚屏,页面不止一页大小。每个数组长为200,那自然不能只用8个字串表示,在这里Z$()字串数组总共有24个,用来表示24/8即3张图的数据。)
15 Z$(1)="AAAAAAAAAAAAAAAAAAAAAAAAA":Z$(1)=Z$(1)+Z$(1):Z$(1)=Z$(1)+Z$(1)+Z$(1)+Z$(1)
(在这里可以看到,Z$()串长是200——200个"a"的长度啦)
17 FOR J=2 TO 24:Z$(J)=Z$(1):NEXT
(这里就是把24个字串都定义成大小为200)
18 PRINT "划分显存"
20 FOR I=0 TO 7
30 PO=2496+200*I:HI=INT(PO/256):LO=PO-HI*256
40 POKE 49154+5*I,200
50 POKE 49155+5*I,LO
60 POKE 49156+5*I,HI
70 NEXT
(20--70行就是批量法的关键所在。我们看到了显存地址2496和批量法地址49154,大家不必管它是为什么,只要知道,这是在为A$--H$指明身荩鞘怯美幢硎酒聊皇莸摹A硗猓?0行是定义那些字串的大小的,为200。)
80 CLS :M=1
RINT "上下滚屏程序" :CIRCLE 80,40,20,1,1 :BOX 30,30,80,80,1,2
(在一个屏幕上画了个图,三页都一样。)
230 LSET Z$(M)=A$
240 LSET Z$(M+1)=B$
250 LSET Z$(M+2)=C$
260 LSET Z$(M+3)=D$
270 LSET Z$(M+4)=E$
280 LSET Z$(M+5)=F$
290 LSET Z$(M+6)=G$
300 LSET Z$(M+7)=H$
(好了,既然A$--H$是用来表示屏幕数据的,那么把这些数据转让给Z$()数组就可以用来保存了。)
320 IF M<17 THEN M=M+8:GOTO 230
(因为是滚屏,所以用了循环,把每一屏的数据分别存入一定的数组里。)
327 OPEN "sWORD" FOR OUTPUT AS#1:CLOSE#1
330 OPEN "sWORD" FOR RANDOM AS#1 LEN=100:FIELD#1,100 AS I$
335 PRINT "安装中..."
340 FOR I=1 TO 24
350 LSET I$=LEFT$(Z$(I),100):PUT#1,2*I-1:LSET I$=RIGHT$(Z$(I),100):PUT#1,2*I
360 LOCATE 1,12:PRINT INT(100*I/24);"%"
370 NEXT
380 BEEP:BEEP
390 CLS
RINT "安装完毕。";
410 PRINT "用UP&DOWN载入sWORD.dat进行演示";
(这里就是用random文件存图了,就是把Z$()数组里的数据存入文件中。因为random最大支持串长为120多,存一个长200的字串是不行的,因此把一个字串分成了两个,用LEFT$和RIGHT$存。)
以上就是滚屏的图形数据的存储了,其实就是把几张图的数据连续的存入文件中。
下面来说说滚屏的原理吧,滚屏当然是一行点一行点的滚屏啦。以向下滚为例,滚一行,实际就是原来屏幕上面增加了一行,下面减少了一行。这一行的数据大小大家都知道,为20。可以用一个数组表示,本程序见85,86行,就是J$和Y$,它们有20个A,就是20的长度。
运行程序:
0 :
20 GRAPH:DIM A$(16):A$="":B$="":C$="":D$="":E$="":F$="":G$="":H$=""
30 LOCATE 3,6
RINT "Loading...":FOR I=0 TO 7
40 PO=2496+I*200:HI=INT(PO/256):LO=PO-HI*256
50 POKE 49154+I*5,200
60 POKE 49155+I*5,LO
70 POKE 49156+I*5,HI
80 NEXT
81 GOTO 1000
85 J$="AAAAAAAAAAAAAAAAAAAA":FOR I=1 TO 9:K$=J$+K$:NEXT
86 Y$="AAAAAAAAAAAAAAAAAAAA":FOR I=1 TO 9:X$=X$+Y$:NEXT
88 OPEN "sWORD" FOR RANDOM AS#1 LEN=20 :FIELD #1,20 AS I$
89 P=0 :N=80 :GOTO 2000
90 IF P=1 AND N>1 THEN N=N-1 :GET #1,N :GOTO 95
91 IF P=2 AND N>=81 THEN N=N-80:GET #1,N ELSE BEEP:GOTO 2000
95 LSET J$=RIGHT$(G$,20):LSET K$=LEFT$(H$,180):LSET H$=J$+K$
100 LSET J$=RIGHT$(F$,20):LSET K$=LEFT$(G$,180):LSET G$=J$+K$
110 LSET J$=RIGHT$(E$,20):LSET K$=LEFT$(F$,180):LSET F$=J$+K$
120 LSET J$=RIGHT$(D$,20):LSET K$=LEFT$(E$,180):LSET E$=J$+K$
130 LSET J$=RIGHT$(C$,20):LSET K$=LEFT$(D$,180):LSET D$=J$+K$
140 LSET J$=RIGHT$(B$,20):LSET K$=LEFT$(C$,180):LSET C$=J$+K$
150 LSET J$=RIGHT$(A$,20):LSET K$=LEFT$(B$,180):LSET B$=J$+K$
160 LSET J$=RIGHT$(I$,20):LSET K$=LEFT$(A$,180):LSET A$=J$+K$
175 IF PEEK(PK1)<>PK2 THEN GOTO 2000 ELSE P=1 :90
1000 FOR Q=1 TO 16
1010 A$(Q)="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA":A$(Q)=A$(Q)+A$(Q)
1020 NEXT Q
1030 OPEN "sWORD" FOR RANDOM AS #1 LEN=100
1040 FIELD #1,100 AS Q$
1050 FOR I=1 TO 16
1060 GET #1,I
1070 LSET A$(I)=Q$
1080 NEXT I
1090 CLOSE #1 :CLS
1100 LSET A$=A$(1)+A$(2):LSET B$=A$(3)+A$(4):LSET C$=A$(5)+A$(6):LSET D$=A$(7)+A$(8)
1110 LSET E$=A$(9)+A$(10):LSET F$=A$(11)+A$(12):LSET G$=A$(13)+A$(14):LSET H$=A$(15)+A$(16)
1120 GOTO 85
2000 Z=ASC(INKEY$)
2005 IF Z=27 THEN CLOSE #1
OKE 199,155
2020 IF Z=20 AND P=0 THEN BEEP:GOTO 2000
2025 IF Z=20 AND P=1 OR Z=20 AND P=2 THEN P=1
K1=193
K2=247 :GOTO 90
2026 IF Z=20 AND P=3 OR Z=20 AND P=4 THEN P=2
K1=193
K2=247 :GOTO 90
2034 IF Z=21 AND P=0 THEN P=3
K1=192
K2=247 :GOTO 3000
2035 IF Z=21 AND P=3 OR Z=21 AND P=4 THEN P=3
K1=192
K2=247 :GOTO 3000
2036 IF Z=21 AND P=1 OR Z=21 AND P=2 THEN P=4
K1=192
K2=247 :GOTO 3000
2040 BEEP:GOTO 2000
3000 IF P=3 AND N<240 THEN N=N+1 :GET #1,N :GOTO 3010
3005 IF P=4 AND N<=160 THEN N=N+80 :GET #1,N ELSE BEEP:GOTO 2000
3010 LSET X$=RIGHT$(A$,180):LSET Y$=LEFT$(B$,20):LSET A$=X$+Y$
3020 LSET X$=RIGHT$(B$,180):LSET Y$=LEFT$(C$,20):LSET B$=X$+Y$
3030 LSET X$=RIGHT$(C$,180):LSET Y$=LEFT$(D$,20):LSET C$=X$+Y$
3040 LSET X$=RIGHT$(D$,180):LSET Y$=LEFT$(E$,20):LSET D$=X$+Y$
3050 LSET X$=RIGHT$(E$,180):LSET Y$=LEFT$(F$,20):LSET E$=X$+Y$
3060 LSET X$=RIGHT$(F$,180):LSET Y$=LEFT$(G$,20):LSET F$=X$+Y$
3070 LSET X$=RIGHT$(G$,180):LSET Y$=LEFT$(H$,20):LSET G$=X$+Y$
3080 LSET X$=RIGHT$(H$,180):LSET Y$=I$:LSET H$=X$+Y$
3090 IF PEEK(PK1)<>PK2 THEN GOTO 2000 ELSE P=3 :GOTO 3000
分享到:
相关推荐
详细的ios上滚屏的效果 以及代码 很清晰
html5滚屏html5滚屏模板。
这种技术我暂且称它为jQuery+Ajax无刷新滚屏加载技术。我们发现图片搜索、新浪微博、QQ空间等将该技术应用得淋漓尽致。 若是想看该网页特效教程 http://www.sucaihuo.com/js/9.html,滚动条下拉到最后,还可以查看...
VB 自动滚屏功能 VB 自动滚屏功能 VB 自动滚屏功能
Html 双击自动滚屏代码Html 双击自动滚屏代码
内容自动向上滚屏显示
可以截滚屏的超强截图软件哦 可以截滚屏的超强截图软件哦 可以截滚屏的超强截图软件哦 可以截滚屏的超强截图软件哦 可以截滚屏的超强截图软件哦
千寻浏览器官网页面滚屏展示特效模板
jquery 插件,实现多种不同的滚屏操作,
经过调试、修改,完全可以使用的图片滚屏代码。
单片机课程滚屏现实,c编译的一个程序,对于有需要的朋友可以看看
实现双击自动滚屏的JS代码 实现双击自动滚屏的JS代码 实现双击自动滚屏的JS代码
全页面横向定位滚屏是一款基于jquery实现的鼠标响应式横向定位滚屏特效代码。
lcd1602滚屏显示,可以显示一些字符,和一些字母、数字,源代码公布
如何实现自动滚屏功能VB.NET 如何实现自动滚屏功能VB.NET
js 特效 html 特效 文本自动滚屏 js 特效 html 特效 文本自动滚屏
很小巧的txt滚屏小工具,但不只限于txt,还有其他。
可以滚屏截屏的工具,很好使,及时有滚动条我们也可以轻而易举的把想截的图搞到手
非常简单的win32滚屏动画。 适用于初学者!
CSS3纵向滚屏翻页bootstrap模板_纵向 滚屏 翻页 bootstrap css3动画 幻灯 单页.zipCSS3纵向滚屏翻页bootstrap模板_纵向 滚屏 翻页 bootstrap css3动画 幻灯 单页.zip