‘орум программистов, компьютерный форум CyberForum.ru

QBasic

¬ойти
–егистраци€
¬осстановить пароль
 
 
–ейтинг: –ейтинг темы: голосов - 397, средн€€ оценка - 4.85
Quiet Snow
 јватар дл€ Quiet Snow
4357 / 1219 / 202
–егистраци€: 25.04.2010
—ообщений: 2,943
#1

√рафика на бейсике - QBasic

16.08.2010, 02:10. ѕросмотров 50467. ќтветов 57
ћетки нет (¬се метки)

«дравствуйте уважаемые участники форума и администраци€!

”же давно заметил, что "скудновато" в данном разделе по прикреплЄнным темам, есть предложение закрепить топик, освеща€ следующие вопросы:

1) ќбсуждаем графические приложени€, написанные на бейсике(любые MS-DOS компил€торы)
2) ¬ыкладываем разные "поучительные" примеры

ѕонимаете, область далеко не сама€ проста€, хочетс€ развеить предрассудки о том что бейсик мол "игрушка", отсталый €зык, есть же "сильные" программы, использующие разные ухищрени€.  ороче хочетс€ чтобы было больше дискуссий на эту тему. ¬ рамках форума можно решать самые разнообразные вопросы, от вопросов алгоритмизации до выбора стратегии оптимизации, от простых до сложных.

„то подразумеваетс€ под графическими приложени€ми:
- ¬ первую очередь программы работающие в графическом режиме, с упором на вывод графики.
- –азные рисунки, анимаци€, эффекты, воспроизвод€щиес€ непосредственно в программе.
- ћультимедиа приложени€ и игры.
- ќбычные программы использующие средства дл€ вывода графики.

“акже можно обсуждать и выкладывать какие-либо вспомогательные программы(будь то конвертер или редактор), идеологические аспекты, т.е. допустим один человек предлагает идею - другой реализовывает.

¬ообщем если найдутс€ энтузиасты поддержать топик, буду очень рад. ’очетс€ чтобы в разделе было больше посетителей и чтоб форум не "сдох".
ѕосле регистрации реклама в сообщени€х будет скрыта и будут доступны все возможности форума.
Quiet Snow
 јватар дл€ Quiet Snow
4357 / 1219 / 202
–егистраци€: 25.04.2010
—ообщений: 2,943
17.03.2011, 02:01  [“—]     √рафика на бейсике #21
Ќакодил сегодн€ цифровые часики, адаптировал функцию сн€ти€ скриншота под SCREEN 12, пользуйтесь на здоровье...

—овместимость программы: QBasic 1.0 и выше...

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
DECLARE SUB MakeBmp (NameBmp$)
DECLARE SUB Prepare ()
   '  ѕроцедуры печати
DECLARE SUB DrawChar (x%, y%, Ch%, Poz%, Mshtb!)
DECLARE SUB DrawClock (xDr%, yDr%, Tm$, Mashtab!)
   '  ћассивы
CONST DataDL = 228
DIM SHARED Sizes%(1 TO 7), Sost%(9, 1 TO 7), i%, k%
DIM SHARED X1%(1 TO 7, 1 TO 6), X2%(1 TO 7, 1 TO 6)
DIM SHARED Y1%(1 TO 7, 1 TO 6), Y2%(1 TO 7, 1 TO 6)
DIM SHARED PZx%(1 TO 7), PZy%(1 TO 7)  ' Paint zone - зона закраски
  SCREEN 12     '  640x480x16цв.
  Prepare
   '  „итаем размерности
FOR i% = 1 TO 7
   READ Sizes%(i%)
NEXT
   '  „итаем координаты
FOR i% = 1 TO 7
   zx% = 0: zy% = 0
   FOR k% = 1 TO Sizes%(i%)
     READ X1%(i%, k%), Y1%(i%, k%), X2%(i%, k%), Y2%(i%, k%)
     zx% = zx% + X1%(i%, k%) + X2%(i%, k%)
     zy% = zy% + Y1%(i%, k%) + Y2%(i%, k%)
   NEXT
   PZx%(i%) = zx% / (Sizes%(i%) * 2): PZy%(i%) = zy% / (Sizes%(i%) * 2)
NEXT
   '  „итаем состо€ни€
  i% = 0
DO:  READ k%
   IF k% = -1 THEN
     i% = i% + 1
   ELSE
     IF k% <> -2 THEN Sost%(i%, k%) = 1
   END IF
LOOP UNTIL k% = -2
 
DO: Kb$ = INKEY$
   G! = TIMER: WHILE G! + .5 < TIMER: WEND
   DrawClock 100, 250, TIME$, 4
   IF INT(TIMER * 2) AND 1 THEN
    LINE (215, 220)-(225, 230), 2, BF
    LINE (215, 270)-(225, 280), 2, BF
    LINE (394, 220)-(404, 230), 2, BF
    LINE (394, 270)-(404, 280), 2, BF
   ELSE
    LINE (215, 220)-(225, 230), 4, BF
    LINE (215, 270)-(225, 280), 4, BF
    LINE (394, 220)-(404, 230), 4, BF
    LINE (394, 270)-(404, 280), 4, BF
   END IF
   IF Kb$ = CHR$(32) THEN MakeBmp "Clock"
LOOP UNTIL Kb$ = CHR$(27)
 
END
  '  –азмеры
DATA 5, 6, 5, 6, 5, 6, 5
  ' 1 > Ћевый верх
DATA -105,-196,-114,-187
DATA -105,-196,-57,-148
DATA -114,-187,-114,-3
DATA -57,-148,-57,-40
DATA -114,-3,-57,-40
  ' 2 > ¬ерх
DATA -93,-208,-102,-199
DATA -102,-199,-54,-151
DATA -93,-208, 93,-208
DATA -54,-151, 54,-151
DATA  93,-208, 102,-199
DATA  102,-199, 54,-151
  ' 3 > ѕравый верх
DATA  105,-196, 114,-187
DATA  105,-196, 57,-148
DATA  114,-187, 114,-3
DATA  57,-148, 57,-40
DATA  57,-40, 114,-3
 '  4 > ÷ентр
DATA -109, 0,-59,-33
DATA -109, 0,-59, 33
DATA -59,-33, 59,-33
DATA -59, 33, 59, 33
DATA  59,-33, 109, 0
DATA  109, 0, 59, 33
 '  5 > Ћевый низ
DATA -114, 3,-57, 40
DATA -114, 3,-114, 187
DATA -57, 40,-57, 148
DATA -114, 187,-105, 196
DATA -57, 148,-105, 196
 '  6 > Ќиз
DATA -102, 199,-54, 151
DATA -102, 199,-93, 208
DATA -54, 151, 54, 151
DATA -93, 208, 93, 208
DATA  54, 151, 102, 199
DATA  102, 199, 93, 208
 '  7 > ѕравый низ
DATA  114, 3, 57, 40
DATA  57, 40, 57, 148
DATA  114, 3, 114, 187
DATA  57, 148, 105, 196
DATA  114, 187, 105, 196
'   —осто€ни€
 DATA 2, 1, 3, 5, 7, 6, -1
 DATA 3, 7, -1
 DATA 2, 3, 4, 5, 6, -1
 DATA 2, 3, 4, 7, 6, -1
 DATA 1, 4, 3, 7, -1
 DATA 2, 1, 4, 7, 6, -1
 DATA 2, 1, 4, 5, 7, 6, -1
 DATA 2, 3, 7, -1
 DATA 2, 1, 3, 4, 5, 7, 6, -1
 DATA 2, 1, 3, 4, 7, 6, -1, -2
'    «аголовок *.BMP*
bgdt: DATA 66,77,54,254,0,0,0,0,0,0,54,4,0,0,40,0,0
DATA 0,128,2,0,0,224,1,0,0,1,0,8,0,0,0,0,0,0
DATA 250,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0
 
SUB DrawChar (x%, y%, Ch%, Poz%, Mshtb!)
PCvtL% = 1: PCvtZ% = 2   ' ÷вета дл€ присутствующих
OCvtL% = 3: OCvtZ% = 4   ' ÷вета дл€ отсутствующих
 
xPls% = ((DataDL / Mshtb!) * 1.05) * Poz%
 FOR i% = 1 TO 7    ' ќт 1-го до 7-ми частей
   IF Sost%(Ch%, i%) = 1 THEN    ' ≈сли часть включена, рисуем
    CvtL% = PCvtL%: CvtZ% = PCvtZ%
   ELSE CvtL% = OCvtL%: CvtZ% = OCvtZ%
   END IF
     FOR k% = 1 TO Sizes%(i%)    ' –исуем все линии
   x11% = X1%(i%, k%) / Mshtb!: x22% = X2%(i%, k%) / Mshtb!
   y11% = Y1%(i%, k%) / Mshtb!: y22% = Y2%(i%, k%) / Mshtb!
   LINE (x11% + xPls% + x%, y11% + y%)-(x22% + xPls% + x%, y22% + y%), CvtL%
     NEXT
   PAINT (PZx%(i%) / Mshtb! + xPls% + x%, PZy%(i%) / Mshtb! + y%), CvtZ%, CvtL%
 NEXT
END SUB
 
SUB DrawClock (xDr%, yDr%, Tm$, Mashtab!)
  FOR u% = 1 TO LEN(Tm$)
    Tc% = ASC(MID$(Tm$, u%, 1))
    IF Tc% > 47 AND Tc% < 58 THEN
    DrawChar xDr%, yDr%, Tc% - 48, u% - 1, Mashtab!
    END IF
  NEXT
END SUB
 
SUB MakeBmp (NameBmp$)
'    —оздаЄм *.BMP*
 OPEN NameBmp$ + ".Bmp" FOR BINARY AS #3
    RESTORE bgdt
    FOR byte& = 1 TO 54
     READ Zglv%: PUT #3, byte&, Zglv%
    NEXT byte&: byte& = 55
    FOR ii% = 0 TO 255
      OUT &H3C7, ii%: R% = INP(&H3C9) * 4: G% = INP(&H3C9) * 4: B% = INP(&H3C9) * 4
      bt1% = CVI(CHR$(B%) + CHR$(G%)): bt2% = CVI(CHR$(R%) + "є")
      PUT #3, byte&, bt1%: PUT #3, byte& + 2, bt2%
      byte& = byte& + 4
    NEXT ii%
      FOR y% = 479 TO 0 STEP -1
       FOR x% = 0 TO 639
        cve% = POINT(x%, y%)
        PUT #3, byte&, cve%: byte& = byte& + 1
       NEXT x%
      NEXT y%
 CLOSE #3
END SUB
 
SUB Prepare
 OUT &H3C8, 1
 OUT &H3C9, 92 / 4: OUT &H3C9, 93 / 4: OUT &H3C9, 77 / 4
 OUT &H3C9, 21 / 4: OUT &H3C9, 26 / 4: OUT &H3C9, 19 / 4
 OUT &H3C9, 120 / 4: OUT &H3C9, 124 / 4: OUT &H3C9, 87 / 4
 OUT &H3C9, 110 / 4: OUT &H3C9, 118 / 4: OUT &H3C9, 86 / 4
 OUT &H3C9, 120 / 4: OUT &H3C9, 124 / 4: OUT &H3C9, 87 / 4
 LINE (50, 180)-(590, 320), 5, BF
END SUB
ћиниатюры
√рафика на бейсике   √рафика на бейсике  
ѕосле регистрации реклама в сообщени€х будет скрыта и будут доступны все возможности форума.
softmob
1248 / 698 / 155
–егистраци€: 20.02.2010
—ообщений: 1,035
17.03.2011, 17:13     √рафика на бейсике #22
еще фрактал
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
'ѕрограмма построени€ фракталов
SCREEN 12
Kc = 15           'количество цветов дл€ фрактала
a = 640: b = 480  'размер экрана в пикселах по x и y
'Ќужно задавать (мен€ть) значени€ p,q
'дл€ получени€ различных рисунков
'p = -.1: q = -1.92
'p = .5: q = -.1
'p = -.5: q = -.9
'p = -.5: q = .9
p = .5: q = 1
100
Xmin = -1.75: Ymin = -1.25    ' миним. коорд. фрактала
Xmax = 1.75: Ymax = 1.25      ' максим.коорд. фрактала
M = 100    'максимальное рассто€ние дл€ поиска атрактора
dx = (Xmax - Xmin) / (a - 1)  'размер пиксела по оси x
dy = (Ymax - Ymin) / (b - 1)  'размер пиксела по оси y
FOR Nx = 1 TO a - 1  'цикл сканировани€ всех пикселов дл€
FOR Ny = 1 TO b - 1  'определени€ их цвета
xk = Xmin + Nx * dx
yk = Ymin + Ny * dy
k = 0
200   'формулы определени€ координат атрактора
xk1 = xk * xk - yk * yk + p
yk1 = 2 * xk * yk + q
k = k + 1  'число итер. дл€ данного начального пиксела
c = k      'цвет пиксела, соответствующий данному числу
300
r = xk1 * xk1 + yk1 * yk1  'расст.от нач. до кон.точки
xk = xk1: yk = yk1
IF r > M THEN c = k: GOTO 400    'условие сходимости
IF k = Kc THEN c = 0: GOTO 400   'повторение палитры
GOTO 200
400
PSET (Nx, Ny), c
NEXT Ny
NEXT Nx
ћиниатюры
√рафика на бейсике  
softmob
1248 / 698 / 155
–егистраци€: 20.02.2010
—ообщений: 1,035
20.03.2011, 11:01     √рафика на бейсике #23
циклоида
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
SCREEN 12
RANDOMIZE TIMER
rr1 = 150: rr2 = -50: rr3 = 30: k = 0.45: q = 0.1
FOR R1 = rr1 TO 187 STEP 5
    FOR R2 = rr2 TO 240 STEP 5
        FOR R3 = rr3 TO 240 STEP 5
            col = INT(RND * 15 + 1)
            FOR T = 0 TO 600 STEP q
                X = (INT((R1 + R2) * COS(R2 * T / R1) - R3 * COS((R1 + R2) / R1 * T)))
                Y = INT((R1 + R2) * SIN(R2 * T / R1) - R3 * SIN((R1 + R2) / R1 * T))
                PSET (X * k + 320, Y * k + 240), col
NEXT: NEXT: SLEEP 3: CLS: NEXT: NEXT
«десь R1 - радиус круга, по которому катитс€ колесо, R2 - радиус колеса, кат€щегос€ по кругу, если с минусом, то внутри его и R3 - радиус, на котором лежит рисуема€ точка на колесе. “ - счетчик цикла, он же пол€рный угол, на котором лежит центр колеса в данный момент. q глубина прорисовки.
ћиниатюры
√рафика на бейсике  
softmob
1248 / 698 / 155
–егистраци€: 20.02.2010
—ообщений: 1,035
20.03.2011, 15:26     √рафика на бейсике #24
PureBasic
1
2
3
4
5
6
7
SCREEN 12
r1 = 111: r2 = 16: r3 = 131: k = 0.85: q = 0.01
FOR t = 0 TO 600 STEP q
    x = INT((r1 + r2) * COS(r2 * t / r1) - r3 * COS((r1 + r2) / r1 * t))
    y = INT((r1 + r2) * SIN(r2 * t / r1) - r3 * SIN((r1 + r2) / r1 * t))
    PSET (x * k + 320, y * k + 240), 5
NEXT
ћиниатюры
√рафика на бейсике  
Quiet Snow
 јватар дл€ Quiet Snow
4357 / 1219 / 202
–егистраци€: 25.04.2010
—ообщений: 2,943
20.03.2011, 17:41  [“—]     √рафика на бейсике #25
softmob, поиграйс€ с палитрой, алгоритмы хорошие, но стандартные цветовые оттенки режут глаз. »з 16-ти цветов можно создать градиент + примитивный RND дизер и это будет достаточно неплохо смотретьс€.
Quiet Snow
 јватар дл€ Quiet Snow
4357 / 1219 / 202
–егистраци€: 25.04.2010
—ообщений: 2,943
24.03.2011, 06:19  [“—]     √рафика на бейсике #26
" лассический" фрактал - папоротник, слизано с книжки —.ј. Ќемнюгина "Turbo PASCAL практикум".

—овместимость программы: QBasic 1.0 и выше.

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
DECLARE SUB MakeBmp (NameBmp$)
 
 CONST Iterations = 1000000
 
DIM t AS DOUBLE, x AS DOUBLE, y AS DOUBLE, p AS DOUBLE
DIM k AS LONG
DIM Midx AS INTEGER, Midy AS INTEGER, radius AS INTEGER
 
ON TIMER(1) GOSUB ShowIter
TIMER ON
 
  SCREEN 12
 FOR k = 1 TO 15
   OUT &H3C8, k
   IF k < 16 THEN
   OUT &H3C9, k: OUT &H3C9, 25 + k * 2: OUT &H3C9, 0
   ELSE OUT &H3C9, k: OUT &H3C9, 54: OUT &H3C9, 0
   END IF
 NEXT: k = 10
  Midx = 320
  Midy = 480
  radius = .1 * Midy
     RANDOMIZE TIMER
  x = 1
  y = 0
 
  FOR k = 1 TO Iterations
   p = RND
   t = x
   IF p <= .85 THEN
     x = .85 * x + .04 * y
     y = -.04 * t + .85 * y + 1.6
   ELSE
      IF p <= .92 THEN
       x = .2 * x - .26 * y
       y = .23 * t + .22 * y + 1.6
      ELSE
         IF p <= .99 THEN
          x = -.15 * x + .28 * y
          y = .26 * t + .24 * y + .44
         ELSE
          x = 0
          y = .16 * y
         END IF
 
      END IF
   END IF
   PSET (Midx + radius * x, Midy - radius * y), POINT(Midx + radius * x, Midy - radius * y) + 1
  NEXT
MakeBmp "Paporotn"
END
ShowIter: LOCATE 1: PRINT "Iterations: "; k: IF INKEY$ <> "" THEN END
RETURN
bgdt: DATA 66,77,54,254,0,0,0,0,0,0,54,4,0,0,40,0,0
DATA 0,128,2,0,0,224,1,0,0,1,0,8,0,0,0,0,0,0
DATA 250,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0
 
SUB MakeBmp (NameBmp$)
'    —оздаЄм *.BMP*
 OPEN NameBmp$ + ".Bmp" FOR BINARY AS #3
    RESTORE bgdt
    FOR byte& = 1 TO 54
     READ Zglv%: PUT #3, byte&, Zglv%
    NEXT byte&: byte& = 55
    FOR ii% = 0 TO 255
      OUT &H3C7, ii%: R% = INP(&H3C9) * 4: G% = INP(&H3C9) * 4: B% = INP(&H3C9) * 4
      bt1% = CVI(CHR$(B%) + CHR$(G%)): bt2% = CVI(CHR$(R%) + "є")
      PUT #3, byte&, bt1%: PUT #3, byte& + 2, bt2%
      byte& = byte& + 4
    NEXT ii%
      FOR y% = 479 TO 0 STEP -1
       FOR x% = 0 TO 639
        cve% = POINT(x%, y%)
        PUT #3, byte&, cve%: byte& = byte& + 1
       NEXT x%
      NEXT y%
 CLOSE #3
END SUB
P.S: ¬ божеский вид посредством манипул€ций с палитрой привести не удалось, может кому из форумчан удастс€.
ћиниатюры
√рафика на бейсике  
Quiet Snow
 јватар дл€ Quiet Snow
4357 / 1219 / 202
–егистраци€: 25.04.2010
—ообщений: 2,943
29.03.2011, 07:12  [“—]     √рафика на бейсике #27
¬чера ко мне обратилс€ один из пользователей с просьбой объ€снить, каким образом можно встроить картинку в код программы.
–аньше € не занималс€ этим вопросом, тема довольно интересна€.
ћногие кодеры полагаю, хот€т встраивать в свои программы графику(особенно если еЄ мало).
ѕотому мной было прин€то решение написать небольшую утилитку дл€ конвертировани€ бинарных данных из *.BMP* файла в данные, описываемые ключевым словом DATA.
ƒалее € прокомментирую, как еЄ использовать.

»сходник:

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
   ' —труктуры данных дл€ *.BMP*
TYPE BMFile
   BmID AS INTEGER
   FileSize AS LONG
   Reserved AS LONG
   BmOFFSET AS LONG
END TYPE
TYPE BMHead
   HeadSize AS LONG
   BmpSizeX AS LONG
   BmpSizeY AS LONG
   BmSlices AS INTEGER
   BitDepth AS INTEGER
   Compress AS LONG
   DataSize AS LONG
   BmHorRes AS LONG
   BmVerRes AS LONG
   UseColor AS LONG
   SingColr AS LONG
