*Début d'aparté*
Je sens la shit storm m'arriver dessus mais c'est pas grave...
Avant tout je tiens à mettre un point au clair, je ne vais pas remettre en question le travail de la team BGames mais seulement vos réponses et "arguments", merci de ne pas mal interpretter mes dires.
*Fin d'aparté*
"Afin de démontrer que PureBasic permet également le développement de jeux de qualité, bGames vous offre leur anciens titres en freeware"
Wow vraiment ? Dans le but de démontrer ça ?? Merci à eux c'est vraiment cool de leur part.... Mais... Euh... T'es sur que ça n'a pas plutot un tout petit rapport avec le fait qu'ils travaillent sur un nouveau et qu'un petit coup de pub ça ne fait pas de mal ?
Alors je vous arrête tout de suite, non je ne suis pas venu cracher dans la soupe, mais l'argument du "afin de démontrer que bla bla bla" deviens plus qu'agacent... PureBasic à de grandes forces mais aussi de grandes lacunes, le jeux vidéo en fait parti et il serait bon de la part de tous d'arréter de le nier !
Un exemple que les libs lié au JV sont viellissantes et laissés aux oubliettes ? Regardez donc du coté de la lib Joystick qui... N'est même plus utilisable puisqu'elle est en direct input, format qui n'est plus supporté par windows 10 laissant place au XInput... Ou encore la lib Mouse, qui n'est tout simplement pas utilisable avec les souris HDPI (de plus en plus utilisées de nos jours, surtout par les joueurs...)
C'est votre droit de vous emerveiller devant des projets de plus de 10 ans, mais il faut vraiment d'arrêter d'utiliser ce genre de projet pour dire "bah si regarde ce qu'on peut faire !!!! BOUYA !!"
"Ils sont tellement impressionnant !"
NON ! Ca n'a rien d'impressionnant ! Lethal Judgment 4 est sorti en 2007, ça n'a rien d'impressionnant
dodonpachi sorti en 1997 qui tournais sur une
CAVE 68000 équipée d'un processeur
Motorola 68000 cadencé (pour les plus gros) à 12 MHz ! La oui... C'est impressionnant.
Une fois encore, je ne remet pas en question le travail de la team bGames, eux au moins on sorti des choses ce qui n'est pas mon cas, c'est uniquement VOS commentaire et votre entêtement à vous voiler la face que je relève.
Un moteur de shoot them up horizontal ce n'est rien de compliqué, pour preuve en voici un codé en 1h (j'ai pris mon temps car j'été occupé à jouer avec mon chat, faut dire que ça demande beaucoup de concentration ce genre d'exercice...)
Code : Tout sélectionner
EnableExplicit
InitSprite()
InitKeyboard()
Structure Player
X.f
Y.f
Life.a
Speed.f
BuletteCoolDown.I
BuletteTimer.I
BuletteVelocity.I
EndStructure
Structure FOE
X.I
Y.I
Life.a
Type.a
Paterne.a
Delta.b
Speed.a
BuletteCoolDown.I
BuletteTimer.I
BuletteVelocity.I
EndStructure
Structure Bulette
X.I
Y.I
Type.a
Paterne.a
Velocity.i
EndStructure
Global Player.Player, SprPlayer,SprBulettePlayer, SprBulette1, SprBulette2, SprFOE1, SprFOE2
Global NewList FOE.FOE(), NewList Bulette.Bulette(), NewList PlayerBulette.Bulette()
Declare CreateAsset()
Declare DrawAsset(Width,Height,Spr,Color)
Declare InitWorld()
Declare MovePlayer(Direction)
Declare NewPlayerShoot()
Declare CreateFOE()
Declare MakeWorld()
Declare CheckPlayerColision(X,Y,Type)
Declare CheckFOEColision(X,Y)
Declare DisplayWorld()
ExamineDesktops()
OpenWindow(0,0,0,DesktopWidth(0),DesktopHeight(0),"",#PB_Window_BorderLess)
OpenWindowedScreen(WindowID(0),0,0,1176,664,#True,0,0)
SetFrameRate(60)
CreateAsset()
InitWorld()
Repeat
ClearScreen($000000)
ExamineKeyboard()
;{========================Player control===================================
If KeyboardPushed(#PB_Key_Up)
MovePlayer(1)
ElseIf KeyboardPushed(#PB_Key_Down)
MovePlayer(3)
EndIf
If KeyboardPushed(#PB_Key_Left)
MovePlayer(4)
ElseIf KeyboardPushed(#PB_Key_Right)
MovePlayer(2)
EndIf
If KeyboardPushed(#PB_Key_Space)
NewPlayerShoot()
EndIf
;}=========================Player control end=============================
;{=========================Generate new FOE===============================
If WindowEvent() = #PB_Event_Timer And EventTimer() = 1
RemoveWindowTimer(0,1)
CreateFOE()
EndIf
;}========================FOE Generation end==============================
MakeWorld()
DisplayWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
Procedure CreateAsset()
SprPlayer = CreateSprite(#PB_Any,20,20,#PB_Sprite_AlphaBlending)
SprBulettePlayer = CreateSprite(#PB_Any,5,5,#PB_Sprite_AlphaBlending)
SprBulette1 = CreateSprite(#PB_Any,5,5,#PB_Sprite_AlphaBlending)
SprBulette2 = CreateSprite(#PB_Any,5,5,#PB_Sprite_AlphaBlending)
SprFOE1 = CreateSprite(#PB_Any,20,20,#PB_Sprite_AlphaBlending)
SprFOE2 = CreateSprite(#PB_Any,30,30,#PB_Sprite_AlphaBlending)
DrawAsset(20,20,SprPlayer,RGB(20,220,20))
DrawAsset(5,5,SprBulettePlayer,RGB(20,200,20))
DrawAsset(5,5,SprBulette1,RGB(200,20,20))
DrawAsset(5,5,SprBulette2,RGB(20,20,200))
DrawAsset(20,20,SprFOE1,RGB(200,20,20))
DrawAsset(30,30,SprFOE2,RGB(20,20,200))
EndProcedure
Procedure DrawAsset(Width,Height,Spr,Color)
StartDrawing(SpriteOutput(Spr))
Box(0,0,Width,Height,Color)
StopDrawing()
EndProcedure
Procedure InitWorld()
Player\X= 30
Player\Y = 317
Player\BuletteTimer = ElapsedMilliseconds()
player\BuletteCoolDown = 100
Player\Speed = 5
Player\BuletteVelocity = 10
player\Life = 5
ClearList(FOE())
ClearList(Bulette())
ClearList(PlayerBulette())
CreateFOE()
EndProcedure
Procedure MovePlayer(Direction)
Select Direction
Case 1
player\Y - player\Speed
Case 2
player\X + player\Speed
Case 3
player\Y + player\Speed
Case 4
player\X - player\Speed
EndSelect
EndProcedure
Procedure NewPlayerShoot()
If ElapsedMilliseconds() - player\BuletteTimer > player\BuletteCoolDown
AddElement(PlayerBulette())
PlayerBulette()\X = Round(player\X+20,#PB_Round_Nearest)
PlayerBulette()\y = Round(player\Y+10,#PB_Round_Nearest)
PlayerBulette()\Velocity = player\BuletteVelocity
Player\BuletteTimer = ElapsedMilliseconds()
EndIf
EndProcedure
Procedure CreateFOE()
Protected Result
Result = Random(2,1)
AddElement(FOE())
FOE()\X = 1176
FOE()\Y = Random(630,5)
If Result = 1
FOE()\Type = 1
FOE()\Speed = 3
FOE()\BuletteCoolDown = 1000
FOE()\BuletteTimer = ElapsedMilliseconds()
FOE()\BuletteVelocity = 1
ElseIf Result = 2
FOE()\Type = 2
FOE()\Speed = 2
EndIf
AddWindowTimer(0,1,Random(1000,100))
EndProcedure
Procedure MakeWorld()
ForEach PlayerBulette()
PlayerBulette()\X + PlayerBulette()\Velocity
If PlayerBulette()\X >= 1176
DeleteElement(PlayerBulette())
Else
CheckFOEColision(PlayerBulette()\X,PlayerBulette()\Y)
EndIf
Next
ForEach Bulette()
Bulette()\X - Bulette()\Velocity
If Bulette()\X <= 0
DeleteElement(Bulette())
Else
If CheckPlayerColision(Bulette()\X,Bulette()\Y,0)
InitWorld()
EndIf
EndIf
Next
ForEach FOE()
If FOE()\Type = 2
If FOE()\Paterne
FOE()\Y -1
FOE()\Delta + 1
If FOE()\Delta = 20
FOE()\Paterne = 0
EndIf
Else
FOE()\Y + 1
FOE()\Delta - 1
If FOE()\Delta = -20
FOE() \ Paterne = 1
EndIf
EndIf
Else
If ElapsedMilliseconds() - FOE()\BuletteTimer > FOE()\BuletteCoolDown
AddElement(Bulette())
Bulette()\Velocity = 5
Bulette()\X = FOE()\X
Bulette()\y = FOE()\Y+10
Bulette()\Type = 1
FOE()\BuletteTimer = ElapsedMilliseconds()
EndIf
EndIf
FOE()\X - FOE()\Speed
If FOE()\X <= 0
DeleteElement(FOE())
Else
If CheckPlayerColision(FOE()\X,FOE()\Y,1)
InitWorld()
EndIf
EndIf
Next
EndProcedure
Procedure CheckFOEColision(X,Y)
ForEach FOE()
If FOE()\Type = 1
If SpriteCollision(SprBulette1,X,Y,SprFOE1,FOE()\X,FOE()\Y)
DeleteElement(FOE())
EndIf
Else
If SpriteCollision(SprBulette1,X,Y,SprFOE2,FOE()\X,FOE()\Y)
DeleteElement(FOE())
EndIf
EndIf
Next
EndProcedure
Procedure CheckPlayerColision(X,Y,Type)
If Type
If FOE()\Type = 1
If SpriteCollision(SprPlayer,Player\X,Player\Y,SprFOE1,FOE()\X,FOE()\Y)
DeleteElement(FOE())
Player\Life - 1
EndIf
Else
If SpriteCollision(SprPlayer,Player\X,Player\Y,SprFOE2,FOE()\X,FOE()\Y)
DeleteElement(FOE())
Player\Life - 1
EndIf
EndIf
Else
If SpriteCollision(SprPlayer,Player\X,Player\Y,SprBulette1,Bulette()\X,Bulette()\Y)
DeleteElement(Bulette())
Player\Life - 1
EndIf
EndIf
If Player\Life = 0
ProcedureReturn 1
EndIf
EndProcedure
Procedure DisplayWorld()
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(10,10,Str(Player\Life))
StopDrawing()
DisplayTransparentSprite(SprPlayer,player\X,Player\Y)
ForEach PlayerBulette()
DisplaySprite(SprBulettePlayer,PlayerBulette()\X,PlayerBulette()\Y)
Next
ForEach FOE()
If FOE()\Type = 1
DisplayTransparentSprite(SprFOE1,FOE()\X,FOE()\Y)
ElseIf FOE()\Type = 2
DisplayTransparentSprite(SprFOE2,FOE()\X,FOE()\Y)
EndIf
Next
ForEach Bulette()
If Bulette()\Type = 1
DisplayTransparentSprite(SprBulette1,Bulette()\X,Bulette()\Y)
ElseIf Bulette()\Type = 2
DisplayTransparentSprite(SprBulette2,Bulette()\X,Bulette()\Y)
EndIf
Next
EndProcedure
Si quand quelqu'un dit "C'est dommage que pure ne fasse pas ..." on essayait de trouver une solution au lieu de le basher d'argument démontrant que c'est stupide ou trop dur ce qu'il demande (sauf si c'est réélement stupide, par exemple si on trouve un code de moins de 100 lignes qui fait la chose, il faut arrêter de demander que ce soit natif au language...), je pense qu'on ira dans une bien meilleur dirrection pour faire évoluer le language...
Un petit exemple parlant, je dit que pure n'est pas capable d'écrire du text via GPU, on me répond "Regarde comment c'est trop dur !!
http://www.rastertek.com/dx11tut12.html"
alors qu'en cherchant un peut on peut trouver
https://www.purebasic.fr/english/viewto ... hilit=font (Merci à Fig d'avoir fait un revival de ce post d'ailleur)
Maintenant libre à vous de continuer à vous entre-tripotter sur ce genre de projet avec des "Woaaaww troppp stylééé !!!" mais moi je trouve ça dommage car il y a de bon codeurs sur le forum francophone (je pense notament à falsam, G-rom, poshu et probablement d'autre que je ne connais pas ou que j'oublie) et je suis sur que plutot que de se contenter de ce qu'on a et de "marteller" le pauvre foue qui ose dire du mal de PB, on s'organisait pour se faire des outils chacun avec son niveau les choses avanceraient bien mieux...