Greedy

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Greedy

Message par falsam »

C'est un jeu multijoueur en PureBasic jouable depuis un exécutable mais aussi via une webapplication. Le code sera le même dans les deux cas.

■ Le Greedy est un jeu qui se joue avec 6 dés.

■ L'objectif est d'arriver à 10000 points ou plus.
Quand un joueur arrive à 10000 points ou plus, les autres joueurs n'ont plus qu'un tour pour essayer d'arriver ou de dépasser les 10000 points.

Le gagnant vous l'aurez compris est celui qui dépasse le plus les 10000 points.

■ La photo vous donne les différente combinaison possible qu'il est possible de faire avec les dés

Image

■ Pour entrer dans le jeu il faut obtenir 1000 points.

■ Durant son tour, chaque joueur peut jouer (Roller) autant de fois qu'il le souhaite tant qu'il espère pouvoir faire des combinaisons : :arrow: Bouton Roll.

■ A chaque Rolle, un score intermédiaire est calculé et sera ajouté au score définitif quand le joueur cessera de Roller pour Placer (Ajouter) son score intermédiaire dans son score finale. :arrow: Bouton Place.

■ Si au roll suivant, il n'est plus possible de faire une combinaison, le joueur perd son score intermédiaire et passe son tour.

Attention: Après trois Rolls aboutissant à un score intermédiaire de 0, le score du joueur repasse à 0 lui aussi. Peut être qu'il vaut mieux placer que de forcer la chance.

■ Un joueur peut s'inviter dans une partie en cours.

Voila pour les points principaux de ce jeu.

Précision pour le code.
Etant destiné aussi pour le web, le code du jeu doit être le plus court possible afin de ménager la bande passante et le navigateur internet qui va devoir interpréter le tout.

Le dessin des dés sera codé avec un canvas. C'est la solution la plus souple et la moins gourmande en ressource.

Je veillerais à chaque fois que le code soit compatible IE, FF, Chrome et Opera.

Lien en anglais http://janbroussard.com/Greedy.html

Avancement
18.03.15 : scoring.pb c'est un module externe au jeu qui recevra une combinaison de dés et retourne le score obtenu.
                http://www.purebasic.fr/french/viewtopi ... 85#p171285

31.03.15 : greedy007.pb Code principale du jeu sans le design afin de ne tester que le gameplay.
                http://www.purebasic.fr/french/viewtopi ... 79#p171479
                Vous pouvez télécharger ces deux codes en cliquant sur ce lien Greedy
                 :idea: Test avec SpiderBasic : A part une fonction non implémentée (SetGadgetFont), le jeu fonctionne.


:idea: Si vous le souhaitez, la discussion en direct est sur ce lien http://falsam.com/testnode/
Dernière modification par falsam le mar. 31/mars/2015 23:24, modifié 9 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Greedy

Message par falsam »

Le premier code que je souhaite validé est le scroring. Je n'emploie pas volontairement des regex. La zone de test est à la fin du code.

scoring.pb C'est un include permetant de trier les des qui sont joués et de retourner le score obtenu.

Code : Tout sélectionner

Global  Buffer.s, Coefficient

;Full House in one roll
Procedure R0(Value.s)
  Protected Result, n, p, stf.s
  For n = 1 To 6
    stf = LSet(Str(n), 3, Str(n))
    If FindString(Value, stf)
      p =  n
      Break
    EndIf
  Next
  
  If p <> 0
    For n = 1 To 6
      If n <> p
        stf = LSet(Str(n), 2, Str(n))
        If FindString(Value, stf)
          Buffer = RemoveString(Value, LSet(Str(p), 3, Str(p)))
          Value = Buffer
          Buffer = RemoveString(Value, stf)
          Result = #True
        EndIf
      EndIf
    Next
  EndIf
    
  ProcedureReturn Result
EndProcedure

;Straight in one roll
Procedure R1(Value.s)
  Protected Result
  If FindString(Value, "12345")
    Result = #True
    Buffer = RemoveString(Value, "12345")
    
  ElseIf FindString(Value, "23456")
    Result = #True
    Buffer = RemoveString(Value, "23456")
  EndIf
  
  ProcedureReturn Result
EndProcedure

;5 of any kind in one roll
Procedure R2(Value.s)
  Protected Result, n, stf.s
  
  For n = 1 To 6
    stf = LSet(Str(n), 5, Str(n))
    If FindString(Value, stf)
      Result = #True
      Buffer = RemoveString(Value, stf)
    EndIf
  Next
  ProcedureReturn Result
EndProcedure

;4 of any kind in one roll
Procedure R3(Value.s)
  Protected Result, n, stf.s
  
  For n = 1 To 6
    stf = LSet(Str(n), 4, Str(n))
    If FindString(Value, stf)
      Result = #True
      Buffer = RemoveString(Value, stf)
    EndIf
  Next
  ProcedureReturn Result
EndProcedure

;3 Ones
Procedure R4(Value.s)
  Protected Result
  If FindString(Value, "111") 
    Result = #True
    Buffer = RemoveString(Value, "111")
  EndIf
  ProcedureReturn Result
EndProcedure

;3 Twos or Threes or Fours or Fives or Sixes
Procedure R5(Value.s)
  Protected Result, n, stf.s
  
  For n = 2 To 6
    stf = LSet(Str(n), 3, Str(n))
    If FindString(Value, stf)
      Result = n
      Coefficient = n
      Buffer = RemoveString(Value, stf)
    EndIf
  Next
  ProcedureReturn Result
EndProcedure

;1 or 2 Ones
Procedure R6(Value.s)
  Protected Result
  Result = CountString(Value, "1") 
  If Result
    Buffer = RemoveString(Value, "1")
    Coefficient = Result
  EndIf
  ProcedureReturn Result
EndProcedure

;1 or 2 Fives
Procedure R7(Value.s)
  Protected Result
  Result = CountString(Value, "5") 
  If Result
    Buffer = RemoveString(Value, "5")
    Coefficient = Result
  EndIf
  ProcedureReturn Result
EndProcedure