END TYPE
      '  ћаксимальна€ длина строки дл€ DATA
  CONST MaxDl = 75
      '  ћаксимальный размер BMP данных дл€
      '  конвертировани€(в байтах)
  CONST MaxDataLenght = 17000
  DIM SHARED FHead AS BMFile, BMPHead AS BMHead, FilePL&
  DIM SHARED Ld AS STRING * 1
 
  CLS
  LOCATE 3, 10, 1: PRINT "*.BMP* filename : ";
  Shbl$ = "_~@#$%!^&(){}"   ' ћогут быть в имени файла
 
  DO: K$ = INKEY$
    IF K$ = CHR$(8) AND LEN(BmName$) > 0 THEN
      BmName$ = LEFT$(BmName$, LEN(BmName$) - 1)
    END IF
      'вЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИ  —оздаЄм датафайл  вЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИ
    IF K$ = " " AND CanMake% = 1 THEN
      f! = TIMER
      COLOR 7: LOCATE 21, 20: PRINT "Converting...";
      OPEN "B", #1, BmName$ + ".BMP"
      OPEN "O", #2, BmName$ + ".BAS"
         '  ¬ключаем программу дл€ вывода
       PRINT #2, "' вФМвФђвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФђвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФР"
       PRINT #2, "' вФВвХШвХРвХР Bmp2Data вХРвХРвХЫ                           вФВ"
       PRINT #2, "' вФВ                                           вФВ"
       PRINT #2, "' вФВ Universal bitmap converter, version 1.0b  вФВ"
       PRINT #2, "' вФВ ”ниверсальный BMP конвертер, верси€ 1.0б  вФВ"
       PRINT #2, "' вФВ                                           вФВ"
       PRINT #2, "' вФЬвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФВ"
       PRINT #2, "' вФВ  јвтор: >Quiet Snow<                      вФВ"
       PRINT #2, "' вФВ  —оглашение: ѕри использовании программы  вФВ"
       PRINT #2, "' вФВ  вс€ ответственность за любые последстви€ вФВ"
       PRINT #2, "' вФВ  лежит на пользователе.                   вФВ"
       PRINT #2, "' вФФвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФАвФШ"
       PRINT #2, "  DECLARE SUB ShowBmp ()"
       PRINT #2, ""
       PRINT #2, " 'ЈЈвФАвФА  ”становка экрана  вФАвФАЈЈ"
       PRINT #2, ""
       PRINT #2, "      SCREEN 13"
       PRINT #2, ""
       PRINT #2, " 'ЈЈвФАвФА   ¬ывод картинки   вФАвФАЈЈ "
       PRINT #2, ""
       PRINT #2, "      ShowBmp"
       PRINT #2, ""
       PRINT #2, " END"
         '
      GET #1, , FHead: GET #1, , BMPHead
        IF BMPHead.BitDepth < 9 THEN
          '   онвертируем палитру из файла
          PRINT #2, "' ѕалитра"
          PRINT #2, "5 ";
           S$ = "DATA "
          FOR i% = 1 TO 2 ^ BMPHead.BitDepth
           GET #1, , FilePL&
           R% = ((FilePL& AND &HFF0000) \ 262144) AND 63
           G% = ((FilePL& AND &HFF00) \ 1024) AND 63
           B% = ((FilePL& AND &HFF) \ 4) AND 63
           S$ = S$ + LTRIM$(STR$(R%)) + ","
              IF LEN(S$) >= MaxDl THEN
               S$ = LEFT$(S$, LEN(S$) - 1)
               PRINT #2, S$: S$ = "DATA "
              END IF
           S$ = S$ + LTRIM$(STR$(G%)) + ","
              IF LEN(S$) >= MaxDl THEN
               S$ = LEFT$(S$, LEN(S$) - 1)
               PRINT #2, S$: S$ = "DATA "
              END IF
           S$ = S$ + LTRIM$(STR$(B%)) + ","
              IF LEN(S$) >= MaxDl THEN
               S$ = LEFT$(S$, LEN(S$) - 1)
               PRINT #2, S$: S$ = "DATA "
              END IF
          NEXT i%
            ' ƒописываем остаток
            S$ = LEFT$(S$, LEN(S$) - 1)
            PRINT #2, S$
            PRINT #2, "' ƒанные"
            PRINT #2, "10 ";
          '  ѕеремещаемс€ на дату и конвертируем еЄ
          S$ = "DATA "
          SEEK #1, FHead.BmOFFSET
          DEF SEG = VARSEG(Ld): OffLd& = VARPTR(Ld)
          Plus& = -BMPHead.BmpSizeX AND 3
          FOR yp& = 0 TO BMPHead.BmpSizeY - 1
            'Adr& = FHead.BmOFFSET + CLNG(yp%) * BMPHead.BmpSizeX
             Adr& = (BMPHead.BmpSizeY - yp& - 1) * (BMPHead.BmpSizeX + Plus&)
             Adr& = Adr& + FHead.BmOFFSET + 1
            FOR xp& = 0 TO BMPHead.BmpSizeX - 1
            GET #1, Adr& + xp&, Ld
              S$ = S$ + LTRIM$(STR$(PEEK(OffLd&))) + ","
              IF LEN(S$) >= MaxDl THEN
                  S$ = LEFT$(S$, LEN(S$) - 1)
                  PRINT #2, S$: S$ = "DATA "
              END IF
            NEXT xp&
          NEXT yp&
          DEF SEG
            ' ƒописываем остаток
            S$ = LEFT$(S$, LEN(S$) - 1)
            PRINT #2, S$
 
       PRINT #2, ""
       PRINT #2, "SUB ShowBmp"
       PRINT #2, "   FOR y% = 1 TO"; 2 ^ BMPHead.BitDepth
       PRINT #2, "     READ R%, G%, B%"
       PRINT #2, "     OUT &H3C9, R%: OUT &H3C9, G%: OUT &H3C9, B%"
       PRINT #2, "   NEXT"
       PRINT #2, "   FOR y% = 0 TO"; BMPHead.BmpSizeY - 1
       PRINT #2, "      FOR x% = 0 TO"; BMPHead.BmpSizeX - 1
       PRINT #2, "        READ cv%"
       PRINT #2, "        PSET (x%, y%), cv%"
       PRINT #2, "      NEXT"
       PRINT #2, "   NEXT"
       PRINT #2, "END SUB"
        END IF
      CLOSE #1, #2
      COLOR 10: PRINT USING "Done at ##.### seconds"; TIMER - f!
    END IF
      ' вЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИвЦИ
 
    IF LEN(K$) = 1 AND LEN(BmName$) < 8 THEN
      IF K$ > "/" AND K$ < ":" THEN Dob% = 1
      IF K$ > "@" AND K$ < "[" THEN Dob% = 1
      IF K$ > "`" AND K$ < "{" THEN Dob% = 1
        FOR i% = 1 TO LEN(Shbl$)   '  ѕоиск допустимых букв в имени файла
          IF INSTR(Shbl$, K$) THEN Dob% = 1
        NEXT
      IF Dob% = 1 THEN BmName$ = BmName$ + K$: Dob% = 0: CanMake% = 0
       ON ERROR GOTO NoFile: NF% = 0
       OPEN "I", #1, BmName$ + ".BMP"
       IF NF% = 1 THEN COLOR 12 ELSE COLOR 10
       IF NF% = 0 THEN
         CLOSE #1: OPEN "B", #1, BmName$ + ".BMP"
           GET #1, , FHead
           IF FHead.BmID = 19778 THEN
            GET #1, , BMPHead
            COLOR 7
            LOCATE 8, 5: PRINT "FILE: ";
            COLOR 11: PRINT UCASE$(BmName$) + ".BMP": COLOR 7
            LOCATE 11, 5: PRINT "HEADER          .... "; BMPHead.HeadSize
            LOCATE 12, 5: PRINT "SIZE            .... "; LOF(1); "bytes "
            LOCATE 13, 5: PRINT "RESOLUTION X    .... "; BMPHead.BmpSizeX
            LOCATE 14, 5: PRINT "RESOLUTION Y    .... "; BMPHead.BmpSizeY
            LOCATE 15, 5: PRINT "COLORS          .... "; 2 ^ BMPHead.BitDepth
            LOCATE 16, 5: PRINT "  USED COLORS   .... "; BMPHead.UseColor
            LOCATE 17, 5: PRINT "  ACTUAL COLORS .... "; BMPHead.SingColr
            IF BMPHead.DataSize < MaxDataLenght THEN
             COLOR 14: CanMake% = 1
             LOCATE 20, 20: PRINT "Press [SPACE] for make QuickBasic DATA"
            END IF
            COLOR 10
           END IF
         CLOSE #1: Infa% = 1
       END IF
         '  ќчистим экран со старой информацией
       IF Infa% = 1 AND NF% = 1 THEN
         COLOR 7: CLS 2: Infa% = 0
         LOCATE 3, 10, 1: PRINT "*.BMP* filename : ";
         COLOR 12
       END IF
      LOCATE 3, 28: PRINT BmName$ + " ";
      LOCATE 3, 28: PRINT BmName$;
      COLOR 7
    END IF
  LOOP UNTIL K$ = CHR$(13) OR K$ = CHR$(27)
 
END
NoFile: NF% = 1: RESUME NEXT
“еперь описание:
ƒопустим у вас есть картинка в каком-либо графическом формате. ќткрываете программу Adobe Photoshop, открываете вашу картинку, далее во вкладке Image->Image Size уменьшаете картинку до разрешени€ 160x100 (можно поэкспериментировать с размером, т.к. € не вкурсе сколько максимально можно засунуть в DATA, просто лучше не увлекатьс€), далее выбираете опцию Save For Web, выбираете выход€щий файл GIF и оптимизируете картинку под 256 цветов. —охран€ете файл. “ыкаем пр. кн. мыши на этом файле, выбираем опцию изменить, откроетс€ Paint, жмЄм 2 раза CTRL+I и сохран€ем картинку(save as) в формате BMP с опцией "256-цветный рисунок".
“еперь открываем конвертер(код выше) и вводим им€ вашего файла, по окончанию ввода вы сами поймЄте есть ли такой файл или нет, т.к. конвертер автоматически определ€ет присутствие файла после ввода каждой буквы. ≈сли файл найден, смотрим есть ли внизу жЄлта€ надпись "Press [SPACE] for make QuickBasic DATA", свидетельствующа€ о том, что можно создать *.BAS* файл. Ќажимаем пробел, ждЄм окончани€ конвертировани€... » радуемс€, в директории должен по€витьс€ файл с именем картинки, но расширением ".BAS". ¬ файле забита дата и небольша€ подпрограммка, дл€ воспроизведени€ картинки на 13 режиме экрана.

 ак видите ничего сверхъестественного.
¬от забавный пример посмотрите(скриншот специально не выкладываю):
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
  DECLARE SUB ShowBmp ()
 
 'ЈЈвФАвФА  ”становка экрана  вФАвФАЈЈ
 
      SCREEN 13
 
 'ЈЈвФАвФА   ¬ывод картинки   вФАвФАЈЈ 
 
      ShowBmp
 
 END
' ѕалитра
5 DATA 18,18,16,54,56,59,12,18,31,8,15,28,6,6,5,53,55,57,14,14,12,20,13,12,46
DATA 45,46,10,18,32,9,10,9,14,20,34,25,24,22,17,16,15,26,18,19,35,37,42,40
DATA 39,38,44,46,49,18,22,29,49,50,50,7,13,26,63,63,63,10,16,29,16,22,35,45
DATA 43,41,48,46,45,47,49,50,20,20,18,30,33,35,57,57,58,56,58,61,50,52,54,42
DATA 40,39,22,24,27,13,13,11,21,25,34,23,24,22,28,28,28,13,20,33,8,9,7,8,14
DATA 27,33,32,31,46,44,43,28,28,26,30,30,30,36,35,34,32,32,32,8,16,30,26,26
DATA 26,11,18,31,60,61,63,38,40,43,33,35,37,32,31,30,48,51,52,59,60,62,13,20
DATA 34,26,28,28,35,34,35,25,12,11,39,37,36,24,25,24,18,24,37,53,54,54,42,41
DATA 40,5,4,3,30,31,33,13,19,32,13,16,17,13,19,33,29,34,28,43,45,46,12,18,32
DATA 37,36,36,2,2,2,50,48,47,37,36,35,34,36,38,14,20,33,55,57,60,9,6,5,9,12
DATA 19,11,17,31,41,43,45,11,17,30,51,54,56,58,59,61,34,33,33,15,21,35,26,26
DATA 24,29,33,43,22,23,21,14,10,9,22,23,22,0,0,0,7,9,9,14,19,32,19,19,18,26
DATA 29,37,15,15,14,15,21,33,5,2,2,29,30,30,39,39,39,41,40,40,15,20,30,27,28
DATA 26,10,16,30,9,15,29,58,59,62,7,7,6,10,17,31,14,20,32,30,30,29,12,19,33
DATA 25,26,25,25,26,26,12,19,32,21,18,17,20,21,20,21,22,20,12,17,30,11,11,9
DATA 26,28,34,28,27,25,20,26,37,30,29,28,19,24,35,16,23,36,10,17,30,25,31,44
DATA 56,57,60,16,22,33,52,50,49,25,27,28,24,15,16,16,21,32,61,62,63,33,34,35
DATA 37,38,39,6,11,20,28,29,29,33,33,34,34,19,20,43,43,43,39,38,37,13,19,31
DATA 2,3,1,22,29,42,35,34,33,15,21,34,18,22,32,24,26,33,14,21,33,29,31,37,14
DATA 22,36,29,30,29,19,20,20,4,7,12,36,37,38,13,8,7,60,60,61,21,22,22,16,18
DATA 21,43,42,41,3,3,2,41,41,42,11,12,12,10,16,26,14,20,33,17,23,34,13,18,32
DATA 1,1,0,12,17,29,8,10,14,1,2,2,53,56,59,22,27,39,2,1,0,46,48,47,12,19,34
DATA 12,18,28,57,59,62,40,39,40,41,42,43,62,61,63,33,34,33,13,17,25,36,35,36
DATA 9,16,31,21,15,14,53,52,51,30,36,48,16,20,13,15,20,32,15,19,28,26,25,24
DATA 11,18,33,34,34,34,23,27,34,15,21,32,36,42,39,20,21,22,15,21,33,11,16,29
DATA 14,21,32,55,54,54,38,37,38,59,59,59,11,15,24,29,16,16,45,44,44,61,62,61
DATA 32,31,32,42,41,42,14,19,34,48,48,48,60,59,61,60,59,57,20,24,32,43,45,43
DATA 22,21,19,56,56,57,41,42,41,56,57,62,30,29,30,24,25,25,4,4,4,11,17,29,11
DATA 19,33,52,52,52,11,17,32,15,20,25,35,36,35,13,18,33,3,3,3,17,20,11,10,16
DATA 31,59,59,55,17,9,9,37,38,37,50,52,50,27,27,27,60,60,60,62,63,62,11,20
DATA 28,8,15,31,58,56,60,20,19,21,23,24,26,20,24,16,55,56,56,32,15,15,15,24
DATA 19,9,17,31,23,27,36
' ƒанные
10 DATA 107,231,67,231,107,129,67,129,171,171,72,78,78,78,78,88,169,150,112,112
DATA 100,112,169,112,2,146,112,169,100,112,146,2,146,146,169,171,2,96,171,96
DATA 23,23,100,169,23,100,203,67,67,96,121,96,100,150,11,100,23,23,153,23,23
DATA 23,100,128,128,128,128,100,203,128,23,153,150,170,100,23,128,88,88,128
DATA 128,128,62,62,150,169,203,153,150,117,203,62,23,23,23,62,23,170,127,62
DATA 169,203,88,88,38,153,128,23,194,205,128,23,23,100,23,150,23,128,23,62
DATA 62,62,125,177,177,177,148,62,125,177,177,130,148,148,130,148,130,130,130
DATA 130,130,90,130,130,90,192,192,192,192,130,130,90,130,90,192,90,130,130
DATA 90,192,107,237,231,231,72,129,129,72,204,84,72,114,69,49,78,67,67,150
DATA 169,96,194,96,194,169,2,146,150,23,23,96,112,117,146,112,100,194,146,171
DATA 78,78,67,2,96,100,100,169,169,67,96,67,96,169,150,150,150,150,23,203,169
DATA 150,150,100,150,62,128,128,128,23,88,23,23,23,170,23,112,128,128,203,38
DATA 23,128,62,170,23,194,132,150,100,88,88,203,88,23,128,62,205,23,62,62,150
DATA 100,23,169,88,153,38,203,23,100,132,112,112,112,169,100,194,146,112,146
DATA 23,132,194,194,128,125,62,128,203,128,125,125,62,125,62,62,62,125,62,125
DATA 62,177,125,177,148,125,148,130,130,148,62,125,177,148,148,148,130,130
DATA 148,130,130,72,72,72,72,117,72,82,108,204,171,111,108,108,84,67,67,121
DATA 96,23,146,146,23,170,2,2,100,169,23,100,121,100,23,100,2,146,194,112,146
DATA 204,2,121,84,100,100,194,169,150,100,96,146,171,67,2,146,100,150,150,150
DATA 100,100,100,132,23,170,170,128,150,153,203,23,132,170,170,132,150,23,23
DATA 23,153,23,128,23,150,132,132,200,112,200,169,23,23,132,132,127,23,23,128
DATA 169,150,150,150,100,100,153,203,23,203,100,170,170,100,146,170,23,112
DATA 100,150,121,84,204,112,62,170,23,150,170,23,169,23,203,203,170,203,62
DATA 146,62,169,100,170,132,170,62,23,128,62,125,150,62,62,153,62,62,62,62
DATA 38,62,125,62,62,88,215,231,82,117,69,117,69,171,171,171,234,72,82,171
DATA 121,171,112,112,67,146,121,121,67,112,2,96,112,169,121,78,96,38,67,2,67
DATA 112,100,112,204,2,96,2,146,146,112,146,146,112,112,2,2,96,112,96,100,169
DATA 100,23,112,67,169,23,100,112,23,23,169,78,203,203,203,100,100,170,150
DATA 150,23,150,128,150,169,23,62,150,150,23,132,23,23,132,146,200,125,200
DATA 23,23,128,128,170,100,150,169,23,203,128,205,100,150,62,170,150,23,100
DATA 2,100,127,23,112,132,112,23,23,203,146,169,194,112,112,169,2,112,100,121
DATA 203,112,100,228,170,62,100,203,23,96,96,170,23,2,169,62,23,128,153,38
DATA 67,129,203,78,88,88,38,215,114,72,114,69,117,82,38,121,22,171,171,72,78
DATA 171,121,78,96,96,150,84,84,204,2,169,169,67,96,171,112,2,2,23,153,67,2
DATA 150,194,169,194,112,2,204,146,2,146,112,96,169,112,146,100,112,146,194
DATA 150,23,100,78,78,23,150,150,150,23,128,128,23,23,88,203,153,100,150,169
DATA 11,78,100,170,146,23,23,205,203,128,170,150,203,23,150,100,170,62,205
DATA 88,62,23,23,203,23,62,128,23,203,203,23,150,100,194,100,100,23,146,194
DATA 170,146,194,194,146,200,169,146,146,228,2,2,146,100,2,2,169,2,84,100,100
DATA 146,2,170,112,100,100,100,150,146,100,146,146,2,67,23,88,153,23,108,49
DATA 203,82,11,117,72,72,215,117,82,72,72,129,49,72,84,204,2,96,96,2,67,171
DATA 78,100,2,2,67,112,67,2,67,169,67,2,2,96,67,112,2,84,169,150,112,146,2
DATA 146,146,204,96,96,171,96,150,150,112,112,112,194,112,146,169,112,100,150
DATA 169,150,88,128,128,153,128,128,128,128,23,88,100,100,169,23,100,194,127
DATA 170,170,132,205,132,200,205,203,169,150,150,100,112,169,100,88,23,203
DATA 38,205,23,128,23,128,62,128,170,170,112,112,194,228,2,146,112,150,146
DATA 2,2,146,132,105,146,2,112,112,2,112,150,228,2,112,169,108,2,2,169,112
DATA 150,112,2,150,100,173,173,2,96,2,173,112,67,112,153,153,23,228,153,2,228
DATA 117,49,49,189,72,67,72,72,49,82,129,49,117,121,96,96,171,11,78,38,117
DATA 78,171,96,84,84,171,78,171,96,38,78,78,112,67,84,121,2,96,78,67,2,173
DATA 146,84,171,121,67,2,38,78,153,153,67,67,78,96,169,203,146,150,150,194
DATA 112,112,23,200,132,200,132,170,170,132,146,132,127,151,219,219,151,219
DATA 219,151,151,127,127,170,132,132,132,170,151,151,136,132,200,23,23,112
DATA 205,23,23,203,112,23,23,170,23,112,150,62,169,169,112,67,150,169,112,170
DATA 181,194,146,105,228,67,2,146,2,112,2,22,2,96,2,22,112,204,22,100,112,3
DATA 173,112,173,108,204,84,2,146,22,121,2,121,204,2,2,67,146,2,121,228,204
DATA 67,9,231,215,215,82,49,114,114,72,38,171,171,171,84,67,78,72,49,67,78
DATA 96,72,84,107,82,78,38,114,38,88,169,96,112,2,173,78,38,67,2,2,121,2,121
DATA 171,72,72,67,72,11,38,2,49,38,153,38,38,100,2,146,100,194,112,146,200
DATA 200,136,105,151,219,151,136,219,35,219,35,123,98,123,154,154,154,98,154
DATA 98,152,35,255,35,219,199,199,35,132,132,170,194,170,23,23,112,100,23,150
DATA 112,112,146,169,146,100,169,2,23,100,2,194,146,127,170,200,132,2,203,146
DATA 22,2,146,22,2,146,100,204,204,100,228,3,84,22,40,2,146,204,108,108,204
DATA 204,173,2,2,22,22,22,22,146,22,2,121,204,173,204,121,215,11,11,215,231
DATA 69,69,117,114,11,96,78,67,171,49,38,38,117,67,171,171,78,169,100,96,171
DATA 67,114,153,23,11,169,150,67,169,72,117,88,78,67,84,121,2,78,78,72,231
DATA 38,88,67,2,117,67,169,38,38,11,23,136,18,18,151,152,98,98,154,154,28,52
DATA 154,154,154,52,77,159,184,8,216,25,75,19,8,8,216,17,166,83,51,15,15,52
DATA 98,255,35,151,125,127,132,194,194,23,132,132,128,150,23,150,194,173,228
DATA 203,88,96,112,146,150,132,146,150,2,203,67,2,2,112,146,2,146,173,194,121
DATA 2,146,22,22,204,40,121,173,22,2,173,228,22,22,121,2,112,2,204,204,173
DATA 146,22,173,22,121,22,121,22,171,234,215,11,215,49,234,96,215,234,96,171
DATA 2,67,38,69,117,78,72,78,171,67,171,78,23,150,96,67,11,150,153,88,67,78
DATA 150,78,38,78,72,72,171,2,84,67,121,96,215,78,150,203,117,69,67,194,200
DATA 200,132,125,154,159,159,207,183,214,211,24,24,24,164,32,24,42,25,133,133
DATA 75,75,25,42,42,25,25,25,25,133,75,75,133,75,133,42,164,183,159,52,123
DATA 152,35,219,132,151,200,105,100,128,112,150,200,194,203,23,49,121,100,23
DATA 194,204,112,112,96,23,2,2,146,228,22,2,146,22,121,173,173,40,204,22,2
DATA 204,2,146,22,108,84,22,108,121,121,146,173,204,108,40,146,173,22,108,22
DATA 173,204,22,22,237,234,72,11,11,49,237,215,215,96,96,171,67,69,49,38,38
DATA 23,88,78,100,150,150,100,169,112,100,100,78,153,2,67,112,153,112,88,78
DATA 38,117,67,150,11,121,121,84,2,112,117,72,67,153,153,11,170,219,154,52
DATA 159,144,211,42,164,24,32,32,45,41,87,45,45,149,149,16,164,164,32,24,42
DATA 42,42,42,64,24,32,64,64,32,32,24,32,16,164,164,164,64,240,103,52,152,152
DATA 35,151,194,203,205,112,100,23,100,67,88,67,150,62,146,2,100,132,96,112
DATA 146,2,203,112,228,2,150,146,2,40,2,2,228,112,204,204,22,67,22,22,40,40
DATA 108,40,108,173,108,108,40,146,121,173,40,22,40,22,121,22,40,40,114,82
DATA 111,82,72,72,72,215,67,72,69,88,67,72,69,78,67,67,234,72,150,67,67,67
DATA 121,72,78,96,67,2,38,150,100,169,169,78,38,38,72,171,67,2,2,72,69,2,228
DATA 38,69,117,38,205,132,255,15,214,25,24,32,16,41,43,43,89,12,221,221,91
DATA 12,126,113,41,41,149,149,16,32,164,24,42,32,76,45,149,145,24,32,145,188
DATA 87,45,149,87,149,76,76,16,103,207,52,28,98,219,200,105,128,128,38,38,128
DATA 205,146,62,23,2,2,150,121,121,2,22,2,2,2,121,150,171,171,171,121,169,112
DATA 112,121,2,22,146,171,22,2,22,22,173,173,204,108,22,173,2,171,2,204,22
DATA 40,40,228,40,40,173,3,11,82,82,72,72,215,11,72,237,84,78,88,38,72,82,49
DATA 38,117,82,69,69,84,129,117,129,72,38,96,96,96,153,100,100,78,100,96,38
DATA 78,78,84,96,121,22,67,11,23,205,2,69,11,194,151,98,28,214,24,16,53,124
DATA 12,12,91,13,99,99,13,13,6,13,97,12,126,53,149,76,45,45,76,76,45,41,41
DATA 41,41,149,145,16,198,46,142,58,213,53,41,145,87,53,87,32,32,104,166,52
DATA 35,151,132,146,100,112,23,205,203,170,112,150,67,112,2,171,2,173,112,112
DATA 204,150,100,84,234,67,153,228,228,112,228,22,228,117,22,2,84,84,22,204
DATA 121,2,108,22,3,22,204,121,112,2,108,121,84,84,40,108,3,72,117,117,117
DATA 114,11,11,234,69,215,11,38,78,72,114,231,82,67,117,72,38,38,11,88,117
DATA 69,11,150,11,67,78,96,150,23,150,150,69,67,117,204,78,171,2,72,82,203
DATA 23,203,215,136,219,154,183,24,60,124,12,27,27,118,13,13,13,99,99,13,167
DATA 0,93,36,221,221,97,48,45,145,45,53,44,126,53,113,149,45,87,58,45,149,213
DATA 44,44,46,53,41,213,198,44,37,87,145,76,60,211,83,52,152,219,195,132,203
DATA 78,23,169,169,78,88,153,23,171,171,96,169,112,121,100,204,100,11,38,2
DATA 67,2,84,2,84,2,84,67,121,22,204,84,2,2,3,108,2,40,20,108,3,121,84,108
DATA 228,146,84,22,22,22,56,69,114,56,215,56,114,69,150,150,38,72,69,78,11
DATA 72,82,38,38,72,117,38,82,107,82,69,69,215,88,67,67,38,150,96,2,78,78,84
DATA 49,171,171,96,78,84,107,49,112,146,136,255,77,184,24,42,32,61,97,97,0
DATA 13,99,99,13,99,6,167,97,36,91,6,4,4,34,34,0,12,149,240,207,58,149,188
DATA 149,46,156,37,41,41,213,225,225,213,113,126,124,37,58,37,89,113,149,60
DATA 207,164,25,216,83,154,35,136,23,150,194,100,153,203,153,117,84,150,150
DATA 112,3,203,2,2,169,96,171,107,117,38,49,108,67,49,108,84,2,84,3,3,108,108
DATA 40,146,22,3,2,22,108,3,22,3,107,78,2,108,3,2,56,56,56,11,11,38,49,78,23
DATA 215,69,78,69,11,215,117,111,72,67,11,128,117,107,72,11,215,11,215,88,88
DATA 69,69,11,67,78,78,78,49,49,204,2,100,171,84,2,49,67,194,98,51,8,42,24
DATA 145,76,149,0,97,13,0,13,13,99,167,167,97,116,196,27,122,4,4,122,34,13
DATA 6,97,106,213,149,41,113,43,43,37,37,43,43,44,46,126,156,48,44,156,115
DATA 46,156,242,196,113,58,46,45,64,211,8,216,51,152,136,146,150,169,153,88
DATA 88,49,78,150,171,22,78,23,2,38,67,38,38,117,153,38,2,49,150,129,108,2
DATA 49,228,129,22,204,108,2,121,108,22,82,108,72,22,40,22,108,2,22,204,204
DATA 84,229,56,215,69,56,69,72,114,88,11,11,11,171,78,117,117,56,56,49,117
DATA 67,117,38,11,69,114,69,114,38,11,11,69,69,78,11,69,38,49,67,84,72,96,121
DATA 121,146,2,96,151,52,216,25,164,145,16,126,87,12,97,0,0,0,99,122,99,93
DATA 61,119,157,119,0,110,122,39,110,39,110,6,122,6,27,91,61,196,91,196,89
DATA 106,156,44,213,106,89,106,213,113,124,44,44,242,37,89,43,41,213,87,32
DATA 32,145,211,83,33,18,205,150,128,153,153,11,100,96,84,204,128,203,153,38
DATA 2,100,117,38,67,117,38,88,23,117,78,153,117,49,67,67,107,67,117,3,20,84
DATA 129,108,108,204,121,84,67,107,107,84,204,108,56,229,229,72,114,56,114
DATA 49,88,150,78,67,171,234,114,117,129,82,69,38,117,11,38,72,67,2,231,72
DATA 78,78,78,69,11,11,88,171,2,171,67,69,117,72,171,96,78,2,146,35,51,25,64
DATA 60,32,42,41,113,53,93,27,0,99,6,99,61,115,120,0,0,97,110,4,122,39,165
DATA 65,227,39,10,6,36,61,89,12,36,115,91,106,213,44,37,106,93,48,156,37,44
DATA 213,37,48,61,37,113,46,58,198,58,104,188,113,144,211,123,105,194,23,69
DATA 194,105,112,215,22,112,100,49,88,78,129,112,2,203,153,38,38,88,49,203
DATA 23,72,82,78,117,67,38,72,107,129,72,67,129,38,153,38,153,67,129,107,69
DATA 72,2,3,56,56,114,11,114,69,117,107,171,78,49,82,231,237,117,69,108,204
DATA 69,78,11,56,72,129,67,96,171,117,11,11,38,38,117,38,11,171,204,78,11,117
DATA 82,49,67,67,150,194,151,154,183,164,76,76,25,45,196,12,53,196,27,0,13
DATA 119,115,106,119,0,13,36,10,110,10,10,110,165,4,4,167,10,0,48,36,120,97
DATA 61,115,61,242,213,44,116,106,106,106,115,93,124,44,44,48,89,156,44,46
DATA 46,58,213,188,103,41,242,166,83,255,127,150,67,112,112,62,171,121,128
DATA 112,84,2,100,84,169,67,38,107,107,49,117,38,38,117,82,117,38,72,82,117
DATA 49,117,69,171,49,107,67,49,2,38,82,22,49,11,107,78,2,72,69,114,69,38,69
DATA 67,67,72,129,82,67,171,108,82,49,129,96,171,117,49,49,69,69,72,38,78,11
DATA 38,38,11,38,72,78,69,171,171,72,11,38,38,38,96,2,96,132,154,17,8,32,76
DATA 24,76,12,126,12,221,12,97,97,36,93,120,13,99,97,242,6,110,122,34,122,227
DATA 175,4,99,13,122,97,119,99,13,0,91,36,93,115,48,37,48,61,36,61,242,93,120
DATA 48,156,48,93,115,44,44,225,198,188,233,58,41,196,242,183,28,35,136,121
DATA 38,146,38,107,150,23,22,84,67,2,100,100,2,38,128,203,23,153,84,84,84,117
DATA 11,82,49,49,107,129,228,204,231,22,129,100,153,49,78,82,129,49,117,2,40
DATA 228,215,69,72,72,72,69,117,67,38,82,72,121,204,108,49,49,117,171,84,84
DATA 72,69,56,38,38,72,117,11,38,38,78,117,78,38,72,11,96,117,11,38,38,96,96
DATA 171,153,125,15,8,24,60,145,24,43,89,27,99,99,0,0,97,13,6,167,13,119,102
DATA 13,175,110,39,10,4,165,74,65,6,13,0,27,34,34,13,0,97,119,13,27,61,91,120
DATA 97,97,61,48,156,36,119,37,225,48,36,115,66,57,141,139,188,142,188,196
DATA 97,126,139,152,151,132,62,23,22,96,169,173,22,22,2,121,150,112,67,78,2
DATA 22,121,112,67,23,203,88,82,84,129,129,49,78,38,2,121,84,78,67,49,153,23
DATA 78,67,49,72,121,22,146,78,69,114,117,82,117,67,117,78,72,72,231,108,204
DATA 72,49,117,67,171,84,171,69,82,69,69,38,69,114,38,128,78,11,78,72,215,150
DATA 67,67,11,38,78,2,171,11,62,35,15,8,164,45,45,198,196,196,6,122,118,99
DATA 10,4,39,6,6,93,44,162,94,227,110,4,110,74,74,4,122,13,99,99,122,122,34
DATA 6,13,0,13,122,13,0,99,99,34,27,36,61,113,37,106,48,156,213,48,36,66,46
DATA 213,233,183,46,225,43,12,12,240,28,35,127,62,112,146,170,100,112,112,121
DATA 2,112,100,84,2,2,204,100,112,2,2,228,78,67,2,121,204,2,67,67,2,84,107
DATA 171,2,22,2,84,107,49,129,11,88,112,23,228,38,11,88,72,69,117,38,67,78
DATA 84,234,215,204,22,22,108,121,67,171,49,82,72,69,11,69,11,215,69,38,117
DATA 11,11,38,117,215,78,231,215,88,23,78,117,78,23,62,199,77,164,32,60,58
DATA 213,12,0,13,6,99,122,110,110,34,6,34,61,119,227,94,4,227,227,4,227,4,10
DATA 34,34,122,122,122,122,34,122,13,97,0,6,6,13,13,27,13,13,119,91,115,44
DATA 198,225,44,44,106,242,141,233,102,58,138,66,225,213,43,221,113,77,152
DATA 35,181,96,150,127,150,96,112,23,23,2,108,38,128,153,96,171,169,67,108
DATA 117,117,82,117,67,72,72,84,171,78,84,204,204,84,117,107,3,107,72,49,69
DATA 82,67,96,228,229,23,11,38,23,23,11,171,169,171,237,171,22,121,49,49,22
DATA 20,204,69,49,69,72,11,11,78,215,69,69,49,38,38,38,78,11,67,234,11,128
DATA 23,72,78,150,23,127,154,184,164,16,76,207,58,61,27,6,34,122,10,110,4,110
DATA 39,99,6,4,94,172,165,172,165,165,65,10,10,122,122,10,110,122,34,6,0,13
DATA 0,91,119,97,120,0,27,36,91,99,120,115,106,142,46,225,213,186,37,57,77
DATA 141,73,142,46,141,141,115,221,43,159,98,18,146,112,100,96,67,150,150,121
DATA 121,2,78,23,23,117,171,121,96,234,69,215,82,231,82,72,38,38,67,67,117
DATA 117,107,40,67,38,108,107,49,49,67,114,82,72,121,22,153,38,38,153,11,88
DATA 150,96,171,171,107,234,121,121,2,78,67,22,49,78,88,69,69,11,11,96,11,88
DATA 67,117,38,38,38,72,69,215,11,88,11,38,117,117,100,170,199,51,8,64,32,16
DATA 87,73,124,0,99,13,13,6,34,122,34,0,13,122,110,4,4,110,165,65,4,65,10,10
DATA 110,122,34,10,10,99,99,97,27,119,36,36,115,106,93,36,48,48,93,97,61,37
DATA 37,44,198,44,44,141,116,102,213,186,240,66,134,134,61,27,221,46,154,18
DATA 151,203,153,2,88,78,2,2,150,100,49,228,38,38,38,2,121,215,215,69,49,72
DATA 111,117,88,49,67,117,67,23,82,49,78,84,84,38,82,82,107,108,82,204,20,100
DATA 229,38,153,153,38,67,171,171,171,171,107,49,129,117,117,121,67,169,121
DATA 121,171,69,38,117,117,38,11,153,38,78,38,153,78,78,69,69,11,78,72,72,69
DATA 2,194,127,255,15,211,164,145,145,149,126,196,27,196,126,126,91,91,118
DATA 13,13,99,10,10,122,34,122,4,110,10,10,10,6,167,6,97,6,34,97,61,61,162
DATA 61,226,48,141,242,126,213,46,141,48,119,91,106,44,141,142,142,213,225
DATA 242,106,225,198,159,52,138,52,57,13,118,48,28,152,136,112,203,245,112
DATA 121,78,62,117,82,49,153,117,69,69,215,88,69,117,72,38,82,72,117,49,229
DATA 38,117,117,22,84,11,82,3,38,228,22,107,237,237,237,107,204,78,38,88,128
DATA 38,117,117,67,88,171,121,72,114,72,117,107,121,2,121,171,108,121,67,49
DATA 38,114,88,153,117,78,38,117,72,11,11,129,69,88,67,72,117,117,171,194,127
DATA 255,139,211,32,16,104,16,16,16,32,16,45,41,126,12,118,13,0,99,34,34,122
DATA 122,34,122,39,122,167,6,13,157,157,120,162,13,162,162,115,48,48,48,242
DATA 57,57,225,213,213,46,37,97,97,116,44,102,141,58,44,242,44,106,44,198,138
DATA 188,207,166,52,249,248,249,57,123,219,170,128,203,100,62,128,72,117,129
DATA 88,128,49,215,128,11,49,69,38,88,67,231,69,72,82,56,82,82,49,228,2,38
DATA 129,69,67,108,22,204,82,69,3,107,78,22,38,38,11,38,11,11,69,171,171,171
DATA 82,111,67,69,108,84,2,22,96,121,171,100,11,49,49,49,117,78,38,72,117,78
DATA 128,72,38,11,11,171,2,49,49,84,136,151,123,184,24,16,32,75,19,25,64,16
DATA 32,145,41,43,89,12,221,12,118,13,13,6,0,120,61,61,162,162,162,162,48,106
DATA 116,106,48,106,48,61,242,116,242,225,116,106,115,115,61,37,53,221,13,61
DATA 106,116,225,138,141,213,57,48,44,213,73,198,142,139,83,66,18,33,33,152
DATA 199,151,169,155,23,153,82,153,155,38,153,117,114,11,69,62,69,38,153,38
DATA 49,82,11,11,49,49,111,117,69,2,49,111,72,69,108,49,84,129,117,69,82,107
DATA 107,78,11,72,49,88,78,72,117,69,171,67,129,108,84,107,22,40,84,67,204
DATA 121,2,2,67,96,49,107,72,100,67,72,117,23,11,78,88,96,171,171,2,82,72,150
DATA 170,35,15,17,164,32,64,75,75,64,16,16,76,113,37,113,113,113,43,12,12,12
DATA 91,93,37,213,37,46,142,142,142,142,46,106,57,141,44,141,48,242,116,61
DATA 48,48,226,116,61,91,36,12,36,89,91,120,61,48,37,141,156,46,48,226,36,225
DATA 233,213,141,52,83,28,18,151,219,219,199,35,100,128,88,117,153,128,56,128
DATA 88,49,38,88,11,11,56,38,49,38,129,117,107,129,117,107,114,72,111,108,117
DATA 237,82,111,117,129,3,107,129,108,72,129,49,11,231,234,72,67,72,82,38,67
DATA 67,171,107,96,121,40,3,40,204,84,40,121,96,121,107,107,117,38,11,23,121
DATA 204,88,88,117,38,38,171,171,100,169,2,2,132,151,35,77,8,64,60,145,211
DATA 8,211,164,16,76,41,41,87,149,149,113,12,12,44,46,213,58,198,46,77,139
DATA 52,77,66,57,57,44,116,226,116,141,48,120,120,91,119,91,120,119,97,0,119
DATA 36,61,242,93,115,106,48,106,48,156,213,115,226,46,141,242,226,142,139
DATA 51,255,127,62,200,151,127,203,56,88,125,128,114,56,38,11,11,11,155,128
DATA 229,114,114,38,49,38,38,107,108,72,117,72,82,111,153,153,82,114,72,49
DATA 107,107,82,107,72,117,111,88,72,215,11,82,49,117,38,231,82,72,231,117
DATA 96,108,108,121,22,108,204,2,84,171,78,171,72,78,38,72,67,96,88,11,67,67
DATA 78,88,69,2,2,171,96,2,136,151,219,77,8,16,60,76,104,25,42,164,16,145,103
DATA 103,73,113,126,225,126,225,213,58,233,233,142,58,139,142,233,233,138,46
DATA 138,213,213,233,44,93,0,162,61,36,196,120,0,99,34,122,122,99,93,102,37
DATA 37,37,226,226,93,44,37,36,102,102,57,115,36,48,57,139,15,35,23,128,169
DATA 146,153,88,153,128,114,229,38,114,11,56,23,128,38,88,38,11,128,82,49,38
DATA 38,49,49,11,128,117,56,56,49,111,231,114,3,107,49,114,72,117,114,11,56
DATA 47,231,237,107,82,78,72,3,129,234,72,84,108,22,204,3,3,3,67,67,84,49,11
DATA 67,72,38,69,67,11,23,153,67,117,67,78,11,88,49,121,96,169,146,151,35,152
DATA 139,42,45,149,104,211,25,42,64,32,60,76,188,53,126,37,46,73,183,73,58
DATA 159,159,58,142,77,233,233,138,46,44,102,52,159,240,233,233,37,36,97,99
DATA 167,110,235,94,94,178,147,4,99,116,44,213,44,48,93,61,156,116,36,116,134
DATA 134,116,61,115,36,138,51,98,127,150,78,100,153,88,23,78,117,56,56,69,117
DATA 38,88,56,11,11,129,215,128,114,72,114,117,114,117,69,117,56,155,229,229
DATA 9,155,56,82,49,38,56,38,117,11,11,117,155,3,204,72,129,111,114,49,107
DATA 237,82,108,84,171,40,40,108,20,22,22,84,49,38,72,72,67,38,67,114,38,117
DATA 38,67,38,69,38,38,38,67,171,169,132,219,199,154,83,42,60,145,144,8,25
DATA 24,32,32,145,41,213,73,188,213,188,73,198,233,198,213,213,142,198,139
DATA 58,46,156,141,44,46,141,102,142,198,198,159,104,213,99,4,158,81,93,13
DATA 39,65,178,4,157,225,142,198,37,162,116,156,141,36,48,57,134,213,156,61
DATA 36,44,211,71,35,105,112,169,2,67,2,121,84,11,114,9,49,117,11,11,11,38
DATA 49,11,197,72,69,88,9,72,69,56,69,56,114,229,229,229,11,237,215,69,229
DATA 229,47,155,155,56,56,56,82,69,69,3,108,129,72,72,111,107,129,84,204,3
DATA 20,22,84,40,3,38,117,72,82,69,117,38,38,82,117,38,67,78,67,67,67,38,153
DATA 78,228,194,132,35,123,15,25,42,164,42,42,164,24,64,16,16,188,87,233,73
DATA 188,58,198,142,225,213,73,188,198,44,233,58,156,37,115,61,115,213,46,142
DATA 141,225,58,141,188,71,139,202,154,26,29,139,167,6,80,178,6,61,213,159
DATA 102,115,93,115,115,119,115,242,141,142,106,119,97,91,149,8,52,195,2,84
DATA 2,38,121,84,84,38,49,82,107,67,82,107,117,82,11,56,111,111,38,72,56,117
DATA 108,72,117,117,82,117,117,11,129,107,82,82,82,107,117,56,114,11,38,49
DATA 49,67,84,22,49,49,107,82,72,237,107,108,3,107,40,107,231,3,3,107,84,84
DATA 67,38,49,49,72,114,117,69,150,169,171,117,38,112,205,100,200,105,219,219
DATA 152,184,75,24,42,25,42,164,32,16,32,76,149,46,240,159,142,207,142,242
DATA 44,233,213,46,46,138,46,213,44,156,61,119,226,46,66,142,141,102,225,44
DATA 44,142,83,52,134,196,36,95,235,92,190,101,39,0,141,139,233,115,0,97,119
DATA 120,61,242,213,242,99,39,4,10,91,139,83,219,146,121,38,117,38,107,49,72
DATA 204,22,204,121,84,107,78,69,82,129,82,229,117,9,9,47,3,108,49,117,111
DATA 108,67,67,49,3,72,117,84,107,111,108,38,38,72,129,49,228,22,2,96,234,189
DATA 107,82,108,107,129,49,49,107,82,107,108,3,40,107,84,107,107,49,72,72,11
DATA 69,67,171,100,69,49,82,171,200,132,136,151,152,66,183,216,25,24,25,75
DATA 42,164,164,32,104,103,103,198,46,198,73,240,44,242,37,116,61,242,44,44
DATA 141,37,226,157,162,141,138,44,242,106,57,44,37,225,213,213,58,166,186
DATA 91,110,94,94,80,190,160,4,99,115,159,183,44,115,162,120,97,36,225,225
DATA 34,147,165,101,34,113,103,54,77,105,146,108,129,38,82,3,3,49,108,121,108
DATA 3,129,69,49,107,3,82,108,129,111,108,107,69,117,117,49,49,67,49,108,3
DATA 11,72,82,49,82,82,107,107,49,107,78,49,228,228,72,231,107,69,49,49,114
DATA 117,49,129,69,82,3,108,82,108,3,3,3,237,82,72,171,171,117,117,117,96,169
DATA 169,171,2,100,170,127,35,123,52,144,216,25,42,42,25,42,24,16,32,16,60
DATA 188,198,46,58,198,213,37,242,225,142,116,93,37,37,120,162,120,119,134
DATA 213,142,183,102,48,116,115,48,48,242,106,115,242,186,240,58,36,4,94,65
DATA 7,92,178,10,48,144,216,184,44,116,93,157,115,46,119,34,34,10,92,190,213
DATA 58,184,54,35,105,2,204,228,84,84,49,107,49,82,129,129,129,108,108,129
DATA 107,108,84,2,72,72,49,84,171,171,72,69,117,129,49,88,82,20,108,150,107
DATA 237,40,204,204,129,84,117,56,9,189,111,215,67,117,56,69,117,3,3,72,82
DATA 107,3,189,107,108,237,231,72,72,234,171,67,67,38,78,78,169,150,194,23
DATA 170,151,35,35,123,51,19,75,75,75,25,25,24,32,16,145,60,188,73,188,213
DATA 142,58,233,213,44,58,44,102,57,44,37,93,120,93,48,102,138,183,46,66,46
DATA 116,93,115,36,61,36,61,116,116,102,44,58,52,202,13,190,160,101,13,43,188
DATA 211,211,139,52,102,57,141,58,99,10,110,65,92,34,242,87,138,26,123,181
DATA 121,84,22,129,129,108,108,108,72,107,107,3,129,108,108,3,204,204,171,237
DATA 107,108,22,22,2,204,117,108,129,117,129,3,84,2,84,171,3,121,2,2,2,82,181
DATA 229,9,254,9,129,117,38,237,111,82,111,129,111,82,72,3,246,189,107,82,237
DATA 3,72,69,72,82,49,11,112,112,200,170,151,125,255,199,35,123,159,8,19,75
DATA 75,75,75,42,211,32,60,60,188,87,213,213,58,198,46,44,44,142,213,242,156
DATA 44,61,115,93,61,57,46,233,138,159,159,134,93,36,36,116,156,61,106,48,120
DATA 36,116,89,44,102,213,53,43,196,61,89,36,13,48,233,166,166,183,77,102,58
DATA 36,4,178,178,80,39,0,60,37,71,51,195,121,40,67,121,108,3,107,67,129,107
DATA 49,108,49,108,3,84,171,171,108,108,22,108,22,22,204,2,108,3,84,108,20
DATA 22,150,40,108,3,40,78,108,121,204,108,154,168,129,82,189,254,49,47,111
DATA 231,72,82,237,111,111,82,3,189,237,108,231,108,107,129,72,72,114,69,78
DATA 100,170,170,219,35,152,123,123,123,28,8,133,75,75,75,25,25,25,25,164,207
DATA 60,145,60,46,207,103,142,46,46,156,48,36,120,115,115,93,93,61,106,57,102
DATA 159,103,138,138,213,37,48,36,93,61,61,115,162,36,48,36,61,106,115,120
DATA 97,120,97,13,0,0,91,27,48,139,71,26,71,139,44,41,99,94,94,65,4,122,37
DATA 156,183,15,195,22,22,204,2,3,108,3,82,72,82,49,108,108,204,84,96,72,204
DATA 121,108,40,40,108,121,84,3,108,204,204,40,108,67,107,204,107,20,72,108
DATA 84,11,11,49,247,15,209,40,111,197,254,9,114,189,47,3,82,231,82,189,3,47
DATA 189,189,231,189,3,107,72,117,11,215,129,67,127,35,35,123,152,66,77,144
DATA 216,75,75,75,42,42,42,164,32,16,60,16,207,149,53,188,73,198,37,37,242
DATA 48,61,119,91,115,115,120,97,116,102,138,138,213,198,46,225,46,116,242
DATA 134,226,120,162,61,61,61,119,162,162,120,115,91,119,119,157,37,41,41,43
DATA 36,48,141,159,26,54,19,211,58,58,163,95,4,4,34,43,186,183,15,195,146,146
DATA 108,84,204,22,108,107,108,129,129,40,22,84,72,129,49,82,108,20,22,112
DATA 173,121,22,108,49,67,40,40,171,108,3,72,40,20,47,49,111,3,107,3,238,208
DATA 83,187,40,197,197,111,111,189,246,231,197,237,231,246,189,189,47,189,82
DATA 189,107,117,117,114,114,69,11,67,105,35,255,123,28,71,216,25,75,75,42
DATA 42,42,25,75,25,64,45,113,87,183,104,103,45,87,44,242,242,106,115,120,97
DATA 91,120,120,225,225,36,57,142,102,48,93,242,198,213,61,226,141,57,57,116
DATA 61,115,115,120,120,119,97,97,97,36,119,48,103,240,41,36,196,58,141,138
DATA 139,17,216,214,8,144,166,139,138,37,89,73,240,139,15,18,194,204,204,108
DATA 22,204,204,108,20,129,107,108,108,40,129,3,108,107,108,22,121,108,108
DATA 20,22,49,107,3,22,3,108,40,84,108,20,84,129,20,20,3,237,82,238,238,218
DATA 83,194,3,237,189,107,111,189,111,189,47,254,246,254,9,9,9,197,237,111
DATA 49,38,78,11,150,23,23,151,219,98,159,211,216,75,75,25,42,24,164,42,75
DATA 75,25,32,76,53,43,149,183,207,87,44,225,58,186,37,61,97,162,120,0,48,102
DATA 66,44,61,61,48,120,13,13,61,37,57,36,36,116,48,48,106,93,119,120,120,93
DATA 120,119,119,119,61,106,44,106,113,103,8,144,66,116,138,73,220,184,184
DATA 71,144,19,17,184,233,58,213,103,77,195,121,108,129,107,129,108,84,84,121
DATA 84,40,107,108,40,20,204,22,20,20,22,204,22,3,129,2,22,3,20,40,108,40,3
DATA 20,40,204,3,3,20,3,3,3,69,218,218,29,5,54,127,20,197,229,9,189,47,189
DATA 47,189,189,9,254,9,229,197,231,107,49,67,100,150,170,127,35,98,52,83,230
DATA 133,75,211,25,25,24,24,32,24,25,42,42,24,145,87,126,242,58,188,53,225
DATA 141,225,141,37,141,142,142,156,113,46,37,102,44,116,91,61,27,99,110,110
DATA 6,97,97,97,36,162,36,61,120,93,120,119,157,97,0,0,93,116,48,97,97,97,36
DATA 233,8,138,57,102,52,166,71,183,71,144,19,230,19,241,166,207,240,77,136
DATA 146,2,49,69,129,129,82,107,82,82,47,3,3,20,108,204,40,108,3,204,204,3
DATA 129,84,22,129,20,108,129,108,3,20,204,108,20,40,40,204,40,3,107,108,218
DATA 218,217,29,55,5,199,168,229,9,246,189,189,189,189,9,47,254,9,114,215,96
DATA 67,67,112,146,146,127,255,154,51,19,19,75,75,25,75,24,164,164,164,64,64
DATA 24,42,42,24,24,32,188,44,46,149,41,44,46,225,225,213,58,139,139,58,44
DATA 44,156,116,115,93,27,27,97,99,122,110,65,39,13,119,99,0,0,13,119,120,13
DATA 6,99,99,0,13,36,97,99,110,39,0,167,0,138,233,61,134,102,52,139,159,159
DATA 220,8,241,8,8,216,104,104,15,219,132,146,72,107,82,129,129,49,114,82,108
DATA 107,108,3,171,3,40,204,22,3,3,108,121,22,40,22,22,22,3,20,3,22,40,40,108
DATA 108,3,108,20,20,82,20,1,1,1,29,238,208,79,255,3,180,47,246,189,246,47
DATA 9,9,9,254,9,11,150,171,96,132,136,105,35,123,51,230,191,133,25,42,24,42
DATA 42,24,32,16,64,64,24,42,24,64,64,164,16,46,37,53,46,46,46,37,242,48,225
DATA 141,141,66,44,48,93,119,27,13,0,97,0,99,97,0,6,10,10,13,27,0,97,97,27
DATA 99,99,97,119,0,119,99,167,6,6,162,0,162,99,10,0,46,162,163,116,28,138
DATA 138,58,144,144,8,19,207,144,214,103,51,219,181,173,108,107,49,107,231
DATA 107,231,3,107,84,3,204,40,20,22,2,3,3,22,20,20,3,204,22,121,40,20,20,204
DATA 20,140,204,40,3,108,20,108,129,3,40,1,79,5,5,29,222,30,176,98,108,108
DATA 246,246,246,9,114,9,189,9,56,153,96,96,23,127,255,35,219,28,17,216,25
DATA 75,25,25,24,32,64,64,16,60,76,32,24,164,32,16,16,60,149,126,115,37,87
DATA 41,43,89,0,99,97,115,134,61,48,162,97,97,0,99,27,27,97,97,27,97,120,13
DATA 6,122,6,0,13,0,13,0,119,120,97,0,6,122,110,99,242,61,162,120,162,36,162
DATA 226,57,167,93,36,13,13,97,226,46,71,104,198,225,46,73,66,195,181,228,121
DATA 2,171,2,204,3,20,20,204,82,108,107,20,3,84,40,108,3,3,22,20,107,84,108
DATA 40,20,67,49,40,20,108,204,108,20,82,129,3,20,40,108,131,29,29,176,176
DATA 1,222,30,176,98,168,72,237,9,9,117,56,114,11,155,150,170,132,170,35,98
DATA 154,51,17,19,42,42,42,164,145,64,145,87,45,149,45,45,145,64,16,60,60,76
DATA 188,73,186,44,53,198,213,44,106,196,27,122,6,61,61,119,93,120,27,27,27
DATA 13,99,99,13,13,99,27,91,97,99,99,97,97,97,0,0,97,119,97,167,39,99,119
DATA 36,97,110,10,167,10,97,36,61,116,116,6,4,39,110,4,4,120,8,104,216,8,104
DATA 71,123,195,200,146,173,22,108,67,171,96,67,2,40,40,107,108,82,111,107
DATA 84,204,204,72,108,3,129,3,20,20,107,107,40,20,108,108,20,3,3,20,3,20,20
DATA 107,117,21,29,222,86,131,1,5,5,79,176,90,2,231,197,9,153,128,88,11,150
DATA 127,125,127,151,35,154,139,19,230,75,25,42,42,164,76,45,60,73,198,213
DATA 41,188,145,16,32,145,76,45,45,149,41,113,53,46,46,44,37,115,91,97,6,122
DATA 119,106,61,120,91,91,119,97,99,122,34,99,0,97,97,120,97,97,27,97,97,120
DATA 120,97,13,34,10,122,6,10,99,61,93,0,10,110,4,39,120,61,102,99,94,165,39
DATA 39,110,37,216,8,104,166,166,51,219,146,2,146,100,22,84,107,111,69,69,67
DATA 150,2,84,107,111,108,82,129,82,107,20,40,82,129,3,107,84,82,40,40,107
DATA 3,20,3,3,20,3,40,107,40,107,107,208,21,217,206,251,29,29,1,5,79,176,90
DATA 96,9,56,155,62,170,146,132,35,199,255,98,28,183,19,133,75,75,133,42,64
DATA 16,32,16,188,198,58,213,242,213,45,16,32,76,41,113,41,41,113,126,196,89
DATA 37,37,242,116,61,36,97,0,97,120,91,27,97,27,27,0,0,0,13,0,97,0,13,0,99
DATA 13,13,0,97,13,0,13,6,10,10,122,99,99,39,39,13,99,99,0,99,10,39,99,61,226
DATA 4,175,110,4,122,58,241,104,36,57,77,66,232,105,2,181,228,228,38,82,72
DATA 111,3,111,2,112,62,72,108,49,38,111,49,111,108,129,49,20,3,49,129,40,108
DATA 72,20,3,40,20,20,108,107,3,3,129,107,3,206,222,29,137,137,243,29,29,222
DATA 251,222,85,15,132,69,88,127,199,132,219,98,154,52,52,183,42,75,75,75,25
DATA 25,25,64,60,76,16,16,213,141,37,48,126,149,207,76,45,41,43,12,12,196,43
DATA 124,12,12,89,196,61,61,120,0,0,0,97,91,91,27,97,0,13,0,97,97,27,0,13,0
DATA 119,97,97,13,13,13,99,99,34,34,10,10,34,6,99,6,4,122,110,110,122,13,0
DATA 0,6,0,93,0,227,65,110,120,183,216,46,213,139,51,219,151,35,255,98,18,187
DATA 146,2,49,111,3,3,108,114,129,78,153,82,108,47,114,117,111,111,3,111,197
DATA 129,3,107,237,20,111,72,20,3,189,82,3,107,3,108,3,3,247,247,222,185,21
DATA 21,21,21,86,222,29,86,5,51,219,151,255,98,98,52,83,17,211,214,24,75,42
DATA 24,24,24,32,32,32,60,45,87,149,213,242,37,156,37,43,41,149,149,53,43,196
DATA 12,12,43,113,196,27,97,91,124,89,115,36,27,13,34,0,91,91,91,120,120,97
DATA 0,27,27,13,27,0,6,34,6,6,34,34,99,13,6,122,39,110,10,122,6,6,122,34,39
DATA 110,39,110,99,162,36,36,36,157,4,165,157,233,183,73,103,166,15,18,187
DATA 136,105,127,35,177,177,90,35,151,200,84,237,197,72,111,69,72,78,82,3,231
DATA 69,108,111,47,229,47,20,111,3,20,108,114,108,3,114,3,3,129,114,117,111
DATA 40,108,21,21,21,137,208,251,222,222,29,222,206,29,251,230,51,52,83,71
DATA 216,216,216,19,24,164,25,133,42,24,164,64,164,32,60,60,45,41,225,225,44
DATA 225,37,242,113,41,149,149,53,53,53,41,53,126,124,12,221,0,0,221,12,196
DATA 89,91,0,0,6,6,34,122,99,97,97,157,27,13,27,13,4,65,4,65,65,160,92,7,190
DATA 190,13,13,99,34,34,99,10,10,99,13,6,6,122,95,167,99,0,157,99,227,167,66
DATA 66,66,139,138,102,219,209,146,203,146,67,49,254,11,132,98,154,98,177,170
DATA 100,129,129,111,111,129,107,96,78,111,72,49,111,47,3,107,107,3,107,82
DATA 108,40,72,82,3,3,117,3,82,20,20,3,243,251,63,63,63,206,63,206,206,206
DATA 230,133,191,133,133,216,19,19,19,19,25,42,42,8,75,75,75,24,42,24,164,32
DATA 32,16,76,58,46,141,213,213,113,44,46,53,149,87,53,53,41,87,41,126,89,196
DATA 12,221,0,6,13,0,221,12,36,221,0,99,34,10,122,99,13,13,97,0,99,65,172,147
DATA 101,101,101,160,7,7,7,190,124,126,13,0,0,13,99,34,34,13,6,97,97,6,122
DATA 167,0,120,167,110,93,141,116,102,66,57,35,105,100,88,128,23,38,229,9,56
DATA 72,204,146,219,98,255,151,170,2,108,9,254,111,129,67,11,69,9,114,3,47
DATA 82,40,49,3,117,129,129,129,189,3,3,40,20,3,108,82,108,206,222,86,217,208
DATA 206,206,191,191,191,230,19,19,133,133,75,42,42,25,42,42,16,164,75,75,25
DATA 75,25,64,42,25,24,32,16,60,58,198,44,44,44,156,43,43,113,53,41,41,113
DATA 113,43,43,124,89,12,12,91,27,13,6,34,6,6,6,99,6,99,6,99,99,99,99,0,0,99
DATA 110,147,147,147,74,101,101,80,7,190,7,160,190,118,80,6,13,13,0,27,27,157
DATA 13,97,0,97,0,97,97,99,39,99,61,115,106,57,102,123,35,112,234,69,150,203
DATA 203,153,205,108,49,9,82,107,194,125,35,219,125,62,153,56,229,49,82,38
DATA 38,229,47,47,107,3,107,82,49,129,129,108,108,9,3,3,111,129,3,107,108,20
DATA 85,54,17,17,216,216,133,191,133,133,133,19,75,75,75,25,42,164,25,164,164
DATA 32,24,25,75,75,25,42,24,32,24,42,64,24,145,58,142,44,225,37,48,196,43
DATA 43,113,41,53,126,89,12,12,124,43,196,12,12,91,27,0,99,99,34,34,122,10
DATA 10,122,99,6,99,13,99,122,122,10,165,74,74,74,74,101,80,7,135,7,92,92,7
DATA 92,65,165,227,4,110,13,142,93,0,6,99,119,120,162,157,162,157,116,57,57
DATA 57,152,18,205,49,231,72,96,100,146,150,150,72,155,155,56,56,11,88,127
DATA 35,136,200,177,62,49,49,9,56,11,229,9,11,47,107,231,129,254,3,107,82,49
DATA 3,9,9,47,111,3,3,20,3,192,15,51,216,230,230,191,133,191,133,133,75,133
DATA 75,75,25,42,42,24,24,60,32,75,25,42,42,24,16,60,164,64,32,16,60,16,58
DATA 198,142,142,44,43,89,124,242,43,53,53,43,196,12,91,91,91,91,91,221,221
DATA 91,27,13,13,13,0,99,34,34,6,6,99,13,34,10,10,10,167,4,74,74,74,74,101
DATA 80,239,135,7,92,92,7,13,178,175,175,172,94,227,104,196,10,39,110,0,120
DATA 162,162,134,134,134,134,33,219,195,136,2,11,23,72,67,96,23,38,11,180,56
DATA 155,229,117,38,153,23,127,127,200,146,23,62,117,117,155,114,254,229,114
DATA 9,72,72,49,47,111,189,155,117,47,11,9,189,108,237,108,20,180,63,63,63
DATA 63,191,75,133,133,133,75,75,75,75,25,25,25,32,32,32,32,16,25,133,25,24
DATA 164,16,145,149,53,60,16,164,149,45,207,46,46,46,44,37,126,43,43,43,124
DATA 43,124,124,124,196,12,12,12,91,221,221,27,13,13,99,13,0,6,99,13,99,13
DATA 6,10,10,10,110,110,167,10,235,235,74,74,101,101,239,135,190,92,92,190
DATA 190,65,172,175,94,94,4,73,97,39,10,122,97,162,36,134,33,152,18,195,195
DATA 136,194,121,72,38,38,78,82,56,155,155,56,229,38,237,215,88,114,56,128
DATA 117,11,62,23,204,96,23,128,9,9,47,56,56,197,189,72,47,229,9,56,114,3,9
DATA 229,254,189,3,197,20,82,9,133,191,191,191,133,75,25,75,75,75,25,75,42
DATA 24,24,24,60,145,60,145,211,75,133,25,42,164,32,32,32,87,196,45,16,145
DATA 183,104,207,46,126,106,242,43,196,124,124,196,196,124,124,89,12,12,12
DATA 12,221,91,91,0,13,0,0,13,6,13,13,13,99,6,122,34,122,4,110,110,10,167,235
DATA 235,175,74,235,101,239,135,135,7,92,190,190,80,94,94,94,165,39,167,99
DATA 10,34,0,97,36,57,123,18,18,132,181,173,22,84,11,231,107,107,49,155,197
DATA 111,56,78,117,72,38,11,114,114,56,9,229,72,150,150,169,78,82,23,128,228
DATA 129,114,9,9,9,129,3,254,117,111,47,254,56,111,111,111,3,108,180,189,3
DATA 191,75,75,133,75,75,42,42,25,25,42,42,25,64,32,64,16,45,145,42,133,191
DATA 191,25,42,64,45,149,45,45,196,0,196,188,103,207,16,103,37,93,115,196,91
DATA 36,12,91,196,124,89,12,221,91,12,91,221,12,221,27,118,0,13,99,6,34,34
DATA 13,99,13,13,122,10,10,39,110,39,122,235,74,74,74,235,101,160,135,135,190
DATA 190,190,135,92,94,94,165,110,4,10,13,122,99,120,119,134,102,219,18,168
DATA 170,146,3,22,72,69,171,215,82,82,11,180,231,114,234,78,114,9,229,229,9
DATA 9,56,56,117,11,72,62,88,72,111,112,150,88,72,3,229,114,254,56,114,47,3
DATA 20,114,229,114,9,3,82,56,47,3,180,75,75,42,42,42,25,25,42,42,25,25,42
DATA 42,24,16,76,60,32,164,42,75,19,42,64,211,42,32,16,32,16,41,97,122,97,198
DATA 41,41,58,46,61,119,119,27,91,12,12,196,196,89,124,196,12,12,91,196,196
DATA 91,27,118,0,0,13,6,34,99,99,34,122,4,165,65,110,110,4,110,10,227,172,74
DATA 227,165,101,160,135,14,118,118,190,135,7,178,175,39,227,4,167,167,13,0
DATA 91,115,57,33,18,195,181,23,169,22,67,114,49,108,84,82,111,47,114,56,114
DATA 69,114,117,229,56,229,254,9,11,229,229,11,11,117,88,155,38,72,38,88,38
DATA 114,56,254,47,155,114,9,229,9,111,9,111,20,9,56,3,47,56,47,75,25,25,42
DATA 42,42,25,25,24,24,42,25,24,16,16,149,145,8,25,25,75,75,164,45,16,75,24
DATA 16,32,145,45,41,124,0,242,46,37,44,213,37,36,119,91,36,12,196,89,43,87
DATA 76,60,16,60,60,45,113,89,27,0,0,13,99,99,6,6,34,122,122,10,39,110,4,110
DATA 110,4,39,110,172,175,227,65,101,160,135,14,221,118,190,135,190,65,39,110
DATA 227,39,6,6,97,120,36,57,33,151,136,181,169,96,11,49,84,9,129,72,11,111
DATA 47,111,9,229,114,107,82,111,11,155,254,254,9,114,155,254,114,11,107,129
DATA 155,9,9,114,88,117,117,111,9,155,9,254,9,9,56,47,47,47,9,155,9,3,3,254
DATA 9,25,42,42,42,42,42,42,42,42,164,64,164,42,24,16,16,64,8,211,75,191,191
DATA 25,16,149,16,24,32,207,73,41,53,213,37,37,186,242,48,106,61,61,61,36,221
DATA 196,53,16,60,16,145,76,145,64,144,164,16,16,113,12,0,99,6,6,6,34,122,122
DATA 122,10,39,39,110,110,110,110,39,10,165,74,165,65,101,160,14,14,221,118
DATA 118,190,190,160,110,227,4,10,6,13,97,36,115,134,18,136,170,146,129,111
DATA 23,49,108,229,56,117,129,72,47,229,229,117,82,111,180,254,229,155,56,9
DATA 47,229,254,47,229,229,56,3,108,56,56,9,117,88,117,108,9,56,9,114,9,56
DATA 254,3,254,9,114,9,47,56,47,47,229,75,42,42,25,42,24,164,164,24,42,24,32
DATA 16,32,32,42,42,24,42,75,133,133,75,32,87,60,60,76,60,87,44,126,156,213
DATA 242,44,37,116,93,116,106,48,61,196,60,103,64,16,41,213,44,186,186,73,214
DATA 144,104,64,188,12,13,6,99,34,122,122,122,39,110,227,4,110,110,4,4,110
DATA 10,4,74,74,165,101,160,14,14,14,118,118,135,7,160,65,4,39,34,0,97,120
DATA 115,116,33,136,2,112,38,3,56,38,153,38,117,49,228,117,38,108,49,9,229
DATA 9,114,47,9,56,229,56,9,254,9,9,56,254,114,56,47,254,229,155,111,82,88
DATA 11,49,254,9,9,47,20,47,3,114,108,20,47,47,56,9,47,117,229,25,25,42,42
DATA 42,24,164,32,164,164,164,64,145,45,64,25,25,25,75,75,75,75,25,32,60,32
DATA 16,16,73,213,44,126,61,44,44,37,46,156,48,106,156,61,124,16,240,213,46
DATA 41,48,196,196,43,196,156,73,214,211,104,104,43,13,99,99,34,34,122,122
DATA 122,10,10,110,110,4,4,4,110,10,39,165,74,235,178,160,14,14,14,27,118,190
DATA 7,160,165,4,167,13,97,97,27,115,33,18,195,204,203,38,111,11,129,2,153
DATA 229,49,49,153,117,129,229,129,111,155,254,47,114,114,129,56,229,9,229
DATA 229,114,9,9,56,229,254,229,88,38,108,72,11,9,189,114,229,47,3,47,114,56
DATA 3,129,111,47,254,9,254,3,9,25,25,42,42,42,24,24,32,32,32,60,145,145,16
DATA 42,25,42,42,25,32,16,25,25,60,45,16,45,53,53,198,142,186,106,93,44,37
DATA 198,186,46,37,48,225,207,183,113,213,106,36,36,97,13,91,115,242,186,103
DATA 103,211,8,240,196,27,99,6,6,34,34,10,10,39,10,39,4,110,4,110,10,110,74
DATA 175,175,178,80,14,14,118,27,118,190,7,239,65,39,99,13,0,0,221,226,33,151
DATA 136,146,2,117,38,3,84,22,49,38,49,150,38,107,38,254,189,114,56,56,229
DATA 56,254,11,229,229,56,153,47,9,155,229,254,229,254,117,228,129,49,9,9,254
DATA 9,180,47,254,47,3,47,82,49,107,107,47,3,114,9,20,47,25,42,24,24,164,164
DATA 164,32,16,16,60,188,145,24,42,25,24,24,42,25,25,8,24,73,53,46,149,113
DATA 37,188,207,188,233,36,0,120,44,37,242,225,44,104,166,213,43,106,120,0
DATA 27,97,0,13,36,115,116,142,103,103,144,8,207,120,99,6,6,6,99,6,122,39,4
DATA 110,110,110,4,4,10,110,175,74,175,172,65,135,135,190,118,118,190,7,239
DATA 80,167,99,13,0,27,91,33,18,18,136,146,108,117,38,22,228,38,108,9,153,22
DATA 84,82,107,107,72,114,9,114,155,229,56,9,111,114,114,229,9,9,9,114,254
DATA 229,254,9,72,38,128,47,189,180,180,82,237,111,117,129,108,9,111,20,3,82
DATA 107,9,47,3,111,42,42,164,32,32,16,32,32,60,76,45,76,64,24,42,42,164,164
DATA 42,75,75,211,211,104,149,87,16,60,37,87,103,73,207,44,97,6,61,46,61,225
DATA 104,104,186,242,156,61,0,27,91,61,36,13,0,106,116,116,233,166,73,166,211
DATA 233,97,6,34,6,6,122,122,39,110,110,4,4,110,110,110,95,147,74,74,175,178
DATA 135,135,7,190,13,13,7,239,239,122,6,0,118,27,93,202,18,195,181,2,78,84
DATA 228,146,38,88,117,114,78,117,11,72,49,72,69,108,82,111,108,108,20,3,2
DATA 22,146,132,168,168,168,146,20,40,117,117,189,9,47,20,47,231,82,229,229
DATA 47,117,114,9,229,9,20,3,3,47,47,108,108,3,42,42,24,32,32,64,16,60,45,149
DATA 87,145,164,64,42,42,164,42,75,25,25,104,103,87,126,53,45,145,46,225,198
DATA 142,198,73,213,0,13,37,46,164,211,73,156,242,156,36,162,36,36,93,61,115
DATA 99,91,106,116,141,183,73,240,184,8,115,99,34,34,34,34,39,4,4,110,110,110
DATA 227,4,4,10,227,74,74,175,178,160,14,7,190,13,0,7,7,7,92,6,13,97,120,157
DATA 163,18,105,173,146,96,84,72,67,129,84,153,171,108,82,72,108,40,2,2,22
DATA 146,105,219,98,90,51,71,17,26,26,26,17,17,17,51,15,90,154,199,105,181
DATA 181,40,40,3,3,40,3,108,47,197,3,40,20,108,3,47,47,129,189,246,24,24,64
DATA 32,16,32,16,76,41,41,149,32,32,145,24,24,24,25,75,8,32,145,207,183,87
DATA 89,48,87,73,207,207,87,44,58,188,89,13,198,211,64,16,41,196,48,141,48
DATA 226,61,36,93,120,116,97,0,44,48,102,240,58,73,183,8,213,6,10,39,39,110
DATA 165,165,165,65,110,4,4,110,110,95,4,172,74,175,94,101,190,210,7,190,99
DATA 190,239,59,7,99,0,157,202,163,187,195,181,195,181,121,112,204,3,121,3
DATA 173,173,40,22,40,40,132,98,90,51,17,31,176,79,30,30,30,30,79,79,224,224
DATA 224,30,30,30,30,30,79,5,5,54,17,83,15,90,98,35,18,195,209,20,20,20,20
DATA 3,22,20,20,246,3,164,164,32,16,16,60,60,76,41,113,76,32,60,16,211,24,60
DATA 24,42,164,214,16,73,214,64,76,37,44,87,188,46,46,213,43,46,37,126,211
DATA 207,186,89,99,13,120,116,102,102,226,226,116,226,226,162,99,134,102,57
DATA 240,138,159,159,144,213,122,110,110,39,110,4,4,65,165,4,4,4,227,227,39
DATA 39,175,74,39,39,172,80,14,135,190,190,190,59,59,135,118,0,163,163,187
DATA 209,209,209,209,209,209,168,209,140,20,140,140,81,219,98,83,17,85,176
DATA 79,79,79,176,176,176,176,5,176,176,5,176,176,176,176,176,176,176,176,1
DATA 176,1,79,1,131,55,86,131,5,26,17,17,17,71,83,90,98,255,35,195,209,81,140
DATA 16,164,16,16,16,145,45,53,113,41,32,211,60,145,64,145,60,164,42,25,211
DATA 214,183,104,24,64,76,41,48,225,87,41,37,93,89,113,164,103,58,37,36,91
DATA 27,13,36,46,28,141,116,134,134,57,116,226,102,46,213,58,44,213,198,103
DATA 89,65,65,65,4,4,110,39,4,165,65,4,4,227,227,110,10,110,172,6,97,165,178
DATA 7,143,59,7,7,7,59,210,190,167,81,81,140,81,140,140,81,140,140,158,158
DATA 81,18,123,15,17,85,5,176,176,176,5,5,5,5,5,5,5,5,176,176,176,176,176,5
DATA 176,176,176,176,176,176,79,131,30,224,30,85,52,28,66,154,90,154,28,28
DATA 28,28,139,17,179,17,17,17,71,51,64,164,16,16,16,145,60,87,53,45,32,24
DATA 16,60,32,32,145,164,42,211,24,64,207,87,53,87,145,16,41,126,41,37,120
DATA 12,126,145,75,198,213,120,0,91,61,162,97,156,138,102,57,102,102,66,93
DATA 37,66,134,186,106,99,116,46,46,0,65,165,147,165,147,65,4,4,165,165,65
DATA 4,4,4,4,110,10,110,235,74,172,94,101,210,210,59,7,7,59,210,135,174,174
DATA 174,174,174,158,158,158,81,163,123,15,26,31,5,5,85,85,31,85,85,85,85,85
DATA 5,5,5,5,5,5,5,5,5,5,5,176,176,176,5,1,30,182,85,26,71,26,31,54,71,17,71
DATA 51,51,98,154,199,199,57,70,70,70,70,15,15,15,52,32,164,32,60,16,76,87
DATA 149,87,60,16,32,145,45,16,16,32,25,42,42,164,60,64,214,45,53,113,43,36
DATA 12,41,12,27,115,44,8,8,198,44,93,119,115,141,141,0,57,142,141,141,102
DATA 28,57,119,242,242,48,44,27,10,36,37,242,99,110,65,165,4,110,110,110,4
DATA 165,147,147,65,110,4,65,227,110,110,110,110,4,235,94,160,143,210,59,7
DATA 59,59,210,6,158,158,158,174,68,33,15,71,54,31,31,54,54,19,54,54,54,54
DATA 54,31,31,31,85,85,85,85,85,85,5,5,5,5,5,5,176,176,1,1,54,139,33,167,140
DATA 140,40,187,68,163,226,77,85,5,85,85,85,54,26,71,201,201,102,28,98,35,219
DATA 16,16,16,16,76,45,87,87,58,16,164,104,45,41,76,60,64,42,24,211,24,104
DATA 214,16,73,87,113,124,221,27,196,12,36,48,103,19,64,37,37,37,106,106,141
DATA 142,97,119,46,141,66,102,57,120,6,196,89,106,12,13,34,12,196,115,97,34
DATA 99,34,99,13,99,34,122,39,65,172,147,65,4,4,4,4,4,4,110,39,110,227,80,135
DATA 143,59,59,59,59,252,190,68,162,102,15,51,71,71,71,71,71,8,8,179,179,179
DATA 26,26,26,54,54,54,54,31,31,31,31,85,85,85,85,85,5,5,5,5,5,5,1,83,66,33
DATA 18,203,245,168,209,232,134,51,26,1,79,79,182,182,30,182,137,182,176,85
DATA 230,19,26,54,60,145,145,60,60,149,41,126,46,207,183,104,76,87,149,145
DATA 42,164,211,25,8,211,32,45,45,188,149,87,213,12,93,225,113,188,216,75,198
DATA 242,141,225,141,102,141,213,162,0,61,115,106,36,91,99,122,27,12,89,0,39
DATA 97,37,196,221,0,99,99,0,13,0,13,6,99,6,6,122,165,172,227,4,227,227,4,4
DATA 4,4,4,10,92,239,143,252,59,59,59,252,14,44,58,58,58,233,73,159,139,103
DATA 104,223,144,144,220,8,17,179,216,26,26,26,54,54,54,31,31,31,31,85,85,85
DATA 85,5,5,5,5,5,5,79,182,55,30,5,85,31,31,1,109,30,109,50,79,85,54,31,31
DATA 15,90,90,28,28,52,52,159,166,32,149,76,76,45,45,53,113,45,188,16,104,76
DATA 41,45,16,42,42,211,24,25,42,16,16,16,207,188,53,126,53,44,48,46,8,19,211
DATA 113,196,44,213,44,141,102,102,162,120,48,116,120,27,27,6,10,27,196,91
DATA 39,122,113,156,120,97,97,13,13,0,97,0,99,99,99,13,13,13,34,65,165,227
DATA 165,235,4,4,4,4,39,10,110,80,210,143,252,59,210,143,14,89,89,43,37,113
DATA 44,46,186,58,73,240,103,104,166,144,144,211,8,8,179,216,26,26,54,54,54
DATA 54,31,31,31,85,85,85,85,85,5,5,5,5,5,5,176,1,79,79,79,1,1,79,30,30,224
DATA 79,29,212,55,26,15,52,52,28,102,33,249,249,60,87,149,45,149,87,53,53,45
DATA 45,16,64,207,45,45,64,25,25,25,25,211,16,64,164,16,145,149,44,126,87,188
DATA 58,144,19,216,76,124,115,225,46,225,141,37,36,97,61,106,61,97,221,34,110
DATA 110,119,242,119,0,106,186,106,97,97,13,6,0,99,6,99,99,99,99,6,6,99,99
DATA 34,4,227,227,4,110,4,4,39,39,4,110,65,7,143,143,59,59,252,14,12,12,196
DATA 89,106,37,156,44,213,87,58,73,240,103,104,214,214,144,220,71,17,216,26
DATA 26,19,54,54,54,31,31,31,85,85,85,5,5,5,5,5,5,176,176,176,1,1,1,1,79,26
DATA 83,17,15,28,28,134,156,240,223,71,26,31,1,79,55,50,41,73,198,87,87,41
DATA 126,126,53,45,103,145,87,53,45,42,75,25,25,25,211,64,164,24,164,32,16
DATA 41,53,44,53,188,25,216,164,46,89,48,48,213,225,242,48,27,97,124,36,61
DATA 115,13,4,4,6,44,37,116,156,46,44,48,157,6,167,99,6,6,167,6,6,99,6,34,34
DATA 34,34,6,34,39,65,4,65,65,110,110,4,4,4,65,160,210,143,252,59,210,14,221
DATA 12,196,89,124,37,113,44,46,198,233,73,60,240,183,214,144,211,220,8,8,17
DATA 179,216,26,26,54,54,31,31,31,31,85,85,85,5,5,5,5,176,176,176,176,1,1,1
DATA 1,31,77,66,18,232,68,253,253,250,193,158,68,57,71,79,131,79,1,87,73,198
DATA 46,41,53,126,126,53,87,188,76,45,76,16,25,75,75,25,24,24,32,32,145,87
DATA 76,76,213,213,198,198,64,216,144,183,186,44,37,106,44,156,89,12,13,118
DATA 27,27,12,106,97,99,122,97,48,97,48,106,162,115,36,0,122,10,122,10,110
DATA 39,39,10,122,10,34,34,122,10,10,122,34,10,4,165,65,65,65,65,65,165,165
DATA 65,239,210,59,59,135,14,91,91,36,61,61,61,115,115,115,48,48,48,48,48,48
DATA 37,46,73,144,8,179,216,19,19,54,54,54,54,54,31,31,31,31,85,85,85,5,5,5
DATA 5,5,176,176,1,1,1,1,176,79,5,54,26,71,201,77,138,52,17,1,55,182,79,79
DATA 131,79,60,87,58,53,126,43,43,126,53,225,58,145,60,60,64,25,25,25,25,8
DATA 42,211,211,32,76,76,76,186,186,58,103,25,8,104,58,198,46,213,113,53,43
DATA 89,12,34,92,10,0,106,115,167,39,4,122,122,95,0,120,120,93,13,10,10,39
DATA 110,227,227,4,227,110,110,110,110,110,39,39,39,10,122,122,10,4,65,65,65
DATA 165,165,65,110,110,160,7,7,7,190,0,0,97,157,202,202,93,93,36,61,36,61
DATA 116,57,44,138,73,139,104,104,184,144,220,8,179,26,19,54,31,85,5,5,176
DATA 176,5,5,5,5,5,5,5,5,5,5,1,1,1,79,1,79,79,131,86,109,109,55,182,182,55
DATA 30,224,79,79,79,131,131,76,87,113,113,89,196,124,44,225,37,213,76,32,32
DATA 42,25,42,211,25,216,24,164,16,60,64,183,76,198,186,73,144,8,24,60,46,213
DATA 113,43,106,156,43,106,89,0,39,122,97,242,0,165,147,165,65,165,227,167
DATA 157,119,97,167,10,110,227,147,172,94,94,94,94,94,94,94,172,175,147,165
DATA 227,4,110,39,39,110,39,39,39,10,122,122,122,122,10,39,122,34,6,68,68,163
DATA 157,157,157,157,162,226,57,213,58,73,240,103,183,183,166,184,144,220,8
DATA 17,17,216,26,26,26,54,54,31,31,85,5,1,79,131,131,131,30,131,131,131,131
DATA 1,1,1,79,1,1,1,1,224,224,131,29,29,79,224,131,131,131,131,30,182,41,41
DATA 53,126,89,196,89,156,225,48,126,41,60,16,25,75,25,211,164,32,16,16,76
DATA 149,149,53,113,37,73,144,211,144,76,149,37,37,124,12,36,196,106,106,106
DATA 36,6,6,0,99,110,74,165,65,165,172,4,0,119,0,167,39,4,172,94,94,74,4,95
DATA 10,174,174,167,167,167,6,99,68,68,0,97,97,119,93,93,91,27,99,92,80,65
DATA 110,39,10,10,10,122,167,68,68,163,202,116,66,138,233,159,139,139,103,183
DATA 104,184,144,220,220,71,8,179,216,26,26,19,54,54,31,31,31,31,31,31,31,85
DATA 85,5,5,5,1,1,79,30,30,109,30,79,79,131,79,79,79,131,224,224,224,131,131
DATA 30,30,182,109,109,109,53,126,46,44,43,196,12,43,37,48,113,60,60,32,25
DATA 25,24,164,164,32,16,45,41,53,213,213,213,60,144,104,211,214,46,41,196
DATA 36,36,120,27,27,27,61,97,4,147,65,4,165,74,165,165,235,147,165,6,157,68
DATA 95,110,95,167,163,33,66,52,77,15,15,77,77,77,77,77,77,77,52,52,77,139
DATA 139,233,156,119,34,10,39,39,10,10,122,167,6,6,6,68,163,33,102,52,139,51
DATA 51,51,183,166,184,144,83,71,71,8,17,179,179,216,26,26,54,54,54,54,31,31
DATA 31,85,85,85,85,85,85,5,5,5,5,5,85,85,5,5,1,1,131,131,131,131,131,131,79
DATA 131,131,30,30,182,109,109,109,109,109,55,161,149,113,126,213,126,12,12
DATA 124,126,242,44,103,145,164,211,64,16,64,16,145,45,53,113,53,37,242,188
DATA 211,104,16,211,240,113,89,27,97,97,27,0,99,6,6,65,172,147,175,74,165,235
DATA 74,74,235,175,110,0,226,116,28,51,17,54,31,31,54,54,26,17,17,17,17,17
DATA 71,71,17,17,26,26,71,77,226,68,10,95,10,122,122,167,6,167,167,167,0,249
DATA 46,51,83,71,71,71,71,71,71,71,8,17,17,216,216,26,26,19,19,54,54,54,54
DATA 31,31,31,31,85,85,85,85,85,85,5,5,5,5,5,5,5,5,5,176,1,79,131,30,30,30
DATA 30,30,30,30,30,30,182,182,109,109,109,55,55,55,50,86,29,5,149,58,213,225
DATA 242,196,91,36,242,242,126,76,76,145,32,16,32,32,76,149,53,113,126,126
DATA 242,186,211,214,207,104,144,149,113,91,221,0,13,13,99,122,122,39,165,147
DATA 165,74,175,175,175,74,235,74,227,167,66,54,1,79,79,176,5,85,85,85,85,31
DATA 31,31,31,31,54,54,31,26,83,138,93,68,95,95,174,167,167,6,6,167,167,99
DATA 157,134,159,71,26,54,26,26,17,26,26,26,26,26,26,54,54,54,54,31,31,31,31
DATA 31,31,31,85,85,85,85,85,85,5,5,5,5,5,5,5,5,5,5,176,1,79,79,131,30,30,182
DATA 30,30,30,30,30,182,182,109,55,55,55,55,55,55,50,55,86,79,5,85,251,79,87
DATA 41,198,46,37,48,119,27,226,115,37,188,145,16,64,64,32,76,45,87,41,53,113
DATA 37,44,104,214,145,104,104,103,41,89,97,97,6,34,6,122,39,39,4,74,172,172
DATA 172,94,94,172,175,74,235,95,157,139,179,54,54,31,85,85,85,85,5,5,85,5
DATA 5,5,5,85,85,31,71,83,139,28,102,116,33,157,68,68,68,68,202,28,83,54,5
DATA 5,31,54,54,54,54,54,54,54,31,31,31,31,31,31,85,85,85,85,85,85,5,5,5,5
DATA 5,5,5,5,5,5,176,5,5,5,1,1,1,79,79,30,30,182,182,182,182,182,86,86,86,86
DATA 109,109,55,55,55,50,50,50,50,55,30,222,63,63,5,29,161,50,55,188,149,213
DATA 46,44,37,91,27,61,48,37,46,76,164,164,164,16,45,87,213,113,53,53,58,103
DATA 183,207,76,60,76,188,41,12,221,6,122,122,122,39,4,65,65,172,172,172,94
DATA 94,94,172,172,175,227,122,97,61,102,52,51,71,17,26,54,54,31,85,85,5,5
DATA 5,5,5,176,176,79,79,30,30,182,79,5,5,54,54,17,71,5,79,5,85,31,31,85,85
DATA 31,85,85,31,85,85,85,85,85,85,85,5,5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1,1
DATA 1,79,131,131,30,109,109,109,109,109,182,182,109,182,109,55,50,50,50,50
DATA 50,50,50,50,161,86,222,63,63,222,86,161,50,161,161,55,50,87,149,41,44
DATA 213,113,196,120,61,61,48,44,145,164,24,16,145,76,41,113,242,242,213,58
DATA 207,73,73,104,188,188,149,126,196,91,34,10,10,110,65,147,172,172,172,172
DATA 172,172,147,147,165,65,4,39,34,0,120,61,57,46,77,183,83,17,26,54,54,31
DATA 85,85,85,5,176,176,176,176,1,1,1,1,1,1,79,131,30,30,86,131,1,1,1,1,5,5
DATA 5,5,85,85,85,85,85,5,5,5,5,5,5,5,176,1,1,1,1,1,1,1,1,1,79,1,1,1,79,131
DATA 131,30,109,109,109,109,109,109,109,109,86,55,55,55,50,50,50,50,50,50,50
DATA 50,55,109,86,30,29,86,161,50,50,50,161,161,161,50,137,137,53,41,53,53
DATA 149,53,124,91,61,242,44,188,64,24,64,16,60,45,41,126,48,44,188,73,73,166
DATA 73,58,142,142,198,225,93,167,122,122,39,39,110,110,110,110,110,4,110,110
DATA 110,110,39,10,122,34,99,97,61,106,102,46,52,139,166,83,17,26,54,54,31
DATA 85,85,5,5,5,176,1,1,1,1,1,1,1,1,1,1,1,1,79,131,131,131,131,30,131,131
DATA 131,79,79,1,79,1,1,1,1,5,176,1,1,1,1,1,1,1,1,79,1,1,1,79,131,131,30,182
DATA 109,109,109,109,109,109,109,109,109,109,55,50,50,50,50,50,50,50,50,50
DATA 55,55,55,55,217,50,50,185,185,50,50,50,185,50,137,21,161,63,71,41,126
DATA 126,87,149,113,242,91,91,196,225,188,64,24,16,145,45,126,124,89,126,103
DATA 103,207,207,73,188,233,141,44,102,116,106,116,46,139,139,139,159,138,102
DATA 115,162,97,0,99,99,99,99,13,0,97,91,115,156,213,138,77,139,51,83,71,17
DATA 26,54,54,31,85,85,85,5,5,1,1,1,1,1,1,79,79,79,79,79,79,79,29,79,131,131
DATA 131,131,131,30,30,30,30,30,30,30,30,30,30,30,30,30,79,79,79,131,79,79
DATA 79,79,131,131,30,86,86,109,55,109,109,109,109,109,109,55,55,55,50,50,185
DATA 50,185,185,185,185,50,55,55,55,55,50,50,185,185,185,50,50,50,185,21,21
DATA 137,86,31,184,77,139,220,113,43,113,45,58,113,43,36,61,48,37,207,64,32
DATA 16,60,87,53,37,156,240,214,104,58,233,142,44,57,44,139,17,31,251,29,29
DATA 1,5,85,31,26,17,71,184,183,139,233,138,186,142,186,138,138,233,159,139
DATA 51,83,71,71,17,179,26,54,54,31,85,85,85,5,5,5,1,1,1,79,79,79,79,79,79
DATA 131,79,79,131,131,131,131,131,30,30,30,30,30,30,30,30,30,30,30,182,182
DATA 182,182,86,86,86,86,86,86,86,109,109,109,109,109,55,55,55,55,55,217,161
DATA 161,50,50,50,185,185,185,185,185,185,185,137,161,109,86,86,55,50,50,185
DATA 185,185,185,185,137,137,21,21,50,5,179,71,184,183,71,63,137,21,53,126
DATA 87,103,73,37,36,36,115,242,37,188,32,164,164,60,53,213,188,183,144,142
DATA 141,233,58,103,8,63,208,86,5,251,29,109,86,30,79,1,1,1,5,5,85,31,31,31
DATA 31,54,54,54,54,54,54,54,54,54,31,31,31,31,31,85,85,5,5,5,1,1,1,1,1,79
DATA 79,79,79,131,131,79,79,131,131,131,131,30,30,30,30,30,30,30,30,30,30,30
DATA 30,30,30,30,182,182,182,182,182,109,109,109,109,109,109,55,109,55,161
DATA 161,50,137,137,137,244,244,21,21,21,21,21,137,137,137,137,137,50,217,217
DATA 86,86,55,50,185,185,185,185,185,185,185,21,21,21,217,230,8,83,71,241,5
DATA 251,208,137,137,185,161,87,41,53,53,149,126,221,120,61,61,37,207,214,64
DATA 16,73,46,188,103,104,233,103,8,230,29,185,185,63,166,159,166,54,222,55
DATA 109,86,86,30,30,30,131,79,1,5,85,26,54,54,31,31,31,85,85,5,5,5,5,1,131
DATA 1,1,79,1,79,79,79,79,79,79,79,79,79,131,131,131,131,79,79,131,131,131
DATA 131,131,30,30,30,30,30,30,30,30,30,30,30,30,30,30,182,182,182,182,182
DATA 182,109,182,109,109,109,109,55,50,185,185,185,137,244,244,21,21,21,244
DATA 212,212,212,212,244,244,212,29,30,50,161,137,21,21,21,21,21,21,137,137
DATA 137,21,21,29,241,71,166,8,230,208,21,21,21,161,208,29,161,161,217,41,60
DATA 45,87,188,89,0,36,93,202,116,73,103,104,207,87,103,8,216,230,222,161,21
DATA 21,185,185,50,29,206,29,137,21,137,55,55,109,86,30,131,79,1,5,54,17,26
DATA 26,17,26,54,54,26,26,54,26,54,1,131,5,26,5,79,79,79,79,79,131,131,131
DATA 131,131,30,131,131,30,30,131,30,131,30,131,131,30,30,30,30,30,30,30,30
DATA 30,30,30,182,182,182,182,182,109,182,109,109,109,109,182,109,109,55,50
DATA 185,137,137,137,185,185,21,21,21,243,241,223,70,70,156,156,104,222,29
DATA 5,5,86,137,137,137,251,222,21,21,21,21,21,21,244,230,220,184,179,230,63
DATA 161,21,21,21,137,29,222,208,21,21,21,21,41,76,188,73,198,91,27,61,36,162
DATA 61,46,103,8,211,19,29,217,185,21,21,21,185,185,185,185,185,185,21,185
DATA 185,185,50,55,55,30,131,79,1,1,1,1,54,26,26,17,17,54,54,54,54,31,26,26
DATA 26,71,17,17,71,5,1,1,5,5,5,1,1,1,1,79,79,131,131,131,131,30,30,30,30,131
DATA 30,131,30,30,30,30,30,86,182,86,86,86,86,86,86,86,109,109,109,109,109
DATA 109,55,161,50,137,137,21,21,21,21,21,21,21,161,63,220,70,250,236,236,250
DATA 70,223,241,29,161,21,21,137,50,50,161,251,222,137,21,21,29,19,220,8,26
DATA 63,161,21,137,29,29,208,161,161,217,63,31,29,50,251,19,216,37,213,142
DATA 46,213,116,93,93,93,93,142,8,63,208,185,21,21,21,185,21,21,21,21,21,185
DATA 185,185,185,185,185,50,161,55,86,30,79,79,79,79,1,85,31,26,54,54,54,54
DATA 31,54,85,31,31,31,71,17,54,85,79,30,79,1,1,1,1,1,1,1,1,176,1,1,1,1,1,30
DATA 182,182,55,55,55,182,109,86,86,86,86,86,86,86,109,86,86,86,109,109,109
DATA 109,109,109,109,161,185,185,137,137,21,21,21,21,21,21,161,63,220,240,124
DATA 12,193,193,106,223,63,208,21,21,243,208,208,243,21,21,21,21,21,21,55,31
DATA 71,51,83,8,29,137,21,21,21,21,21,212,21,21,21,21,21,79,26,77,52,8,241
DATA 44,242,141,102,102,116,156,73,216,251,161,21,21,185,21,21,21,21,21,21
DATA 21,21,21,21,185,185,185,50,161,217,86,86,55,86,86,30,79,85,31,54,17,54
DATA 54,54,31,85,31,54,17,17,17,26,85,1,131,30,79,79,1,1,1,1,79,79,79,79,79
DATA 79,1,1,1,79,1,5,54,83,139,51,83,26,5,5,1,1,30,86,86,86,109,109,86,109
DATA 109,109,109,55,55,55,50,137,137,21,21,21,21,21,21,21,243,63,144,70,106
DATA 250,193,250,156,223,63,137,21,21,137,137,50,63,230,17,63,21,21,21,208
DATA 29,251,17,71,230,208,137,222,222,251,161,185,137,185,50,29,137,137,30
DATA 251,216,52,166,179,63,21,21,242,116,46,183,17,230,208,244,21,21,21,21
DATA 21,21,185,21,21,21,21,21,21,185,185,185,185,161,217,217,86,86,217,217
DATA 29,29,5,31,31,54,31,31,31,31,85,85,31,31,54,26,54,5,79,131,79,1,1,1,1
DATA 1,79,79,79,79,79,79,79,79,79,79,1,1,1,79,5,17,138,57,33,33,57,33,68,202
DATA 77,71,1,79,131,86,109,109,109,109,55,55,50,50,50,137,137,137,185,185,185
DATA 21,212,29,179,240,186,89,250,193,250,70,220,29,21,21,21,21,21,21,21,244
DATA 244,21,21,21,137,30,31,71,71,83,216,208,21,21,21,21,137,137,161,137,137
DATA 137,21,137,251,216,159,77,139,216,29,21,21,243,29,222,214,133,29,185,21
DATA 21,21,185,185,21,21,21,21,185,21,21,21,21,21,185,185,50,50,161,217,217
DATA 217,55,86,30,5,31,31,79,1,31,54,85,85,1,30,1,31,26,54,5,1,30,131,79,79
DATA 79,79,79,79,1,1,1,131,131,79,79,79,79,1,1,1,79,79,1,1,1,1,79,30,30,1,5
DATA 31,17,184,54,1,131,131,131,30,109,109,55,55,50,50,137,137,137,137,137
DATA 21,21,137,21,161,179,186,61,250,193,193,250,70,179,29,244,21,21,137,137
DATA 29,63,208,244,21,21,21,21,21,212,216,184,17,63,55,29,29,31,29,185,185
DATA 21,161,29,21,21,21,21,86,83,139,184,71,29,21,21,21,21,161,212,137,137
DATA
 
