cocoune mon idée

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
venom
Messages : 3136
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

cocoune mon idée

Message par venom »

bonjour,

voila je connais purebasic depuis 5 ans a peut pres maintenant. et oui j'en connais pas beaucoup mais sa fait 5 ans que je suis ici :lol: .

bref c'est pas le but :wink: .

donc n'ayant jamais programmer de jeux video j'ai eu cette envie depuis ce soir :) .
donc l'idée de mon jeux c'est tout simplement de déplacer une balle rouge dans un pseudo labyrinthe mais ou ont doit bouger certain murs pour ce frayer un chemin. bon sa n'est pas un jeux extraordinaire mais bon.

donc ma question 1ere c'est :
est-ce que j'ai choisis un sujet a mon niveau ( je n'est jamais fait de jeux ), ou cela demande pas mal de connaissance dans la matiere ?.

ensuite pour ce qui est de dessiner le labyrinthe:
je sais que j'ai un nombre de case afficher de 18 par 13.

donc le mieu est de crée un fichier du genre fichier texte avec des 0 et des 1.
ou de dessiner a chaque fois un mur avec la fonction DisplaySprite(0, x, y)?.

fin c'est vraiment le debu de ce projet dont voici la source si sa peut aidé a mes questions :wink: :

http://venompb.free.fr/cocoune.zip
ps: le dossier est a metre a la racine de C:/

voila dites moi ce que vous penser du projet merci.


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

est-ce que j'ai choisis un sujet a mon niveau ( je n'est jamais fait de jeux ), ou cela demande pas mal de connaissance dans la matiere ?.
C'est un bon sujet et ça demande les connaissances de bases.

Pour définir ton labyrinthe tu peux utiliser au choix un fichier texte, ou une DataSection.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

l'oeil du tigre

Message par beauregard »

Pour faire un jeu, même modeste, faut de la persévérance... faut être même particulièrement déterminé.
Avatar de l’utilisateur
venom
Messages : 3136
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

re, deja des soucis :lol:

bon pour les niveau j'ai adapter pour le moment a une : DataSection. :wink:

mais le probleme c'est que le jeux se lance mais s'arrete apres l'affichage des Datas. en renvoyant : Read Data error: no more data.
donc pour moi c'est une erreur de nombre de data qui n'est pas bon fin je ne comprend pas trop j'etais sur d'avoir bon :)
voici la source en question:


Code : Tout sélectionner

InitSprite();<--- on initialise le sprite
InitKeyboard();<--- on initialise la clavier
InitSound();<--- on initialise le son

Enumeration
#Son
EndEnumeration

If OpenScreen(800, 600, 32, "cocoune");<--- on ouvre le Screen

 LoadSprite(0, "c:/cocoune/fond.bmp", 0);<--- on charge le fond

 LoadSprite(1, "c:/cocoune/tour.bmp", 0);<--- on charge la croix bleu
  
 LoadSprite(2, "c:/cocoune/brique.bmp", 0);<--- on charge la brique

