Page 2 sur 4

Re: un jeu, un grand

Publié : dim. 29/juil./2007 11:57
par Polux
beauregard a écrit :
Cpl.Bator a écrit :Beauregard , tu veut de la 3D : :D
http://www.purebasic.fr/french/viewtopi ... 9&start=15
non, je ne compte pas me mettre à la vrai 3D, car j'ai déjà essayé avec 3dgc, et j'en est conclu que c'était encore trop tôt. Et puis, quand je vois le succès de jeu gameboy, certains à peine relifté avec le mot "new" placer devant le titre ( et se vendant comme des petits pains)... Je me suis dit que finalement, on pouvait faire des choses intéressantes en 2D.

Et c'est pourquoi je développe un jeu de plate-forme 2D, comme eric chahi ( seul dans ma chambre), sauf que manque de pot, je ne suis pas un surdoué. Alors ça me prendra encore beaucoup de temps pour le terminer... dans l'espoir par la suite que mon jeu soit suffisamment amusant, et fasse ainsi le tour du monde afin d'intéresser les sociétés ( droit console = plein de sous = faire ce que j'aime).
la 3d avec 3dgc c'est pas de la 3d... :?

Publié : dim. 29/juil./2007 11:58
par Polux
Cpl.Bator a écrit :
djes a écrit :
Cpl.Bator a écrit :je bosse pas mal , je retape une ruine , entre deux, je code un peu avec Tmyke :D
C'est bien tout ça :) Ton travail c'est toujours taxi? J'ai en projet d'utiliser la lib de tmyke pour un vrai projet un de ces 4. Elle est où ta ruine?
oui, j'ai eu l'examen , j'ai réussi à faire un crédit de 140.000e pour acheter une licence, mais le gars qui devait me la vendre à eu des problèmes, donc je poirote... j'vais p'tete faire flic en attendant :D
Sinon ma ruine est en haute normandie dans une p'tite ville médivale près du Havre, à Harfleur.
ah flic :D mon boulot d'avant :D ( véridique )

Publié : dim. 29/juil./2007 12:00
par Polux
beauregard a écrit : Ensuite, il y a le délicat problème de la colorisation dans vos production: au lieu de proposer un objet "tout rouge", mais y donc du blanc avec, afin de casser l'uniformité.
Quelques exemples:
blanc + rouge ; blanc + vert ; blanc + bleu
jaune + noir

et si possible, évitez tout ce qui est gris ou marron.
tout cela reste très subjectif..

Publié : dim. 29/juil./2007 13:18
par Backup
Polux a écrit :
beauregard a écrit : Ensuite, il y a le délicat problème de la colorisation dans vos production: au lieu de proposer un objet "tout rouge", mais y donc du blanc avec, afin de casser l'uniformité.
Quelques exemples:
blanc + rouge ; blanc + vert ; blanc + bleu
jaune + noir

et si possible, évitez tout ce qui est gris ou marron.
tout cela reste très subjectif..
oui :D moi j'aime bien l'effet NEXT ! (interface tout gris ! :D )

Image

Publié : dim. 29/juil./2007 14:34
par djes
Cpl.Bator a écrit :
djes a écrit :
Cpl.Bator a écrit :je bosse pas mal , je retape une ruine , entre deux, je code un peu avec Tmyke :D
C'est bien tout ça :) Ton travail c'est toujours taxi? J'ai en projet d'utiliser la lib de tmyke pour un vrai projet un de ces 4. Elle est où ta ruine?
oui, j'ai eu l'examen , j'ai réussi à faire un crédit de 140.000e pour acheter une licence, mais le gars qui devait me la vendre à eu des problèmes, donc je poirote... j'vais p'tete faire flic en attendant :D
Sinon ma ruine est en haute normandie dans une p'tite ville médivale près du Havre, à Harfleur.
Ma soeur est flic sur Paris, c'est plutôt calme en fait! Mais tu gagnerais quand même beaucoup moins que taxi... La haute Normandie ce n'est pas loin de chez moi, on pourra se voir un de ces 4. Je dois quand même me calmer car depuis que j'ai acheté ma voiture (moins de 2 mois), j'ai déjà fait 10000 kms...

