Page 1 sur 1

petit jeu a ameliorer

Publié : jeu. 30/juin/2005 16:16
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

Publié : jeu. 30/juin/2005 18:44
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ù)

Publié : jeu. 30/juin/2005 19:02
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

Publié : ven. 01/juil./2005 6:57
par Marcus
Le principe est excellent ... continu :)

Publié : ven. 01/juil./2005 12:13
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

Publié : ven. 01/juil./2005 21:43
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

Publié : ven. 01/juil./2005 23:37
par dlolo
Comme Marcus, c'est cool. Ca me rapelle les bornes d'arcades :)

Publié : sam. 02/juil./2005 18:35
par graph100
mouais ca passe de 99% a 87% comment evité que ca ne rallentisse
quand on fait des figures compliqué ?

Publié : jeu. 15/sept./2005 12:07
par graph100
Fichier->case.rar
Image

Publié : ven. 30/sept./2005 18:00
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:

super!!!

Publié : ven. 21/oct./2005 7:53
par gadjet35
:P genial ton jeu continue comme ca? :10: :lol: :lol:

Publié : ven. 21/oct./2005 8:14
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%