petit jeu a ameliorer

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

petit jeu a ameliorer

Message par graph100 »

salut j' ai fais un petit jeu
si vous avez des sugestions

Code : Tout sélectionner

souris = 1
If MessageRequester("Bonjour", "Voulez-vous jouer avec le clavier ?", #pb_messagerequester_yesno) = 6 : souris = 0 : EndIf

Case_depart :

FakeReturn

Dimx = 80
Dimy = 60

Procedure SaveHightScore(filename.s, score, niveau, clavier, podium)
  
  If OpenFile(0, filename)
    
    Dim nom.s(podium)
    Dim score.s(podium)
    Dim niveau.s(podium)
    Dim clavier.s(podium)
    
    place = 0
    
    For a = 1 To podium
      nom(a) = ReadString()
      score(a) = ReadString()
      niveau(a) = ReadString()
      clavier(a) = ReadString()
      If score > Val(score(a)) And place = 0
        place = a
      EndIf
    Next
    
    CloseFile(0)
    
    If place <> 0
      name.s = InputRequester("Vous êtes " + Str(place) + " ème", "Entrez votre nom", "")
      For a = podium To 1 Step -1
        If a = place
          nom(a) = name
          score(a) = Str(score)
          niveau(a) = Str(niveau)
          clavier(a) = Str(clavier)
        EndIf
        If a > place
          nom(a) = nom(a - 1)
          score(a) = score(a - 1)
          niveau(a) = niveau(a - 1)
          clavier(a) = clavier(a - 1)
        EndIf
      Next
      
      If CreateFile(0, filename)
        For a = 1 To podium
          WriteStringN(nom(a))
          WriteStringN(score(a))
          WriteStringN(niveau(a))
          WriteStringN(clavier(a))
        Next
        CloseFile(0)
      EndIf
      
    EndIf
  EndIf
  
  ProcedureReturn place
EndProcedure

Declare Remplissage(Dimx, Dimy)

nombrennemi = 0

If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Can't open DirectX 7", 0)
  End
EndIf

If OpenWindow(0, 0, 0, 640, 500, #PB_Window_MinimizeGadget | #PB_Window_WindowCentered, "Case") And OpenWindowedScreen(WindowID(), 0, 20, 640, 480, 0, 0, 0) = 0
  MessageRequester("Attention", "l'ecran n'a pas pus être ouvert")
  End
EndIf
score = 0

debut :

FakeReturn

nombrennemi = nombrennemi + 1
Dim ennemi(nombrennemi, 4)

For ene = 1 To nombrennemi
  ennemi(ene, 4) = Random(1)
  ennemi(ene, 3) = Random(1)
  If ennemi(ene, 4) = 0 : ennemi(ene, 4) = -1 : EndIf
  If ennemi(ene, 3) = 0 : ennemi(ene, 3) = -1 : EndIf
  ennemi(ene, 2) = Random(56) + 3
  ennemi(ene, 1) = Random(76) + 3
Next

Dim ecran(Dimx, Dimy)

For ligne = 1 To Dimy
  For colonne = 1 To Dimx
    If colonne = 1 Or ligne = 1 Or colonne = Dimx Or ligne = Dimy
      ecran(colonne, ligne) = 1
    EndIf
  Next
Next

If CreateGadgetList(WindowID())
  TextGadget(0, 0, 0, 640, 20, "", #PB_Text_Center | #PB_Text_Border)
EndIf

posx = 5
posy = 1
setcursorpos_(1, 1)
Repeat
  
  event = WindowEvent()
  ClearScreen(255, 255, 255)
  If StartDrawing(ScreenOutput())
      For ligne = 1 To Dimy
        For colonne = 1 To Dimx
          If ecran(colonne, ligne) = 1
            Box((640 / dimx) * (colonne - 1), (480 / dimy) * (ligne - 1), (640 / dimx), (480 / dimy), RGB(0, 0, 0))
          EndIf
          If ecran(colonne, ligne) = 2
            Circle((640 / dimx) * (colonne - 1) + (640 / dimx) / 2, (480 / dimy) * (ligne - 1) + (640 / dimx) / 2, (640 / dimx) / 2, RGB(0, 255, 0))
          EndIf
        Next
      Next
      Circle((640 / dimx) * (posx - 1) + (640 / dimx) / 2, (480 / dimy) * (posy - 1) + (640 / dimx) / 2, (640 / dimx) / 2, RGB(255, 0, 0))
    StopDrawing()
  EndIf
  FlipBuffers()
  ExamineKeyboard()
  
  If souris = 0
    droite = KeyboardPushed(#pb_key_right)
    gauche = KeyboardPushed(#pb_key_left)
    haut = KeyboardPushed(#pb_key_up)
    bas = KeyboardPushed(#pb_key_down)
    
    If droite And gauche = 0 And haut = 0 And bas = 0 And posx < Dimx : posx = posx + 1 : EndIf
    If gauche And droite = 0 And haut = 0 And bas = 0 And posx > 1 : posx = posx - 1 : EndIf
    If haut And droite = 0 And gauche = 0 And bas = 0 And posy > 1 : posy = posy - 1 : EndIf
    If bas And droite = 0 And gauche = 0 And haut = 0 And posy < Dimy : posy = posy + 1 : EndIf
  Else
    If ((WindowMouseX() - 5) / (640 / Dimx) + 1) < posx And posx > 1 : posx = posx - 1
    ElseIf ((WindowMouseX() - 5) / (640 / Dimx) + 1) > posx And posx < Dimx : posx = posx + 1
    ElseIf ((WindowMouseY() - 45) / (480 / Dimy) + 1) < posy And posy > 1 : posy = posy - 1
    ElseIf ((WindowMouseY() - 45) / (480 / Dimy) + 1) > posy And posy < Dimy : posy = posy + 1 : EndIf
  EndIf
  
  For e = 1 To nombrennemi
    If ennemi(e, 1) = posx And ennemi(e, 2) = posy : Gosub perdu : EndIf
    ecran(ennemi(e, 1), ennemi(e, 2)) = 0
  Next
  For e = 1 To nombrennemi
    az = 0
    If ecran(ennemi(e, 1) - 1, ennemi(e, 2)) = 1 Or ecran(ennemi(e, 1) + 1, ennemi(e, 2)) = 1
      ennemi(e, 3) = -ennemi(e, 3)
      az = 1
    EndIf
    If ecran(ennemi(e, 1), ennemi(e, 2) - 1) = 1 Or ecran(ennemi(e, 1), ennemi(e, 2) + 1) = 1
      ennemi(e, 4) = -ennemi(e, 4)
      az = 1
    EndIf
    If az = 0 And ((ecran(ennemi(e, 1) + 1, ennemi(e, 2) + 1) = 1 And ennemi(e, 3) = 1 And ennemi(e, 4) = 1) Or (ecran(ennemi(e, 1) + 1, ennemi(e, 2) - 1) = 1 And ennemi(e, 3) = 1 And ennemi(e, 4) = -1) Or (ecran(ennemi(e, 1) - 1, ennemi(e, 2) + 1) = 1 And ennemi(e, 3) = -1 And ennemi(e, 4) = 1) Or (ecran(ennemi(e, 1) - 1, ennemi(e, 2) - 1) = 1 And ennemi(e, 3) = -1 And ennemi(e, 4) = -1))
      ennemi(e, 3) = -ennemi(e, 3)
      ennemi(e, 4) = -ennemi(e, 4)
    EndIf
    
    ennemi(e, 1) = ennemi(e, 1) + ennemi(e, 3)
    ennemi(e, 2) = ennemi(e, 2) + ennemi(e, 4)
  Next
  For e = 1 To nombrennemi
    ecran(ennemi(e, 1), ennemi(e, 2)) = 2
  Next
  
  If ecran(posx, posy) = 1
    noir.f = CallFunctionFast( @Remplissage(), Dimx, Dimy)
    a.f = noir / 4800
    a = a * 100
    SetGadgetText(0, Str(noir) + "/4800          " + Str(a) + "%          Score:" + Str(score + a) +"          Niveau:" + Str(nombrennemi))
    If a > 80
      If MessageRequester("Bravo", "Vous avez gagné" + Chr(13) + "Voullez-vous continué à jouer ?", #PB_MessageRequester_YesNo) = 7
        Gosub gagne
      Else
        ClearScreen(255, 255, 255)
        score = a + score
        Gosub debut
      EndIf
    EndIf
  EndIf
  
  ecran(posx, posy) = 1
  
Until KeyboardPushed(#pb_key_escape) Or event = #pb_event_closewindow

End

perdu :

MessageRequester("Dommage", "Vous avez perdu" + Chr(13) + "Vous avez quand même réalisé" + Chr(13) + "un score de: " + Str(a + score) + " !")

gagne :
SaveHightScore("Case.pref", score + a, nombrennemi, souris, 10)

CloseScreen()
CloseWindow(0)

If OpenWindow(1, 0, 0, 480, 390, #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered, "Case Meilleurs Scores") And CreateGadgetList(WindowID())
  If OpenFile(0, "Case.pref")
    TextGadget(1, 20, 20, 200, 17, "PLACE : NOM", #PB_Text_Border)
    TextGadget(1, 240, 20, 50, 17, "SCORE", #PB_Text_Border)
    TextGadget(1, 310, 20, 50, 17, "NIVEAU", #PB_Text_Border)
    TextGadget(1, 380, 20, 80, 17, "MANETTE", #PB_Text_Border)
    For aze = 1 To 10
      TextGadget(0, 20, aze * 30 + 20, 200, 17, Str(aze) + "  :  " + ReadString(), #PB_Text_Border)
      TextGadget(0, 240, aze * 30 + 20, 50, 17, ReadString(), #PB_Text_Border | #PB_Text_Right)
      TextGadget(0, 310, aze * 30 + 20, 50, 17, ReadString(), #PB_Text_Border | #PB_Text_Right)
      If ReadString() = "0" : clavier.s = "Clavier" : Else : clavier.s = "Souris" : EndIf
      TextGadget(0, 380, aze * 30 + 20, 80, 17, clavier, #PB_Text_Border | #PB_Text_center)
    Next
    CloseFile(0)
    ButtonGadget(4, 20, 350, 160, 20, "REJOUER")
    ButtonGadget(5, 300, 350, 160, 20, "QUITTER")
  EndIf
EndIf
; AddKeyboardShortcut(1, #PB_Shortcut_return, 4)
; AddKeyboardShortcut(1, #PB_Shortcut_Escape, 5)
Repeat
  event = WaitWindowEvent()
  If event = #pb_event_gadget
    Select EventGadgetID()
      Case 4
        CloseWindow(1)
        Gosub Case_depart
      Case 5
        End
    EndSelect
  EndIf
;   If EventMenuID() = 4
;     CloseWindow(1)
;     Gosub Case_depart
;   ElseIf EventMenuID() = 5
;     End
;   EndIf
Until event = #pb_event_closewindow

End


Procedure Remplissage(Dimx, Dimy)
  
  partie = 2
  Dim list(200)
  curseur = 1
  Repeat
    
    partie = partie + 1
    For ligne = 1 To Dimy
      For colonne = 1 To Dimx
        If ecran(colonne, ligne) = 0
          Break 2
        EndIf
      Next
    Next
    
    If colonne < Dimx And ligne < Dimy : ecran(colonne, ligne) = partie : Else : Break : EndIf
    
    Repeat
      nombre = 0
      For ligne = 1 To Dimy
        For colonne = 1 To Dimx
          
          If ecran(colonne, ligne) = partie
            
            If ligne > 1
              If ecran(colonne, ligne - 1) = 0
                ecran(colonne, ligne - 1) = partie
                nombre = nombre + 1
              EndIf
              If colonne > 1 And ecran(colonne - 1, ligne - 1) = 0
                ecran(colonne - 1, ligne - 1) = partie
                nombre = nombre + 1
              EndIf
              If colonne < Dimx And ecran(colonne + 1, ligne - 1) = 0
                ecran(colonne + 1, ligne - 1) = partie
                nombre = nombre + 1
              EndIf
            EndIf
            
            If colonne > 1 And ecran(colonne - 1, ligne) = 0
              ecran(colonne - 1, ligne) = partie
              nombre = nombre + 1
            EndIf
            If colonne < Dimx And ecran(colonne + 1, ligne) = 0
              ecran(colonne + 1, ligne) = partie
              nombre = nombre + 1
            EndIf
            
            If ligne < Dimy
              If ecran(colonne, ligne + 1) = 0
                ecran(colonne, ligne + 1) = partie
                nombre = nombre + 1
              EndIf
              If colonne > 1 And ecran(colonne - 1, ligne + 1) = 0
                ecran(colonne - 1, ligne + 1) = partie
                nombre = nombre + 1
              EndIf
              If colonne < Dimx And ecran(colonne + 1, ligne + 1) = 0
                ecran(colonne + 1, ligne + 1) = partie
                nombre = nombre + 1
              EndIf
            EndIf
            
            If ligne > 1
              If ecran(colonne, ligne - 1) = 2 And list(curseur - 1) <> partie
                list(curseur ) = partie
                curseur = curseur + 1
              EndIf
              If colonne > 1 And ecran(colonne - 1, ligne - 1) = 2 And list(curseur - 1) <> partie
                list(curseur ) = partie
                curseur = curseur + 1
              EndIf
              If colonne < Dimx And ecran(colonne + 1, ligne - 1) = 2 And list(curseur - 1) <> partie
                list(curseur ) = partie
                curseur = curseur + 1
              EndIf
            EndIf
            
            If colonne > 1 And ecran(colonne - 1, ligne) = 2 And list(curseur - 1) <> partie
              list(curseur ) = partie
              curseur = curseur + 1
            EndIf
            If colonne < Dimx And ecran(colonne + 1, ligne) = 2 And list(curseur - 1) <> partie
              list(curseur ) = partie
              curseur = curseur + 1
            EndIf
            
            If ligne < Dimy
              If ecran(colonne, ligne + 1) = 2 And list(curseur - 1) <> partie
                list(curseur ) = partie
                curseur = curseur + 1
              EndIf
              If colonne > 1 And ecran(colonne - 1, ligne + 1) = 2 And list(curseur - 1) <> partie
                list(curseur ) = partie
                curseur = curseur + 1
              EndIf
              If colonne < Dimx And ecran(colonne + 1, ligne + 1) = 2 And list(curseur - 1) <> partie
                list(curseur ) = partie
                curseur = curseur + 1
              EndIf
            EndIf
            
          EndIf
          
        Next
      Next
    Until nombre = 0
    
    nombre = 0
    For ligne = 1 To Dimy
      For colonne = 1 To Dimx
        If ecran(colonne, ligne) = 0
          nombre = 1
          Break 2
        EndIf
      Next
    Next
    
  Until nombre = 0
  
  noir = 0
  
  For ligne = 1 To Dimy
    For colonne = 1 To Dimx
      a = ecran(colonne, ligne)
      If a > 2
        non = 1
        For pos = 1 To curseur
          If a = list(pos)
            non = 0
          EndIf
        Next
        ecran(colonne, ligne) = non
        If non = 1 : noir = noir + 1 : EndIf
      ElseIf a = 1 : noir = noir + 1
      EndIf
    Next
  Next
  ProcedureReturn noir
EndProcedure

Return
voila :D
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

C'est sympa mais il y a quelques fautes d'orthographes :mrgreen:
Voulez-vous contiuer à jouer
Par contre c'est plus sympa au clavier qu'a la souris, à la souris ça a tendance à bugger (le point rouge va n'importe où)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

je n'ai testé qu'au clavier ,c'est cool :)

Y'a un bug , on peut coincer les balles dans le mur.
il suffit de leur passer dessus je crois , je n'ai pas tenté de reproduire le bug.

Il y a aussi des ralentissements par moment ,mais faudra que je fasse un autre test sans être connecté à internet :)

Bravo pour ce jeu . Bonne continuation
Marcus
Messages : 187
Inscription : jeu. 22/janv./2004 19:08
Contact :

Message par Marcus »

Le principe est excellent ... continu :)
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message par graph100 »

en fait j'ai rajoute la souris car au clavier
c'est assez facile :D (perso j'ai jamais depassé le 6 nivo)

quand on donne des grand coups de souris la balle rouge suis de preference soit la droite soit la gauche puis quand elle a la meme abscisse elle s'occupe de descendre/monter
voila

par contre je sais pas si c'est normal mais l'application prend 99% du prossesseur et quand on fait des figures conpliquer avec le curseur il met du temps a calculer la surface a remplir
je vois pas comment faire autrement :roll:
merci
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

graph100 a écrit : par contre je sais pas si c'est normal mais l'application prend 99% du prossesseur et quand on fait des figures conpliquer avec le curseur il met du temps a calculer la surface a remplir
je vois pas comment faire autrement :roll:
merci

apres le event = WindowEvent() il faut ajouter un Delay(2)

Code : Tout sélectionner

event = WindowEvent()
        Delay(2)

cela redonne du temp a windows , donc tu monopolise moins de temps cpu

un delay(2) suffit , certain mettent delay(20)

mais chez moi 2 suffise !
:D
dlolo
Messages : 118
Inscription : ven. 18/févr./2005 16:29

Message par dlolo »

Comme Marcus, c'est cool. Ca me rapelle les bornes d'arcades :)
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message par graph100 »

mouais ca passe de 99% a 87% comment evité que ca ne rallentisse
quand on fait des figures compliqué ?
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message par graph100 »

Fichier->case.rar
Image
Avatar de l’utilisateur
venom
Messages : 3136
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

8) il est exelent ce jeux avec des monstres un peut plus beau et un vaisseau pareille sa peut defoncer grave moi perso niveau 8 fini 8) mort au neuf :x bravo graph100 continue :D :wink:
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
gadjet35
Messages : 190
Inscription : ven. 21/oct./2005 7:49
Localisation : Quelque part en france !

super!!!

Message par gadjet35 »

:P genial ton jeu continue comme ca? :10: :lol: :lol:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Le problème de consommation CPU vient du fait que tu as deux boucles Repeat dans ton code.

Copie le contenu de la boucle qui contient la gestion des gadgets, et colle le dans la première boucle, et rajoute un Delay(1) après le WindowEvent(). (Et désactive la deuxième boucle, évidemment)

Ta conso CPU passera à environ 30%
Répondre