Page 1 sur 2

Documentation sur les jeux

Publié : mer. 16/juin/2004 19:14
par garzul
:D Bonjour je voudrai savoir comment programmer des jeux (que faut t-il savoir ( les comande pure basic et tt sa )) et si il faut etre bon en math et ou savoir programmer ces jeux et aprendre kel fonction de purre bazsic 8O

Publié : jeu. 17/juin/2004 12:54
par hardy
Le sujet est vaste !
Pour programmer des jeux, il faut de tout.
Connaître toutes les bases de programmation.
Avoir, sous Windows, une documentation conséquente sur les fonctions API. (ça sert toujours)
Savoir utiliser les fonctions graphiques 2D (sprites,...) et 3D. (pour la 3D, les mesh,etc...)

Bref, tout :!:

Commence par regarder des codes simples de jeux. Il y en a dans les sections applications et Jeux.
Déjà, dans les exemples de PB, il y a Waponez. De quoi t'occuper pour apprendre la 2D.
Pour la 3D, en plus, pour créer des formes, il faut un logiciel pour créer les meshs. Mais tu peux aussi essayer d'en faire un toi même!
Prendra du temps, mais si tu y arrives, tu sauras faire pas mal de choses.

Publié : jeu. 17/juin/2004 14:15
par filperj
Hardy, tu vas lui faire peur! :lol:
Pour un jeu, on peut très bien se passer des API windows.
Il y a de très bons jeux sans la moindre 3D.
Un petit jeu sympa genre démineur n'a même pas besoin de sprites.

Faux pas commencer par refaire Morrowind en mieux :lol:
Un morpion, par ex, est très bien pour se faire les dents: ça demande déjà une fenêtre, des boutons, un tout petit début d'IA...

Publié : jeu. 17/juin/2004 16:47
par hardy
C'est vrai, j'y vais un peu fort. Désolé :oops:

tiens, je t'ai fait un petit code : jeu de Go. (interface joueur, j'ai pas eu le temps de faire jouer l'ordinateur :lol: :lol: :lol: )
Ca permet de jouer, de sauver/reprendre une partie. Et tout de même, ça prend les pions. (tu connais les règles?)

Code : Tout sélectionner

Dim etat.b(5000,20,20)
Dim vu.b(20,20)
Dim energie.f(21,21)
Dim onde.f(21,21,4)
Dim onde2.f(21,21,4)
Dim pris.b(20,20)
Dim comp.l(20,20)
Dim card.l(100,2)
Dim oeil.b(20,20)

Global n.b,joueur.b,etat,coup.l,total.l,vu,larg.l,niveau.l,gain.l,perte.l
Global energie,onde,onde2,pris,comp,card,oeil
joueur=-1:n=19:coup=1:total=1:niveau=50