UseOGGSoundDecoder();<--- on initialise l'environnement ogg
 LoadSound(#Son, "c:/cocoune/music.ogg");<--- on charge la musique
  PlaySound(#Son , 1);<--- on joue la musique ( 1 = en boucle, 0 = joue 1 fois )
   SoundVolume(#Son, 35);<--- on choisis le volume ( 35 )
  
  Repeat
   FlipBuffers()
    ClearScreen(RGB(0,0,0)) 
    
     DisplaySprite(0, 0, 0);<---- affiche le fond vert

   For a = 0 To 780 Step 40;<------------\
   For b = 0 To 580 Step 40;<-------------\\
    DisplaySprite(1, a, 0);<----------------\\\
    DisplaySprite(1, 0, a);<-----------------\\\\ affiche les croix
    DisplaySprite(1, a, 560);<---------------//// bleu autour
    DisplaySprite(1, 760, b);<--------------///
   Next;<----------------------------------//
   Next;<---------------------------------/

For x = 40 To 920 Step 40
For y = 40 To 720 Step 40
 Read etat.b
 If etat=1
  DisplaySprite(2, y, x)
 Else
  
 EndIf 
Next
Next 
 
    ExamineKeyboard();<--- on appel le clavier
  Until x > 500 Or KeyboardPushed(#PB_Key_Escape);<--- on quitte si on appuie sur echappe
  
EndIf
End 

  
DataSection
debut:
Data.b 1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0
Data.b 0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
Data.b 0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0
Data.b 0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0
Data.b 0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0
Data.b 0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0
Data.b 0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0
Data.b 0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0
Data.b 0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0
Data.b 0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0
Data.b 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0
Data.b 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0
Data.b 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1

EndDataSection
d'avance merci.

@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Anonyme

Message par Anonyme »

Code : Tout sélectionner

For x = 40 To 920 Step 40
For y = 40 To 720 Step 40
 Read etat.b
 If etat=1
  DisplaySprite(2, y, x)
 Else
 
 EndIf
Next
Next 
ici , tes boucles for-next sont fauses
car y vaut 40 puis 80 puis 120 etc... tu n'a pas l'index 120 dans ta datasection.
ta datasection fait 18x13

alors
For x = 0 To 18 -1
For y = 0 To 13 -1
Read etat.b
If etat=1

Px = x * TailleSpriteX
Py = y * TailleSpriteY

DisplaySprite(2, Px, Py)
Else

EndIf
Next
Considère une datasection comme un tableau ( dim )
Avatar de l’utilisateur
venom
Messages : 3136
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

merci de ta reponse Cpl.Bator

mais je n'arrive pas a le faire fonctionner ton exemple

mais d'apres ce que j'ai compris mon for next doit aller de 0 a 18 par 0 a 13
mais je souhaite un intervalle de 40 entre chaque mur dessiner donc d'apres ton code j'ai fait sa

Code : Tout sélectionner

For x = 0 To 18-1
For y = 0 To 13-1
Read etat.b
If etat=1

px = x * 40
Py = y * 40 

DisplaySprite(2, Py, Px)
Else

EndIf
Next
Next 
et sa ne fonctionne pas :s


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

tu devrai mettre un code de control de fin dans tes data

et mettre un restore parce que tu es dans une boucle repeat-until
donc la lecture a tendance a dépasser le dernier indice des datas
puisque repeté a chaque boucle du repete !!


d'autre part met toi en fenêtre comme je l'ai fais, c'est difficile de debugger en mode Screen !!

d'autre part, lorsque tu demande de l'aide propose un code qui fonctionne sans avoir a télécharger des images
la pour le coup , j'ai du perdre du temps a recréer des sprites bidon, pour pouvoir le faire marcher ton code !!!


Code : Tout sélectionner

InitSprite();<--- on initialise le sprite
InitKeyboard();<--- on initialise la clavier
InitSound();<--- on initialise le son

Enumeration
  #Son
EndEnumeration

OpenWindow(1,10,10,800,600,"toto")

If OpenWindowedScreen(WindowID(1),0,0,800, 600, 1,0,0);<--- on ouvre le Screen

  
  
  ;LoadSprite(0, "c:/cocoune/fond.bmp", 0);<--- on charge le fond
  CreateSprite(0,800,600)
  
  ;LoadSprite(1, "c:/cocoune/tour.bmp", 0);<--- on charge la croix bleu
  CreateSprite(1,32,32,RGB(0,0,255))
  StartDrawing(SpriteOutput(1))
  Box(0,0,32,32,RGB(0,0,255))
  StopDrawing()
  ;LoadSprite(2, "c:/cocoune/brique.bmp", 0);<--- on charge la brique
  CreateSprite(2,32,32,RGB(0,255,0))
  StartDrawing(SpriteOutput(2))
  Box(0,0,32,32,RGB(0,255,0))
  StopDrawing()
  ; UseOGGSoundDecoder();<--- on initialise l'environnement ogg
  ; LoadSound(#Son, "c:/cocoune/music.ogg");<--- on charge la musique
  ; PlaySound(#Son , 1);<--- on joue la musique ( 1 = en boucle, 0 = joue 1 fois )
  ; SoundVolume(#Son, 35);<--- on choisis le volume ( 35 )
  
  Repeat 
    Event = WaitWindowEvent()
    
    
    
  DisplaySprite(0, 0, 0);<---- affiche le fond vert
  
For a = 0 To 780 Step 40;<------------\
For b = 0 To 580 Step 40;<------------\\
DisplaySprite(1, a, 0);<--------------\\\
DisplaySprite(1, 0, a);<--------------\\\\ affiche les croix
DisplaySprite(1, a, 560);<------------//// bleu autour
DisplaySprite(1, 760, b);<------------///
Next;<---------------------------------//
Next;<---------------------------------/
Restore debut  ; AVEC un RESTORE c'est mieux !!

For x = 40 To 920 Step 40
  For Y = 40 To 720 Step 40 
    Read etat.b 
    If etat.b=88
      Restore debut  ; AVEC un RESTORE c'est mieux !!
    EndIf 
    If etat=1
      DisplaySprite(2, Y, x)
    Else
      
    EndIf
  Next
Next
 
ExamineKeyboard();<--- on appel le clavier


FlipBuffers()
ClearScreen(RGB(0,0,0))
Until  KeyboardPushed(#PB_Key_Escape) Or   Event = #PB_Event_CloseWindow

 
EndIf
End

 
DataSection
debut:
Data.b 1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0
Data.b 1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0
Data.b 1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0
Data.b 0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
Data.b 0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0
Data.b 0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0
Data.b 0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0
Data.b 0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0
Data.b 0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0
Data.b 0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0
Data.b 0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0
Data.b 0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0
Data.b 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0
Data.b 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0
Data.b 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,88
EndDataSection
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

arf !! j'avais oublier les event , voila c'est corrigé !! :)
Avatar de l’utilisateur
venom
Messages : 3136
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

merci a vous deux.
Dobro, je prend note de tes suggestions :wink: .

encore merci.
maintenant le déplacement du personnage :P .



@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
venom
Messages : 3136
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

re: :lol:

bon malhereusement en ce moment j'ai pas le temps de programmer de trop :( donc mon projet n'avance plus de trop mais je vien au nouvelle avec une version qui gere le déplacement et la transparence d'un personnage et qui en plus ne sort plus de son environnement.

bon ok c'est peut etre bof pour certain :wink: . mais n'ayant jamais fait de jeux c'est une grande avancer pour moi. :lol:

voici la source qui pèse beaucoup moin que l'autre :D , avec des commentaires.

http://venompb.free.fr/cocoune.zip.
voila


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
SpaceMan
Messages : 290
Inscription : mar. 26/oct./2004 19:35
Contact :

Message par SpaceMan »

non franchement je crois qu'il ne faut pas abandonner !
c'est vrai que c'est pas donner mais tu te débouilles bien.
Moi j'ai jamais touché aux fonctions de jeux, vu que j'ai du mal à maitriser les autres fonctions de PB :lol: , j'ose pas toucher aux commandes de jeux mais ça viendra !
:D
Répondre