SUB ShowBmp
   FOR y% = 1 TO 256 
     READ R%, G%, B%
     OUT &H3C9, R%: OUT &H3C9, G%: OUT &H3C9, B%
   NEXT
   FOR y% = 0 TO 99 
      FOR x% = 0 TO 159 
        READ cv%
        PSET (x%, y%), cv%
      NEXT
   NEXT
END SUB
Ќа вс€кий случай закидываю всЄ это дело во вложение(из-за плохой работы форума с ASCII).
¬ложени€
“ип файла: zip Bmp2Data.zip (32.7  б, 186 просмотров)
-immortal-
29.03.2011, 17:00
  #28

Ќе по теме:

а картинка типо намекает кто из пользователей задал такой вопрос но серавно ќ√–ќћЌќ≈ —ѕј—»Ѕќ

Quiet Snow
 јватар дл€ Quiet Snow
4357 / 1219 / 202
–егистраци€: 25.04.2010
—ообщений: 2,943
05.04.2011, 06:41  [“—]     √рафика на бейсике #29
ќтрисовка кривых безье. Ќакодил криво, т.к. потер€лс€ листок с оптимизацией мат. формул.
Ќо иде€ полагаю пон€тна. ћетод используетс€ в CAD редакторах и графических редакторах.

—овместимость программы: QBasic 1.0 и выше.

