Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > SoS! QB Задача!


Автор: SoS! 8.6.2004, 22:49
Есть у меня вот такая задача:
Цитата
CLS
SCREEN 9
COLOR 14, 2
'==1===== BLOK RISOVANIYA KONTURA===========================================
LINE (0, 0)-(220, 350), 2, BF
LINE (220, 0)-(640, 350), 1, BF
LINE (220, 0)-(640, 20), 2, BF
DRAW " s8 bm290,340 c8 u8h3e8f15"
DRAW "e5 m-30,-40e2l4m-20,-60r3u1h3m+20,-5d3l3d8r3e2m+20,+30l2m+3,+8r2"
DRAW "d4r4f25d31f13 r195u190l405d190 r215 u4  bl3p2,8bl30 p11,8"
LOCATE 1, 6: PRINT "ADRIATICHESKY KRUIZ "
'==2===== BLOK VVOD I RASPECATKA GORODOV===================================
' Venetsiya : Split : Vieste : Podgoritsa
DATA "Venetsiya",244,120,9,22,"Split",330,200,14,42
DATA "Vieste",274,235,17,28, "Podgoritsa",370,240,17,47
FOR i = 1 TO 4
READ not$, x(i), y(i), nc, ns
CIRCLE (x(i), y(i)), 4, 4: PAINT (x(i), y(i)), 4, 4
LOCATE nc, ns
PRINT not$
NEXT i
'==3===== IZOBRAZHENIE PARAHODA =====================================
DRAW "bm 245,122 c15 f2 r5 e2 l1 u1 l1 u1 l5 d1 l1 d1 l1p15,15"
DIM kor(200)
GET (243, 120)-(244, 121), bug1
LINE (243, 120)-(244, 121), 1, BF
'==3=====DVIGENIE =====================================
?????

'==5===== PROGRAMMA VYVODA SOOBSCHENY ====================================
500 ng = ng + 1: m12 = 19: m22 = 3
LINE (5, 240)-STEP(190, 80), 2, BF: LINE (5, 240)-STEP(190, 80), 8, B
        SELECT CASE ng
CASE 1: m33$ = "Venetsiya": m34$ = "Stoynka 1 den'"
        m35$ = "Potom posmotrim": m36$ = "Posadka na parahod"
CASE 2: m33$ = "Split": m34$ = "Tusim 3 dnya"
        m35$ = "Potom posmotrim": m36$ = "Buhaem"
CASE 3: m33$ = "Podgoritsa": m34$ = "Tusim 1 den'"
        m35$ = "Potom posmotrim": m36$ = "Zakusyvaem"
CASE 4: m33$ = "Vieste": m34$ = "Stoyanka zapreschena"
        m35$ = "Potom posmotrim": m36$ = "Okonchanir kruiza"
        END SELECT
LOCATE m12, m22: PRINT m33$: LOCATE m12 + 1, m22: PRINT m34$
LOCATE m12 + 2, m22: PRINT m35$: LOCATE m12 + 3, m22: PRINT m36$
SLEEP 1
'=========================================================================
600 END


Есть пример как надо сделать....
Цитата
CLS : SCREEN 9: COLOR 1, 6
'==1=======================
DRAW "bm415,10 c9 m+20,+25 g10 m+5,+10 m+60,+20 r15 m+10,-20 m+5,+15 r25 e5"
DRAW "h5 m+25,-20 r15 m+5,+10 r10 m-5,+15 l5 m-10,+5 m-10,+35 l5 m-5,+20"
DRAW "m-10,-15 g5 m-5,-10 m+10,-15 l25 u10 l15 m+5,+10 g5 f10 g5 m+5,+20 l15"
DRAW "g30 m-45,+40 l5 d20 m-5,+20 d25 m-10,+5 m-20,+15 m-15,-5 u10 m-25,-65"
DRAW "m-5,-30 m+5,-20 m-5,-20 m-5,-10 g10 l5 m-15,-20 u5 r10 e5 l15 m-5,-10"
DRAW "e5 m+10,+5 r10 m+5,-10 m-15,-25 m+10,-15 d5 r10 e30 u10 r46"
PAINT (500, 20), 9, 9
LINE (0, 0)-(650, 20), 9, BF: LINE (0, 0)-(260, 350), 9, BF
PRINT : PRINT "  ?­¤Ё©бЄЁ© ЄагЁ§  "
'==2=======================
DATA "Љ «мЄгвв ", 9, 58, 500, 128, "‚Ёи Єе Ї в­ ¬", 11, 55, 465, 160
DATA "Њ ¤а б", 16, 47, 420, 225, "Љ®зЁ­", 18, 47, 376, 256
DATA "?®¬ЎҐ©", 12, 45, 350, 175
  FOR i = 1 TO 5
  READ m1$(i), m2(i), m3(i), x(i), y(i)
  LOCATE m2(i), m3(i): PRINT m1$(i)
  CIRCLE (x(i), y(i)), 2, 1: PAINT (x(i), y(i)), 1, 1
  NEXT i
'==3=========================
DRAW "bm305,170 c15 f5 r20 e5 l5 u2 l5 u2 l10 d2 l5 d2 l6 bm+10,+3 p15,15"
B = INT((40 * 2 + 7) / 8 * 55): DIM bug1(B)
GET (304, 163)-(337, 180), bug1: GOSUB 500
LINE (304, 163)-(337, 180), 9, BF
'==4=========================
    x = 303: y = 165: dx = .3: dy = 1
    DO
    x = x + dx: y = y + dy
    PUT (x, y), bug1, OR
