Тема: Qbasic
Показать сообщение отдельно
Старый 11.11.2006, 21:50   #51
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Re: Qbasic

люди, помогите вот этот код с QBasic'а перевести в блитц:
[highlight=qbasic] SCREEN 13: DEF SEG = &HA000
DIM hei%(4096 - 1), col%(4096 - 1)

'Generate palette
OUT &H3C8, 0
FOR z% = 0 TO 63: OUT &H3C9, z%: OUT &H3C9, z%: OUT &H3C9, z% \ 2: NEXT z%
FOR z% = 0 TO 63: OUT &H3C9, z% \ 2: OUT &H3C9, z%: OUT &H3C9, z%: NEXT z%

'Generate interesting height & color maps
p% = 0
FOR y% = 0 TO 63
FOR x% = 0 TO 63
d% = 15 * 15 - ((x% AND 31) - 16) ^ 2 - ((y% AND 31) - 16) ^ 2
IF d% > 0 AND ((x% XOR y%) AND 32) THEN
hei%(p%) = 64 - SQR(d%): col%(p%) = (x% + y%) * .5
ELSE
hei%(p%) = 64: col%(p%) = (COS(x% * .2) + SIN(y% * .3)) * 3 + 88
END IF
p% = p% + 1
NEXT x%
NEXT y%

'Initialize starting position
posx& = 0: posy& = 0: posz& = 40 * 65536: ang = 0: horiz& = -50

r160 = 1 / 160
dd& = 65536 * r160 'Increment size
de& = dd& * 128 'Scan out 128 units
sdz& = (100 - horiz&) * 65536 * r160
DO
cosang = COS(ang) * 65536: sinang = SIN(ang) * 65536
dx& = sinang + cosang: dxi& = -sinang * r160
dy& = sinang - cosang: dyi& = cosang * r160

'For each column in 320*200 mode...
FOR sx% = 0 TO 319

'Fast ray trace! No *'s or /'s in here (\ 65536 is a shift)
x& = posx&: y& = posy&: z& = posz&: dz& = sdz&: p& = sx% + 63680
FOR d& = 0 TO de& STEP dd&
x& = x& + dx&: y& = y& + dy&: z& = z& + dz&
i% = (((x& * 64) AND &HFC00000) + (y& AND &H3F0000)) \ 65536
h& = hei%(i%) * 65536
DO WHILE h& < z&
POKE p&, col%(i%): p& = p& - 320&
z& = z& - d&: dz& = dz& - dd&
LOOP
NEXT d&
dx& = dx& + dxi&: dy& = dy& + dyi&

'Finish off rest of line
DO WHILE p& >= 19200: POKE p&, 0: p& = p& - 320: LOOP
NEXT sx%

'Move position & angle
posx& = posx& + cosang * 4
posy& = posy& + sinang * 4
ang = ang + .02

LOOP WHILE INKEY$ = "" [/highlight]
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием