Code : Tout sélectionner
Declare LectureMusic(*Parametre.Musique)
Declare.s InvCaractere(Chaine.s)
Declare EnvoieData(ClientID, Html.s)
Declare ExexuteDataQuery(ID.i,Commande.s)
Declare PageAccueilPostif(img)
Declare PageAccueil(IndicJoueur.i,img)
Declare PageJeuxQuestion(*Valeur)
Declare PageJeuxMusique(*Valeur)
Declare PageJeuxFilm(*Valeur)
Declare.s LectureFile(Fichier.s)
Declare PassageQuestion(*Valeur)
Declare PassageMusique(*Valeur)
Declare PassageVideo(*Valeur)
Declare Score()
Declare FinJeux(*Valeur)
Declare AjoutPoint(Identifiant.i, Points.i)
Declare GestionNetwork(*Valeur)
Declare GetIDClient(Client.i)
Declare AffichageTemp(*IDImage)
Procedure.i GetIDClient(Client.i)
Protected idx.i = 1
If FindString(Donnee_Joueur,Str(Client))
Repeat
Chaine.s = StringField(Donnee_Joueur,idx,";")
If FindString(Chaine, Str(Client))
IDClient.i = Val(StringField(Chaine,1,"="))
Break
EndIf
idx +1
ForEver
Else
IDClient = #False
EndIf
ProcedureReturn IDClient
EndProcedure
Procedure AjoutPoint(Identifiant.i, Points.i)
ParaJoueur(Identifiant)\Point = ParaJoueur(Identifiant)\Point +Points
If Jeux = #QuizMusique : ParaJoueur(Identifiant)\ScoreMusique = ParaJoueur(Identifiant)\ScoreMusique +Points
ElseIf Jeux = #QuizFilm : ParaJoueur(Identifiant)\ScoreVideo = ParaJoueur(Identifiant)\ScoreVideo + Points
ElseIf Jeux = #QuizQuestion : ParaJoueur(Identifiant)\ScoreQuestion = ParaJoueur(Identifiant)\ScoreQuestion + Points
EndIf
EndProcedure
Procedure LectureMusic(*Parametre.Musique)
FinMediaSon = #False
; Création du stream de lecture
FMOD_System_CreateStream(FmodSystem, Ascii(*Parametre\File), #FMOD_SOFTWARE, 0, @sound)
;Play a sound on a free channel
FMOD_System_PlaySound(fmodsystem, #FMOD_CHANNEL_FREE, sound, 0, @channel)
Depart.i = ElapsedMilliseconds()
For x = 0 To 100
Vol.f = Vol + 1
FMOD_Channel_SetVolume(Channel, Vol/100)
Delay(10)
Next
Repeat
Delay(100)
If FinReponse = #True
Break
EndIf
Until ElapsedMilliseconds() > Depart+ 30000
For x = 0 To 100
Vol.f = Vol - 1
FMOD_Channel_SetVolume(Channel, Vol/100)
Delay(10)
Next
FinMediaSon = #True
; ClearStructure(*Parametres, Musique)
; FreeMemory(*Parametres)
EndProcedure
Procedure.s InvCaractere(Chaine.s)
Chaine.s = ReplaceString(Chaine,"$27","'")
ProcedureReturn ReplaceString(Chaine,"$22",Chr(34))
EndProcedure
Procedure EnvoieData(ClientID, Html.s)
Htmlp.s =""
Html.s = Html +
~"</body></html>"+ Space(20)+ #CRLF$
LengthSHtml = Len(Html)
DayOfWeek.s = StringField("Sun, Mon,Tue,Wed,Thu,Fri,Sat", DayOfWeek(Date()) + 1, ",")
Day = Day(Date())
Month.s = StringField("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", Month(Date()), ",")
Year.s = Str(Year(Date()))
Time.s = FormatDate("%hh:%ii:%ss GMT", Date())
Htmlp.s = "HTTP/1.1 200 OK" + #CRLF$ +
"Date: " + DayOfWeek + ", " + Day + " " + Month + " " + Year + " " + Time + #CRLF$ +
"Server: "+ Title + #CRLF$ +
"Content-Length: "+Str(LengthSHtml) + #CRLF$ + ;+
"Content-Type: text/html" + #CRLF$ + #CRLF$
SendNetworkString(ClientID,Htmlp + Html , #PB_UTF8)
EndProcedure
Procedure ExexuteDataQuery(ID.i,Commande.s)
If IsDatabase(ID)
If DatabaseQuery(ID, Commande)
ProcedureReturn #True
Else
MessageRequester("Base de donnée", "Erreur sur base de donnée:"+ #CR$+ DatabaseError())
ProcedureReturn #False
EndIf
Else
MessageRequester("Base de donnée", "Base de donnée pas initialisé")
ProcedureReturn #False
EndIf
EndProcedure
Procedure PageAccueilPostif(img)
For Alpha = 0 To 255 Step 10
If StartVectorDrawing(ImageVectorOutput(#Image))
VectorSourceColor(RGBA(255, 255, 255, Alpha)) ; Couleur de font
FillVectorOutput()
MovePathCursor(Int(Largeur *0.25), 0)
DrawVectorImage(ImageID(#Titre), Alpha, Int(Largeur *0.5), Int(Hauteur *0.4))
MovePathCursor(Int(Largeur *0.75), Int(Hauteur *0.1))
DrawVectorImage(ImageID(img), Alpha, Int(Largeur *0.2), Int(Hauteur *0.25))
MovePathCursor(Int(Largeur *0.1), Int(Hauteur *0.4))
VectorFont(FontID(#Police), Hauteur/20)
VectorSourceColor(RGBA(0, 0, 50, Alpha))
DrawVectorText("Bonjour et bienvenue sur le jeux de Quiz")
MovePathCursor(Int(Largeur *0.1), Int(Hauteur *0.4)+ VectorTextHeight("A"))
DrawVectorText("Veuillez vous connecté à l'aide du QR code")
MovePathCursor(Int(Largeur *0.1), Int(Hauteur *0.4)+ (2*VectorTextHeight("A")))
DrawVectorText("Ou à l'adresse suivante: "+AdresseIPJeux)
StopVectorDrawing()
Delay(10)
EndIf
SetGadgetState(#Font, ImageID(#Image)) ; Affichage
Next Alpha
EndProcedure
Procedure PageAccueil(IndicJoueur.i,img)
Protected LongueurText.i, HauteurText.i
If StartVectorDrawing(ImageVectorOutput(#Image))
VectorSourceColor(RGBA(255, 255, 255, 255)) ; Couleur de font
FillVectorOutput()
MovePathCursor(Int(Largeur *0.25), 0)
DrawVectorImage(ImageID(#Titre), 255, Int(Largeur *0.5), Int(Hauteur *0.4))
MovePathCursor(Int(Largeur *0.75), Int(Hauteur *0.1))
DrawVectorImage(ImageID(img), 255, Int(Largeur *0.2), Int(Hauteur *0.25))
MovePathCursor(Int(Largeur *0.1), Int(Hauteur *0.4))
VectorFont(FontID(#Police), Hauteur/20)
VectorSourceColor(RGBA(0, 0, 50, 255))
DrawVectorText("Bonjour et bienvenue sur le jeux de Quiz")
MovePathCursor(Int(Largeur *0.1), Int(Hauteur *0.4)+ VectorTextHeight("A"))
DrawVectorText("Veuillez vous connecté à l'aide du QR code")
MovePathCursor(Int(Largeur *0.1), Int(Hauteur *0.4)+ (2*VectorTextHeight("A")))
DrawVectorText("Ou à l'adresse suivante: "+AdresseIPJeux)
If IndicJoueur = #True
VectorSourceColor(RGBA(255, 137, 0, 255))
MovePathCursor(Int(largeur*0.02),Int(Hauteur*0.02))
DrawVectorText(Str(nbrJoueur+1)+ " joueurs")
For Ai = 0 To nbrJoueur
VectorSourceColor(ParaJoueur(Ai)\Couleur)
NomJoueur.s = ParaJoueur(Ai)\Nom + ", "
If LongueurText+VectorTextWidth(NomJoueur) >= (Largeur *0.96)
LongueurText = 0
HauteurText.i = HauteurText + VectorTextHeight("A")
MovePathCursor(Int(Largeur *0.02)+LongueurText, Int(Hauteur *0.4)+HauteurText+ (3*VectorTextHeight("A")))
Else
MovePathCursor(Int(Largeur *0.02)+LongueurText, Int(Hauteur *0.4)+HauteurText+ (3*VectorTextHeight("A")))
EndIf
DrawVectorText(NomJoueur)
LongueurText.i = VectorTextWidth(NomJoueur) + LongueurText
Next Ai
VectorSourceColor(RGBA(255,0,0,255))
MovePathCursor(Int(Largeur *0.1), Int(Hauteur *0.9))
DrawVectorText("Appuyer sur la touche entrée pour démmarré le jeux")
EndIf
StopVectorDrawing()
EndIf
SetGadgetState(#Font, ImageID(#Image)) ; Affichage
EndProcedure
Procedure PageJeuxQuestion(*Valeur)
FMOD_Channel_SetVolume(Channel, 0.04)
Jeux = #QuizQuestion
For Ji = 0 To nbrJoueur
ParaJoueur(Ji)\Reponse = #False
ParaJoueur(Ji)\Etape = 1
Next Ji
JoueurBonneReponse = 0
FinReponse = #False
ClearList(Proposition())
If ExexuteDataQuery(#BaseDeDonnees, "SELECT * FROM Question WHERE ID='"+Str(NumQuestion(NbrPartieJouer))+"'; ")
While NextDatabaseRow(#BaseDeDonnees)
Theme.s = InvCaractere(GetDatabaseString(#BaseDeDonnees, 2))
Question.s = InvCaractere(GetDatabaseString(#BaseDeDonnees, 3))
BonRep.s = InvCaractere(GetDatabaseString(#BaseDeDonnees, 4))
AddElement(Proposition()) : Proposition() = InvCaractere(GetDatabaseString(#BaseDeDonnees, 4))
AddElement(Proposition()) : Proposition() = InvCaractere(GetDatabaseString(#BaseDeDonnees, 5))
AddElement(Proposition()) : Proposition() = InvCaractere(GetDatabaseString(#BaseDeDonnees, 6))
AddElement(Proposition()) : Proposition() = InvCaractere(GetDatabaseString(#BaseDeDonnees, 7))
Anecdote.s = InvCaractere(GetDatabaseString(#BaseDeDonnees, 8))
LoadImage(#Media,Source + "Media\Images\"+ GetDatabaseString(#BaseDeDonnees, 9))
Wend
FinishDatabaseQuery(#BaseDeDonnees)
EndIf
RandomizeList(Proposition())
SelectElement(Proposition(),0) : Prop1.s = Proposition()
SelectElement(Proposition(),1) : Prop2.s = Proposition()
SelectElement(Proposition(),2) : Prop3.s = Proposition()
SelectElement(Proposition(),3) : Prop4.s = Proposition()
If Prop1 = BonRep : BonSelection.s = "A"
ElseIf Prop2 = BonRep : BonSelection.s = "B"
ElseIf Prop3 = BonRep : BonSelection.s = "C"
ElseIf Prop4 = BonRep : BonSelection.s = "D"
EndIf
If StartVectorDrawing(ImageVectorOutput(#Image))
VectorSourceColor(RGBA(255, 255, 255, 255)) ; Couleur de font
FillVectorOutput()
MovePathCursor(Int(Largeur *0.3), 0)
DrawVectorImage(ImageID(#Titre), 255, Int(Largeur *0.4), Int(Hauteur *0.3))
MovePathCursor(Int(Largeur *0.25), Int(Hauteur *0.3))
DrawVectorImage(ImageID(#Media), 255, Int(Largeur *0.5), Int(Hauteur *0.5))
MovePathCursor(Largeur*0.02, Int(Hauteur *0.8))
VectorFont(FontID(#Police), Hauteur/20)
VectorSourceColor(RGBA(0, 0, 50, 255))
DrawVectorParagraph(Question,Largeur-Int(Largeur*0.02),Int(Hauteur*0.2))
StopVectorDrawing()
EndIf
sapi_Say("<pitch absmiddle="+Chr(34)+ Hauteur_Voix+ Chr(34)+">" + Question +"</pitch>)")
SetGadgetState(#Font, ImageID(#Image)) ; Affichage
CreateThread(@AffichageTemp(),0)
EndProcedure
Procedure PageJeuxMusique(*Valeur)
Jeux = #QuizMusique
For Ji = 0 To nbrJoueur
ParaJoueur(Ji)\Reponse = #False
ParaJoueur(Ji)\Etape = 1
Next Ji
JoueurBonneReponse = 0
FinReponse = #False
ClearList(Proposition())
ClearList(Proposition2())
If ExexuteDataQuery(#BaseDeDonnees, "SELECT * FROM Musique WHERE ID='"+Str(NumMusique(NbrPartieJouer))+"'; ")
While NextDatabaseRow(#BaseDeDonnees)
Genre.s = InvCaractere(GetDatabaseString(#BaseDeDonnees, 1))
Annee.s = InvCaractere(GetDatabaseString(#BaseDeDonnees, 2))
Titre.s = InvCaractere(GetDatabaseString(#BaseDeDonnees, 3))
AddElement(Proposition()) : Proposition() = InvCaractere(GetDatabaseString(#BaseDeDonnees, 3))
AddElement(Proposition()) : Proposition() = InvCaractere(GetDatabaseString(#BaseDeDonnees, 4))
AddElement(Proposition()) : Proposition() = InvCaractere(GetDatabaseString(#BaseDeDonnees, 5))
AddElement(Proposition()) : Proposition() = InvCaractere(GetDatabaseString(#BaseDeDonnees, 6))
Chanteur.s = InvCaractere(GetDatabaseString(#BaseDeDonnees, 7))
AddElement(Proposition2()) : Proposition2() = InvCaractere(GetDatabaseString(#BaseDeDonnees, 7))
AddElement(Proposition2()) : Proposition2() = InvCaractere(GetDatabaseString(#BaseDeDonnees, 8))
AddElement(Proposition2()) : Proposition2() = InvCaractere(GetDatabaseString(#BaseDeDonnees, 9))
AddElement(Proposition2()) : Proposition2() = InvCaractere(GetDatabaseString(#BaseDeDonnees, 10))
MediaMusique.s= InvCaractere(GetDatabaseString(#BaseDeDonnees, 11))
RandomizeList(Proposition())
SelectElement(Proposition(),0) : Titre1.s = Proposition()
SelectElement(Proposition(),1) : Titre2.s = Proposition()
SelectElement(Proposition(),2) : Titre3.s = Proposition()
SelectElement(Proposition(),3) : Titre4.s = Proposition()
RandomizeList(Proposition2())
SelectElement(Proposition2(),0) : Chanteur1.s = Proposition2()
SelectElement(Proposition2(),1) : Chanteur2.s = Proposition2()
SelectElement(Proposition2(),2) : Chanteur3.s = Proposition2()
SelectElement(Proposition2(),3) : Chanteur4.s = Proposition2()
Wend
FinishDatabaseQuery(#BaseDeDonnees)
EndIf
If Titre1 = Titre : BonSelection1.s = "A"
ElseIf Titre2 = Titre : BonSelection1.s = "B"
ElseIf Titre3 = Titre : BonSelection1.s = "C"
ElseIf Titre4 = Titre : BonSelection1.s = "D"
EndIf
If Chanteur1 = Chanteur : BonSelection.s = "A"
ElseIf Chanteur2 = Chanteur : BonSelection.s = "B"
ElseIf Chanteur3 = Chanteur : BonSelection.s = "C"
ElseIf Chanteur4 = Chanteur : BonSelection.s = "D"
EndIf
If StartVectorDrawing(ImageVectorOutput(#Image))
VectorSourceColor(RGBA(255, 255, 255, 255)) ; Couleur de font
FillVectorOutput()
MovePathCursor(Int(Largeur *0.3), 0)
DrawVectorImage(ImageID(#Titre), 255, Int(Largeur *0.4), Int(Hauteur *0.3))
MovePathCursor(Int(Largeur *0.25), Int(Hauteur *0.3))
DrawVectorImage(ImageID(#MediaMusique), 255, Int(Largeur *0.5), Int(Hauteur *0.5))
VectorFont(FontID(#Police), Hauteur/20)
MovePathCursor((Largeur-VectorTextWidth(Genre+ " "+ Annee))/2, Int(Hauteur *0.8))
VectorSourceColor(RGBA(0, 0, 50, 255))
DrawVectorText(Genre+ " "+ Annee)
StopVectorDrawing()
EndIf
SetGadgetState(#Font, ImageID(#Image)) ; Affichage
sapi_Say("<pitch absmiddle="+Chr(34)+ Hauteur_Voix+ Chr(34)+">" + ReplaceString(Genre, "/", " ") +" des années "+Annee +"</pitch>")
For x = 1 To 10
Delay(500)
If sapi_IsVoiceRunning() = 0
Break
EndIf
Next x
*Parametres.Musique = AllocateMemory(SizeOf(Musique))
*Parametres\File = Source+ "Media\Musiques\"+ MediaMusique
CreateThread(@LectureMusic(), *Parametres)
CreateThread(@AffichageTemp(),0)
EndProcedure
Procedure PageJeuxFilm(*Valeur)
Jeux = #QuizFilm
For Ji = 0 To nbrJoueur
ParaJoueur(Ji)\Reponse = #False
ParaJoueur(Ji)\Etape = 1
Next Ji
JoueurBonneReponse = 0
FinReponse = #False
ClearList(Proposition())
ClearList(Proposition2())
If ExexuteDataQuery(#BaseDeDonnees, "SELECT * FROM Video WHERE ID='"+Str(NumVideo(NbrPartieJouer))+"'; ")
While NextDatabaseRow(#BaseDeDonnees)
Genre.s = InvCaractere(GetDatabaseString(#BaseDeDonnees, 1))
Annee.s = InvCaractere(GetDatabaseString(#BaseDeDonnees, 2))
BonRep.s = InvCaractere(GetDatabaseString(#BaseDeDonnees, 3))
AddElement(Proposition()) : Proposition() = InvCaractere(GetDatabaseString(#BaseDeDonnees, 3))
AddElement(Proposition()) : Proposition() = InvCaractere(GetDatabaseString(#BaseDeDonnees, 4))
AddElement(Proposition()) : Proposition() = InvCaractere(GetDatabaseString(#BaseDeDonnees, 5))
AddElement(Proposition()) : Proposition() = InvCaractere(GetDatabaseString(#BaseDeDonnees, 6))
MediaMusique.s = InvCaractere(GetDatabaseString(#BaseDeDonnees, 7))
MediaFilm.s= InvCaractere(GetDatabaseString(#BaseDeDonnees, 8))
RandomizeList(Proposition())
SelectElement(Proposition(),0) : Prop1.s = Proposition()
SelectElement(Proposition(),1) : Prop2.s = Proposition()
SelectElement(Proposition(),2) : Prop3.s = Proposition()
SelectElement(Proposition(),3) : Prop4.s = Proposition()
Wend
FinishDatabaseQuery(#BaseDeDonnees)
EndIf
If Prop1 = BonRep : BonSelection.s = "A"
ElseIf Prop2 = BonRep : BonSelection.s = "B"
ElseIf Prop3 = BonRep : BonSelection.s = "C"
ElseIf Prop4 = BonRep : BonSelection.s = "D"
EndIf
If StartVectorDrawing(ImageVectorOutput(#Image))
VectorSourceColor(RGBA(255, 255, 255, 255)) ; Couleur de font
FillVectorOutput()
MovePathCursor(Int(Largeur *0.3), 0)
DrawVectorImage(ImageID(#Titre), 255, Int(Largeur *0.4), Int(Hauteur *0.3))
MovePathCursor(Int(Largeur *0.25), Int(Hauteur *0.3))
DrawVectorImage(ImageID(#MediaVideo), 255, Int(Largeur *0.5), Int(Hauteur *0.5))
VectorFont(FontID(#Police), Hauteur/20)
MovePathCursor((Largeur-VectorTextWidth(Genre+ " "+ Annee))/2, Int(Hauteur *0.8))
VectorSourceColor(RGBA(0, 0, 50, 255))
DrawVectorText(Genre+ " "+ Annee)
StopVectorDrawing()
EndIf
SetGadgetState(#Font, ImageID(#Image)) ; Affichage
sapi_Say("<pitch absmiddle="+Chr(34)+ Hauteur_Voix+ Chr(34)+">" + ReplaceString(Genre, "/", " ") +" des années "+Annee +"</pitch>")
For x = 1 To 10
Delay(500)
If sapi_IsVoiceRunning() = 0
Break
EndIf
Next x
*Parametres.Musique = AllocateMemory(SizeOf(Musique))
*Parametres\File = Source+ "Media\Films\"+ MediaMusique
CreateThread(@LectureMusic(), *Parametres)
CreateThread(@AffichageTemp(),0)
EndProcedure
Procedure.s LectureFile(Fichier.s)
Protected Lecture.s
If ReadFile(#Fichier, Fichier, #PB_UTF8)
While Eof(#Fichier) = 0
Lecture.s= Lecture+ ReadString(#Fichier, #PB_UTF8) + #CRLF$
Wend
CloseFile(#Fichier)
Else
MessageRequester("Erreur","Impossible de lire le fichier "+Fichier)
EndIf
ProcedureReturn Lecture
EndProcedure
Procedure PassageQuestion(*Valeur)
Decompte = #False
sapi_Say("<pitch absmiddle="+Chr(34)+ Hauteur_Voix+ Chr(34)+">La bonne réponse était:" + BonRep + "<silence msec="+Chr(34)+"500"+Chr(34)+"/>" + Anecdote + "</pitch>")
If StartVectorDrawing(ImageVectorOutput(#Image))
VectorFont(FontID(#Police), Hauteur/20)
MovePathCursor((Largeur-VectorTextWidth(BonRep))/2, Int(Hauteur *0.8)+VectorTextHeight("A"))
VectorSourceColor(RGBA(0, 100, 0, 255))
DrawVectorText(BonRep)
StopVectorDrawing()
SetGadgetState(#Font, ImageID(#Image)) ; Affichage
EndIf
Repeat
Delay(500)
Until sapi_IsVoiceRunning() = 0
FMOD_Channel_GetPosition(Channel,@CurrentPos,1)
FMOD_Channel_Stop(Channel)
PageJeuxMusique(0)
EndProcedure
Procedure PassageMusique(*Valeur)
Repeat
Delay(500)
Until FinMediaSon = #True
Decompte = #False
sapi_Say("<pitch absmiddle="+Chr(34)+ Hauteur_Voix+ Chr(34)+">La bonne réponse était: " + Titre +" de " + Chanteur +"</pitch>")
If StartVectorDrawing(ImageVectorOutput(#Image))
VectorFont(FontID(#Police), Hauteur/20)
MovePathCursor((Largeur-VectorTextWidth(Titre +" de " + Chanteur))/2, Int(Hauteur *0.8)+VectorTextHeight("A"))
VectorSourceColor(RGBA(0, 100, 0, 255))
DrawVectorText(Titre +" de " + Chanteur)
StopVectorDrawing()
SetGadgetState(#Font, ImageID(#Image)) ; Affichage
EndIf
Repeat
Delay(500)
Until sapi_IsVoiceRunning() = 0
PageJeuxFilm(0)
EndProcedure
Procedure PassageVideo(*Valeur)
Repeat
Delay(500)
Until FinMediaSon = #True
Decompte = #False
sapi_Say("<pitch absmiddle="+Chr(34)+ Hauteur_Voix+ Chr(34)+">La bonne réponse était: " + BonRep +"</pitch>")
If StartVectorDrawing(ImageVectorOutput(#Image))
VectorFont(FontID(#Police), Hauteur/20)
MovePathCursor((Largeur-VectorTextWidth(BonRep))/2, Int(Hauteur *0.8)+VectorTextHeight("A"))
VectorSourceColor(RGBA(0, 100, 0, 255))
DrawVectorText(BonRep)
StopVectorDrawing()
SetGadgetState(#Font, ImageID(#Image)) ; Affichage
EndIf
RunProgram(Source+"Video.exe",Source+ "Media\Films\"+ MediaFilm,"", #PB_Program_Wait)
Score()
EndProcedure
Procedure AffichageTemp(*IDImage)
Decompte = #True
For tmp = 30 To 0 Step -1
If StartVectorDrawing(ImageVectorOutput(#Image))
MovePathCursor(0, 0)
DrawVectorImage(ImageID(#ImageFont), 255, Int(Largeur *0.3), Int(Hauteur *0.3))
VectorFont(FontID(#Police), Hauteur/5)
MovePathCursor(largeur*0.02, Hauteur*0.02)
If nbrBonReponse > JoueurBonneReponse And tmp > 5
VectorSourceColor(RGBA(0, 220, 0, 255))
ElseIf tmp < 5 And tmp > 0
VectorSourceColor(RGBA(255, 0, 0, 255))
ElseIf tmp = 0
VectorSourceColor(RGBA(255, 255, 255, 255))
Else
VectorSourceColor(RGBA(255, 126, 0, 255))
EndIf
DrawVectorText(Str(tmp))
StopVectorDrawing()
SetGadgetState(#Font, ImageID(#Image)) ; Affichage
EndIf
Delay(1000)
If Decompte = #False
Break
EndIf
Next tmp
If Decompte = #True
If Jeux = #QuizQuestion And Not IsThread(Thread)
Thread = CreateThread(@PassageQuestion(),0)
ElseIf Jeux = #QuizMusique And Not IsThread(Thread)
Thread = CreateThread(@PassageMusique(),0)
ElseIf Jeux = #QuizFilm And Not IsThread(Thread)
Thread = CreateThread(@PassageVideo(),0)
EndIf
EndIf
EndProcedure
Procedure Score()
CopyArray(ParaJoueur(),CopieParaJoueur())
For Si = 0 To nbrJoueur
If ParaJoueur(Si)\Attaqueur_Block <> ""
Nom_deffenseur.s = ParaJoueur(Si)\Nom
Point_Block_Question.i = ParaJoueur(Si)\ScoreQuestion
Point_Block_Musique.i = ParaJoueur(Si)\ScoreMusique
Point_Block_Video.i = ParaJoueur(Si)\ScoreVideo
ParaJoueur(Si)\Point = ParaJoueur(Si)\Point - Point_Block_Question - Point_Block_Musique - Point_Block_Video
CopieParaJoueur(Si)\Point = ParaJoueur(Si)\Point
ParaJoueur(Si)\ScoreMusique = 0
ParaJoueur(Si)\ScoreQuestion = 0
ParaJoueur(Si)\ScoreVideo = 0
ParaJoueur(Si)\Attaqueur_Block = ""
ParaJoueur(Si)\TypeAttaque = 1
ParaJoueur(Si)\Nbr_Block = ParaJoueur(Si)\Nbr_Block +1
For SiC = 0 To nbrJoueur
If CopieParaJoueur(SiC)\Nom = Nom_deffenseur
CopieParaJoueur(SiC)\Point = CopieParaJoueur(SiC)\Point - Point_vole_Question - Point_vole_Musique - Point_vole_Video
CopieParaJoueur(SiC)\ScoreQuestion = 0
CopieParaJoueur(SiC)\ScoreMusique = 0
CopieParaJoueur(SiC)\ScoreVideo = 0
Break
EndIf
Next SiC
EndIf
Nom_Attaque_Voleur.s = ParaJoueur(Si)\Attaqueur_Voleur
If Nom_Attaque_Voleur <> ""
Nom_deffenseur.s = ParaJoueur(Si)\Nom
Point_vole_Question.i = ParaJoueur(Si)\ScoreQuestion
Point_vole_Musique.i = ParaJoueur(Si)\ScoreMusique
Point_vole_Video.i = ParaJoueur(Si)\ScoreVideo
ParaJoueur(Si)\Point = ParaJoueur(Si)\Point - Point_vole_Question - Point_vole_Musique - Point_vole_Video
CopieParaJoueur(Si)\Point = ParaJoueur(Si)\Point
ParaJoueur(Si)\ScoreMusique = 0
ParaJoueur(Si)\ScoreQuestion = 0
ParaJoueur(Si)\ScoreVideo = 0
ParaJoueur(Si)\Attaqueur_Voleur = ""
ParaJoueur(Si)\TypeAttaque = 1
ParaJoueur(Si)\Nbr_Vol = ParaJoueur(Si)\Nbr_Vol +1
For SiC = 0 To nbrJoueur
If CopieParaJoueur(SiC)\Nom = Nom_Attaque_Voleur ; Récupération des points pour le voleur Voleur
CopieParaJoueur(SiC)\Point = CopieParaJoueur(SiC)\Point + Point_vole_Question + Point_vole_Musique + Point_vole_Video
ParaJoueur(SiC)\Point = CopieParaJoueur(SiC)\Point
CopieParaJoueur(SiC)\ScoreQuestion = CopieParaJoueur(SiC)\ScoreQuestion + Point_vole_Question
CopieParaJoueur(SiC)\ScoreMusique = CopieParaJoueur(SiC)\ScoreMusique + Point_vole_Musique
CopieParaJoueur(SiC)\ScoreVideo = CopieParaJoueur(SiC)\ScoreVideo + Point_vole_Video
EndIf
Next SiC
EndIf
ParaJoueur(Si)\ScoreMusique = 0
ParaJoueur(Si)\ScoreQuestion = 0
ParaJoueur(Si)\ScoreVideo = 0
ParaJoueur(Si)\Attaqueur_Block = ""
ParaJoueur(Si)\Attaqueur_Voleur = ""
ParaJoueur(Si)\TypeAttaque = 1
Next Si
MeilleurScore.i = 0
Egalite_Joueur_Point.i = 0
Nom_Joueur_Point.s = ""
For SiC = 0 To nbrJoueur
If CopieParaJoueur(SiC)\Point >= MeilleurScore
MeilleurScore.i = CopieParaJoueur(SiC)\Point
EndIf
Next SiC
For SiC = 0 To nbrJoueur
If CopieParaJoueur(SiC)\Point = MeilleurScore
Nom_Joueur_Point.s = CopieParaJoueur(SiC)\Nom + ", " + Nom_Joueur_Point
Egalite_Joueur_Point.i = Egalite_Joueur_Point +1
EndIf
Next SiC
If Egalite_Joueur_Point > 1
sapi_Say("<pitch absmiddle="+Chr(34)+ Hauteur_Voix+ Chr(34)+">Egalité du meilleur score avec " + Nom_Joueur_Point +" ont le meilleur score</pitch>")
Else
sapi_Say("<pitch absmiddle="+Chr(34)+ Hauteur_Voix+ Chr(34)+">" + Nom_Joueur_Point +" à le meilleur score</pitch>")
EndIf
Jeux = #QuizScore
nbrj = 0
NbrPartieJouer = NbrPartieJouer + 1
; Création du stream de lecture
FMOD_System_CreateStream(FmodSystem, Ascii(Source+ "Data\Into.mp3"), #FMOD_SOFTWARE, 0, @sound)
;Play a sound on a free channel
FMOD_System_PlaySound(fmodsystem, #FMOD_CHANNEL_FREE, sound, 0, @channel)
;Volume
FMOD_Channel_SetVolume(Channel, 0.1)
FMOD_Channel_SetPosition(channel,CurrentPos,1)
If StartVectorDrawing(ImageVectorOutput(#Image))
VectorSourceColor(RGBA(255, 255, 255, 255)) ; Couleur de font
FillVectorOutput()
MovePathCursor(Int(Largeur *0.3), 0)
DrawVectorImage(ImageID(#Score), 255, Int(Largeur *0.4), Int(Hauteur *0.3))
VectorFont(FontID(#Police), Hauteur/20)
VectorSourceColor(RGBA(0, 0, 0, 255))
MovePathCursor(0, 0)
DrawVectorText(" Partie "+Str(NbrPartieJouer)+ "/"+Str(NbrPartie))
MovePathCursor(Int(Largeur*0.5),Int(Hauteur*0.3))
DrawVectorText(" Questions Musiques Videos Score")
MovePathCursor(Int(Largeur*0.5),Int(Hauteur*0.3))
AddPathLine(Int(Largeur*0.5),Hauteur)
StrokePath(5, #PB_Path_RoundCorner)
MovePathCursor(Int(Largeur*0.5)+VectorTextWidth(" Questions "),Int(Hauteur*0.3))
AddPathLine(Int(Largeur*0.5)+VectorTextWidth(" Questions "),Hauteur)
StrokePath(5, #PB_Path_RoundCorner)
MovePathCursor(Int(Largeur*0.5)+VectorTextWidth(" Questions Musiques "),Int(Hauteur*0.3))
AddPathLine(Int(Largeur*0.5)+VectorTextWidth(" Questions Musiques "),Hauteur)
StrokePath(5, #PB_Path_RoundCorner)
MovePathCursor(Int(Largeur*0.5)+VectorTextWidth(" Questions Musiques Videos "),Int(Hauteur*0.3))
AddPathLine(Int(Largeur*0.5)+VectorTextWidth(" Questions Musiques Videos "),Hauteur)
MovePathCursor(0,Int(Hauteur*0.3)+VectorTextHeight("A"))
AddPathLine(Largeur,Int(Hauteur*0.3)+VectorTextHeight("A"))
StrokePath(5, #PB_Path_RoundCorner)
SortStructuredArray(CopieParaJoueur(), #PB_Sort_Descending, OffsetOf(Joueur\Point), TypeOf(Joueur\Point))
nbrj = 0
For SiC = 0 To nbrJoueur
nbrj = nbrj +1
CouleurFond = RGBA(0, 0, 0, 0)
If CopieParaJoueur(SiC)\TypeAttaque = 2 ;PointX2
Detail.s = " PointX2"
ElseIf CopieParaJoueur(SiC)\TypeAttaque = 3 ;Block
Detail.s = " Bloqueur"
ElseIf CopieParaJoueur(SiC)\TypeAttaque = 4 ;Voleur
Detail.s = " Voleur"
Else
Detail.s = ""
EndIf
If CopieParaJoueur(Sic)\Attaqueur_Block <> ""
Detail.s = Detail + " Bloqué par "+CopieParaJoueur(SiC)\Attaqueur_Block
CouleurFond = RGBA(0, 0, 0, 90)
EndIf
If CopieParaJoueur(Sic)\Attaqueur_Voleur <> ""
Detail.s = Detail + " Volé par "+CopieParaJoueur(SiC)\Attaqueur_Voleur
CouleurFond = RGBA(0, 0, 0, 90)
EndIf
MovePathCursor(Int(Largeur*0.25)-VectorTextWidth(CopieParaJoueur(SiC)\Nom + " "+Detail)/2, Int(Hauteur *0.3)+(VectorTextHeight("A")*nbrj))
VectorSourceColor(CopieParaJoueur(SiC)\Couleur)
DrawVectorText(CopieParaJoueur(SiC)\Nom + Detail)
VectorSourceColor(RGBA(0, 0, 0, 255))
MovePathCursor(0,Int(Hauteur *0.3)+(VectorTextHeight("A")*nbrj))
AddPathLine(Largeur,Int(Hauteur *0.3)+(VectorTextHeight("A")*nbrj))
StrokePath(5, #PB_Path_RoundCorner)
If CopieParaJoueur(SiC)\ScoreQuestion = 0
VectorSourceColor(RGBA(255, 0, 0, 255))
ElseIf CopieParaJoueur(SiC)\ScoreQuestion = 1
VectorSourceColor(RGBA(255, 126, 0, 255))
Else
VectorSourceColor(RGBA(0, 255, 0, 255))
EndIf
MovePathCursor(Int(Largeur*0.5)+VectorTextWidth(" Questions ")/2, Int(Hauteur *0.3)+(VectorTextHeight("A")*nbrj))
DrawVectorText(Str(CopieParaJoueur(SiC)\ScoreQuestion))
If CopieParaJoueur(SiC)\ScoreMusique = 0
VectorSourceColor(RGBA(255, 0, 0, 255))
ElseIf CopieParaJoueur(SiC)\ScoreMusique = 1
VectorSourceColor(RGBA(255, 126, 0, 255))
Else
VectorSourceColor(RGBA(0, 255, 0, 255))
EndIf
MovePathCursor(Int(Largeur*0.5)+VectorTextWidth(" Questions ")+VectorTextWidth(" Musiques ")/2, Int(Hauteur *0.3)+(VectorTextHeight("A")*nbrj))
DrawVectorText(Str(CopieParaJoueur(SiC)\ScoreMusique))
If CopieParaJoueur(SiC)\ScoreVideo = 0
VectorSourceColor(RGBA(255, 0, 0, 255))
ElseIf CopieParaJoueur(SiC)\ScoreVideo = 1
VectorSourceColor(RGBA(255, 126, 0, 255))
Else
VectorSourceColor(RGBA(0, 255, 0, 255))
EndIf
MovePathCursor(Int(Largeur*0.5) +VectorTextWidth(" Questions Musiques ")+VectorTextWidth(" Videos ")/2, Int(Hauteur *0.3)+(VectorTextHeight("A")*nbrj))
DrawVectorText(Str(CopieParaJoueur(SiC)\ScoreVideo))
MovePathCursor(Int(Largeur*0.5) +VectorTextWidth(" Questions Musiques Videos ")+VectorTextWidth(" Score ")/2, Int(Hauteur *0.3)+(VectorTextHeight("A")*nbrj))
VectorSourceColor(RGBA(0, 0, 0, 255))
DrawVectorText(Str(CopieParaJoueur(SiC)\Point))
VectorSourceColor(CouleurFond)
AddPathBox(0, Int(Hauteur *0.3)+(VectorTextHeight("A")*nbrj), Largeur, VectorTextHeight("A"))
FillPath()
If nbrj <=10
MovePathCursor(Int(Largeur *0.02), Int(Hauteur *0.3)+(VectorTextHeight("A")*nbrj))
Else
StopVectorDrawing()
SetGadgetState(#Font, ImageID(#Image)) ; Affichage
Delay(5000)
StartVectorDrawing(ImageVectorOutput(#Image))
VectorSourceColor(RGBA(255, 255, 255, 255)) ; Couleur de font
FillVectorOutput()
MovePathCursor(Int(Largeur *0.3), 0)
DrawVectorImage(ImageID(#Score), 255, Int(Largeur *0.4), Int(Hauteur *0.3))
VectorFont(FontID(#Police), Hauteur/20)
VectorSourceColor(RGBA(0, 0, 0, 255))
MovePathCursor(0, 0)
DrawVectorText(" Partie "+Str(NbrPartieJouer)+ "/"+Str(NbrPartie))
MovePathCursor(Int(Largeur*0.5),Int(Hauteur*0.3))
DrawVectorText(" Questions Musiques Videos Score")
MovePathCursor(Int(Largeur*0.5),Int(Hauteur*0.3))
AddPathLine(Int(Largeur*0.5),Hauteur)
StrokePath(5, #PB_Path_RoundCorner)
MovePathCursor(Int(Largeur*0.5)+VectorTextWidth(" Questions "),Int(Hauteur*0.3))
AddPathLine(Int(Largeur*0.5)+VectorTextWidth(" Questions "),Hauteur)
StrokePath(5, #PB_Path_RoundCorner)
MovePathCursor(Int(Largeur*0.5)+VectorTextWidth(" Questions Musiques "),Int(Hauteur*0.3))
AddPathLine(Int(Largeur*0.5)+VectorTextWidth(" Questions Musiques "),Hauteur)
StrokePath(5, #PB_Path_RoundCorner)
MovePathCursor(Int(Largeur*0.5)+VectorTextWidth(" Questions Musiques Videos "),Int(Hauteur*0.3))
AddPathLine(Int(Largeur*0.5)+VectorTextWidth(" Questions Musiques Videos "),Hauteur)
MovePathCursor(0,Int(Hauteur*0.3)+VectorTextHeight("A"))
AddPathLine(Largeur,Int(Hauteur*0.3)+VectorTextHeight("A"))
StrokePath(5, #PB_Path_RoundCorner)
nbrj = 0
EndIf
Next
StopVectorDrawing()
SetGadgetState(#Font, ImageID(#Image)) ; Affichage
EndIf
Repeat
t = t+1
Delay(1000)
Until t >=15
If NbrPartie = NbrPartieJouer
FinJeux(0)
Else
; FMOD_Channel_GetPosition(Channel,@CurrentPos,1)
; FMOD_Channel_Stop(Channel)
PageJeuxQuestion(0)
EndIf
EndProcedure
Procedure FinJeux(*Valeur)
Egalite_Joueur_Block.i = 0
Egalite_Joueur_Vol.i = 0
Nbr_Maxi.i = 0
Joueur_Nbr_Block.s = ""
Joueur_Nbr_Vol.s = ""
For Fi = 0 To nbrJoueur
If ParaJoueur(Fi)\Nbr_Block >= Nbr_Maxi
Nbr_Maxi.i = ParaJoueur(Fi)\Nbr_Block
EndIf
Next Fi
For Fi = 0 To nbrJoueur
If ParaJoueur(Fi)\Nbr_Block = Nbr_Maxi
Joueur_Nbr_Block.s = ParaJoueur(Fi)\Nom + ", " + Joueur_Nbr_Block
Egalite_Joueur_Block.i = Egalite_Joueur_Block +1
EndIf
Next Fi
If Egalite_Joueur_Block > 1
TextMaxiBlock.s = "Autant de bloque avec "+ Joueur_Nbr_Block + " pour " + Str(Nbr_Maxi) + " bloques chancun."
Else
TextMaxiBlock.s = "Un maximun de bloque pour " +Joueur_Nbr_Block + " avec " + Str(Nbr_Maxi) + " bloques"
EndIf
Nbr_Maxi.i = 0
For Fi = 0 To nbrJoueur
If ParaJoueur(Fi)\Nbr_Vol >= Nbr_Maxi
Nbr_Maxi.i = ParaJoueur(Fi)\Nbr_Vol
EndIf
Next Fi
For Fi = 0 To nbrJoueur
If ParaJoueur(Fi)\Nbr_Vol = Nbr_Maxi
Joueur_Nbr_Vol.s = ParaJoueur(Fi)\Nom + ", " + Joueur_Nbr_Vol
Egalite_Joueur_Vol.i = Egalite_Joueur_Vol +1
EndIf
Next Fi
If Egalite_Joueur_Vol > 1
TextMaxiVole.s = "Autant de vole avec "+ Joueur_Nbr_Vol + " pour "+ Str(Nbr_Maxi) + " Vole chancun."
Else
TextMaxiVole.s = "Un Maximun de vole pour "+ Joueur_Nbr_Vol + "avec " + Str(Nbr_Maxi) + " voles"
EndIf
If StartVectorDrawing(ImageVectorOutput(#Image))
VectorSourceColor(RGBA(255, 255, 255, 255)) ; Couleur de font
FillVectorOutput()
MovePathCursor(Int(Largeur *0.3), 0)
DrawVectorImage(ImageID(#Score), 255, Int(Largeur *0.4), Int(Hauteur *0.3))
VectorFont(FontID(#Police), Hauteur/20)
VectorSourceColor(RGBA(0, 0, 0, 255))
MovePathCursor(Int(Largeur*0.5),Int(Hauteur*0.3))
DrawVectorText(" Nbr Bloqués Nbr Volés ")
MovePathCursor(Int(Largeur*0.5),Int(Hauteur*0.3))
AddPathLine(Int(Largeur*0.5),Hauteur)
StrokePath(5, #PB_Path_RoundCorner)
MovePathCursor(Int(Largeur*0.5)+VectorTextWidth(" Nbr Bloqués "),Int(Hauteur*0.3))
AddPathLine(Int(Largeur*0.5)+VectorTextWidth(" Nbr Bloqués "),Hauteur)
StrokePath(5, #PB_Path_RoundCorner)
MovePathCursor(Int(Largeur*0.5)+VectorTextWidth(" Nbr Bloqués Nbr Volés "),Int(Hauteur*0.3))
AddPathLine(Int(Largeur*0.5)+VectorTextWidth(" Nbr Bloqués Nbr Volés "),Hauteur)
Largeur1 = Int(Largeur*0.5)+VectorTextWidth(" Nbr Bloqués Nbr Volés ")
Largeur2 = ((Largeur - Largeur1)/2)-(VectorTextWidth(" Score ")/2)+ Largeur1
MovePathCursor(Largeur2,Int(Hauteur*0.3))
DrawVectorText(" Score ")
MovePathCursor(0,Int(Hauteur*0.3)+VectorTextHeight("A"))
AddPathLine(Largeur,Int(Hauteur*0.3)+VectorTextHeight("A"))
StrokePath(5, #PB_Path_RoundCorner)
nbrj = 0
For Fi = 0 To nbrJoueur
nbrj = nbrj +1
MovePathCursor(Int(Largeur*0.25)-VectorTextWidth(CopieParaJoueur(Fi)\Nom + " ")/2, Int(Hauteur *0.3)+(VectorTextHeight("A")*nbrj))
VectorSourceColor(CopieParaJoueur(Fi)\Couleur)
DrawVectorText(CopieParaJoueur(Fi)\Nom)
VectorSourceColor(RGBA(0, 0, 0, 255))
MovePathCursor(0,Int(Hauteur *0.3)+(VectorTextHeight("A")*nbrj))
AddPathLine(Largeur,Int(Hauteur *0.3)+(VectorTextHeight("A")*nbrj))
StrokePath(5, #PB_Path_RoundCorner)
If CopieParaJoueur(Fi)\Nbr_Block = 0
VectorSourceColor(RGBA(0, 0, 0, 255))
ElseIf CopieParaJoueur(Fi)\Nbr_Block > 0 And CopieParaJoueur(Fi)\Nbr_Block <= 2
VectorSourceColor(RGBA(255, 126, 0, 255))
Else
VectorSourceColor(RGBA(255, 0, 0, 255))
EndIf
MovePathCursor(Int(Largeur*0.5)+VectorTextWidth(" Nbr Bloqués ")/2, Int(Hauteur *0.3)+(VectorTextHeight("A")*nbrj))
DrawVectorText(Str(CopieParaJoueur(Fi)\Nbr_Block))
If CopieParaJoueur(Fi)\Nbr_Vol = 0
VectorSourceColor(RGBA(0, 0, 0, 255))
ElseIf CopieParaJoueur(Fi)\Nbr_Vol > 0 And CopieParaJoueur(Fi)\Nbr_Vol <= 2
VectorSourceColor(RGBA(255, 126, 0, 255))
Else
VectorSourceColor(RGBA(255, 0, 0, 255))
EndIf
MovePathCursor(Int(Largeur*0.5)+VectorTextWidth(" Nbr Bloqués ")+VectorTextWidth(" Nbr Volés ")/2, Int(Hauteur *0.3)+(VectorTextHeight("A")*nbrj))
DrawVectorText(Str(CopieParaJoueur(Fi)\Nbr_Vol))
MovePathCursor(Largeur2+VectorTextWidth(" Score ")/2, Int(Hauteur *0.3)+(VectorTextHeight("A")*nbrj))
VectorSourceColor(RGBA(0, 0, 0, 255))
DrawVectorText(Str(CopieParaJoueur(Fi)\Point))
If nbrj < 10
MovePathCursor(Int(Largeur *0.02), Int(Hauteur *0.3)+(VectorTextHeight("A")*nbrj))
Else
StopVectorDrawing()
SetGadgetState(#Font, ImageID(#Image)) ; Affichage
Delay(5000)
StartVectorDrawing(ImageVectorOutput(#Image))
VectorSourceColor(RGBA(255, 255, 255, 255)) ; Couleur de font
FillVectorOutput()
MovePathCursor(Int(Largeur *0.3), 0)
DrawVectorImage(ImageID(#Score), 255, Int(Largeur *0.4), Int(Hauteur *0.3))
VectorFont(FontID(#Police), Hauteur/20)
VectorSourceColor(RGBA(0, 0, 0, 255))
MovePathCursor(Int(Largeur*0.5),Int(Hauteur*0.3))
DrawVectorText(" Nbr Bloqués Nbr Volés ")
MovePathCursor(Int(Largeur*0.5),Int(Hauteur*0.3))
AddPathLine(Int(Largeur*0.5),Hauteur)
StrokePath(5, #PB_Path_RoundCorner)
MovePathCursor(Int(Largeur*0.5)+VectorTextWidth(" Nbr Bloqués "),Int(Hauteur*0.3))
AddPathLine(Int(Largeur*0.5)+VectorTextWidth(" Nbr Bloqués "),Hauteur)
StrokePath(5, #PB_Path_RoundCorner)
MovePathCursor(Int(Largeur*0.5)+VectorTextWidth(" Nbr Bloqués Nbr Volés "),Int(Hauteur*0.3))
AddPathLine(Int(Largeur*0.5)+VectorTextWidth(" Nbr Bloqués Nbr Volés "),Hauteur)
Largeur1 = Int(Largeur*0.5)+VectorTextWidth(" Nbr Bloqués Nbr Volés ")
Largeur2 = ((Largeur - Largeur1)/2)-(VectorTextWidth(" Score ")/2)+ Largeur1
MovePathCursor(Largeur2,Int(Hauteur*0.3))
DrawVectorText(" Score ")
MovePathCursor(0,Int(Hauteur*0.3)+VectorTextHeight("A"))
AddPathLine(Largeur,Int(Hauteur*0.3)+VectorTextHeight("A"))
StrokePath(5, #PB_Path_RoundCorner)
nbrj = 0
EndIf
Next
StopVectorDrawing()
SetGadgetState(#Font, ImageID(#Image)) ; Affichage
EndIf
sapi_Say("<pitch absmiddle="+Chr(34)+ Hauteur_Voix+ Chr(34)+">" +
TextMaxiBlock + "<silence msec="+Chr(34)+"2000"+Chr(34)+"/>"+
TextMaxiVole + "<silence msec="+Chr(34)+"2000"+Chr(34)+"/>"+
"Fin du jeux <silence msec="+Chr(34)+"30000"+Chr(34)+"/></pitch>")
Repeat
Delay(500)
Until sapi_IsVoiceRunning() = 0
CloseNetworkServer(#Serveur)
CloseDatabase(#BaseDeDonnees)
sapi_DeInit()
ShowWindow_(FindWindow_("Shell_TrayWnd",""),#SW_SHOW); Active barre des taches
End
EndProcedure
Procedure GestionNetwork(*Valeur)
BufferSize = 1024
*Buffer = AllocateMemory(BufferSize)
Buffer.s
Repeat
Delay(1)
ServerEvent = NetworkServerEvent()
If ServerEvent
ClientID = EventClient()
ID_Utilisateur.i = GetIDClient(GetClientIP(ClientID))
Buffer = ""
Select ServerEvent
Case #PB_NetworkEvent_Data
Repeat
*Buffer = AllocateMemory(BufferSize)
Result = ReceiveNetworkData(ClientID, *Buffer, BufferSize)
Buffer + PeekS(*Buffer, -1, #PB_UTF8)
Until Result <> BufferSize
If Left(Buffer, 3) = "GET"
RequestedFile.s = Trim(Mid(StringField(Buffer, 1, "HTTP"), 6))
;- Selection des réponses
If RequestedFile = "Go" ;Selection des réponses
If ParaJoueur(ID_Utilisateur)\Reponse = #False
If Jeux = #QuizQuestion Or #QuizFilm
Html.s = Go+
~"<div class=\"buttons\">"+ #CRLF$ +
~"<button onclick=\"selectOption('Reponse=A')\">"+Prop1+"</button>"+ #CRLF$ +
~"<button onclick=\"selectOption('Reponse=B')\">"+Prop2+"</button>"+ #CRLF$ +
~"<button onclick=\"selectOption('Reponse=C')\">"+Prop3+"</button>"+ #CRLF$ +
~"<button onclick=\"selectOption('Reponse=D')\">"+Prop4+"</button>"+ #CRLF$ +
~"</div>"+ #CRLF$
Html.s = Html + Script5secondes
EndIf
If Jeux = #QuizMusique
Html.s = Go+
~"<div class=\"buttons\">"+ #CRLF$ +
~"<button onclick=\"selectOption('Reponse=A')\">"+Chanteur1+"</button>"+ #CRLF$ +
~"<button onclick=\"selectOption('Reponse=B')\">"+Chanteur2+"</button>"+ #CRLF$ +
~"<button onclick=\"selectOption('Reponse=C')\">"+Chanteur3+"</button>"+ #CRLF$ +
~"<button onclick=\"selectOption('Reponse=D')\">"+Chanteur4+"</button>"+ #CRLF$ +
~"</div>"+ #CRLF$
Html.s = Html + Script5secondes
EndIf
EnvoieData(ClientID, Html.s)
EndIf
;- Reponse tardive
ElseIf RequestedFile = "DelayUp.html"
EnvoieData(ClientID, DelayUp)
;Ajout de la validation d"avoir répondu
ParaJoueur(ID_Utilisateur)\Reponse = #True
For Ri = 0 To nbrJoueur
If ParaJoueur(Ri)\Reponse = #False ;Savoir si tous les joueurs on répondu
FinReponse = #False
Break
Else
FinReponse = #True
EndIf
Next Ri
If FinReponse = #True ;Si tous les joueurs on répondu alors on passe à l'étape suivante
If Jeux = #QuizQuestion And Not IsThread(Thread)
Thread = CreateThread(@PassageQuestion(),0)
ElseIf Jeux = #QuizMusique And Not IsThread(Thread)
Thread = CreateThread(@PassageMusique(),0)
ElseIf Jeux = #QuizFilm And Not IsThread(Thread)
Thread = CreateThread(@PassageVideo(),0)
EndIf
EndIf
;- Reponse A B C D
ElseIf Left(RequestedFile, 8) = "Reponse="
If Jeux = #QuizQuestion Or Jeux = #QuizFilm
ParaJoueur(ID_Utilisateur)\Reponse = #True
EndIf
If Jeux = #QuizMusique And ParaJoueur(ID_Utilisateur)\Etape = 2
ParaJoueur(ID_Utilisateur)\Reponse = #True
EndIf
If ParaJoueur(ID_Utilisateur)\Etape = 1
If BonSelection = Right(RequestedFile,1) ;Vérification de la réponse A,B,C ou D
If Jeux = #QuizQuestion Or Jeux = #QuizFilm
EnvoieData(ClientID, Bonne_reponse)
ElseIf Jeux = #QuizMusique
ParaJoueur(ID_Utilisateur)\Etape = 2
Html.s = Go2+
~"<div class=\"buttons\">"+ #CRLF$ +
~"<button onclick=\"selectOption('Reponse=A')\">"+Titre1+"</button>"+ #CRLF$ +
~"<button onclick=\"selectOption('Reponse=B')\">"+Titre2+"</button>"+ #CRLF$ +
~"<button onclick=\"selectOption('Reponse=C')\">"+Titre3+"</button>"+ #CRLF$ +
~"<button onclick=\"selectOption('Reponse=D')\">"+Titre4+"</button>"+ #CRLF$ +
~"</div>"+ #CRLF$
Html.s = Html + Script5secondes
EnvoieData(ClientID, Html)
EndIf
ParaJoueur(ID_Utilisateur)\ReponseOK = #True
JoueurBonneReponse = JoueurBonneReponse +1
If nbrBonReponse >= JoueurBonneReponse ; bonnus
If ParaJoueur(ID_Utilisateur)\TypeAttaque = 2
AjoutPoint(ID_Utilisateur, 4)
Else
AjoutPoint(ID_Utilisateur, 2)
EndIf
Else
If ParaJoueur(ID_Utilisateur)\TypeAttaque = 2
AjoutPoint(ID_Utilisateur, 2)
Else
AjoutPoint(ID_Utilisateur, 1)
EndIf
EndIf
Else
EnvoieData(ClientID, Mauvaise_reponse)
ParaJoueur(ID_Utilisateur)\Reponse = #True
EndIf
ElseIf ParaJoueur(ID_Utilisateur)\Etape = 2
If BonSelection1 = Right(RequestedFile,1) ;Vérification de la réponse A,B,C ou D
EnvoieData(ClientID, Bonne_reponse)
JoueurBonneReponse = JoueurBonneReponse +1
If nbrBonReponse >= JoueurBonneReponse ; bonnus
If ParaJoueur(ID_Utilisateur)\TypeAttaque = 2
AjoutPoint(ID_Utilisateur, 4)
Else
AjoutPoint(ID_Utilisateur, 2)
EndIf
Else
If ParaJoueur(ID_Utilisateur)\TypeAttaque = 2
AjoutPoint(ID_Utilisateur, 2)
Else
AjoutPoint(ID_Utilisateur, 1)
EndIf
EndIf
Else
EnvoieData(ClientID, Mauvaise_reponse)
EndIf
EndIf
For Ri = 0 To nbrJoueur
If ParaJoueur(Ri)\Reponse = #False ;Savoir si tous les joueurs on répondu
FinReponse = #False
Break
Else
FinReponse = #True
EndIf
Next Ri
If FinReponse = #True ;Si tous les joueurs on répondu alors on passe à l'étape suivante
If Jeux = #QuizQuestion And Not IsThread(Thread)
Thread = CreateThread(@PassageQuestion(),0)
ElseIf Jeux = #QuizMusique And Not IsThread(Thread)
Thread = CreateThread(@PassageMusique(),0)
ElseIf Jeux = #QuizFilm And Not IsThread(Thread)
Thread = CreateThread(@PassageVideo(),0)
EndIf
EndIf
;- Stratégies
ElseIf Left(RequestedFile, 7) = "Pieges="
If Right(RequestedFile,1) = "2" ; Point X2
ParaJoueur(ID_Utilisateur)\NbrPointX2 = ParaJoueur(ID_Utilisateur)\NbrPointX2 -1
ParaJoueur(ID_Utilisateur)\TypeAttaque = 2
EnvoieData(ClientID, Index)
ElseIf Right(RequestedFile,1) = "3" ; Block
ParaJoueur(ID_Utilisateur)\NbrBlock = ParaJoueur(ID_Utilisateur)\NbrBlock -1
ParaJoueur(ID_Utilisateur)\TypeAttaque = 3
Html.s = ListeJoueurs
For Bi = 0 To nbrJoueur
If GetClientIP(ClientID) <> ParaJoueur(Bi)\ID
Html.s = Html + ~"<button onclick=\"window.location.href = 'IDJoueurB=" +ParaJoueur(Bi)\ID+ "';"+Chr(34)+">"+ParaJoueur(Bi)\Nom+"</button>"
EndIf
Next Bi
html.s = html+ ~"</div>"+
~"</body></html>"
EnvoieData(ClientID, Html)
ElseIf Right(RequestedFile,1) = "4" ; Voleur
ParaJoueur(ID_Utilisateur)\TypeAttaque = 4
ParaJoueur(ID_Utilisateur)\NbrVoleur = ParaJoueur(ID_Utilisateur)\NbrVoleur -1
Html.s = ListeJoueurs
For Vi = 0 To nbrJoueur
If GetClientIP(ClientID) <> ParaJoueur(Vi)\ID
Html.s = Html + ~"<button onclick=\"window.location.href = 'IDJoueurV="+ParaJoueur(Vi)\ID+"';"+Chr(34)+">"+ParaJoueur(Vi)\Nom+"</button>"
EndIf
Next Vi
html.s = html+ ~"</div>"+
~"</body></html>"
EnvoieData(ClientID, Html)
Else ;Rien
ParaJoueur(ID_Utilisateur)\TypeAttaque = 1
EnvoieData(ClientID, Index)
EndIf
;- Joueur piègé
ElseIf Left(RequestedFile, 10) = "IDJoueurB="
Nom_Attaquant.s = ParaJoueur(ID_Utilisateur)\Nom
ID_Joueur_Attaque.i = GetIDClient(Val(URLDecoder(StringField(StringField(Buffer, 2, "IDJoueurB="),1," "))))
If ParaJoueur(ID_Joueur_Attaque)\Attaqueur_Voleur = "" And ParaJoueur(ID_Joueur_Attaque)\Attaqueur_Block = ""
ParaJoueur(ID_Joueur_Attaque)\Attaqueur_Block = Nom_Attaquant
Else
ParaJoueur(ID_Utilisateur)\NbrBlock = ParaJoueur(ID_Utilisateur)\NbrBlock +1
ParaJoueur(ID_Utilisateur)\TypeAttaque = 1
EndIf
EnvoieData(ClientID, Index)
ElseIf Left(RequestedFile, 10) = "IDJoueurV="
Nom_Attaquant.s = ParaJoueur(ID_Utilisateur)\Nom
ID_Joueur_Attaque.i = GetIDClient(Val(URLDecoder(StringField(StringField(Buffer, 2, "IDJoueurV="),1," "))))
If ParaJoueur(ID_Joueur_Attaque)\Attaqueur_Voleur = "" And ParaJoueur(ID_Joueur_Attaque)\Attaqueur_Block = ""
ParaJoueur(ID_Joueur_Attaque)\Attaqueur_Voleur = Nom_Attaquant
Else
ParaJoueur(ID_Utilisateur)\NbrVoleur = ParaJoueur(ID_Utilisateur)\NbrVoleur +1
ParaJoueur(ID_Utilisateur)\TypeAttaque = 1
EndIf
EnvoieData(ClientID, Index)
;-Rechercher de nouveau joueur
Else
If Not FindString(Donnee_Joueur, Str(GetClientIP(ClientID)))
EnvoieData(ClientID, Nouveau_Joueur)
Else ;Index.html
If Jeux = #QuizFilm And ParaJoueur(ID_Utilisateur)\Reponse = #True
Html.s = Patiente2
ElseIf Jeux = #QuizQuestion Or Jeux = #QuizMusique Or Jeux = #QuizFilm
Html.s = Index
ElseIf Jeux = #QuizScore And nbrJoueur >= 1
If NbrPartie >= NbrPartieJouer + 1
PagePiege = #False
Html.s = Pieges
If ParaJoueur(ID_Utilisateur)\NbrPointX2 > 0
html.s = html+ ~"<button onclick=\"window.location.href = 'Pieges=2';\">Point X2 (x"+Str(ParaJoueur(ID_Utilisateur)\NbrPointX2)+")</button>"
PagePiege = #True
EndIf
If ParaJoueur(ID_Utilisateur)\NbrBlock > 0
html.s = html+ ~"<button onclick=\"window.location.href = 'Pieges=3';\">Block (x"+Str(ParaJoueur(ID_Utilisateur)\NbrBlock)+")</button>"
PagePiege = #True
EndIf
If ParaJoueur(ID_Utilisateur)\NbrVoleur > 0
html.s = html+ ~"<button onclick=\"window.location.href = 'Pieges=4';\">Voleur (x"+Str(ParaJoueur(ID_Utilisateur)\NbrVoleur)+")</button>"
PagePiege = #True
EndIf
html.s = html+ ~"</div>"+
~"</body></html>"
If PagePiege = #False
html.s = Index
EndIf
Else
Html.s = Fin
EndIf
Else
Html.s = Patiente
EndIf
EnvoieData(ClientID, Html)
EndIf
EndIf
;- Enregistrement Joueur
ElseIf Left(Buffer, 4) = "POST"
nbrJoueur +1
ReDim ParaJoueur.Joueur(nbrJoueur)
Nom.s = URLDecoder(StringField(Buffer, 2, "nom="))
ParaJoueur(nbrJoueur)\Id = GetClientIP(ClientID)
ParaJoueur(nbrJoueur)\Nom = ReplaceString(Nom, "+", " ")
ParaJoueur(nbrJoueur)\Reponse = #False
ParaJoueur(nbrJoueur)\Couleur = RGBA(Random(255,10),Random(255,10),Random(255,10),255)
ParaJoueur(nbrJoueur)\NbrPointX2 = NbrPointX2
ParaJoueur(nbrJoueur)\NbrBlock = NbrBlock
ParaJoueur(nbrJoueur)\NbrVoleur = NbrVoleur
ParaJoueur(nbrJoueur)\TypeAttaque = 1
ParaJoueur(nbrJoueur)\Point = 0
Donnee_Joueur.s = Donnee_Joueur.s + Str(nbrJoueur)+ "="+ Str(ParaJoueur(nbrJoueur)\ID) +";"
EnvoieData(ClientID, Patiente)
PageAccueil(#True,img) ;Mise a jour de la page d'accueil
EndIf
EndSelect
EndIf
ForEver
EndProcedure