Page 1 sur 2

Greedy

Publié : mer. 18/mars/2015 11:14
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/

Re: Greedy

Publié : mer. 18/mars/2015 11:17
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 :)

Re: Greedy

Publié : mer. 18/mars/2015 12:10
par Kwai chang caine
Testé ...W7 v5.23
Debug a écrit :2500
150
0
A toi de me dire si ça te suffit :wink:

Re: Greedy

Publié : mer. 18/mars/2015 12:14
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.

Re: Greedy

Publié : mer. 18/mars/2015 12:35
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 

Re: Greedy

Publié : mer. 18/mars/2015 12:40
par Micoute
Pas mieux !

Re: Greedy

Publié : mer. 18/mars/2015 12:44
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

Re: Greedy

Publié : mer. 18/mars/2015 13:01
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

Re: Greedy

Publié : mer. 18/mars/2015 13:52
par SPH
ca n'a pas l'air passionnant ce jeu :?

Re: Greedy

Publié : mer. 18/mars/2015 13:54
par falsam
SPH a écrit :ca n'a pas l'air passionnant ce jeu :?
......

Re: Greedy

Publié : mer. 18/mars/2015 14:07
par SPH
j'ai rien capté 8O

Re: Greedy

Publié : mer. 18/mars/2015 14:31
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:

Re: Greedy

Publié : mer. 18/mars/2015 14:44
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.

Re: Greedy

Publié : mer. 18/mars/2015 15:24
par Cool Dji
Whaou it's great, it's amazing :)

Re: Greedy

Publié : mer. 18/mars/2015 15:28
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: