karaBAS

Oct. 8th, 2014 06:45 pm
ewoke: (Default)
[personal profile] ewoke
, или компилируем старые проги для QBasic, в FreeBasic под Вин.

однажды (а может быть дважды) делал я заготовки для аркадных игрушек, сейчас взял одну из них - заготовка для asteroids (2006 год).


SCREEN 12,8,2,0
LET cx = 160: cy = 100: a = 0: sp = .1

REM particles

LET ix = 100: iy = 100

DIM tx(10), ty(10), ttl(10)

LET fx = 0: fy = 0: fa = 0: fl = 0
REM коорд., угол наклона, жизнь пули

FOR n = 0 TO 10
ttl(n) = 0
NEXT n


COLOR 3

cyc:

REM 90 180+30 360-30

LET z1 = 10 * COS((a + 90) * .0174): z2 = 10 * SIN((a + 90) * .0174)
LET z11 = 10 * COS((a + 210) * .0174): z22 = 10 * SIN((a + 210) * .0174)

LINE (cx + z1, cy + z2)-(cx + z11, cy + z22)

LET z1 = 10 * COS((a + 210) * .0174): z2 = 10 * SIN((a + 210) * .0174)
LET z11 = 2.5 * COS((a + 240) * .0174): z22 = 2.5 * SIN((a + 240) * .0174)

LINE (cx + z1, cy + z2)-(cx + z11, cy + z22)

LET z1 = 2.5 * COS((a + 240) * .0174): z2 = 2.5 * SIN((a + 240) * .0174)
LET z11 = 10 * COS((a + 330) * .0174): z22 = 10 * SIN((a + 330) * .0174)

LINE (cx + z1, cy + z2)-(cx + z11, cy + z22)

LET z1 = 10 * COS((a + 330) * .0174): z2 = 10 * SIN((a + 330) * .0174)
LET z11 = 10 * COS((a + 90) * .0174): z22 = 10 * SIN((a + 90) * .0174)

LINE (cx + z1, cy + z2)-(cx + z11, cy + z22)

REM
LET z1 = COS((a + 90) * .0174): z2 = SIN((a + 90) * .0174)

REM прорисовка
PSET (ix + RND * 4 - 2, iy + RND * 4 - 2), 7


i$ = INKEY$
FOR n = 0 TO 2000000: NEXT n
CLS

REM управление

IF i$ = CHR$(27) GOTO quit
IF i$ = "a" THEN a = a - 10
IF i$ = "d" THEN a = a + 10
IF i$ = "w" THEN sp = sp + .1
IF i$ = "s" THEN sp = sp - .1

IF i$ = "q" AND fl = 0 THEN
fx = cx
fy = cy
fl = 40
fa = a
END IF

REM полет пули

IF fl <> 0 THEN
PSET (fx, fy), 4
fl = fl - 1
fx = fx + 2 * COS((fa + 90) * .0174): fy = fy + 2 * SIN((fa + 90) * .0174)
END IF

REM гравити :)

IF sp < 0 THEN sp = 0
rem IF cx > 310 THEN cx = 10
rem IF cx < 10 THEN cx = 310

cx = cx + sp * z1: cy = cy + sp * z2

FOR n = 0 TO 10

ttl(n) = ttl(n) - 1

IF ttl(n) = -1 THEN
tx(n) = cx
ty(n) = cy
ttl(n) = INT(RND * 20)
END IF

IF sp <> 0 THEN PSET (tx(n), ty(n)), 2

NEXT n

REM нечто, похожее на ai
REM ix = ix + (cx - ix) / 1000
REM iy = iy + (cy - iy) / 1000

IF ix < cx THEN ix = ix + .25
IF ix > cx THEN ix = ix - .25
IF iy < cy THEN iy = iy + .25
IF iy > cy THEN iy = iy - .25

IF ABS(cx - ix) < 10 AND ABS(cy - iy) < 10 THEN CIRCLE (cx, cy), 10, 7
IF ABS(ix - fx) < 5 AND ABS(iy - fy) < 5 THEN CIRCLE (ix, iy), 10, 7

GOTO cyc
quit:



изменению подверглись всего 2 вещи - установка видеорежима + сделал паузу в 2000 раз больше.

также пришлось заREMить два строчки там где "гравити", - что именно я хотел этим тогда сказать, пока не понял.

компиляция - "fbc.exe alph.bas -lang qb"

alph

"муха", которая бегает за корабликом, это самонаводная ракета/пуля/вражина/нужное_вписать.
кружок, который появляется вокруг корабля, означает что вас подбили (здесь по идее должна выполниться процедура обработки попадания, с уменьшением кол-ва жизней/энергии).
управление кораблем при помощи православных WASD, выход ESC.
интересно сделана анимация "огня" из "движков" кораблика.

p.s. используя код, не забывайте про копирайт.

Date: 2014-10-10 07:59 am (UTC)
From: [identity profile] ewoke.livejournal.com
http://net2ftp.ru/node0/none1@inbox.ru/alph.exe

кстати, по нажатию кнопки Q корабель стреляет пульками :)

Profile

ewoke: (Default)
ewoke

October 2025

S M T W T F S
   1234
5 67891011
121314 15161718
19202122232425
262728293031 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 21st, 2026 04:01 am
Powered by Dreamwidth Studios