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. используя код, не забывайте про копирайт.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

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. 20th, 2026 03:48 pm
Powered by Dreamwidth Studios