主题:屏幕操作语句(教程)
注:下文主要针对SCREEN 12模式下的操作
1.PALETTE 语句
格式:PALETTE n,r+g*256+b*65536 (r,g,b的取值范围为0~63)
功能:改变所用的颜色
说明:该语句适用于SCREEN 11,12,13模式
SCREEN 12模式下的原始颜色
色号 颜色 红色浓度 绿色浓度 蓝色浓度
0 黑 0 0 0
1 篮 0 0 42
2 绿 0 42 0
3 青 0 42 42
4 红 42 0 0
5 洋红 42 0 42
6 棕 42 42 0
7 白 42 42 42
8 灰 21 21 21
9 亮篮 21 21 63
10 亮绿 21 63 21
11 亮青 21 63 63
12 亮红 63 21 21
13 亮粉 63 21 63
14 黄 63 63 21
15 亮白 63 63 63
注:0号色默认为背景色,因而可以通过更改0号色的属性,来改变背景色
例:更改背景色
SCREEN 12
PALETTE 0,63*65536 '以蓝色为背景色
例:灰度比对(按ALT+回车到窗口模式看)
SCREEN 12
j = 0
FOR i = 0 TO 63 STEP 4
PALETTE j, i + i * 256 + i * 65536
j = j + 1
NEXT i
j = 0
FOR i = 0 TO 639 STEP 39
LINE (i, 0)-(i + 39, 200), j, BF
j = j + 1
NEXT i
COLOR 15
FOR i = 0 TO 15
LOCATE 10, 5 * i + 1: PRINT LTRIM$(STR$(4 * i))
NEXT i
例:调色 通过按123,456改变方框内的颜色
SCREEN 12
LINE (100, 100)-(300, 300), 15, BF
r = 63: g = 63: b = 63
COLOR 7
LOCATE 5, 15: PRINT "Press ESC to EXIT!"
LOCATE 22, 18: PRINT "4"; CHR$(24); SPC(4); "5"; CHR$(24); SPC(4); "6"; CHR$(24)
LOCATE 23, 18: PRINT "1"; CHR$(25); SPC(4); "2"; CHR$(25); SPC(4); "3"; CHR$(25)
DO
PALETTE 15, r + g * 256 + b * 65536
COLOR 7: LOCATE 21, 1: PRINT TAB(16); " R"; r; TAB(22); " G"; g; TAB(28); " B"; b
key$ = INKEY$
SELECT CASE key$
CASE "1"
r = r - 1: IF r = -1 THEN r = 0
CASE "2"
g = g - 1: IF g = -1 THEN g = 0
CASE "3"
b = b - 1: IF b = -1 THEN b = 0
CASE "4"
r = r + 1: IF r = 64 THEN r = 63
CASE "5"
g = g + 1: IF g = 64 THEN g = 63
CASE "6"
b = b + 1: IF b = 64 THEN b = 63
CASE CHR$(27)
END
END SELECT
LOOP
2.PAINT 语句的“贴砖”技术(Tiling)
格式:PAINT tile$
说明:使用贴砖技术时,PAINT格式中的"涂色"应当是一个字符传表达式,其一般格式如下:CHR$(自变量1)+CHR$(自变量2)+...+CHR$(自变量n),图案的每一块“砖”是一个矩形,矩形的宽为8位,长最多为64字节
一般说来每个象素所占的位数由下式给出:
每个象素位数=LOG2(属性数)
1。属性数为2 (SCREEN 2,SCREEN 11)
假如我们要定义的图案如同 大写字母M,步骤如下
画出“底图” ,把每一行转换为二进制,再转换为十六进制
* * 10000010 &H82
** ** 11000110 &HC6
* * * * 10101010 &HAA
* * * 10010010 &H92
* * 10000010 &H82
* * 10000010 &H82
* * 10000010 &H82
00000000 &H00
然后再把十六进制数作为ASC码值,用CHR$()连接
Tile$ = CHR$(&H82)+ CHR$(&HC6)+ CHR$(&HAA)+ CHR$(&H92)+ CHR$(&H82)+ CHR$(&H82)+ CHR$(&H82)+ CHR$(&H00)
用PAINT (X,Y),Tile$填充封闭图案
程序如下:
SCREEN 11
Tile$ = CHR$(&H82)+ CHR$(&HC6)+ CHR$(&HAA)+ CHR$(&H92)+ CHR$(&H82)+ CHR$(&H82)+ CHR$(&H82)+ CHR$(&H00)
circle(200,100),80
paint (200,100),Tile$
可以看到圆里填充着M形的图案
2.属性数为4 (SCREEN 1,SCREEN 10, SCREEN 9?)
SCREEN 1下,图案只有4列,每列2位
画出“底图”,
青 洋红 洋红 青 01 10 10 01 &H69 ↓读
洋红 青 青 洋红 ==> 10 01 01 10 ==> &H96 ↓取
洋红 青 青 洋红 10 01 01 10 &H96 ↓顺
青 洋红 洋红 青 01 10 10 01 &H69 ↓序
Tile$ = CHR$(&H69)+ CHR$(&H96)+ CHR$(&H69)+ CHR$(&H96)
程序如下:
SCREEN 1
Tile$ = CHR$(&H69)+ CHR$(&H96)+ CHR$(&H69)+ CHR$(&H96)
circle(200,100),80
paint (200,100),Tile$
可以看到圆里填充着相间的图案
3.属性数为16 (SCREEN 8,SCREEN 12)
在EGA和VGA屏幕方式下,图案砖中的一行由数“层”8位整数组成,因为在“位平面”堆栈中,一个象素是被三维地表示出来的,而不是象SCREEN1和2那样顺序地排在一个单一的平面中。SCREEN 8和12中,由4个这样的位平面。应此,在该屏幕方式下每一个象素占4位,而4位中的每一位都分别位于不同的平面上。
为定义一个由黄色和洋红色交替的图案,可以按如下步骤实现
注:亮黄色属性号为14,二进制为1110;洋红色属性号为5,二进制为0101
(1)定义一行象素
读平面方向
读 → → → → → → → →
象↑1 1 0 0 0 0 1 1 → CHR$(&HC3)↓连
素↑0 0 1 1 1 1 0 0 → CHR$(&H3C)↓接
方↑1 1 1 1 1 1 1 1 → CHR$(&HFF)↓象
向↑0 0 1 1 1 1 0 0 → CHR$(&H3C)↓素
洋 洋 黄 黄 黄 黄 洋 洋
红 红 红 红
row$(1)=row$(2)=CHR$(&HC3)+CHR$(&H3C)+CHR$(&HFF)+CHR$(&H3C)
(2)用同样的方法定义图案砖的另一行
读平面方向
读 → → → → → → → →
象↑0 0 1 1 1 1 0 0 → CHR$(&H3C)↓连
素↑1 1 0 0 0 0 1 1 → CHR$(&HC3)↓接
方↑1 1 1 1 1 1 1 1 → CHR$(&HFF)↓象
向↑1 1 0 0 0 0 1 1 → CHR$(&HC3)↓素
黄 黄 洋 洋 洋 洋 黄 黄
红 红 红 红
row$(3)=row$(4)=CHR$(&H3C)+CHR$(&HC3)+CHR$(&HFF)+CHR$(&HC3)
程序如下:
SCREEN 12
DIM row$(1 TO 4)
row$(1) = CHR$(&HC3) + CHR$(&H3C) + CHR$(&HFF) + CHR$(&H3C)
row$(2) = row$(1)
row$(3) = CHR$(&H3C) + CHR$(&HC3) + CHR$(&HFF) + CHR$(&HC3)
row$(4) = row$(3)
FOR i = 1 TO 4
tile$ = tile$ + row$(i)
NEXT i
LINE (50, 50)-(200, 200), , B
PAINT (100, 100), tile$
3.GET - PUT语句
PSET PRESET XOR AND OR
To be continue...
1.PALETTE 语句
格式:PALETTE n,r+g*256+b*65536 (r,g,b的取值范围为0~63)
功能:改变所用的颜色
说明:该语句适用于SCREEN 11,12,13模式
SCREEN 12模式下的原始颜色
色号 颜色 红色浓度 绿色浓度 蓝色浓度
0 黑 0 0 0
1 篮 0 0 42
2 绿 0 42 0
3 青 0 42 42
4 红 42 0 0
5 洋红 42 0 42
6 棕 42 42 0
7 白 42 42 42
8 灰 21 21 21
9 亮篮 21 21 63
10 亮绿 21 63 21
11 亮青 21 63 63
12 亮红 63 21 21
13 亮粉 63 21 63
14 黄 63 63 21
15 亮白 63 63 63
注:0号色默认为背景色,因而可以通过更改0号色的属性,来改变背景色
例:更改背景色
SCREEN 12
PALETTE 0,63*65536 '以蓝色为背景色
例:灰度比对(按ALT+回车到窗口模式看)
SCREEN 12
j = 0
FOR i = 0 TO 63 STEP 4
PALETTE j, i + i * 256 + i * 65536
j = j + 1
NEXT i
j = 0
FOR i = 0 TO 639 STEP 39
LINE (i, 0)-(i + 39, 200), j, BF
j = j + 1
NEXT i
COLOR 15
FOR i = 0 TO 15
LOCATE 10, 5 * i + 1: PRINT LTRIM$(STR$(4 * i))
NEXT i
例:调色 通过按123,456改变方框内的颜色
SCREEN 12
LINE (100, 100)-(300, 300), 15, BF
r = 63: g = 63: b = 63
COLOR 7
LOCATE 5, 15: PRINT "Press ESC to EXIT!"
LOCATE 22, 18: PRINT "4"; CHR$(24); SPC(4); "5"; CHR$(24); SPC(4); "6"; CHR$(24)
LOCATE 23, 18: PRINT "1"; CHR$(25); SPC(4); "2"; CHR$(25); SPC(4); "3"; CHR$(25)
DO
PALETTE 15, r + g * 256 + b * 65536
COLOR 7: LOCATE 21, 1: PRINT TAB(16); " R"; r; TAB(22); " G"; g; TAB(28); " B"; b
key$ = INKEY$
SELECT CASE key$
CASE "1"
r = r - 1: IF r = -1 THEN r = 0
CASE "2"
g = g - 1: IF g = -1 THEN g = 0
CASE "3"
b = b - 1: IF b = -1 THEN b = 0
CASE "4"
r = r + 1: IF r = 64 THEN r = 63
CASE "5"
g = g + 1: IF g = 64 THEN g = 63
CASE "6"
b = b + 1: IF b = 64 THEN b = 63
CASE CHR$(27)
END
END SELECT
LOOP
2.PAINT 语句的“贴砖”技术(Tiling)
格式:PAINT tile$
说明:使用贴砖技术时,PAINT格式中的"涂色"应当是一个字符传表达式,其一般格式如下:CHR$(自变量1)+CHR$(自变量2)+...+CHR$(自变量n),图案的每一块“砖”是一个矩形,矩形的宽为8位,长最多为64字节
一般说来每个象素所占的位数由下式给出:
每个象素位数=LOG2(属性数)
1。属性数为2 (SCREEN 2,SCREEN 11)
假如我们要定义的图案如同 大写字母M,步骤如下
画出“底图” ,把每一行转换为二进制,再转换为十六进制
* * 10000010 &H82
** ** 11000110 &HC6
* * * * 10101010 &HAA
* * * 10010010 &H92
* * 10000010 &H82
* * 10000010 &H82
* * 10000010 &H82
00000000 &H00
然后再把十六进制数作为ASC码值,用CHR$()连接
Tile$ = CHR$(&H82)+ CHR$(&HC6)+ CHR$(&HAA)+ CHR$(&H92)+ CHR$(&H82)+ CHR$(&H82)+ CHR$(&H82)+ CHR$(&H00)
用PAINT (X,Y),Tile$填充封闭图案
程序如下:
SCREEN 11
Tile$ = CHR$(&H82)+ CHR$(&HC6)+ CHR$(&HAA)+ CHR$(&H92)+ CHR$(&H82)+ CHR$(&H82)+ CHR$(&H82)+ CHR$(&H00)
circle(200,100),80
paint (200,100),Tile$
可以看到圆里填充着M形的图案
2.属性数为4 (SCREEN 1,SCREEN 10, SCREEN 9?)
SCREEN 1下,图案只有4列,每列2位
画出“底图”,
青 洋红 洋红 青 01 10 10 01 &H69 ↓读
洋红 青 青 洋红 ==> 10 01 01 10 ==> &H96 ↓取
洋红 青 青 洋红 10 01 01 10 &H96 ↓顺
青 洋红 洋红 青 01 10 10 01 &H69 ↓序
Tile$ = CHR$(&H69)+ CHR$(&H96)+ CHR$(&H69)+ CHR$(&H96)
程序如下:
SCREEN 1
Tile$ = CHR$(&H69)+ CHR$(&H96)+ CHR$(&H69)+ CHR$(&H96)
circle(200,100),80
paint (200,100),Tile$
可以看到圆里填充着相间的图案
3.属性数为16 (SCREEN 8,SCREEN 12)
在EGA和VGA屏幕方式下,图案砖中的一行由数“层”8位整数组成,因为在“位平面”堆栈中,一个象素是被三维地表示出来的,而不是象SCREEN1和2那样顺序地排在一个单一的平面中。SCREEN 8和12中,由4个这样的位平面。应此,在该屏幕方式下每一个象素占4位,而4位中的每一位都分别位于不同的平面上。
为定义一个由黄色和洋红色交替的图案,可以按如下步骤实现
注:亮黄色属性号为14,二进制为1110;洋红色属性号为5,二进制为0101
(1)定义一行象素
读平面方向
读 → → → → → → → →
象↑1 1 0 0 0 0 1 1 → CHR$(&HC3)↓连
素↑0 0 1 1 1 1 0 0 → CHR$(&H3C)↓接
方↑1 1 1 1 1 1 1 1 → CHR$(&HFF)↓象
向↑0 0 1 1 1 1 0 0 → CHR$(&H3C)↓素
洋 洋 黄 黄 黄 黄 洋 洋
红 红 红 红
row$(1)=row$(2)=CHR$(&HC3)+CHR$(&H3C)+CHR$(&HFF)+CHR$(&H3C)
(2)用同样的方法定义图案砖的另一行
读平面方向
读 → → → → → → → →
象↑0 0 1 1 1 1 0 0 → CHR$(&H3C)↓连
素↑1 1 0 0 0 0 1 1 → CHR$(&HC3)↓接
方↑1 1 1 1 1 1 1 1 → CHR$(&HFF)↓象
向↑1 1 0 0 0 0 1 1 → CHR$(&HC3)↓素
黄 黄 洋 洋 洋 洋 黄 黄
红 红 红 红
row$(3)=row$(4)=CHR$(&H3C)+CHR$(&HC3)+CHR$(&HFF)+CHR$(&HC3)
程序如下:
SCREEN 12
DIM row$(1 TO 4)
row$(1) = CHR$(&HC3) + CHR$(&H3C) + CHR$(&HFF) + CHR$(&H3C)
row$(2) = row$(1)
row$(3) = CHR$(&H3C) + CHR$(&HC3) + CHR$(&HFF) + CHR$(&HC3)
row$(4) = row$(3)
FOR i = 1 TO 4
tile$ = tile$ + row$(i)
NEXT i
LINE (50, 50)-(200, 200), , B
PAINT (100, 100), tile$
3.GET - PUT语句
PSET PRESET XOR AND OR
To be continue...