Ошибка двигателя Raycaster с чтением и определением - PullRequest
0 голосов
/ 01 марта 2019

при запуске программы возвращает OUT OF DATA в read nw

DIM vx1(15), vx2(20), vy1(20), vy2(20)
    DIM tx1(20), tz1(20), tx2(20), tz2(20), wc(20) AS INTEGER
    DIM w AS INTEGER
    DIM nw AS INTEGER
    READ nw
    FOR w = 1 TO nw: READ vx1(w), vy1(w), vx2(w), vy2(w), wc(w): NEXT

    vx1 = 70: vy1 = 20
    vx2 = 70: vy2 = 70

    px = 50
    py = 50
    angle = 0

, а def fn еще не реализовано

 SCREEN 0, 1, 0, 0: WIDTH 80, 25
    def fncross (x1, y1, x2, y2) = x1 * y2 - y1 * x2
    SUB intersect (x1, y1, x2, y2, x3, y3, x4, y4, x, y)
        x = fncross(x1, y1, x2, y2)
        y = fncross(x3, y3, x4, y4)
        det = fncross(x1 - x2, y1 - y2, x3 - x4, y3 - y4)
        x = fncross(x, x1 - x2, y, x3 - x4) / det
        y = fncross(x, y1 - y2, y, y3 - y4) / det
    END SUB

и здесь вызывается intersect

IF tz1 > 0 OR tz2 > 0 THEN

    CALL intersect(tx1, tx1, tx2, tz2, -0.0001, 0.0001, -20, 5, ix1, iz1)
    CALL intersect(tx1, tz1, tx2, tz2, 0.0001, 0.0001, 20, 5, ix2, iz2)
    IF tz1 <= 0 THEN IF iz1 > 0 THEN tx1 = ix1: tz1 = iz1 ELSE tx1 = tx2: tz1 = iz2
    IF tz2 <= 0 THEN IF iz1 > 0 THEN tx2 = ix1: tz2 = iz1 ELSE tx2 = ix2: tz2 = iz2

END IF

Ответы [ 3 ]

0 голосов
/ 02 марта 2019

Кроме того, согласно вашему вопросу о DEF FN в QB, допустимо следующее:

Однострочная функция может быть объявлена ​​в QB11, QB45, BC7 и VBDOS:

DEF FNcross (x1, y1, x2, y2) = x1 * y2 - y1 * x2
PRINT FNcross(10, 20, 30, 40)

Однако, поскольку QB64 не поддерживает однострочный FN, используйте вместо этого многострочную функцию:

PRINT FNcross(10, 20, 30, 40)
FUNCTION FNcross (x1, y1, x2, y2)
    FNcross = x1 * y2 - y1 * x2
END FUNCTION
0 голосов
/ 04 марта 2019

Насколько я знаю, чтобы получить фактическую ошибку компиляции C ++, используйте это в командном файле:

@echo off 
ECHO. 
ECHO Diagnosing Latest Compilation Error 
ECHO. 
ECHO Please wait...     
ECHO. cd .\internal\c
.\bin\g -w -Wall -I.\i -I..\..\ -L.\l qbx.cpp libqbx.o -mwindows   .\i686-w64-mingw32\lib\libimm32.a -lwinspool -lmingw32 -ln -lmix -limg -lttf -lmn   -lSDL -s -o ..\..\ >..\..\0utput64.txt 2>&1 
cd ..\.. 
ECHO. 
ECHO 0utput64.txt created! 
ECHO. PAUSE
0 голосов
/ 02 марта 2019

Как использовать функции READ / DATA в QB64:

DIM nw AS INTEGER
READ nw
FOR w = 1 TO nw: READ vx1(w), vy1(w), vx2(w), vy2(w), wc(w): NEXT
DATA 2
DATA 1,2,3,4,5
DATA 6,7,8,9,10
...