font=LoadFont(0,"Times New Roman",14,#PB_Font_Bold|#PB_Font_Italic|#PB_Font_HighQuality)
For k=0 To 999
For i=0 To n
For j=0 To n
etat(k,i,j)=0
Next j:Next i:Next k

Procedure refresh()
StartDrawing(WindowOutput())
For i=0 To n*27+20
k.l=Round(110+145*i/(n*27+20),0)
FrontColor(k,0,k)
Line(0,i,larg,0)
Next i
FrontColor(255,255,255)
For i=0 To n-1
Line(13,33+27*i,27*n-26,0)
Line(13+27*i,33,0,27*n-26)
Next i
For i=0 To n-1:For j=0 To n-1
Select etat(coup-1,i+1,j+1)
Case 0
FrontColor(255,255,255)
Circle(13+27*i,33+27*j,3)
Case 1
For k=10 To 0 Step -1
Circle(13+27*i,33+27*j,k,RGB(20*k,20*k,20*k))
Next k
Case -1
For k=10 To 0 Step -1
Circle(13+27*i,33+27*j,k,RGB(20*k,0,0))
Next k
EndSelect
Next j:Next i
DrawingMode(1)
Locate(40,0)
DrawingFont(UseFont(0))
If joueur=-1:ins.s="1 (rouge)":Else:ins.s="2 (gris)":EndIf
titre.s="Joueur "+ins+"  Coup "+Str(coup)
DrawText(titre)
DrawingMode(0)
StopDrawing()
EndProcedure

Procedure supprime(x,y)
StartDrawing(WindowOutput())
For i=23+27*(y-1) To 43+27*(y-1)
k.l=Round(110+145*i/(n*27+20),0)
FrontColor(k,0,k)
Line(3+27*(x-1),i,20,0)
Next i
FrontColor(255,255,255)
a.l=23+27*(y-1):b.l=21
If y=1:a=33:b=11:EndIf
If y=n:b=10:EndIf
Line(13+27*(x-1),a,0,b)
a.l=3+27*(x-1):b.l=21
If x=1:a=13:b=11:EndIf
If x=n:b=10:EndIf
Line(a,33+27*(y-1),b,0)
Circle(13+27*(x-1),33+27*(y-1),3)
StopDrawing()
EndProcedure

Procedure nouveau(i.l,j.l)
StartDrawing(WindowOutput())
For p=0 To 21
k.l=Round(110+145*p/(n*27+20),0)
FrontColor(k,0,k)
Line(0,p,n*27,0)
Next p
Select etat(coup,i,j)
Case 1
For k=10 To 0 Step -1
Circle(13+27*(i-1),33+27*(j-1),k,RGB(20*k,20*k,20*k))
Next k
Case -1
For k=10 To 0 Step -1
Circle(13+27*(i-1),33+27*(j-1),k,RGB(20*k,0,0))
Next k
EndSelect
DrawingMode(1)
Locate(40,0)
DrawingFont(UseFont(0))
FrontColor(255,255,255)
If joueur=-1:ins.s="1 (rouge)":Else:ins.s="2 (gris)":EndIf
titre.s="Joueur "+ins+"  Coup "+Str(coup+1)
DrawText(titre)
DrawingMode(0)
StopDrawing()
EndProcedure


Procedure sauver()
file.s=SaveFileRequester("Sauver","partie.go","Fichiers Go|*.go",0)
pos.b=FindString(file,".",1)
If pos>0:file=Left(file,pos)+"go":Else:file=file+".go":EndIf
If Len(file)>3 And CreateFile(0,file)
WriteByte(n)
WriteLong(coup)
WriteLong(total)
WriteByte(joueur)
For i=1 To total
For j=1 To 20
For k=1 To 20
WriteByte(etat(i,j,k))
Next k:Next j:Next i
CloseFile(0)
EndIf
;refresh()
EndProcedure

Procedure ouvrir()
file.s=OpenFileRequester("Ouvrir","","Fichiers Go|*.go",0)
If file<>"" And OpenFile(0,file)
n=ReadByte()
coup=ReadLong()
total=ReadLong()
joueur=ReadByte()
For i=1 To total
For j=1 To 20
For k=1 To 20
etat(i,j,k)=ReadByte()
Next k:Next j:Next i
CloseFile(0)
larg=n*27:If larg<500:larg=500:EndIf
ResizeWindow(larg,40+27*n)
refresh()
EndIf
EndProcedure

Procedure precedent()
If coup>1
coup=coup-1:joueur=-joueur:refresh()
EndIf
EndProcedure

Procedure suivant()
If coup<total
coup=coup+1:joueur=-joueur:refresh()
EndIf
EndProcedure

Procedure bord(player,c)
For i=0 To 20
etat(c,0,i)=player:etat(c,n+1,i)=player
etat(c,i,0)=player:etat(c,i,n+1)=player
Next i
EndProcedure

Procedure voir(x,y)
If vu(x,y):ProcedureReturn 1:EndIf
If etat(coup,x,y)=0 :vu(x,y)=1:ProcedureReturn 0:EndIf
If etat(coup,x,y)=joueur:vu(x,y)=1:ProcedureReturn 1:EndIf
vu(x,y)=1
ProcedureReturn voir(x-1,y)*voir(x+1,y)*voir(x,y-1)*voir(x,y+1)
EndProcedure

Procedure elim(x,y)
For k=0 To 20:For p=0 To 20:vu(k,p)=0:Next p:Next k
If etat(coup,x,y)=joueur:ProcedureReturn 0:EndIf
bord(joueur,coup)
If voir(x,y)
For i=1 To 19:For j=1 To 19
If vu(i,j) And etat(coup,i,j)=-joueur:etat(coup,i,j)=0
supprime(i,j):EndIf
Next j:Next i
EndIf
EndProcedure

Procedure dimension()
debut:
taille.s=InputRequester("Taille","Choisir une taille entre 5 et 19","19")
i=Round(Val(taille),0)
If i<5 Or i>19:Goto debut:EndIf
n=i:joueur=-1:coup=1:total=1
For k=0 To 999
For i=0 To n
For j=0 To n
etat(k,i,j)=0
Next j:Next i:Next k
larg=n*27:If larg<500:larg=500:EndIf
ResizeWindow(larg,40+27*n)
refresh()
EndProcedure

Procedure opp(k)
Select k
Case 1
ProcedureReturn 3
Case 2
ProcedureReturn 4
Case 3
ProcedureReturn 1
Case 4
ProcedureReturn 2
EndSelect
EndProcedure

n=19

larg=n*27:If larg<500:larg=500:EndIf
win.l=OpenWindow(0,100,100,larg,n*27+40,#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered |#PB_Window_SystemMenu|#PB_Window_TitleBar,"Jeu de Go")
CreateMenu(1,win)
MenuItem(3,"Rafraichir")
MenuItem(4,"Sauver")
MenuItem(5,"Ouvrir")
MenuItem(6,"Précédent")
MenuItem(7,"sUivant")
MenuItem(8,"Nouveau")
MenuItem(10,"Taille")
AddKeyboardShortcut(0,#PB_Shortcut_R,3)
AddKeyboardShortcut(0,#PB_Shortcut_S,4)
AddKeyboardShortcut(0,#PB_Shortcut_O,5)
AddKeyboardShortcut(0,#PB_Shortcut_P,6)
AddKeyboardShortcut(0,#PB_Shortcut_U,7)
AddKeyboardShortcut(0,#PB_Shortcut_N,8)
AddKeyboardShortcut(0,#PB_Shortcut_A,9)
AddKeyboardShortcut(0,#PB_Shortcut_T,10)
refresh()
Repeat
event=WaitWindowEvent()

Select event

Case 513
x=WindowMouseX():y=WindowMouseY()
i=1+Round(x/27,0):j=Round((y-20)/27,0)-1
If i<=n And j>0 And j<=n
If etat(coup-1,i,j)=0
For k=1 To n:For p=1 To n:etat(coup,k,p)=etat(coup-1,k,p):Next p:Next k
etat(coup,i,j)=joueur
elim(i-1,j):elim(i+1,j):elim(i,j-1):elim(i,j+1)
joueur=-joueur:nouveau(i,j)
elim(i,j):coup=coup+1:total=coup
EndIf
EndIf

Case #PB_Event_Repaint
refresh()

Case #pb_event_menu
Select EventMenuID()
Case 3
refresh()
Case 4
sauver():refresh()
Case 5
ouvrir()
Case 6
precedent()
Case 7
suivant()

Case 8
sauver()
For i=1 To 1000:For j=1 To 20:For k=1 To 20
etat(i,j,k)=0:Next k:Next j:Next i
joueur=-1:coup=1:refresh()

Case 10
If coup>1:sauver():EndIf
dimension()

EndSelect
EndSelect

Until event= #PB_EventCloseWindow
sauver()
End

Publié : jeu. 17/juin/2004 18:25
par hardy
Au fait, j'ai vu que dans le code, il y a des reliquats (tableaux) inutiles.
J'ai fait du copier-coller à partir d'un prog plus important...

Publié : jeu. 17/juin/2004 19:21
par Dr. Dri
Y'a pas longtemps j'ai recu un mail (du spam à al chose pres que c'était ciblé et que le profil me correspondai) vantant le site 123moteur que je ne connaissais pas du tout... Je te laisse le découvrir... Franchement je le trouve naze comme site mais bon y'a peut etre de bons articles... Je laisse le lien et je vais les lire pour voir...
http://brosseau.stephane.free.fr/articles.php

Dri

Publié : jeu. 17/juin/2004 21:22
par Oliv
moi j'ai commencé avec un snake, ça apprend les tableaux, les sprites, les listes : c'est pas trop mal

Publié : jeu. 17/juin/2004 22:39
par hardy
Je viens de jeter un coup d'oeil. 100% pure daube :lol:

Publié : ven. 18/juin/2004 1:02
par Backup
Garzul, je t'ai mis un topic dans la rubrique JEUX :D

Publié : ven. 18/juin/2004 8:15
par Dr. Dri
hardy a écrit :Je viens de jeter un coup d'oeil. 100% pure daube :lol:
Eh oh nan faut pas exagérer... Tout de suite c'est de la daube... Je suis d'accord pour avoir l'esprit critique mais dans la vie faut être réaliste... C'est quoi cette facon d'agir là ? J'ai pris la peine de lire les articles et nan je ne suis pas d'accord... De quel droit tu te permet de dire que c'est 100% pure daube alors que c'est au moins à 150 voir 200% ??

Dri :lol:

Publié : ven. 18/juin/2004 8:40
par cederavic
beuh... je connaissai ce site, je le trouve pas trop mal moi, pas pour les article, mais pour les liens vers les moteur 3d qui souvent envoi vers des site ou il y a d'autre liens bocoup plus interressant :) pour moi c'est mon google specialiser moteur :p

Publié : ven. 18/juin/2004 9:05
par comtois
As-tu regardé le source du jeu Waponez dans ton répertoire Examples/source advanced ?

Ensuite sur purearea , il y a quelques jeux , je pense à garden , je crois qu'il y a le source, , commence par étudier ces codes, ça permet de bien démarrer quand on veut apprendre à faire un jeu:)

Publié : ven. 18/juin/2004 9:53
par Dr. Dri
cederavic a écrit :beuh... je connaissai ce site, je le trouve pas trop mal moi, pas pour les article, mais pour les liens vers les moteur 3d qui souvent envoi vers des site ou il y a d'autre liens bocoup plus interressant :) pour moi c'est mon google specialiser moteur :p
Je parle bien des articles que j'y ai lu...

Dri ;)

Publié : ven. 18/juin/2004 11:55
par hardy
Moi aussi, je parle des articles...
Encore heureux qu'il y a des liens intéressants. Sinon, a quoi servirait-il? :lol:

Publié : ven. 18/juin/2004 12:26
par cederavic
hardy a écrit :Moi aussi, je parle des articles...
Encore heureux qu'il y a des liens intéressants. Sinon, a quoi servirait-il? :lol:
A rien... tout simplement... :lol: