回 帖 发 新 帖 刷新版面

主题:屏幕操作语句(教程)

注:下文主要针对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...

回复列表 (共6个回复)

沙发

建议你把所有的教程类的帖子集中,或者是做个论坛好帖子的集锦连接,然后置顶

板凳

还能不能顶?

3 楼

呵呵 上次让你给跑了(害我们鼓掌半天 就没人上台啊)
下次一定得补上

4 楼

DECLARE SUB sleept (t!)
SCREEN 13
k = 320 / 43 / 2
FOR i = 0 TO 85
    LINE (i * k, 180)-(i * k + k, 184), i + 1, BF
NEXT
PALETTE 0, 42 * 65536 + 42 * 256 + 42
c = i / 2
DO UNTIL INKEY$ = CHR$(27)
a = a MOD i + 1
j = a
sleept .01
FOR b = 1 TO i
  j = j MOD i + 1
  PALETTE j, ABS(c - b) * 65536
NEXT
LOOP

5 楼

SCREEN 13
FOR i = 0 TO 63
   PALETTE i, i + i * 256 + i * 65536
NEXT i
c = 0
FOR i = 0 TO 319 STEP 5
  LINE (i, 0)-(i + 4, 199), c, BF
  c = c + 1
NEXT i
WHILE INKEY$ = "": WEND
END

6 楼

高手就是高手,哪里学来的啊,我把QB2级教程翻烂了也没这个章节!!!有QB详细的书籍没有?借我啃啃啊! 有就联系我QQ 吧。42326285

我来回复

您尚未登录,请登录后再回复。点此登录或注册