»сходник:

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 SCREEN 12
 COLOR 14: LOCATE 30, 23: PRINT "Press [ SPACE ] key for draw curve..."
 LOCATE 1: PRINT "-Bezier curve demonstration-"
 PAINT (320, 240), 1, 14
 DO: Kb$ = INKEY$
   IF Kb$ = " " THEN
   LINE (0, 30)-(639, 445), 1, BF
   x1 = RND * 639: y1 = RND * 390 + 40
   x2 = RND * 639: y2 = RND * 390 + 40
   x3 = RND * 639: y3 = RND * 390 + 40
     oxp3 = x1
     oyp3 = y1
   CIRCLE (x1, y1), 3, 15: PAINT (x1, y1), 10, 15
   CIRCLE (x2, y2), 3, 12: PAINT (x2, y2), 14, 12
   CIRCLE (x3, y3), 3, 15: PAINT (x3, y3), 10, 15
     FOR c# = 0 TO 1 STEP .005
      xp1 = x1 + (x2 - x1) * c#
      xp2 = x2 + (x3 - x2) * c#
      xp3 = xp1 + (xp2 - xp1) * c#
      yp1 = y1 + (y2 - y1) * c#
      yp2 = y2 + (y3 - y2) * c#
      yp3 = yp1 + (yp2 - yp1) * c#
        LINE (oxp3, oyp3)-(xp3, yp3), 10
        oxp3 = xp3: oyp3 = yp3
     NEXT
   END IF
 LOOP UNTIL Kb$ = CHR$(27)