Publié : dim. 29/juil./2007 14:34
par djes
Dobro a écrit :
Polux a écrit :
beauregard a écrit : Ensuite, il y a le délicat problème de la colorisation dans vos production: au lieu de proposer un objet "tout rouge", mais y donc du blanc avec, afin de casser l'uniformité.
Quelques exemples:
blanc + rouge ; blanc + vert ; blanc + bleu
jaune + noir

et si possible, évitez tout ce qui est gris ou marron.
tout cela reste très subjectif..
oui :D moi j'aime bien l'effet NEXT ! (interface tout gris ! :D )

Image
+1

Publié : dim. 29/juil./2007 14:34
par djes
Polux a écrit :
Cpl.Bator a écrit :
djes a écrit : C'est bien tout ça :) Ton travail c'est toujours taxi? J'ai en projet d'utiliser la lib de tmyke pour un vrai projet un de ces 4. Elle est où ta ruine?
oui, j'ai eu l'examen , j'ai réussi à faire un crédit de 140.000e pour acheter une licence, mais le gars qui devait me la vendre à eu des problèmes, donc je poirote... j'vais p'tete faire flic en attendant :D
Sinon ma ruine est en haute normandie dans une p'tite ville médivale près du Havre, à Harfleur.
ah flic :D mon boulot d'avant :D ( véridique )
8O :lol:

Publié : dim. 29/juil./2007 14:35
par djes
Polux a écrit :
beauregard a écrit : Ensuite, il y a le délicat problème de la colorisation dans vos production: au lieu de proposer un objet "tout rouge", mais y donc du blanc avec, afin de casser l'uniformité.
Quelques exemples:
blanc + rouge ; blanc + vert ; blanc + bleu
jaune + noir

et si possible, évitez tout ce qui est gris ou marron.
tout cela reste très subjectif..
+1

Publié : lun. 30/juil./2007 23:42
par ATHOW
J'ai un peu avancé le projet de la page précédente : on peut maintenant gérer un scrolling et plusieurs boite indépendante.

Baladez vous avec la souris et cliquez de temps en temps pour voir un effet interdit au moins de 16 ans :twisted:

Code : Tout sélectionner

; © ATHOW
; Au-Delà Project

;{- Global Variables, Constants & Enumeration

; sprites, sound effects, musics...
Enumeration
  #SPR_WHITESQUARE
  #SPR_GRAYSQUARE
EndEnumeration

;Others

; screen size
#SCREEN_WIDTH = 1024
#SCREEN_HEIGHT = 768

; gravity
#Gravity = 10

; depth of the platforms
#K = 10

; global variables for the scrolling
Global firstX.w
Global firstY.w

Global worldWidth.w
Global worldHeight.w

Global heroPosX.w
Global heroPosY.w

;}

;{- Structures

Structure blood
  diam.f
  x.f
  y.f
  dx.f
  dy.f
  depth.b
EndStructure

Structure box3D
  x.w
  y.w
  width.w
  height.w
  spriteLeft.l
  spriteRight.l
  spriteTop.l
  spriteFace.l
  k.w
EndStructure

Structure level
  levelFileName.s
  enemyFileName.s
  width.w
  height.w
EndStructure

;}

;{- Global Lists & Dims

Global NewList bloodList.blood()
Global NewList boxes3DList.box3D()

;}

;{- Windows

UsePNGImageDecoder()

If InitSprite()=0 Or InitKeyboard()=0 Or InitSprite3D()=0 Or InitMouse() = 0
  MessageRequester("Error", "Au-Delà was unable to launch. Verify that DirectX is installed correctly.", 0) 
  End 
EndIf 

;If OpenWindowedScreen(OpenWindow(0,0,0,#SCREEN_WIDTH, #SCREEN_HEIGHT,"Au-Delà",#PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_MinimizeGadget),0,0,#SCREEN_WIDTH, #SCREEN_HEIGHT,0,0,0) = 0 
If OpenScreen(#SCREEN_WIDTH,#SCREEN_HEIGHT,32,"Au-Delà") = 0 
  MessageRequester("Error", "Unable to open a 800x600 screen", 0) 
  End 
EndIf 
KeyboardMode(1)
;}

;{- Sprites

CreateSprite(#SPR_WHITESQUARE,256,256,#PB_Sprite_Texture)
TransparentSpriteColor(#SPR_WHITESQUARE, RGB(255,0,255))

CreateSprite(#SPR_GRAYSQUARE,256,256,#PB_Sprite_Texture)
TransparentSpriteColor(#SPR_GRAYSQUARE, RGB(255,0,255))

StartDrawing(SpriteOutput(#SPR_WHITESQUARE))
For i.w = 0 To 127
  color.w = 170+Int(i/2)
  If(color > 255)
    color = 255
  EndIf
  Box(i,i,256-i,256-i,RGB(color,color,color))
  
Next
StopDrawing()

StartDrawing(SpriteOutput(#SPR_GRAYSQUARE))
For i.w = 0 To 255
  color.w = 130+Int(i/4)
  If(color > 255)
    color = 255
  EndIf
  Line(0,i,256,0,RGB(color,color,color))
Next
StopDrawing()


;}

;{- Tools

Procedure.w Max(Value1.f,Value2.f)
  If Value1 > Value2
    ProcedureReturn Value1
  Else
    ProcedureReturn Value2
  EndIf
EndProcedure
  

Procedure.w randInt(max.w)
  ProcedureReturn Int(Random(max))
EndProcedure

;}

;{- Graphical Effects

Procedure addBlood(x.f,y.f,powerX.f,powerY.f)
  nbBlood.b = Int(50+Abs(powerX*powerY))
  For i.b = 0 To nbBlood
    AddElement(bloodList())
    bloodList()\diam = Max(1,Random(4))
    bloodList()\x = x + Random(10)
    bloodList()\y = y + Random(10)
    bloodList()\dx = (Random(bloodList()\diam))*powerX+(Random(bloodList()\diam))
    bloodList()\dy = (Random(bloodList()\diam))*powerY+(Random(bloodList()\diam))
  Next
EndProcedure

Procedure displayBlood()
  ResetList(bloodList())
  StartDrawing(ScreenOutput())
  While NextElement(bloodList())
    Ellipse(Int(bloodList()\x) - firstX,Int(bloodList()\y) - firstY,Int(bloodList()\diam),Int(bloodList()\diam)+randInt(2),RGB(160,0,0))
  Wend
  StopDrawing()
EndProcedure

Procedure updateBlood()
  ResetList(bloodList())
  While NextElement(bloodList())
    bloodList()\x = bloodList()\x + bloodList()\dx
    bloodList()\y = bloodList()\y + bloodList()\dy
    bloodList()\dy = bloodList()\dy + #Gravity/10
    bloodList()\dx = bloodList()\dx
    
    If bloodList()\x - firstX<0 Or bloodList()\x - firstX>worldWidth Or bloodList()\y - firstY>worldHeight
      DeleteElement(bloodList())
    Else ; collision with the Boxes ?
      ResetList(boxes3DList())
      While(NextElement(boxes3DList()))
        
        ; collision with the left face :
        If (bloodList()\x - bloodList()\dx < boxes3DList()\x) And (bloodList()\x >= boxes3DList()\x) And (bloodList()\y >= boxes3DList()\y) And (bloodList()\y <= boxes3DList()\y + boxes3DList()\height) And (randInt(10) > 4)
          StartDrawing(SpriteOutput(boxes3DList()\spriteLeft))
          argX.w = randInt(256)
          argY.w = Int(256 * (bloodList()\y - boxes3DList()\y) / boxes3DList()\height)
          argRadiusX.w = 3*Int(bloodList()\diam)
          argRadiusY.w = Int(512 / boxes3DList()\height) * Int(bloodList()\diam) + randInt(3)
          Ellipse(argX,argY,argRadiusX,argRadiusY,RGB(140,0,0))
          StopDrawing()
          DeleteElement(bloodList())
          Break
        EndIf
        
        ; collision with the right face :
        If (bloodList()\x - bloodList()\dx >= boxes3DList()\x + boxes3DList()\width) And (bloodList()\x < boxes3DList()\x + boxes3DList()\width) And (bloodList()\y >= boxes3DList()\y) And (bloodList()\y <= boxes3DList()\y + boxes3DList()\height) And (randInt(10) > 4)
          StartDrawing(SpriteOutput(boxes3DList()\spriteRight))
          argX.w = randInt(256)
          argY.w = Int(256 * (bloodList()\y - boxes3DList()\y) / boxes3DList()\height)
          argRadiusX.w = 3*Int(bloodList()\diam)
          argRadiusY.w = Int(512 / boxes3DList()\height) * Int(bloodList()\diam) + randInt(3)
          Ellipse(argX,argY,argRadiusX,argRadiusY,RGB(140,0,0))
          StopDrawing()
          DeleteElement(bloodList())
          Break
        EndIf
        
        ; collision with the top face :
        If (bloodList()\y + bloodList()\dy >= boxes3DList()\y) And (bloodList()\y < boxes3DList()\y) And (bloodList()\x >= boxes3DList()\x) And (bloodList()\x <= boxes3DList()\x + boxes3DList()\width) And (randInt(10) > 4)
          StartDrawing(SpriteOutput(boxes3DList()\spriteTop))
          argX.w = Int(256 * (bloodList()\x - boxes3DList()\x) / boxes3DList()\width)
          argY.w = randInt(256)
          argRadiusX.w = Int(768 / boxes3DList()\width) * Int(bloodList()\diam) + randInt(3)
          argRadiusY.w = 3*Int(bloodList()\diam)
          Ellipse(argX,argY,argRadiusX,argRadiusY,RGB(140,0,0))
          StopDrawing()
          DeleteElement(bloodList())
          Break
        EndIf
        
        ; collision with the bottom face (no blood paint):
        If (bloodList()\y + bloodList()\dy < boxes3DList()\y + boxes3DList()\height) And (bloodList()\y >= boxes3DList()\y + boxes3DList()\height) And (bloodList()\x >= boxes3DList()\x) And (bloodList()\x <= boxes3DList()\x + boxes3DList()\width) And (randInt(10) > 3)
          DeleteElement(bloodList())
          Break
        EndIf
        
        ; collision with the front face :
        If (bloodList()\y >= boxes3DList()\y) And (bloodList()\y <= boxes3DList()\y + boxes3DList()\height) And (bloodList()\x >= boxes3DList()\x) And (bloodList()\x <= boxes3DList()\x + boxes3DList()\width) And (randInt(10) > 5)
          StartDrawing(SpriteOutput(boxes3DList()\spriteFace))
          argX.w = Int(256 * (bloodList()\x - boxes3DList()\x) / boxes3DList()\width)
          argY.w = Int(256 * (bloodList()\y - boxes3DList()\y) / boxes3DList()\height)
          argRadiusX.w = Int(512 / boxes3DList()\width) * Int(bloodList()\diam) + randInt(3)
          argRadiusY.w = Int(768 / boxes3DList()\height) * Int(bloodList()\diam) + randInt(5)
          Ellipse(argX,argY,argRadiusX,argRadiusY,RGB(140,0,0))
          StopDrawing()
          DeleteElement(bloodList())
          Break
        EndIf
        
      Wend 
    EndIf
  Wend
EndProcedure

Procedure displayBox3D(x.w,y.w,width.w,height.w, spriteLeft,spriteRight,spriteTop,spriteFace)
  
  CreateSprite3D(0,spriteLeft)
  CreateSprite3D(1,spriteRight)
  CreateSprite3D(2,spriteTop)
  CreateSprite3D(3,spriteFace)
  
  ex.w = ((#SCREEN_WIDTH/2) / #K) - (x / #K) + x
  ey.w = -((#SCREEN_HEIGHT/10) / #K + y / #K - y)
  
  bx.w = (((#SCREEN_WIDTH/2) - x - width) / - #K) + x + width
  by.w = 2 * y - ey
  
  ax.w = 2 * x - ex
  ay.w = by
  cx.w = bx
  cy.w = by + height
  dx.w = ax
  dy.w = cy
  fx.w = 2 * x + 2 * width - bx
  fy.w = ey
  gx.w = fx
  gy.w = fy + height
  hx.w = ex
  hy.w = gy
  
  ; display the left face
  TransformSprite3D(0,ex,ey,ax,ay,dx,dy,hx,hy)
  DisplaySprite3D(0,0,0,230)
  
  ; display the right face
  TransformSprite3D(1,bx,by,fx,fy,gx,gy,cx,cy)
  DisplaySprite3D(1,0,0,230)
  
  ; display the top face
  TransformSprite3D(2,ex,ey,fx,fy,bx,by,ax,ay)
  DisplaySprite3D(2,0,0)
  
  ; display the front face
  TransformSprite3D(3,ax,ay,bx,by,cx,cy,dx,dy)
  DisplaySprite3D(3,0,0,230)

EndProcedure

Procedure addBox3D(x.w,y.w,width.w,height.w)
  AddElement(boxes3DList())
  boxes3DList()\x = x
  boxes3DList()\y = y
  boxes3DList()\width = width
  boxes3DList()\height = height
  boxes3DList()\spriteLeft = CopySprite(#SPR_GRAYSQUARE,#PB_Any,#PB_Sprite_Texture)
  boxes3DList()\spriteRight = CopySprite(#SPR_GRAYSQUARE,#PB_Any,#PB_Sprite_Texture)
  boxes3DList()\spriteTop = CopySprite(#SPR_WHITESQUARE,#PB_Any,#PB_Sprite_Texture)
  boxes3DList()\spriteFace = CopySprite(#SPR_GRAYSQUARE,#PB_Any,#PB_Sprite_Texture)
EndProcedure

Procedure displayAllBoxes3D()
  Start3D()
  ResetList(boxes3DList())
  While NextElement(boxes3DList())
    displayBox3D(boxes3DList()\x - firstX,boxes3DList()\y - firstY,boxes3DList()\width,boxes3DList()\height,boxes3DList()\spriteLeft,boxes3DList()\spriteRight,boxes3DList()\spriteTop,boxes3DList()\spriteFace)
  Wend
  Stop3D()
  StartDrawing(ScreenOutput())
  Circle(heroPosX - firstX, heroPosY - firstY, 10, RGB(255,0,0))
  StopDrawing()
EndProcedure

;}

;-{ Game Procedures

Procedure updateScroll()
  firstX = heroPosX - Int(#SCREEN_WIDTH / 2)
  If firstX < 0
    firstX = 0
  EndIf
  If firstX > worldWidth - Int(#SCREEN_WIDTH)
    firstX = worldWidth - Int(#SCREEN_WIDTH)
  EndIf
  firstY = heroPosY - Int(#SCREEN_HEIGHT / 2)
  If firstY < 0
    firstY = 0
  EndIf
  If firstY > worldHeight - Int(#SCREEN_HEIGHT)
    firstY = worldHeight - Int(#SCREEN_HEIGHT)
  EndIf
EndProcedure

Procedure createWorld()
  worldWidth = 1600
  worldHeight = 1000
  heroPosX = 30
  heroPosY = 500
  addBox3D(20,500,400,50)
  addBox3D(1000,300,300,100)
  addBox3D(100,100,20,200)
EndProcedure

;{- Menus and screens

Procedure Test()
  
  createWorld()
  click.b = 0
  Repeat
    FlipBuffers()
    ClearScreen(RGB(255,255,255))
    
    
    ExamineKeyboard()
    

    ExamineMouse()
    heroPosX + MouseDeltaX()
    If heroPosX < 0
      heroPosX = 0
    EndIf
    If heroPosX > worldWidth
      heroPosX = worldWidth
    EndIf
    heroPosY + MouseDeltaY()
    If heroPosY < 0
      heroPosY = 0
    EndIf
    If heroPosY > worldHeight
      heroPosY = worldHeight
    EndIf
    updateScroll()
    
    
    If MouseButton(1)
      If click = 1
        click = 2
      EndIf
      If click = 0
        click = 1
      EndIf
    Else
      If click <> 0
        click = 0
      EndIf
    EndIf
    
    If click = 1
      addBlood(heroPosX,heroPosY,randInt(20) - 10,randInt(20) - 10)
    EndIf
    
    displayAllBoxes3D()
    displayBlood()
    updateBlood()
    Delay(20)
  Until KeyboardPushed(#PB_Key_Escape)
EndProcedure

;}


;{- Main routine


Test()

;}
Question : à votre avis, de quel genre sera ce jeu :?:

Publié : mar. 31/juil./2007 5:59
par Ollivier
J'avais pas eu qu'il y avait un challenge! C'est excellent tout ça! Je vois qu'on essaie de s'en sortir 'façon maison' !

Le code allemand n'est pas mal non plus. Il ne manque plus qu'une bonne accélération et un peu de rangement dans le code.

Je vais regarder le code de Cpl, voir si on peut ajouter toutes les rotations aussi.

Publié : mar. 31/juil./2007 6:09
par Ollivier
J'avais commencé à faire ce petit code peu significatif pour tenter de pénétrer la vrai 3d 'façon maison' suite à la création de ce sujet.
Est-ce qu'un matheux peut me dire si je fais fausse route?

Code : Tout sélectionner

Global Xtheta.F
Global Ytheta.F
Global Ztheta.F


  InitSprite()
  InitKeyboard()
  OpenScreen(1024, 768, 32, "x")
  ;***********
  R.F = 100.0
  Xtheta = 0.0
  Ytheta = 0.0
  Ztheta = 0.0      
  ;***********
  Repeat
    StartDrawing(ScreenOutput() )
      Box(0, 0, 1024, 768, #Black)
      For i = 0 To 359
        Xtheta = #PI * i / 180.0
        ;**********
        Ax.F = R * Cos(Xtheta) * Cos(Ytheta)
        Ay.F = R * Sin(Xtheta) ; On pourra la descendre plus bas
        Re.F = Sqr(Pow(Ax, 2) + Pow(Ay, 2) )
        If Re = 0.0
          Bx.F = Ax
          By.F = Ay
        Else
          Ga.F = ACos(Ax / Re)
          If Ay < 0.0
            Ga = 0.0 - Ga
          EndIf
          Bx = Re * Cos(Ga + Ztheta)
          By = Re * Sin(Ga + Ztheta)
        EndIf
        ;**********
        Plot(512 + Bx, 384 + By, ( ((i + XOffset) / 36) % 2) * 255)
      Next
    Xtmp = Xoffset
    Xtmp % 180
    DrawText(0, 0, Str(Xtmp), #White, #Black)
    Ytmp = Ytheta * 180 / #PI
    Ytmp % 180
    DrawText(0, 16, Str(Ytmp), #White, #Black)
    ZTmp = (Ztheta * 180 / #PI)
    Ztmp % 180
    DrawText(0, 32, Str(Ztmp), #White, #Black)
    DrawText(0, 48, "Utilisez les 4 flèches de direction et PageUp, PageDown pour modifier x, y, et z")
    StopDrawing()
    FlipBuffers()
    ExamineKeyboard()
    If KeyboardPushed(#PB_Key_PageUp)
      XOffset + 4
    EndIf
    If KeyboardPushed(#PB_Key_PageDown)
      XOffset - 4
    EndIf
    If KeyboardPushed(#PB_Key_Up)
      Ytheta + 0.04
    EndIf
    If KeyboardPushed(#PB_Key_Down)
      Ytheta - 0.04
    EndIf
    If KeyboardPushed(#PB_Key_Left)
      Ztheta + 0.04
    EndIf
    If KeyboardPushed(#PB_Key_Right)
      Ztheta - 0.04
    EndIf
  Until KeyboardPushed(#PB_Key_Escape)

Publié : mar. 31/juil./2007 10:13
par Anonyme

Publié : mar. 31/juil./2007 12:55
par djes
ATHOW> Excellent :P

Publié : mar. 31/juil./2007 13:02
par Polux
ATHOW> très fort!!!! j'adore l'effet! c tip top! :wink:

Publié : mar. 31/juil./2007 13:11
par Crystal Noir
C'est clair c'est bien foutu :)