在BAS文件中调用另一个BAS的方法(动态字节码加载)


在BAS文件中调用另一个BAS的方法
原作者:houjie
[原创]用gvbasic+的run命令实现程序间的跳转.
如下面这几个程序.
程序a
graph:print "ok!"
v$=inkey$:poke 4650,asc(v$)
run "b"
程序b
print chr$(peek(4650))
end
这样,你按的键会打印到屏幕上.
这只是一个小例子.做几个入口,以4650-5100为变量,可以方便的跳转.
我即将推出的游戏就采用了这种手法,几个程序加起来有30k左右,但是速度快多了,不用在为大于9k的程序非得用慢如牛助手而发愁了!
[原创]在纯gvbasic中调用其它程序段的方法。
首先,需要一个基础文件,如:
0 x$="data1":goto 13
1 a$="":b$="":for i=6600 to 15000
2 if peek(i)=65 and peek(i+5)=66 then a=i:goto 4
3 next i
4 return
5 for i=6600 to 15000
6 if peek(i)=245 and peek(i+1)=1 then b=i:goto 8
7 next i
8 return
9 for i=6600 to 15000
10 if peek(i)=100 and peek(i+1)=0 then c=i:goto 12
11 next i
12 return
13 gosub 1:gosub 5:gosub 9:open x$ for random as #1 len=50
14 field #1,50 as y$:for i=1 to (lof(1)-1)/50
15 d=c-52+i*50:e=int(d/256):f=d-e*256
16 poke a+2,f:poke a+3,e:poke a+1,50
17 get #1,i:lset a$=y$
18 next i
19 for i=6600 to 15000
20 if peek(i)=244 and peek(i+1)=1 then u=i:goto 22
21 next i
22 d=int(b-2)/256:e=b-2-d*256:poke u-2,e:poke u-1,d:poke u+2,147
23 goto 100
100 aaaaaaaaaaaaaaaaaaa
110 aaaaaaaaaaaaaaaaaaa
120 aaaaaaaaaaaaaaaaaaa
130 aaaaaaaaaaaaaaaaaaa
500 ......
501 end
如果你想调用多个程序,那么就在501行输入
501 if x$="data1" then clear:x$="data2':goto 13
502 ...
503 end
下面是data生成程序
0 clear:x$="data1":goto 13
1 a$="":b$="":for i=6600 to 15000
2 if peek(i)=65 and peek(i+5)=66 then a=i:goto 4
3 next i
4 return
5 for i=6600 to 15000
6 if peek(i)=245 and peek(i+1)=1 then b=i:goto 8
7 next i
8 return
9 for i=6600 to 15000
10 if peek(i)=100 and peek(i+1)=0 then c=i:goto 12
11 next i
12 return
13 gosub 1:gosub 5:gosub 9:open x$ for random as #1 len=50
14 field #1,50 as y$:for i=1 to (b-c)/50+1
15 d=c-52+i*50:e=int(d/256):f=d-e*256
16 poke a+2,f:poke a+3,e:poke a+1,50
17 lset y$=a$:put #1,i
18 next i
19 clear:end
100 从100行到500行就是程序了。
500 rem
501 end
改动13行就可以生成其他data了。
用这两种方法速度十分快,不会有延迟。也不用建临时文件。

首先是三个搜索,作用是找出纯basic环境下的变量存储地址,第一个搜索是查机型。第二、三个搜索是为了找出行号100和501的位置,载入前找到。将其poke成0是为了方便写入和防止出现行号错误。载入后还原,就可以运行程序了。
如果是定地址存储。那么这样就可以



 

你可能感兴趣的:(游戏,C++,c,C#,F#)