ћиниатюры
√рафика на бейсике  
Leben174
 јватар дл€ Leben174
0 / 0 / 0
–егистраци€: 10.05.2011
—ообщений: 18
10.05.2011, 22:13     √рафика на бейсике #30
Ёто всЄ на Q-Basik???
velvet1545
 јватар дл€ velvet1545
6 / 9 / 0
–егистраци€: 21.05.2011
—ообщений: 81
23.05.2011, 23:26     √рафика на бейсике #31
реб€та знаете что формат бмп шифрованый?

когда € поставил задачу перед собой сделать вьюер бмп файлов € перед этим не знал этого
паришлось в ручную разгадывать его шифр

коекак разгадал получилс€ бмп 256 цветных файлов вьер под кубейсиком

ƒобавлено через 4 минуты
идеальный графический формат где нет избыточныйх вредных затормаживающих байтов в конце каждой полоски бмп

и где файл не перевернут с ног на голову

тело картинки побайтно и таблица цветов дл€ 256цветного режима а название формата
*.256

да здраствует этот формат файла

ура ура ура

pcx gif отдыхает..
Quiet Snow
 јватар дл€ Quiet Snow
4357 / 1219 / 202
–егистраци€: 25.04.2010
—ообщений: 2,943
24.05.2011, 06:04  [“—]     √рафика на бейсике #32
Ќарод, давайте не будем разводить демагогий, монологов и разный оффтоп в закреплЄнном топике, создавайте отдельные темы дл€ отдельных вопросов, тут постим программы и обсуждаем конкретно их.
Ќадеюсь на понимание.
softmob
1248 / 698 / 155
–егистраци€: 20.02.2010
—ообщений: 1,035
16.06.2011, 23:49     √рафика на бейсике #33
фрактал Martin.
PureBasic
1
2
3
4
5
6
7
SCREEN 12
WHILE INKEY$ = ""
    t = x
    x = y - SIN(x)
    y = 3.14 - t
    PSET (2 * x + 320, 2 * y + 240), 4
WEND
ћиниатюры
√рафика на бейсике  
Quiet Snow
 јватар дл€ Quiet Snow
4357 / 1219 / 202
–егистраци€: 25.04.2010
—ообщений: 2,943
29.07.2011, 03:07  [“—]     √рафика на бейсике #34
Ќебольша€ демка, кривые безье + брозенхем с эмул€цией антиналожени€.
—криншот можно вз€ть кнопкой "S".
ћиниатюры
√рафика на бейсике  
¬ложени€
“ип файла: zip BEZIER2.zip (2.7  б, 70 просмотров)
Quiet Snow
 јватар дл€ Quiet Snow
4357 / 1219 / 202
–егистраци€: 25.04.2010
—ообщений: 2,943
29.05.2012, 03:46  [“—]     √рафика на бейсике #35
ѕрограмма дл€ построени€ графиков функций, закину сюда в тему, чтобы не искать потом.
јвтоматически подбирает масштабы по ос€м, исход€ из границ всех графиков.
Ќаклепал 5 графиков, больше веро€тно и не потребуетс€, необходимо тестирование.
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
SCREEN 12
CONST Pi = 3.141592653589793#
DIM MinX, MinY, MaxX, MaxY
DIM XRazn, YRazn, MnogX, MnogY
DIM StpScX AS INTEGER, StpScY AS INTEGER
  '  ‘ункции графиков
  DEF FnY1 (x) = SIN(x)
  DEF FnY2 (x) = COS(x)
  DEF FnY3 (x) = x / 2
  DEF FnY4 (x) = x * x * .1
  DEF FnY5 (x) = SQR(EXP(x)) * .3
 '  ‘-ци€ поиска границ
DEF FnMinMax (x, y)
    IF x < MinX THEN MinX = x
    IF x > MaxX THEN MaxX = x
    IF y < MinY THEN MinY = y
    IF y > MaxY THEN MaxY = y
END DEF
 '  Ёкранное преобразование
DEF FnGetX (x) = x * MnogX - MinX * MnogX
DEF FnGetY (y) = y * MnogY - MaxY * MnogY
 '  ѕараметры трассировки функций
Str1 = -Pi: Str2 = -Pi: Str3 = -Pi: Str4 = -Pi: Str5 = -Pi
End1 = Pi: End2 = Pi: End3 = Pi: End4 = Pi: End5 = Pi
Stp1 = .01: Stp2 = .03: Stp3 = .1: Stp4 = .1: Stp5 = .1
 '  ѕеременные дл€ трассировки
x1 = Str1: x2 = Str2: x3 = Str3: x4 = Str4: x5 = Str5
y1 = FnY1(x1): y2 = FnY2(x2): y3 = FnY3(x3): y4 = FnY4(x4): y5 = FnY5(x5)
 '  ¬ычисл€ем параметры графиков
DO
  Go = 0: y1 = FnY1(x1): y2 = FnY2(x2): y3 = FnY3(x3)
  y4 = FnY4(x4): y5 = FnY5(x5)
  IF x1 < End1 THEN x1 = x1 + Stp1: y1 = FnY1(x1): Go = -1
  IF x2 < End2 THEN x2 = x2 + Stp2: y2 = FnY2(x2): Go = -1
  IF x3 < End3 THEN x3 = x3 + Stp3: y3 = FnY3(x3): Go = -1
  IF x4 < End4 THEN x4 = x4 + Stp4: y4 = FnY4(x4): Go = -1
  IF x5 < End5 THEN x5 = x5 + Stp5: y5 = FnY5(x5): Go = -1
  i = FnMinMax(x1, y1)     '  »щем границы
  i = FnMinMax(x2, y2)
  i = FnMinMax(x3, y3)
  i = FnMinMax(x4, y4)
  i = FnMinMax(x5, y5)
LOOP WHILE Go
  PRINT
  PRINT "  "; INT(MinX); INT(MinY); INT(MaxX); INT(MaxY)
 '  –еинициализаци€ трассировки
x1 = Str1: x2 = Str2: x3 = Str3: x4 = Str4: x5 = Str5
y1 = FnY1(x1): y2 = FnY2(x2): y3 = FnY3(x3): y4 = FnY4(x4): y5 = FnY5(x5)
 '  —тарые координаты(ѕрошлый шаг трассировки)
xo1 = x1: xo2 = x2: xo3 = x3: xo4 = x4: xo5 = x5
yo1 = y1: yo2 = y2: yo3 = y3: yo4 = y4: yo5 = y5
 '  ƒелаем фрейм пошире, чтобы больше было видно
 '  + сетку, если она где-то р€дом
 XRazn = MaxX - MinX
 YRazn = MinY - MaxY
 MinX = MinX - XRazn / 4
 MaxX = MaxX + XRazn / 4
 MinY = MinY + YRazn / 4
 MaxY = MaxY - YRazn / 4
 '  ƒл€ преобразовани€ координат в экранные
XRazn = MaxX - MinX    ' –азности координат графиков
YRazn = MinY - MaxY
  IF XRazn = 0 THEN XRazn = .00001
  IF YRazn = 0 THEN YRazn = .00001
MnogX = 640 / XRazn    ' ќтнош. к разност€м коо. гр.
MnogY = 480 / YRazn
StpScX = 1: StpScY = 1 ' Ўаг сетки
 '  ≈сли сетка не умещаетс€ увеличиваем шаг сетки
DO: ScTst = 0
  IF ABS(XRazn / StpScX) > 160 THEN StpScX = StpScX * 10: ScTst = -1
  IF ABS(YRazn / StpScY) > 120 THEN StpScY = StpScY * 10: ScTst = -1
LOOP WHILE ScTst
 
 '  Ќарисуем сетку
DlSc = SQR(1 / ABS(XRazn / StpScX) + 1 / ABS(XRazn / StpScX)) * 10
IF DlSc > 10 THEN DlSc = 10
IF DlSc < 2 THEN DlSc = 2
LINE (FnGetX(MinX), FnGetY(0))-(FnGetX(MaxX), FnGetY(0)), 8
LINE (FnGetX(0), FnGetY(MinY))-(FnGetX(0), FnGetY(MaxY)), 8
FOR i = INT(MinX) TO INT(MaxX) STEP StpScX
  LINE (FnGetX(i), FnGetY(0) - DlSc)-(FnGetX(i), FnGetY(0) + DlSc), 8
NEXT
FOR i = INT(MinY) TO INT(MaxY) STEP StpScY
  LINE (FnGetX(0) - DlSc, FnGetY(i))-(FnGetX(0) + DlSc, FnGetY(i)), 8
NEXT
 
 '  –исуем графики
DO
  Go = 0: y1 = FnY1(x1): y2 = FnY2(x2): y3 = FnY3(x3)
  IF x1 < End1 THEN x1 = x1 + Stp1: y1 = FnY1(x1): Go = -1
  IF x2 < End2 THEN x2 = x2 + Stp2: y2 = FnY2(x2): Go = -1
  IF x3 < End3 THEN x3 = x3 + Stp3: y3 = FnY3(x3): Go = -1
  IF x4 < End4 THEN x4 = x4 + Stp4: y4 = FnY4(x4): Go = -1
  IF x5 < End5 THEN x5 = x5 + Stp5: y5 = FnY5(x5): Go = -1
    LINE (FnGetX(xo1), FnGetY(yo1))-(FnGetX(x1), FnGetY(y1)), 9
    LINE (FnGetX(xo2), FnGetY(yo2))-(FnGetX(x2), FnGetY(y2)), 10
    LINE (FnGetX(xo3), FnGetY(yo3))-(FnGetX(x3), FnGetY(y3)), 7
    LINE (FnGetX(xo4), FnGetY(yo4))-(FnGetX(x4), FnGetY(y4)), 12
    LINE (FnGetX(xo5), FnGetY(yo5))-(FnGetX(x5), FnGetY(y5)), 14
  xo1 = x1: xo2 = x2: xo3 = x3: xo4 = x4: xo5 = x5  ' —тарые координаты
  yo1 = y1: yo2 = y2: yo3 = y3: yo4 = y4: yo5 = y5
LOOP WHILE Go
 
WHILE INKEY$ = "": WEND   ' ∆дать кнопку
PAnT0P
 јватар дл€ PAnT0P
1015 / 538 / 70
–егистраци€: 26.03.2012
—ообщений: 980
16.06.2012, 13:58     √рафика на бейсике #36
¬екторный шрифт
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
DECLARE SUB DrawText (Text AS STRING, X AS INTEGER, Y AS INTEGER, FontColor AS INTEGER, FontSize AS INTEGER, FontAngle AS INTEGER)
 
SCREEN 12
DIM SHARED Font(223) AS STRING
DIM I AS INTEGER
RESTORE FontData
FOR I = 0 TO 223
    READ Font(I)
NEXT I
'ƒемо
DrawText " !" + CHR$(34) + "#$%&'()*+,-./0123456789:;<=>?@", 50, 50, 15, 4, 0
DrawText "ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`", 50, 100, 14, 4, 0
DrawText "abcdefghijklmnopqrstuvwxyz{|}~вИЪєвЦ*", 50, 150, 12, 4, 0
DrawText "јЅ¬√ƒ≈®∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёя", 50, 200, 11, 4, 0
DrawText "абвгдеЄжзийклмнопрстуфхцчшщъыьэю€", 50, 250, 10, 4, 0
DrawText "1", 50, 400, 13, 1, 0
DrawText "2", 60, 400, 13, 2, 0
DrawText "3", 75, 400, 13, 3, 0
DrawText "4", 95, 400, 13, 4, 0
DrawText "5", 120, 400, 13, 5, 0
DrawText "6", 150, 400, 13, 6, 0
DrawText "7", 185, 400, 13, 7, 0
DrawText "8", 225, 400, 13, 8, 0
DrawText "9", 260, 400, 13, 9, 0
DrawText "10", 310, 400, 13, 10, 0
DrawText "     ¬ращение 0", 500, 350, 9, 2, 0
DrawText "     ¬ращение 45", 500, 350, 9, 2, 45
DrawText "     ¬ращение -45", 500, 350, 9, 2, -45
DrawText "     ¬ращение 90", 500, 350, 9, 2, 90
DrawText "     ¬ращение -90", 500, 350, 9, 2, -90
DrawText "     ¬ращение 135", 500, 350, 9, 2, 135
DrawText "     ¬ращение 180", 500, 350, 9, 2, 180
DrawText "     ¬ращение -135", 500, 350, 9, 2, -135
 