IF y = 250 AND dy = 1 THEN dy = 1: GOSUB 500
IF y = 250 AND dy = 1 THEN dy = 1: dx = 0
IF y = 290 AND x < 430 THEN dy = 0: dx = 1
IF y = 290 AND x >= 430 THEN dy = -1: dx = 0
IF y = 220 AND dy = -1 THEN dx = .8: GOSUB 500
IF y = 170 AND dy = -1 THEN GOSUB 500
IF y = 135 AND dy = -1 THEN EXIT DO

    FOR i = 1 TO 700: NEXT i
    LINE (x, y)-(x + 35, y + 20), 9, BF
    LOOP: GOSUB 500
'==5=======================
GOTO 600
500 ng = ng + 1: m12 = 19: m22 = 3
LINE (5, 240)-STEP(190, 80), 0, BF: LINE (5, 240)-STEP(190, 80), 8, B
      SELECT CASE ng
CASE 1: m33$ = "bonbey": m34$ = "1 day"
        m35$ = "osmotr goroda": m36$ = "discoteca"
CASE 2: m33$ = "Kochin": m34$ = "1 day"
        m35$ = "osmotr goroda": m36$ = "diskoteka"
CASE 3: m33$ = "Madras": m34$ = "2 day"
        m35$ = "osmotr goroda": m36$ = "diskoteka"
CASE 4: m33$ = "bishak": m34$ = "2 day"
        m35$ = "osmotr goroda": m36$ = "diskoteka"
CASE 5: m33$ = "kolkyta": m34$ = "1 day"
        m35$ = "osmotr goroda": m36$ = "diskoteka"
        END SELECT
LOCATE m12, m22: PRINT m33$: LOCATE m12 + 1, m22: PRINT m34$
LOCATE m12 + 2, m22: PRINT m35$: LOCATE m12 + 3, m22: PRINT m36$
SLEEP 2
RETURN
'==============================
600 END

Подскажите как мне сделать движение парахода (там где вопросы стоят!

Автор: ~FoX~ 9.6.2004, 16:41
В цикле сначала стираешь параходик, потом перерисовываешь в новой позиции. Тока он мерцать будет!

Автор: Enflout 9.6.2004, 19:09
Как я понимаю тебе нужно всего лишь переделать координаты объектов под себя.
Вроде такого:
x = 242: y = 246: dx = .3: dy = 1
DO
x = x + dx: y = y + dy
PUT (x, y), bug1, OR
...
Могу ошибаться.

Автор: Jey_k 15.6.2004, 23:40
Цитата
В цикле сначала стираешь параходик, потом перерисовываешь в новой позиции. Тока он мерцать будет!

Так в общем-то и делается анимация в васике. Мерцать не будет если параход не закрашивать, а оставить нарисованным контурной линией.
Думаю не стоит объяснять что стирать его надо вторичной пррисовкой но с кодом цвета для кисти таким же как у фона

Автор: Enflout 16.6.2004, 07:40
Нет ему нужно все реализовать именно через операторы GET и PUT.

GET [STEP](x1,y1)-[STEP](x2,y2),arrayname[(indices)]
? (x1,y1) and (x2,y2) are numeric expressions that are the screen
coordinates of diagonally opposite corners of the rectangle to store
? STEP enables you to use relative screen coordinates
? arrayname indicates the array where the image will be stored
? indices enable you to start storing the image information in some
array element other than the first one

See Also ?PUT (Graphics)? ?SCREEN statement?

PUT - a graphics statement that places a graphic image obtained
by a GET statement onto the screen
Syntax
PUT [STEP](x, y),arrayname[(indices)][,actionverb]
? (x,y) are the screen coordinates of the upper-left corner of the
displayed image
? STEP enables you to use relative screen coordinates
? arrayname indicates the array where the image is stored
? indices enable you to start retrieving the image information from
an array element other than the first one
? actionverb enables you to display the image with special effects,
and must be one of the following keywords (XOR is the default):

PSET Draws image as stored, wiping ? XOR Reverses points in the image
out any existing image ? with those in existing image
PRESET Draws image in reverse colors ? or with background.
wiping out any existing image ? Used in successive PUT
AND Merges stored image with ? statements, with time delays,
existing image ? causes stored image to appear
OR Superimposes stored image on ? and disappear. With movement
existing image ? of image, animation is achieved

See also ?GET (Graphics)?

Ему просто необходимо взять код 2 программы и вставить туда свои координаты. Поправьте, если неправ.

Автор: Jey_k 16.6.2004, 22:40
Templar$

Тады точно мерцать будет. Но раз такие условия, то ничего не поделать

Автор: Enflout 17.6.2004, 07:26
Обрати внимание на параметры PSET, PRESET, AND, OR.
Давным-давно я писал залпом такие программы. Где-то валялся код летающего гроба smile.gif (он не мигал).

Автор: Akina 17.6.2004, 08:52
Цитата
Тады точно мерцать будет

Да ну... выводи на одну страницу, показывай другую... конечно дрыгаться будет как паралитик, но без мерцания...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)