Forum Liberty Basic France
• Index
Salut salut !
Voici un exemple de code qui fait un jeu en 3D, assez simple a comprendre.
Une idée pour améliorer la boucle ? augmenter les perf ? Il est possible d'améliorer considérablement la qualité de l'image en augmentant fortement le nombre d'angles mais il faut ensuite mettre le déplacement en 1 par 1 ce qui fait un déplacement très très lent
. J'ai donc opté pour un équilibre entre la qualité et la "liberté de déplacement".
je précise que les case rouge font perdre la partie
Voici le code pour les curieux
Code VB :
Edité par atomose Le 07/09/2022 à 11h46
Voici un exemple de code qui fait un jeu en 3D, assez simple a comprendre.
Une idée pour améliorer la boucle ? augmenter les perf ? Il est possible d'améliorer considérablement la qualité de l'image en augmentant fortement le nombre d'angles mais il faut ensuite mettre le déplacement en 1 par 1 ce qui fait un déplacement très très lent

je précise que les case rouge font perdre la partie

Voici le code pour les curieux

Code VB :
NOMAINWIN DIM sintable(360) DIM costable(360) DIM map$(20) DIM color$(10) color$(1)="lightgray" color$(2)="brown" color$(3)="cyan" color$(4)="darkred" color$(5)="darkgray" color$(6)="darkpink" color$(7)="blue" color$(8)="darkblue" color$(9)="RED" color$(10)="white" map$(1) = "111111111111111111111111111111111111" map$(2) = "100000000000000050000000000000000001" map$(3) = "100000011001100010005111100000000001" map$(4) = "101501550000510015000000100000900001" map$(5) = "105005000000000000000000100000000001" map$(6) = "101015000900511500000511500111510001" map$(7) = "100001500000005000000000000100000001" map$(8) = "155005100151005100000000005500050001" map$(9) = "155000000000000000000000001005550001" map$(10) = "111511115111511115150000001001000001" map$(11) = "111111111111111110055510010005005111" map$(12) = "100000000000000000000000055100000001" map$(13) = "100000050000000000009000005155005001" map$(14) = "105505550000500000000000000000500001" map$(15) = "105005000000000000005550000005550001" map$(16) = "105055000900005000005000000000500001" map$(17) = "100005500000005000005000000090000001" map$(18) = "155005500050105000000000000000000001" map$(19) = "155000000000100000000000000000000001" map$(20) = "111111111111111111111111111111111111" FOR i = 0 TO 360 sintable(i) = (sin(i * 0.0174)) * 100 NEXT i FOR i = 0 TO 360 costable(i) = (cos(i * 0.0174)) * 100 NEXT i WindowHeight = 500 : WindowWidth = 635 : UpperLeftX=int((DisplayWidth-WindowWidth)/2) : UpperLeftY=int((DisplayHeight-WindowHeight)/2) global dy,dx STATICTEXT #win.1, "use ZQSD/WASD or arrows for moove AND use ''escape'' for exit",150,465,500,30 GRAPHICBOX #win.g 5, 5, 624, 445 OPEN "fps" FOR window_popup AS #win PRINT #win, "trapclose [quit]" PRINT #win.g, "setfocus;fill blue" print #win.1, "!font Times New Roman 9" posx=32 : posy=32 : angle=0 [raycast] dy = 0 : dx = 0 call readJStick 1 select case dx case 1 angle = angle + 4 case -1 angle = (angle + 356) mod 360 case 2 goto [quit] end select select case dy case 1 if (t-62)>0 then bx = posx - (sintable(((t-62) mod 360)) / 100) ' la division augmente ou diminue la vitesse de marche by = posy - (costable(((t-62) mod 360)) / 100) k = ASC(MID$(map$(int(by/10)),int(bx/10),1))-48 if k = 9 then notice "GAME OVER" IF k = 0 THEN posx = posx - (sintable(((t-62) mod 360)) / 100) posy = posy - (costable(((t-62) mod 360)) / 100) END IF end if case -1 if (t-62)>0 then bx = posx + (sintable(((t-62) mod 360)) / 100) by = posy + (costable(((t-62) mod 360)) / 100) k = ASC(MID$(map$(int(by/10)),int(bx/10),1))-48 if k = 9 then notice "GAME OVER" IF k = 0 THEN posx = posx + (sintable(((t-62) mod 360)) / 100) posy = posy + (costable(((t-62) mod 360)) / 100) END IF end if end select [raycast2] FOR t = angle TO (angle + 124) step 1 xb = sintable(t mod 360) / 360 'nombre angle (augmente résolution avec profondeur + hauteur) yb = costable(t mod 360) / 360 bx = posx by = posy l = 0 do bx = bx + xb by = by + yb l = l + 0.3 ' profondeur k = ASC(MID$(map$(int(by/10)),int(bx/10),1))-48 LOOP UNTIL (k > 0) x = (t - angle) * 5 : dd = (1000 / l) PRINT #win.g, "down" PRINT #win.g, "place ";x;" ";(100-dd) PRINT #win.g, "color ";color$(k);"; backcolor ";color$(k) PRINT #win.g, "boxfilled ";(x+5);" ";(100+dd) PRINT #win.g, "color ";color$(10);"; backcolor ";color$(10) PRINT #win.g, "boxfilled ";(x+5);" 0" PRINT #win.g, "place ";x;" ";(100+dd) PRINT #win.g, "boxfilled ";(x+5);" 445" PRINT #win.g, "place ";x;" ";(100-dd) PRINT #win.g, "color black" PRINT #win.g, "goto ";(x+5);" ";(100-dd) PRINT #win.g, "place ";x;" ";(100+dd) PRINT #win.g, "goto ";(x+5);" ";(100+dd) PRINT #win.g, "up" NEXT t goto [raycast] function GetAsyncKeyState(key) calldll #user32, "GetAsyncKeyState",key as long,GetAsyncKeyState as long if GetAsyncKeyState<>0 then GetAsyncKeyState=1 end function sub readJStick n if GetAsyncKeyState(_VK_ESCAPE) then dx = 2 if (GetAsyncKeyState(asc("Z")) or GetAsyncKeyState(_VK_UP)) AND (GetAsyncKeyState(asc("Q")) or GetAsyncKeyState(_VK_LEFT)) then dy = -1 : dx = -1 : goto [endPOINT] if (GetAsyncKeyState(asc("Z")) or GetAsyncKeyState(_VK_UP)) AND (GetAsyncKeyState(asc("D")) or GetAsyncKeyState(_VK_RIGHT)) then dy = -1 : dx = 1 : goto [endPOINT] if (GetAsyncKeyState(asc("S")) or GetAsyncKeyState(_VK_DOWN)) AND (GetAsyncKeyState(asc("Q")) or GetAsyncKeyState(_VK_LEFT)) then dy = 1 : dx = 1 : goto [endPOINT] if (GetAsyncKeyState(asc("S")) or GetAsyncKeyState(_VK_DOWN)) AND (GetAsyncKeyState(asc("D")) or GetAsyncKeyState(_VK_RIGHT)) then dy = 1 : dx = -1 : goto [endPOINT] if GetAsyncKeyState(asc("Z")) or GetAsyncKeyState(_VK_UP) then dy = -1 if GetAsyncKeyState(asc("W")) or GetAsyncKeyState(_VK_UP) then dy = -1 if GetAsyncKeyState(asc("S")) or GetAsyncKeyState(_VK_DOWN) then dy = 1 if GetAsyncKeyState(asc("Q")) or GetAsyncKeyState(_VK_LEFT) then dx = -1 if GetAsyncKeyState(asc("A")) or GetAsyncKeyState(_VK_LEFT) then dx = -1 if GetAsyncKeyState(asc("D")) or GetAsyncKeyState(_VK_RIGHT) then dx = 1 [endPOINT] end sub [quit] CONFIRM "Do you really want to quit?"; answer$ IF answer$="no" THEN GOTO [raycast] CLOSE #win : END
Edité par atomose Le 07/09/2022 à 11h46
• Index
1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie