コード例 #1
0
def main():
    # Ligne de commande
    args = cli_setup() 
    if args.client:
        if args.input!=None:
            sys.stderr.write("\nErreur: le client n'a pas le droit de charger "+
                "une partie sauvegardée\n\n")
            quit()

    # Mode réseau
    if args.serveur or args.client:
        args.nombre_joueurs = 2 # pour le moment
        reseau = Reseau(args)
    else:
        reseau = None

    # Initialisation de la fenêtre et de pygame
    if reseau != None:
        titre = 'Scrabble réseau - ' + args.pseudo
        if args.serveur: 
            titre += ' (serveur)'
        elif args.client: 
            titre += ' (client)'
    else:
        titre = 'Scrabble (local)'
    pygame.init()
    screen = pygame.display.set_mode((WIDTH, HEIGHT))
    pygame.display.set_caption(titre)

    # Création du plateau
    plateau = Plateau(screen, Jeu.grille_bonus)

    # Création du jeu
    jeu = Jeu(args, reseau)
    # mémoriser les éventuelles lettres posées sur le plateau
    plateau.memoriser(jeu.joueurs[0])

    # Contenu des chevalets
    jeu.debuter_partie(reseau, plateau)

    #####################
    # Boucle principale #
    #####################
    continuer = True
    clock = pygame.time.Clock()
    while continuer:
        # Gestion des évènements
        for event in pygame.event.get():
            if event.type == pygame.QUIT: # Fermeture de la fenêtre
                continuer = False
                if reseau!=None: reseau.reception.stop()
            elif event.type == pygame.KEYUP:
                if plateau.edition_joker==None:
                    if event.key == pygame.K_v: # Capture console
                        print(jeu)
                    elif event.key == pygame.K_s: # Sauvegarde fichier
                        if not(args.client):
                            filename = jeu.sauvegarder()
                            plateau.set_message('Sauvegarde dans '+filename, 'info')
                    elif jeu.partie_finie:
                        continuer = False
                else: # Édition joker
                    res = plateau.editer_joker(event.key)
                    if res[0] and reseau != None:
                        reseau.envoyer('joker', str(jeu.joueur_local)+res[1])
            elif not(jeu.partie_finie) and event.type == pygame.MOUSEBUTTONDOWN \
              or event.type == pygame.MOUSEMOTION \
              or event.type == pygame.MOUSEBUTTONUP: 

                res = plateau.handle_mouse_click(event, jeu)
                if res != None: 
                    ############################
                    # Déplacement d'une lettre #
                    ############################
                    src = res[0].pos # cellule initiale
                    dst = res[1] # cellule finale
                    result = jeu.deplacer_piece(jeu.joueur_local, dst, res[0])
                    if result and reseau!=None:
                        reseau.envoyer('move', src + ',' + dst)

        # Afficher le plateau (arrière-plan, chevalet, lettre en mouvement, 
        # statistiques)
        plateau.draw(jeu)
        
        # Message d'information termporaire
        plateau.afficher_message()

        if not(jeu.partie_finie): #### Partie en cours ####

            # Comptabiliser le score actuel du coup en cours
            total_points, mots, points = jeu.verifier_positionnement()

            # Bouton de validation (affichant les points)
            plateau.afficher_bouton(total_points, jeu, jeu.local_is_playing())

            ###################
            # Valider un coup #
            ###################
            if plateau.button.is_clicked():
                # Vérifier si le coup est valide
                result = jeu.valider(jeu.joueur_local)

                if not(result[0]): # Coup non valide
                    plateau.set_message(result[1])

                else: # Coup valide
                    plateau.set_message(result[1], 'info')
                    plateau.memoriser(jeu.joueurs[jeu.joueur_actuel-1])
                    tirage = jeu.completer_chevalet(jeu.joueur_actuel)
                    if reseau!=None:
                        if tirage=="##FIN##": # fin de la partie
                            reseau.envoyer_multiple(['detail_coup', 'validation', 'tirage', 'fin'], 
                                [result[1], '', ''.join(tirage), ''])
                            reseau.reception.stop()
                        else: # coup classique
                            reseau.envoyer_multiple(['detail_coup', 'validation', 'tirage'], 
                                [result[1], '', ''.join(tirage)])
                    else:
                        jeu.joueur_local = jeu.joueur_actuel
        
        else: #### Partie finie ####
            plateau.afficher_fin(screen, jeu)

        # Mettre à jour l'écran
        pygame.display.flip()

        # Contrôle du rafraichissement des images
        clock.tick(fps)

    pygame.quit()
    quit()