Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
celsonasciutti

Outro problema com select case inkey e inp em quickbasic64

Recommended Posts

Olá Clube do Hardware

 

Eu sou novato em Basic, mas já estudo programação em C há 5 anos, mas falando em BASIC não é uma linguagem muito difícil pelo que uuvi fala no youtube, mas é uma dúvida básica qual a diferença de SELECT IN KEY e a SELECT INP, preciso sabe se o quickbasic 64 funciona nos dias de hoje, se alguém ainda usa?

O código fonte está aqui é de um jogo

SCREEN 7
' The end coordinates for the line segment representing a
vx1 = 70: vy1 = 20
vx2 = 70: vy2 = 70
' Coordinates of the player
px = 50
py = 50
angle = 0
DO
    ' Draw the absolute map
    VIEW (109, 40)-(208, 149), 0, 1
    LINE (px, py)-(px + 5 * COS(angle), py + 5 * SIN(angle)), 8
    LINE (vx1, vy1)-(vx2, vy2), 14
    PSET (px, py), 15
    SCREEN , , page%, 1 - page%: page% = 1 - page%
    WAIT &H3DA, &H8, &H8: WAIT &H3DA, &H8
    SELECT CASE INKEY$
        'CASE CHR$(0) + "H": px = px + COS(angle): py = py + SIN(angle)
        'CASE CHR$(0) + "P": px = px - COS(angle): py = py - SIN(angle)
        'CASE CHR$(0) + "K": angle = angle - .1
        'CASE CHR$(0) + "M": angle = angle + .1
        'CASE "a", "A": px = px + SIN(angle): py = py - COS(angle)
        'CASE "d", "D": px = px - SIN(angle): py = py + COS(angle)
        'CASE "q", "Q", CHR$(27): EXIT DO
    END SELECT
LOOP
SCREEN 0, 1, 0, 0: WIDTH 80, 25

 

Editado por DiF
Botão CODE <>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tu pegou esse código no canal do canal Bisqwit, ele usa o Qbasic original da Microsoft pelo DOSBOX, para você compilar no QB64 é preciso fazer umas modificações no código porque o QB64 ainda não suporta DEF FN

 

http://www.qb64.net/wiki/index.php?title=DEF_FN

 

Do jeito que você esta fazendo não vai funcionar, é uma parada bem complexa, tem que entender bem espaço vetorial, produto vetorial, produto escalar e por ai vai, o dono do canal é praticamente um gênio hehe

 

Aqui o código que roda no QB64

 

DECLARE SUB Intersect (x1!, y1!, x2!, y2!, x3!, y3!, x4!, y4!, x!, y!)
DECLARE FUNCTION FNcross (x1, y1, x2, y2)

' Vertex rotation test

SCREEN 7

' The end coordinates for the line segment representing a "wall"
vx1 = 70: vy1 = 20
vx2 = 70: vy2 = 70

' The coordinates of the player
px = 50
py = 50
angle = 0

DO
    ' Draw the absolute map
    VIEW (4, 40)-(103, 149), 0, 1

    LINE (vx1, vy1)-(vx2, vy2), 14
    LINE (px, py)-(COS(angle) * 5 + px, SIN(angle) * 5 + py), 8
    PSET (px, py), 15

    ' Draw the transformed map
    VIEW (109, 40)-(208, 149), 0, 2

    ' Transform the vertexes relative to the player
    tx1 = vx1 - px: ty1 = vy1 - py
    tx2 = vx2 - px: ty2 = vy2 - py
    ' Rotate them around the player's view
    tz1 = tx1 * COS(angle) + ty1 * SIN(angle)
    tz2 = tx2 * COS(angle) + ty2 * SIN(angle)
    tx1 = tx1 * SIN(angle) - ty1 * COS(angle)
    tx2 = tx2 * SIN(angle) - ty2 * COS(angle)

    LINE (50 - tx1, 50 - tz1)-(50 - tx2, 50 - tz2), 14
    LINE (50, 50)-(50, 45), 8
    PSET (50, 50), 15
        
    ' Draw the perspective-transformed map
    VIEW (214, 40)-(315, 149), 0, 3

    IF tz1 > 0 OR tz2 > 0 THEN
        ' If the line crosses the player's viewplane, clip it.
        CALL Intersect(tx1, tz1, 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 = ix2: tz1 = iz2
        IF tz2 <= 0 THEN IF iz1 > 0 THEN tx2 = ix1: tz2 = iz1 ELSE tx2 = ix2: tz2 = iz2

        x1 = -tx1 * 16 / tz1: y1a = -50 / tz1: y1b = 50 / tz1
        x2 = -tx2 * 16 / tz2: y2a = -50 / tz2: y2b = 50 / tz2

        LINE (50 + x1, 50 + y1a)-(50 + x2, 50 + y2a), 14 'top (1-2 b)
        LINE (50 + x1, 50 + y1b)-(50 + x2, 50 + y2b), 14 'bottom (1-2 b)
        LINE (50 + x1, 50 + y1a)-(50 + x1, 50 + y1b), 6 'left (1)
        LINE (50 + x2, 50 + y2a)-(50 + x2, 50 + y2b), 6 'right (2)
    END IF

    ' Wait for screen refresh and swap page
    SCREEN , , page%, 1 - page%: page% = 1 - page%
    WAIT &H3DA, &H8, &H8: WAIT &H3DA, &H8

    SELECT CASE INKEY$
        CASE CHR$(0) + "H": px = px + COS(angle): py = py + SIN(angle)
        CASE CHR$(0) + "P": px = px - COS(angle): py = py - SIN(angle)
        CASE CHR$(0) + "K": angle = angle - 0.1
        CASE CHR$(0) + "M": angle = angle + 0.1
        CASE "a", "A": px = px + SIN(angle): py = py - COS(angle)
        CASE "d", "D": px = px - SIN(angle): py = py + COS(angle)
        CASE "q", "Q", CHR$(27): EXIT DO
    END SELECT
LOOP

SCREEN 0, 1, 0, 0: WIDTH 80, 25


FUNCTION FNcross (x1, y1, x2, y2)
FNcross = x1 * y2 - y1 * x2
END FUNCTION


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

 

Editado por Benjamin Breeg
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
celsonasciutti    1
  • Autor do tópico
  • Valeu Benjamin Breeg :D

     

    Eu vou testar aqui, eu to aprendendo sobe a lógica de programação do basic pra fica bem familiarizado com a linguagem, eu sigo todos os videos do canal dele,´além do basic gosto muito do open-gl do dosbox, não conseguia fazer as linhas se mexe ou dimensiona quando se afastava ou aproximava. O QB64 não suporta DEF FN acabei de ver ele tá escrito unsupported.

    Um abraço. :thumbsup:

    Editado por celsonasciutti

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×