'ѕравила построени€ символов:
'ќбща€ высота символа 9 единиц, ширина может быть любой.
'–исование всегда начинаетс€ в точке A и заканчиваетс€ в точке C
'ѕри рисовании символа можно использовать все команды оператора DRAW,
'за исключением команд вращени€, масштаба и цвета.
'ѕример (символ ў):
DATA "NU5R2NU4R2NU5RDBE"
'0 0 0 0 0 0
'0 0 0 0 0 0
'B 0 0 0 B 0
'B 0 B 0 B 0
'B 0 B 0 B 0
'B 0 B 0 B 0
'B 0 B 0 B 0
'A B B B B B C
'0 0 0 0 0 B
FontData:
DATA "BR2"                                  : REM ѕробел
DATA "NURUNLBUU3LM+1,+3BF2"                 : REM !
DATA "BU4UBRDBD4BR"                         : REM "
DATA "BU3NR3BUNR3BEND3BRD3BR2BD2"           : REM #
DATA "BUFEH2ENUNFD5BRBE"                    : REM $
DATA "BRRULNDBLE3BLLURDBD4BR2"              : REM %
DATA "BR4HUHLGDFREEBLNDHLHERFGBF3"          : REM &
DATA "BU5DENLBD5BR"                         : REM '
DATA "BRBU5GD3FBR"                          : REM (
DATA "BU5FD3GBR2"                           : REM )
DATA "BU3R2BDH2BD2E2BD4BR"                  : REM *
DATA "BU3R2BHD2BD2BR2"                      : REM +
DATA "BURGURBF"                             : REM ,
DATA "BU3R2BD3BR"                           : REM -
DATA "URDLBR2"                              : REM .
DATA "M+2,-5BD5BR"                          : REM /
DATA "BUU3ERFNM-3,+3D3GLHBDBR4"             : REM 0
DATA "BU4ED5LR2BR"                          : REM 1
DATA "BU3UERFDG3R3BR"                       : REM 2
DATA "BU5R3DGFDGLHBR4BD"                    : REM 3
DATA "BR3U5G3DR4BF"                         : REM 4
DATA "BUFREUHL2U2R3BD5BR"                   : REM 5
DATA "BU2ERFDGLHU3ERFBD4BR"                 : REM 6
DATA "BU5R3DM-2,+4BR3"                      : REM 7
DATA "BUUEREHLGFRFDGLHBR4BD"                : REM 8
DATA "BUFREU3HLGDFREBD3BR"                  : REM 9
DATA "URDLBU3URDLBR2BD3"                    : REM :
DATA "URGBU3URDLBD3BR2"                     : REM ;
DATA "BR2M-2,-2M+2,-2BD4BR"                 : REM <
DATA "BU2R2BUNL2BD3BR"                      : REM =
DATA "M+2,-2M-2,-2BD4BR3"                   : REM >
DATA "BU4ERFGDBDDLURBBFBR"                  : REM ?
DATA "BEBUURDNLEHLGD2FRBR2"                 : REM @
DATA "U4ER2D3NL3D2BR"                       : REM A
DATA "U5R2FGNL2FDGL2BR4"                    : REM B
DATA "BE3BUHLGD3FREBF"                      : REM C
DATA "U5R2FD3GL2BR4"                        : REM D
DATA "BU5BR3L3D2NR2D3R3BR"                  : REM E
DATA "U2NR2U3R3DBD4BR"                      : REM F
DATA "BE2RDGLHU3ERFBD4BR"                   : REM G
DATA "U3NU2R3NU2D3BR"                       : REM H
DATA "RNRU5NLRBD5BR"                        : REM I
DATA "BUNUFREU4NL3BD5BR"                    : REM J
DATA "U3NU2RNM+2,-2M+2,+3BR"                : REM K
DATA "NU5R3NUBR"                            : REM L
DATA "M+1,-5M+1,+5M+1,-5M+1,+5BR"           : REM M
DATA "U5M+3,+5NU5BR"                        : REM N
DATA "BUU3ERFD3GLHBDBR4"                    : REM O
DATA "U5R2FDGL2BR4BD2"                      : REM P
DATA "BUU3ERFD3GLHBRRFBR"                   : REM Q
DATA "U5R2FDGLNLF2BR"                       : REM R
DATA "BUFREUHLHERFBD4BR"                    : REM S
DATA "BR2U5BL2BDUR4DBD4BR"                  : REM T
DATA "BU5D4FRENU4BF"                        : REM U
DATA "BU5M+1,+5RNM+1,-5BR2"                 : REM V
DATA "BU5M+1,+5M+1,-5M+1,+5NM+1,-5BR2"      : REM W
DATA "M+3,-5BL3M+3,+5BR"                    : REM X
DATA "BRU2NM-1,-3NM+1,-3BF2"                : REM Y
DATA "BU4UR3DG3DR3NUBR"                     : REM Z
DATA "BU5NRD5RBR"                           : REM [
DATA "BU5M+2,+5BR"                          : REM \
DATA "BU5RD5NLBR"                           : REM ]
DATA "BU4M+1,-1M+1,+1BD4BR"                 : REM ^
DATA "BDR2BE"                               : REM _
DATA "BU5FBD4BR"                            : REM `
DATA "BU3EFD2GHERD2BR"                      : REM a
DATA "NU5REUHLBF3"                          : REM b
DATA "BE3HLGD2FREBF"                        : REM c
DATA "BE2BULGDFRNU5BR"                      : REM d
DATA "BU2R2EHLGD2FREBF"                     : REM e
DATA "BRU2NLNRU2ERBD5BR"                    : REM f
DATA "BE2BU2LGDFRNU3DNGBR"                  : REM g
DATA "U3NU2RFD2BR"                          : REM h
DATA "RNRU3NLBUUBD5BR2"                     : REM i
DATA "FEU3NLBUUBD5BR"                       : REM j
DATA "U2NU3NE2F2BR"                         : REM k
DATA "BUNU4FBR"                             : REM l
DATA "U3NUEDND3ED4BR"                       : REM m
DATA "U3NUEFD3BR"                           : REM n
DATA "BUU2ER1FD2GL1HBDBR4"                  : REM o
DATA "U4RFDGLBR3BD"                         : REM p
DATA "BE2BU2LGDFRNU3D2BE"                   : REM q
DATA "U3NUERBD4BR"                          : REM r
DATA "BUFREHLHERFBD3BR"                     : REM s
DATA "BRBU5D2NLNRD2FEBF"                    : REM t
DATA "BU4D3FRENU3DBR"                       : REM u
DATA "BU4M+1,+4NM+1,-4BR2"                  : REM v
DATA "BU4M+1,+4M+1,-4M+1,+4NM+1,-4BR2"      : REM w
DATA "M+2,-4BL2M+2,+4BR"                    : REM x
DATA "BU4M+1,+2ND2NM+1,-2BF2"               : REM y
DATA "BU3UR2M-2,+4R2NUBR"                   : REM z
DATA "BU4BR2GDNLDFBR"                       : REM {
DATA "NU4BR"                                : REM |
DATA "BU4FDNRDGBR3"                         : REM }
DATA "BU2EF2EBD2BR"                         : REM ~
DATA "U7R4D8L4UBR5"                         : REM –амка
DATA "U4ER2D3NL3D2BR"                       : REM ј
DATA "BU3R2FDGL2U5R3BD5BR"                  : REM Ѕ
DATA "U5R2FGNL2FDGL2BR4"                    : REM ¬
DATA "U5R3DBD4BR"                           : REM √
DATA "BDURM+1,-5RD5NL2RDBE"                 : REM ƒ
DATA "BU5BR3L3D2NR2D3R3BR"                  : REM ≈
DATA "U2ER2FD2BL4BU5DFR2EUBL2D5BR3"         : REM ∆
DATA "BUFREUHEHLGBF4"                       : REM «
DATA "NU5M+3,-5D5BR"                        : REM »
DATA "NU5M+3,-5ND5BUBL2RBR2BD6"             : REM …
DATA "U3NU2RNM+2,-2M+2,+3BR"                : REM  
DATA "M+2,-5RD5BR"                          : REM Ћ
DATA "M+1,-5M+1,+5M+1,-5M+1,+5BR"           : REM ћ
DATA "U3NU2R3NU2D3BR"                       : REM Ќ
DATA "BUU3ERFD3GLHBDBR4"                    : REM ќ
DATA "U5R3D5BR"                             : REM ѕ
DATA "U5R2FDGL2BR4BD2"                      : REM –
DATA "BE3BUHLGD3FREBF"                      : REM —
DATA "BR2U5BL2BDUR4DBD4BR"                  : REM “
DATA "BUFREU4BL3D2FR2BD2BR"                 : REM ”
DATA "BR2U5RFD2GL2HU2ERBR3BD5"              : REM ‘
DATA "M+3,-5BL3M+3,+5BR"                    : REM ’
DATA "NU5R2NU5RDBE"                         : REM ÷
DATA "BR3U5BL3D2FR2BD2BR"                   : REM „
DATA "NU5R2NU4R2NU5BR"                      : REM Ў
DATA "NU5R2NU4R2NU5RDBE"                    : REM ў
DATA "BU4URD5R2EUHL2BF3BR"                  : REM Џ
DATA "BU3R2FDGL2U5BR4D5BR"                  : REM џ
DATA "BU5D5R2EUHL2BF3BR"                    : REM №
DATA "BUFREU2NL2UHLGBF4"                    : REM Ё
DATA "U3NU2RUERFD3GLHU3BF4"                 : REM ё
DATA "E2NRLHUER2D5BR"                       : REM я
DATA "BU3EFD2GHERD2BR"                      : REM а
DATA "BU2RFGLU3ERBD4BR"                     : REM б
DATA "U4RFGNLFGNLBR2"                       : REM в
DATA "U4R2DBD3BR"                           : REM г
DATA "BDURM+1,-4RD4NL2RDBUBR"               : REM д
DATA "BU2R2EHLGD2FREBF"                     : REM е
DATA "UENRHUBR2ND4BR2DGNLFDBR"              : REM ж
DATA "BU3ERFGNLFGLHBDBR4"                   : REM з
DATA "BU4D4M+2,-4D4BR"                      : REM и
DATA "BU4D4M+2,-4BLNUBRD4BR"                : REM й
DATA "U2NU2NE2F2BR"                         : REM к
DATA "M+1,-4RD4BR"                          : REM л
DATA "M+1,-4M+1,+4M+1,-4M+1,+4BR"           : REM м
DATA "U2NU2R2NU2D2BR"                       : REM н
DATA "BUU2ER1FD2GL1HBDBR4"                  : REM о
DATA "U4R2D4BR"                             : REM п
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA "U4RFDGLBR3BD"                         : REM р
DATA "BE3HLGD2FREBF"                        : REM с
DATA "BU3URND4RDBD3BR"                      : REM т
DATA "BU4D1FRNU2D1GLBR3"                    : REM у
DATA "BR2U4LGDFR2EUHLBD4BR3"                : REM ф
DATA "M+2,-4BL2M+2,+4BR"                    : REM х
DATA "BU4D4R2NU4RDBE"                       : REM ц
DATA "BU4D2FRNU3DBR"                        : REM ч
DATA "NU4RNU4RNU4BR"                        : REM ш
DATA "NU4RNU4RNU4RDBE"                      : REM щ
DATA "BU3URD4REUHLBF3"                      : REM ъ
DATA "BU3RFDGLU4BR3D4BR"                    : REM ы
DATA "NU4REUHLBF3"                          : REM ь
DATA "BUFREUNLUHLGBF3BR"                    : REM э
DATA "U2NU2RUERFD2GLHUBF2BR2"               : REM ю
DATA "ENRHUERD4BR"                          : REM €
DATA "BU7BRDBRUBRBD2L3D2NR2D3R3BR"          : REM ®
DATA "BU2R2EHBUUBD2LBUUBD2GD2FREBF"         : REM Є
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA ""
DATA "BU2RM+1,+2M+1,-5BD5BR"                : REM вИЪ
DATA "U5M+2,+5U5RBDRDLNUBDRBD2BR"           : REM є
DATA ""
DATA "BU2URDLBF2"                           : REM вЦ*
DATA ""
 
SUB DrawText (Text AS STRING, X AS INTEGER, Y AS INTEGER, FontColor AS INTEGER, FontSize AS INTEGER, FontAngle AS INTEGER)
    'Text           ѕечатаемый текст
    'X              √оризонтальна€ позици€ начала текста
    'Y              ¬ертикална€ позици€ начала текста
    'FontColor      ÷вет шрифта
    'FontSize       –азмер шрифта
    'FontAngle      ”гол поворота текста
    DIM N AS INTEGER, I AS INTEGER
    DIM C AS STRING, S AS STRING, Message AS STRING, A AS STRING
    FOR N = 1 TO LEN(Text)
        I = ASC(MID$(Text, N, 1))
        I = I - 32
        Message = Message + RTRIM$(Font(I))
    NEXT N
    C = "C" + LTRIM$(RTRIM$(STR$(FontColor)))
    A = "TA" + LTRIM$(RTRIM$(STR$(FontAngle)))
    S = "S" + LTRIM$(RTRIM$(STR$(FontSize * 4)))
    Message = C + A + S + Message + "TA0"
    PSET (X, Y), POINT(X, Y)
    DRAW "X" + VARPTR$(Message):
END SUB
PS. Ќемного изменил код и внес исправление в начертание некоторых символов.
ћодератору просьба удалить мое предыдущее сообщение.
ћиниатюры
√рафика на бейсике  
PAnT0P
 јватар дл€ PAnT0P
1015 / 538 / 70
–егистраци€: 26.03.2012
—ообщений: 980
07.07.2012, 11:47     √рафика на бейсике #37
–емейк Color Lines. ƒелалось на QBasic, но на QB тоже должен работать. «ачем делалось? ƒа скучно было во врем€ дежурства.

PS. „е то мне понравилось, надо будет код прилизать и на VB.NET портануть
ћиниатюры
√рафика на бейсике   √рафика на бейсике   √рафика на бейсике  

√рафика на бейсике  
¬ложени€
“ип файла: zip LINES.zip (94.3  б, 143 просмотров)
Quiet Snow
 јватар дл€ Quiet Snow
4357 / 1219 / 202
–егистраци€: 25.04.2010
—ообщений: 2,943
06.04.2013, 05:44  [“—]     √рафика на бейсике #38
ѕростенький тетрис на QBasic, написал вчера за вечер...
Ёто кстати мой первый тетрис , знаю что какашка редкостна€, ну, что есть то есть...

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
'
'  “етрис v 0.2 Alfa
'  јвторство: >Quiet Snow<
'  (c) 2013
'_____________________________
 
  DECLARE SUB PrepareALL ()
  DECLARE SUB DeinitALL ()
  DECLARE SUB DrawPole ()
  DECLARE SUB ClearPole ()
  DECLARE SUB CheckLines ()
  DECLARE SUB SdvigPole ()
  DECLARE SUB CopyToTek (NumFigur%)
  DECLARE SUB CopyTekToPole ()
  DECLARE SUB PoleTekFigureDelete ()
  DECLARE SUB FreezeFigure ()
  DECLARE SUB SaveTekState ()
  DECLARE SUB NextFigureToMem (NumFigur%)
  DECLARE SUB RestoreTekState ()
  DECLARE SUB RotateRight ()
  DECLARE SUB RotateLeft ()
  DECLARE SUB EngineTick ()
  DECLARE SUB Delay (Delitel AS INTEGER)
  DECLARE SUB GoGame ()
  DECLARE SUB HelpScreen ()
  DECLARE SUB MainMenu ()
 
CONST CSize = 8     ' –азмер €чейки пол€
CONST NSize = 14    ' –азмер €чейки пол€ след фигуры
CONST Figur = 7     ' —колько фигур в наборе
 
CONST LSz = CSize - 2
CONST NSz = NSize - 2
CONST NfSz = NSize * 4
CONST ObvWdt = CSize * 10, ObvHgt = CSize * 20
DIM SHARED Tm AS LONG, TimerFactor AS LONG, TickControl AS INTEGER
DIM SHARED Kb$, Dn%
DIM SHARED Pole%(9, 23), Figura(Figur - 1, 3, 3) AS INTEGER
DIM SHARED TekF(3, 3) AS INTEGER, PosY%, PosX%, NewFigure%
DIM SHARED Collizion%, NextFigure%, RotF(3, 3) AS INTEGER
DIM SHARED StatF(3, 3) AS INTEGER, NxtF(3, 3) AS INTEGER
DIM SHARED Quit AS INTEGER, StartRound AS INTEGER, GmPause AS INTEGER
DIM SHARED EndRaund AS INTEGER, PlayScore&, FigCv%, NxFigCv%
DIM SHARED ix AS INTEGER, iy AS INTEGER, FstMul%(19), FstMul2%(3)
DIM SHARED px AS INTEGER, py AS INTEGER
DIM SHARED nfx AS INTEGER, nfy AS INTEGER
 
  PrepareALL
 
     MainMenu
 
  DeinitALL
  CLEAR
 
END
DnOn: Dn% = 1: RETURN
DnOff: Dn% = 0: RETURN
 
DATA 0,0,1,0
DATA 0,0,1,0
DATA 0,0,1,0
DATA 0,0,1,0
 
DATA 0,0,0,0
DATA 0,1,0,0
DATA 0,1,0,0
DATA 0,1,1,0
 
DATA 0,0,0,0
DATA 0,0,1,0
DATA 0,0,1,0
DATA 0,1,1,0
 
DATA 0,0,0,0
DATA 0,0,0,0
DATA 0,1,1,0
DATA 0,1,1,0
 
DATA 0,0,0,0
DATA 0,1,0,0
DATA 0,1,1,0
DATA 0,0,1,0
 
DATA 0,0,0,0
DATA 0,0,1,0
DATA 0,1,1,0
DATA 0,1,0,0
 
DATA 0,0,0,0
DATA 0,0,1,0
DATA 0,1,1,0
DATA 0,0,1,0
 
SUB CheckLines
DIM LnFill%, Porog AS INTEGER, Udy%
 iy = 23
 Porog = 4
 DO
    '  ѕроверка заполненности гориз. линии
    LnFill% = 1
    FOR ix = 0 TO 9
       IF Pole%(ix, iy) = 0 THEN LnFill% = 0
    NEXT
    '  ≈сли заполнена
    IF LnFill% THEN
    PlayScore& = PlayScore& + 100
      FOR Udy% = iy TO Porog STEP -1
         FOR ix = 0 TO 9
            Pole%(ix, Udy%) = Pole%(ix, Udy% - 1)
         NEXT
      NEXT
      FOR ix = 0 TO 9
         Pole%(ix, Porog) = 0
      NEXT
      Porog = Porog + 1
    ELSE
      iy = iy - 1
    END IF
 LOOP UNTIL iy <= Porog
   '  ≈сли уже некуда совать и выходит наверх
   '  “о пора игроку сдатьс€
 FOR ix = 0 TO 9
    IF Pole%(ix, 3) = 1 THEN EndRaund = 1: EXIT FOR
 NEXT
END SUB
 
SUB ClearPole
FOR iy = 0 TO 23
  FOR ix = 0 TO 9
     Pole%(ix, iy) = 0
NEXT ix, iy
END SUB
 
SUB CopyTekToPole
DIM Ccx%, Ccy%
 FOR iy = 0 TO 3
    Ccy% = PosY% + iy
    FOR ix = 0 TO 3
       Ccx% = PosX% + ix
       '  ≈сли попадает в поле
       IF Ccx% > -1 AND Ccx% < 10 AND Ccy% < 24 AND Ccy% >= 0 THEN
          IF TekF(ix, iy) = 2 AND Pole%(Ccx%, Ccy%) = 1 THEN Collizion% = 1
       ELSE
          IF TekF(ix, iy) = 2 THEN Collizion% = 1
       END IF
 NEXT ix, iy
IF PosY% > 20 THEN Collizion% = 1
IF Collizion% = 0 THEN
 FOR iy = 0 TO 3
    Ccy% = PosY% + iy
    FOR ix = 0 TO 3
       Ccx% = PosX% + ix
       '  ≈сли попадает в поле
       IF Ccx% > -1 AND Ccx% < 10 AND Ccy% < 24 THEN
          IF TekF(ix, iy) = 2 THEN Pole%(Ccx%, Ccy%) = TekF(ix, iy)
       END IF
 NEXT ix, iy
END IF
END SUB
 
SUB CopyToTek (NumFigur%)
 FOR iy = 0 TO 3
    FOR ix = 0 TO 3
       IF Figura(NumFigur%, ix, iy) = 1 THEN
       TekF(ix, iy) = 2
       ELSE : TekF(ix, iy) = 0
       END IF
 NEXT ix, iy
END SUB
 
SUB DeinitALL
  KEY(15) OFF
  KEY(16) OFF
END SUB
 
SUB Delay (Delitel AS INTEGER)
 Td = Tm \ Delitel
 Tmr = 0
 DO
   Tmr = Tmr + 1: f = TIMER
 LOOP UNTIL Tmr > Td
END SUB
 
SUB DrawPole
 
FOR iy = 0 TO 19
  FOR ix = 0 TO 9
     'IF Pole%(ix, iy + 4) THEN Cv% = 7 ELSE Cv% = 0
     SELECT CASE Pole%(ix, iy + 4)
       CASE 1: Cv% = 8
       CASE 2: Cv% = FigCv%
       CASE ELSE: Cv% = 0
     END SELECT
     LINE (FstMul%(ix) + px, FstMul%(iy) + py)-STEP(LSz, LSz), Cv%, BF
NEXT ix, iy
LINE (px - 1, py - 1)-STEP(ObvWdt, ObvHgt), 7, B
 
FOR iy = 0 TO 3
  FOR ix = 0 TO 3
     IF NxtF(ix, iy) = 2 THEN Cv% = NxFigCv% ELSE Cv% = 0
     LINE (FstMul2%(ix) + nfx, FstMul2%(iy) + nfy)-STEP(NSz, NSz), Cv%, BF
NEXT ix, iy
LINE (nfx - 1, nfy - 1)-STEP(NfSz, NfSz), 7, B
 
END SUB
 
SUB EngineTick
DIM i AS INTEGER
DIM DnStatus%
 
 TickControl = TickControl + 1
 
   '  —тарт раунда
   IF StartRound THEN
     ClearPole
     PlayScore& = 0
     NewFigure% = 1
     NextFigure% = INT(RND * Figur)
     StartRound = 0
   END IF
   '  Ќова€ фигура
   IF NewFigure% THEN
     FigCv% = NxFigCv%
     CopyToTek NextFigure%  ' ќткопируем новую фигуру в тек фигуру
     NextFigure% = INT(RND * Figur)
     NextFigureToMem NextFigure%
     NxFigCv% = 125 + RND * 26
     PosY% = -1: PosX% = 3  ' ‘игура наверху по центру
     Collizion% = 0
     NewFigure% = 0         ' ѕока новых фигур больше не надо
   END IF
  
  
   '  ”правление
 
 
   LOCATE 1, 1: PRINT "Score: "; PlayScore&
   IF Dn% = 1 THEN DnStatus% = 0 ELSE DnStatus% = 10
     '  ‘игуру по час стрелке
   IF Kb$ = "." OR Kb$ = "ю" OR Kb$ = "ё" OR Kb$ = CHR$(0) + "H" THEN
     SaveTekState
     RotateRight
     CopyTekToPole
     IF Collizion% THEN
       RestoreTekState
       Collizion% = 0
     ELSE
       PoleTekFigureDelete
       CopyTekToPole
       DrawPole
     END IF
   END IF
 
     '  ‘игуру против час стрелки
   IF Kb$ = "," OR Kb$ = "б" OR Kb$ = "Ѕ" THEN
     SaveTekState
     RotateLeft
     CopyTekToPole
     IF Collizion% THEN
       RestoreTekState
       Collizion% = 0
     ELSE
       PoleTekFigureDelete
       CopyTekToPole
       DrawPole
     END IF
   END IF
 
     '  ‘игуру налево
   IF Kb$ = CHR$(0) + "K" THEN
     PoleTekFigureDelete    '  ”дал€ем тек фигуру с пол€
     PosX% = PosX% - 1
     CopyTekToPole
     IF Collizion% THEN
       PosX% = PosX% + 1
       CopyTekToPole
       Collizion% = 0
     ELSE
       DrawPole
     END IF
   END IF
 
     '  ‘игуру направо
   IF Kb$ = CHR$(0) + "M" THEN
     PoleTekFigureDelete    '  ”дал€ем тек фигуру с пол€
     PosX% = PosX% + 1
     CopyTekToPole
     IF Collizion% THEN
       PosX% = PosX% - 1
       CopyTekToPole
       Collizion% = 0
     ELSE
       DrawPole
     END IF
   END IF
 
   '  ќсновной движок
   IF TickControl > DnStatus% THEN
     PosY% = PosY% + 1
     PoleTekFigureDelete    '  ”дал€ем тек фигуру с пол€
     CopyTekToPole
     '  —толкновение
     IF Collizion% THEN
       PoleTekFigureDelete  '  ”дал€ем тек фигуру с пол€
       PosY% = PosY% - 1    '  Ќа шаг назад
       FreezeFigure         '  «афризим на поле тек фигуру
       NewFigure% = 1       '  ѕодать новую фигуру
       CheckLines           '  ѕроверим не заполнены ли строки
     END IF
     TickControl = 0
   DrawPole
   END IF
 
END SUB
 
SUB FreezeFigure
DIM Ccx%, Ccy%
 FOR iy = 0 TO 3
    Ccy% = PosY% + iy
    FOR ix = 0 TO 3
       Ccx% = PosX% + ix
       '  ≈сли попадает в поле
       IF Ccx% > -1 AND Ccx% < 10 AND Ccy% < 24 THEN
          IF TekF(ix, iy) = 2 THEN Pole%(Ccx%, Ccy%) = 1
       END IF
 NEXT ix, iy
END SUB
 
SUB GoGame
 
  StartRound = 1
  
    DO: Kb$ = INKEY$
 
     ' ѕауза ¬ Ћ/¬џ Ћ
     IF Kb$ = CHR$(32) THEN
       GmPause = -1 - GmPause: COLOR 7
       IF NOT GmPause THEN LOCATE 12, 17: PRINT "         "
     END IF
 
       IF GmPause THEN
          
           COLOR (COS((TimerFactor AND 31) / (9.8676064716#)) + 1) * 6 + 16
           LOCATE 12, 17: PRINT "[ PAUSE ]"
      
       ELSE
         
           EngineTick
 
       END IF
 
       Delay 80
       TimerFactor = (TimerFactor + 1) AND &HFFFFFF
       IF Kb$ = CHR$(27) THEN Quit = -1
   
    LOOP UNTIL Quit OR EndRaund
 
  Quit = 0
  CLS
END SUB
 
SUB HelpScreen
  CLS
  LOCATE 3, 19: PRINT "Help"
  COLOR 7
  LOCATE 8, 4: PRINT CHR$(17) + "   " + CHR$(16) + "   -   Move figure Left/Right"
  LOCATE 10, 3: PRINT " < " + CHR$(24) + " >   -   Rotate figure"
  LOCATE 12, 6: PRINT CHR$(25); "     -   Fast fall"
  LOCATE 14, 4: PRINT "Space   -   Pause"
  LOCATE 16, 5: PRINT "Esc    -   Exit everywhere"
  COLOR 10
  LOCATE 20, 4: PRINT "Press any key to exit help..."
  WHILE INKEY$ = "": WEND
END SUB
 
SUB MainMenu
V% = 0: Rdr% = 1
KEY(15) OFF
KEY(16) OFF
 
  DO: Kb$ = INKEY$
 
     IF Kb$ = CHR$(0) + "H" AND V% > 0 THEN V% = V% - 1: Rdr% = 1
     IF Kb$ = CHR$(0) + "P" AND V% < 2 THEN V% = V% + 1: Rdr% = 1
     
   IF Rdr% THEN
       CLS 2
       LOCATE 10
       IF V% = 0 THEN COLOR 10: d$ = CHR$(27) ELSE COLOR 7: d$ = ""
           PRINT TAB(18); "Play "; d$; CHR$(10)
       IF V% = 1 THEN COLOR 14: d$ = CHR$(27) ELSE COLOR 7: d$ = ""
           PRINT TAB(18); "Help "; d$; CHR$(10)
       IF V% = 2 THEN COLOR 12: d$ = CHR$(27) ELSE COLOR 7: d$ = ""
           PRINT TAB(18); "Quit "; d$; CHR$(10)
       Rdr% = 0
   END IF
     '  ¬ыбор опции
   IF Kb$ = CHR$(13) THEN
     SELECT CASE V%
       CASE 0: KEY(15) ON: KEY(16) ON
               CLS
               GoGame
               Rdr% = 1
               KEY(15) OFF: KEY(16) OFF
               Kb$ = ""
       CASE 1: HelpScreen: Rdr% = 1
       CASE 2: EXIT DO
       CASE ELSE
     END SELECT
   END IF
     '  ќкончание раунда
   IF EndRaund THEN
   DO: LOOP UNTIL INKEY$ = ""
   CLS : LOCATE 11, 10: PRINT "Your record is"
         LOCATE 13, 15: PRINT PlayScore&; "points"
      EndRaund = 0
      WHILE INKEY$ = "": WEND
   END IF
 
  LOOP UNTIL Kb$ = CHR$(27)
CLS
KEY(15) ON
KEY(16) ON
END SUB
 
SUB NextFigureToMem (NumFigur%)
 FOR iy = 0 TO 3
    FOR ix = 0 TO 3
       IF Figura(NumFigur%, ix, iy) = 1 THEN
       NxtF(ix, iy) = 2
       ELSE : NxtF(ix, iy) = 0
       END IF
 NEXT ix, iy
END SUB
 
SUB PoleTekFigureDelete
 StY% = PosY% - 1
 EnY% = PosY% + 4
 IF StY% < 0 THEN StY% = 0
 IF StY% > 23 THEN StY% = 23
 IF EnY% < 0 THEN EnY% = 0
 IF EnY% > 23 THEN EnY% = 23
 FOR iy = StY% TO EnY%
    FOR ix = 0 TO 9
       Pole%(ix, iy) = Pole%(ix, iy) AND 1
 NEXT ix, iy
END SUB
 
SUB PrepareALL
     '  ѕочистим экран
   CLS
     '   лавиши на прерывание
   KEY 15, "јP"
   KEY 16, "ј" + CHR$(208)
   ON KEY(15) GOSUB DnOn
   ON KEY(16) GOSUB DnOff
   KEY(15) ON
   KEY(16) ON
     '  ќпредел€ем задержку
   PRINT "Delay determinating...";
   f = TIMER
   DO: Tm = Tm + 1
   LOOP UNTIL TIMER - f > .5
   PRINT "ok!"
   Tm = Tm * 2
     '  ѕодгрузим фигуры из DATA
   FOR FgNum = 0 TO Figur - 1
      FOR iy = 0 TO 3
         FOR ix = 0 TO 3
            READ Figura(FgNum, ix, iy)
   NEXT ix, iy, FgNum
     '  Ёкран
   SCREEN 13
     '  ѕредрассчЄт таблицы
   FOR iy = 0 TO 19
      FstMul%(iy) = CSize * iy
   NEXT
   FOR iy = 0 TO 3
      FstMul2%(iy) = NSize * iy
   NEXT
     '  ѕоложение пол€
   px = 123
   py = 20
     '  ѕоложение пол€ след фигуры
   nfx = 230
   nfy = 20
     '  ÷вет фигуры
   FigCv% = 1
   NxFigCv% = 1
     '  —лучайность
   RANDOMIZE TIMER
END SUB
 
SUB RestoreTekState
  FOR iy = 0 TO 3
     FOR ix = 0 TO 3
        TekF(ix, iy) = StatF(ix, iy)
     NEXT
  NEXT
END SUB
 
SUB RotateLeft
  FOR iy = 0 TO 3
     FOR ix = 0 TO 3
        RotF(3 - ix, iy) = TekF(3 - iy, 3 - ix)
     NEXT
  NEXT
  FOR iy = 0 TO 3
     FOR ix = 0 TO 3
        TekF(ix, iy) = RotF(ix, iy)
     NEXT
  NEXT
DO
  NeedSdvig = 1
  FOR ix = 0 TO 3
     IF TekF(ix, 3) = 2 THEN NeedSdvig = 0
  NEXT
  IF NeedSdvig THEN
    FOR iy = 3 TO 1 STEP -1
       FOR ix = 0 TO 3
          TekF(ix, iy) = TekF(ix, iy - 1)
       NEXT
    NEXT
    FOR ix = 0 TO 3
       TekF(ix, 0) = 0
    NEXT
  END IF
LOOP WHILE NeedSdvig = 1
END SUB
 
SUB RotateRight
  FOR iy = 0 TO 3
     FOR ix = 0 TO 3
        RotF(3 - ix, iy) = TekF(iy, ix)
     NEXT
  NEXT
  FOR iy = 0 TO 3
     FOR ix = 0 TO 3
        TekF(ix, iy) = RotF(ix, iy)
     NEXT
  NEXT
DO
  NeedSdvig = 1
  FOR ix = 0 TO 3
     IF TekF(ix, 3) = 2 THEN NeedSdvig = 0
  NEXT
  IF NeedSdvig THEN
    FOR iy = 3 TO 1 STEP -1
       FOR ix = 0 TO 3
          TekF(ix, iy) = TekF(ix, iy - 1)
       NEXT
    NEXT
    FOR ix = 0 TO 3
       TekF(ix, 0) = 0
    NEXT
  END IF
LOOP WHILE NeedSdvig = 1
 
END SUB
 
SUB SaveTekState
  FOR iy = 0 TO 3
     FOR ix = 0 TO 3
        StatF(ix, iy) = TekF(ix, iy)
     NEXT
  NEXT
END SUB
 
SUB SdvigPole
 FOR iy = 23 TO 1 STEP -1
    FOR ix = 0 TO 9
       Pole%(ix, iy) = Pole%(ix, iy - 1)
 NEXT ix, iy
 FOR ix = 0 TO 9
    Pole%(ix, 0) = 0
 NEXT
END SUB
Good-Morning
1040 / 311 / 40
–егистраци€: 13.07.2013
—ообщений: 1,269
14.07.2013, 19:04     √рафика на бейсике #39
Ќедавно написал программу дл€ "текстировани€" изображени€. ≈сть, правда, недоработки, но работает =). ¬от она:

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
cls
p$="" 'text       19600
kk$=""
input "A file to compile (short name+.bmp) "; na$
input "A file to create (short name+.txt) "; nam$
open "d:\"+na$ for binary as #1
open "d:\"+nam$ for output as #2
seek #1, 10
get$ #1, 1, a$
shift=asc(a$)
? shift
seek #1, 18
get$ #1, 1, a$
seek #1, 19
get$ #1, 1, b$
widtha=asc(a$)
widthb=asc(b$)
wid=widtha+widthb*256
? wid
seek #1, 22
get$ #1, 1, a$
seek #1, 23
get$ #1, 1, b$
lengtha=asc(a$)
lengthb=asc(b$)
lon=lengtha+lengthb*256
? lon
seek #1, shift
input "width", wi
input "length", le
s=wi*le
l=lon/le
cls
? chr$(201)
if l<>fix(l) then l=fix(l)+1
w=wid/wi
if w<>fix(w) then w=fix(w)+1
dim dynamic k%(1:l,1:w)
for i=1 to lon
ii=fix((i-1)/le)+1
for j=1 to wid
jj=fix((j-1)/wi)+1
seek #1, shift
get$ #1, 1, a$
seek #1, shift+1
get$ #1, 1, b$
seek #1, shift+2
get$ #1, 1, c$
k%(l-ii+1,jj)=k%(l-ii+1,jj)+fix((asc(a$)+asc(b$)+asc(c$))/3)
if ii>l then ? "ii="ii" l="l: end
shift=shift+3
next j
locate 10,10
? fix(100*i/lon)"% is done"
 
next i
for i=1 to l
for j=1 to w
'if len(p$)>19000 then swap p$, kk$
'if len(p$)>19000 and len(kk$)>19000 then cls: ? "overload": end
if k%(i,j)/s<=85 then p$=p$+"џ"
if k%(i,j)/s<170 and k%(i,j)/s>85 then p$=p$+"+"
if k%(i,j)/s>=170 then p$=p$+" "
next j
p$=p$+chr$(13)
next i
print #2, p$
'if kk$="" then print #2, p$
'if kk$<>"" then print #2, kk$+p$
? "completed"
close #1
close #2
ƒобавлено через 8 минут
(эта программа написана на Turbo Basic)

ƒобавлено через 6 минут
÷итата —ообщение от velvet1545 ѕосмотреть сообщение
реб€та знаете что формат бмп шифрованый?
„»во? ѕочему он шифрованый? BMP формат - самый простой и пон€тный.

ƒобавлено через 18 минут
ѕростенький, написанный за несколько минут "осциллограф" с возможностью указани€ частоты на обоих электродах + маштабирование...

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
screen 9
input "F of x", xx
input "F of y", yy
input "cmewenue x", xxx
input "cmewenue y", yyy
cls
kk=1/xx
kk=kk*100
kk=int(kk)
kk=kk/100
yy=yy/xx
if kk>1 then ? kk"x"
if kk<1 then ? "1/"xx"x"
xx=1
a=a+xxx/57.3
b=b+yyy/57.3
z=150*sin(a)+320
w=150*sin(b)+175
lvl:
x=150*sin(a)+320
y=150*sin(b)+175
a=a+xx*0.3
b=b+yy*0.3
if a>20 then a=a-12.56
if b>20 then b=b-12.56
line(x,y)-(z,w)
delay 0.05
line(x,y)-(z,w),0
z=x
w=y
k$=inkey$
if k$="" then lvl
 ривой, но что получилось

ƒобавлено через 1 час 57 минут
¬от еще одна программка... ѕон€ть что она делает, € думаю, будет очень не просто, но объ€сн€ть еще треднее . ¬ общих чертах - программа черчени€ 3d функций. “ам надо некоторые константы подработать и будет то, что надо, надеюсь! ¬от она:

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
screen 9
alfa=1.55
gamma=0.5
sc=260
'yy=-100
zz=600
for xx=-100 to 100
for yy=-100 to 100 step 50
gosub drawing
next yy
next xx
for yy=-100 to 100
for xx=-100 to 100 step 50
gosub drawing
next xx
next yy
for xx=-100 to 100 step 20
for yy=-100 to 100 step 20
zz=200-xx-yy
gosub drawing
next yy
next xx
end
 
 
drawing:
z=zz
y=(xx+yy)*0.707+500
x=(xx-yy)*0.707
 
beta=atn(y/x)
beta=-(beta-alfa)
a=tan(beta)*sc
d=sqr((x*x)+(y*y))
beta=atn(z/d)
beta=beta-gamma
'if abs(beta)>89/57.29 then lvl
b=tan(beta)*sc
pset(320+a,175+b)
'? a, b
return
MoreAnswers
Ёксперт
37091 / 29110 / 5898
–егистраци€: 17.06.2006
—ообщений: 43,301
14.07.2013, 19:11     √рафика на бейсике
≈ще ссылки по теме:

ѕостроение графика функции с заданным шагом QBasic
ƒинамическа€ графика QBasic
QBasic ƒинамическа€ графика созвезди€
ƒинамическа€ графика молекулы ƒЌ  QBasic
QBasic ƒинамическа€ графика

»скать еще темы с ответами

»ли воспользуйтесь поиском по форуму:
Good-Morning
1040 / 311 / 40
–егистраци€: 13.07.2013
—ообщений: 1,269
14.07.2013, 19:11     √рафика на бейсике #40
¬от вариант получше...
¬ложени€
“ип файла: zip 3DFUNC.ZIP (412 байт, 33 просмотров)
Yandex
ќбъ€влени€
14.07.2013, 19:11     √рафика на бейсике
ќтвет —оздать тему
ќпции темы

“екущее врем€: 11:36. „асовой по€с GMT +3.
 ибер‘орум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
–ейтинг@Mail.ru