;Sort dices
Procedure.s SortString(Buffer.s)
  Protected Dim ArrayBuffer.s(0)
  Protected l = Len(Buffer)-1
  Protected n
    
  ReDim ArrayBuffer(l)
  
  For n = 0 To l
    ArrayBuffer(n) = Mid(Buffer, n+1, 1)
  Next
  
  SortArray(ArrayBuffer(), #PB_Sort_Ascending)
  
  Buffer = ""
  For n = 0 To l
    Buffer + ArrayBuffer(n)
  Next
  
  ProcedureReturn Buffer
  
EndProcedure

;Calculates the score
Procedure Scoring(Roll.s)
  Protected RollScore

  Buffer = Roll
    
  While Len(Buffer) > 0
    ;Full House in one roll
    If R0(Buffer)
      RollScore + 2500
    
    ;Straight in one roll
    ElseIf R1(Buffer)
      RollScore + 2000
  
    ;5 of any kind in one roll
    ElseIf R2(Buffer)
      RollScore + 1500
  
    ;4 of any kind in one roll  
    ElseIf R3(Buffer)
      RollScore + 1000
    
    ;3 Ones 
    ElseIf R4(Buffer)
      RollScore + 1000
    
    ;3 Twos or Threes or Fours or Fives or Sixes
    ElseIf R5(Buffer)
      RollScore + Coefficient * 100
  
    ;1 or 2 Ones   
    ElseIf R6(Buffer)
      RollScore + Coefficient * 100
  
    ;1 or 2 Fives  
    ElseIf R7(Buffer)
      RollScore + Coefficient * 50

    Else
      ;RollScore = 0
      Buffer = ""  
    EndIf
 Wend 
 ProcedureReturn RollScore
EndProcedure

;Test Zone - 6 dices
Debug Scoring(SortString("115512"))
Debug Scoring(SortString("123452"))
Debug Scoring(SortString("243243"))
Merci d'avance pour les tests :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Greedy

Message par Kwai chang caine »

Testé ...W7 v5.23
Debug a écrit :2500
150
0
A toi de me dire si ça te suffit :wink:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Greedy

Message par falsam »

Kwai chang caine a écrit :A toi de me dire si ça te suffit
Non mon bon monsieur. Le but est que certains d'entres vous testent d'autres combinaisons pour voir celles qui buguent.

C'est vrai que je n'ai pas apporter cette précision dans ma demande.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Greedy

Message par Kwai chang caine »

C'est vrai que je n'ai pas apporter cette précision dans ma demande.
Bien sur que c'est vrai...tu me prends pour un jambon beurre :? :mrgreen:
Non mon bon monsieur. Le but est que certains d'entres vous testent d'autres combinaisons pour voir celles qui buguent.
Et la...ça te suffit ?? sinon je peux faire tomber le serveur de FRED :mrgreen:
LEDINATEUR a écrit :666621
1100

665453
100

Code : Tout sélectionner

;Test Zone - 6 dices

For i = 1 To 1000
 
 PhraseDe$ = Trim(Str(Random(6, 1))) + Trim(Str(Random(6, 1))) + Trim(Str(Random(6, 1))) + Trim(Str(Random(6, 1))) + Trim(Str(Random(6, 1))) + Trim(Str(Random(6, 1)))
 Debug PhraseDe$
 Debug Scoring(SortString(PhraseDe$))
 Debug ""
 
Next 
Dernière modification par Kwai chang caine le mer. 18/mars/2015 13:02, modifié 1 fois.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Greedy

Message par Micoute »

Pas mieux !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Greedy

Message par falsam »

@Kwai chang caine: Je vais surtout te prendre pour un sandwich saucisson à l'ail : Pas la peine d'afficher que des choses qui fonctionnent hein ?

Plutot énervant de faire défiler ton commentaire.
Je ne demande que de m'indiquer ce qui ne fonctionne pas .... banane :p

PS :Enlèves ce résultat
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Greedy

Message par Kwai chang caine »

Eeeeh l'autre on l'aide, on fait ce qu'il demande, et on se fait engueuler !! 8O
Et mon STP ??? :mrgreen:
Je ne demande que de m'indiquer ce qui ne fonctionne pas
T'as qu'a changé le 1000 en 1 000 000 000 tu vas te coucher, et demain tu auras ta réponse :D
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Greedy

Message par SPH »

ca n'a pas l'air passionnant ce jeu :?

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Greedy

Message par falsam »

SPH a écrit :ca n'a pas l'air passionnant ce jeu :?
......
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Greedy

Message par SPH »

j'ai rien capté 8O

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Greedy

Message par Kwai chang caine »

SPH a écrit :ca n'a pas l'air passionnant ce jeu
Ce SPH, tout dans la finesse, toujours la petite delicatesse, toujours le mot pour rire :lol:
Des fois tu me fais penser à JB13 :mrgreen:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Greedy

Message par falsam »

M'en fou j'irais proposer mon jeu sur le forum anglais ou là je rencontrerai des membres enthousiastes qui me diront "Whaou it's great, it's amazing :)"

@SPH: Un sketch du comte de Bouderbala pour toi https://www.youtube.com/watch?v=7JqKW0R0yVk
ça te changera de ta série Shoutpark.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: Greedy

Message par Cool Dji »

Whaou it's great, it's amazing :)
Only PureBasic makes it possible
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Greedy

Message par SPH »

falsam a écrit :M'en fou j'irais proposer mon jeu sur le forum anglais ou là je rencontrerai des membres enthousiastes qui me diront "Whaou it's great, it's amazing :)"

@SPH: Un sketch du comte de Bouderbala pour toi https://www.youtube.com/watch?v=7JqKW0R0yVk
ça te changera de ta série Shoutpark.
Pour l'instant, ton jeu me sort un chiffre et c'est tout (difficile pour moi d'apprecier) :idea:
Le compte de bouderbala ne me fait pas rire :x
SouthPark, je suis totalement fan. J'en regarde en ce moment meme... :mrgreen:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Répondre