ASCIIArt 版 (精华区)
发信人: oasis (还没想好), 信区: ASCIIArt
标 题: 制作三维画源程序
发信站: 哈工大紫丁香 (Wed Sep 15 07:51:48 1999), 转信
发信人: oasis (还没想好), 信区: miscellany
发信站: 哈工大紫丁香 (Tue Sep 14 11:19:01 1999), 转信
发信人: yanzi (燕子), 信区: ASCIIart
发信站: 饮水思源站 (Mon Jul 26 11:27:52 1999) , 站内信件
' 三维画,文本版
' 程序设计:刘红石
' 我的个人主页 http://home.baoding.cn.net/~zhiping/ 中的文本版三维画
' 就是用此程序生成
' 文本三维画就是利用字符方式生成的三维画,它简单、制做容易,
' 但显示的信息较少,只有远近两个层次,我编写了一个QBASIC程序
' 用于生成这样的三维画,通过分析程序可明白三维画的原理。
CONST NO = 999, W = 5, maxx = 40, maxy = 24, MAXZ = 1
'定义一些常量, NO一个标志,W宽度,MAXX最大X,MAXY最大Y,MAXZ三维画最大高度
DIM dot(maxx, 2) AS INTEGER
DIM hf$(maxy)
'存放三维画高度的数组
DIM cc$(maxx)
DIM LEFTX AS INTEGER, RIGHTX AS INTEGER, tmpX AS INTEGER
'以下程序段读入三维画高度数据,具体数据见程序最后
DEFINT A-Z
FOR i = 1 TO maxy
READ hf$(i)
NEXT i
'在屏幕上随机显示字符
CLS
RANDOMIZE TIMER
FOR i = 1 TO maxx * maxy
'如果是汉字环境
PRINT CHR$(&HB0 + RND * 24); CHR$(&HB0 + RND * 60);
'否则这样
' PRINT CHR$(33 + RND * 80); CHR$(33 + RND * 80);
NEXT
FOR y = 1 TO maxy '从屏幕的第1行到MAXY行
FOR x = 1 TO maxx '从屏幕的第1列到MAXX列
dot(x, 1) = NO
dot(x, 2) = NO
IF x + W <= maxx THEN dot(x, 1) = x + W
IF x - W >= 1 THEN dot(x, 2) = x - W
NEXT x
'下面程序是关键,依据高度计算左右眼对应的点
FOR x = 1 TO maxx
LEFTX = x - W \ 2
RIGHTX = x + W \ 2
IF MID$(hf$(y), x, 1) = "1" AND (LEFTX >= 1) AND (RIGHTX <= maxx) THEN
IF dot(LEFTX, 1) <> NO THEN dot(dot(LEFTX, 1), 2) = NO
dot(LEFTX, 1) = RIGHTX
IF dot(RIGHTX, 2) <> NO THEN dot(dot(RIGHTX, 2), 1) = NO
dot(RIGHTX, 2) = LEFTX
END IF
NEXT x
FOR x = 1 TO maxx '以下程序段画出生成的一行三维图形
IF dot(x, 2) = NO THEN
cc$(x) = CHR$(SCREEN(y, x * 2 - 1)) + CHR$(SCREEN(y, x * 2))
tmpX = x
DO WHILE dot(tmpX, 1) <> NO
tmpX = dot(tmpX, 1)
cc$(tmpX) = CHR$(SCREEN(y, x * 2 - 1)) + CHR$(SCREEN(y, x * 2))
LOOP
END IF
LOCATE y, x * 2 - 1: PRINT cc$(x);
NEXT x
NEXT y '继续进行下一行,直到完成
DO
LOOP UNTIL INKEY$ <> ""
END '程序结束
'三维画高度数据
DATA 0000000000000000000000000000000000000
DATA 0000000000000000000000000000000000000
DATA 0000000001110000000000000011100000000
DATA 0000000000111000000000000011100000000
DATA 0000000000011100000000000011100000000
DATA 0000000000000000000001110011100000000
DATA 0000111111111111111001110011100000000
DATA 0000111111111111111001110011100000000
DATA 0000000000000011100001110011100000000
DATA 0000000011000111000001110011100000000
DATA 0000000111000111000001110011100000000
DATA 0000000011100111000001110011100000000
DATA 0000000001111110000001110011100000000
DATA 0000000000111110000001110011100000000
DATA 0000000000011100000001110011100000000
DATA 0000000000111111000001110011100000000
DATA 0000000001111111100001110011100000000
DATA 0000000011110011100000000011100000000
DATA 0000000111100001110000000011100000000
DATA 0000011111000001110000000011100000000
DATA 0000011100000000000000011111100000000
DATA 0000000000000000000000001111000000000
DATA 0000000000000000000000000000000000000
DATA 0000000000000000000000000000000000000
' 输出结果
刘红石网上刘红石网上刘红石网上刘红石网上刘红石网上刘红石网上刘红石网上刘
之家三维画之家三维画之家三维画之家三维画之家三维画之家三维画之家三维画之
峨揉颗恼部峨揉颗恼部峨颗恼部钦峨颗恼部钦峨颗恼部钦峨颗恼钦峨颗扯恼钦峨颗
惦怀能蓟徘惦怀能蓟徘惦怀蓟徘惦儒怀蓟徘惦儒怀蓟徘惦儒怀蓟惦儒怀词蓟惦儒怀
灰哄乘驾轿灰哄乘驾轿灰哄乘轿灰哄敢乘轿灰哄敢乘轿灰哄敢乘灰哄敢虫乘灰哄敢
范帕角茨撇范帕角茨撇范帕角茨撇范帕角茨撇范帕角撇范帕观角范帕观滤角范帕观
彻惩关部曹彻关部曹彻关部曹彻关部曹彻关部曹炔彻部曹炔履彻曹炔履熬彻曹炔履
酪娟弛泊剐酪弛泊剐酪弛泊剐酪弛泊剐酪弛泊剐撤酪泊剐撤疵酪剐撤疵操酪剐撤疵
侨参扛笛蛔侨参扛笛蛔侨参扛笛蛔侨扛笛蛔镁侨扛笛镁侨扛炊笛侨扛炊固笛侨扛炊
窗静你锣诚窗静你锣诚静你宠锣诚你宠锣肩诚你宠锣诚你宠铰锣你宠铰鞠锣你宠铰
藐糕嘲反煎藐糕嘲反藐糕嘲韭反藐嘲韭反痕藐嘲韭反藐嘲韭光反嘲韭光辣反嘲韭光
级牌请黎曝级牌请黎曝牌请黎焊曝请黎焊蹭曝请黎焊曝请黎裴焊请黎裴那焊请黎裴
雇侨邓腔堑雇侨邓腔堑雇邓腔堑雇邓腔绒堑雇邓腔绒雇邓腔矩绒邓腔矩悸绒邓腔矩
酵炬睦哄荚酵炬睦哄荚酵炬哄荚酵炬哄嫉荚酵炬哄嫉酵炬哄覆嫉炬哄覆官嫉炬哄覆
贾嵌痴烂胯贾嵌痴烂胯贾嵌痴胯贾嵌眯痴胯贾嵌眯痴贾嵌眯催痴嵌眯催观痴嵌眯催
轻课夸汲辣轻课夸汲辣轻课汲辣轻课汲辣捞轻课汲辣轻课汲返辣课汲返玲辣课汲返
频搞醋颁洞频搞醋颁洞频醋颁洞频醋颁洞频捍醋颁洞捍醋颁改洞醋颁改秘洞醋颁改
哭捕伶烩缎哭捕伶烩缎捕伶烩缎矩捕烩缎矩咆捕烩缎矩咆捕烩缎咆捕烩够缎咆捕烩
凰葱寇伎栏凰葱寇伎凰葱寇伎怯凰葱寇怯凰葱漆寇怯凰葱漆寇怯葱漆寇敢怯葱漆寇
峨闭敢淖氢峨闭淖氢峨闭淖内氢峨闭淖氢峨闭冀淖氢峨闭冀淖氢闭冀淖偶氢闭冀淖
粕坏卤夸泪粕坏夸泪粕婪坏夸泪粕婪坏夸泪粕婪坏夸泪粕坏夸泪粕坏夸监泪粕坏夸
婪鸿渺寸恳婪鸿渺寸恳婪鸿渺寸恳婪鸿渺寸恳婪鸿渺寸恳婪渺寸恳婪咆渺寸恳婪咆
白肚淖确寝白肚淖确寝白肚淖确寝白肚淖确寝白肚淖确寝白肚淖确寝白肚淖确寝白
库搁古潜惹库搁古潜惹库搁古潜惹库搁古潜惹库搁古潜惹库搁古潜惹库搁古潜惹库
--
一步一步,一生的收获就是可以期待的
※ 来源:·饮水思源站 bbs.sjtu.edu.cn·[FROM: 202.120.26.1]
--
--
※ 转寄:.武汉白云黄鹤站 bbs.whnet.edu.cn.[FROM: 202.118.243.36]
--
※ 修改:.oasis 于 Sep 15 07:51:48 修改本文.[FROM: witness.hit.edu.]
--
※ 转寄:.紫 丁 香 bbs.hit.edu.cn.[FROM: witness.hit.edu.]
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: oasis.bbs@bbs.hit.ed]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.577毫秒