You are not logged in.

Computer Science in 1ère

The forum to cure all your computer anxieties

#26 18-Dec-2019 14:59:12

LBruneteau
Member
From: Rezé
Registered: 12-Sep-2019
Posts: 33
Website

Re: Défis

Bonjour, j'essaie de faire le défi du poker avec easygui. Je voudrais afficher les images des cartes de ma combinaison. J'ai téléchargé 52 images, et pillow pour les afficher. Je peux les afficher une par une sans souci, mais mon intention est d'avoir les 5 cartes de ma combinaison dans une msgbox. J'ai vu sur stack overflow qu'il est impossible d'afficher plus d'une image avec easygui, et je n'ai rien vu sur la doc, mais mes informations datent de 2014. Peut-être qu'il y a eu une mise à jour. Je ne voudrais pas avoir à utiliser Tkinter pour ce projet. Merci d'avance

Offline

#27 18-Dec-2019 15:58:51

Vader
Administrator
Registered: 05-Oct-2018
Posts: 220

Re: Défis

Bonjour Louis, l'intérêt de ce projet est plus algorithmique que graphique...Il faut construire avec un minimum de code les mains de manière aléatoire. Il ne faut bien sûr pas rentrer à la main 52 cartes mais les faire fabriquer automatiquement. Vous pouvez, si vous tenez à avoir quelque chose d'un peu graphique, utiliser les caractères correspondant aux couleurs via leurs points de code : 9824, 9827, 9829 et 9830.


>>> chr(9827)
'♣'
 

Une fois ces mains aléatoirement produites, un défi assez difficile est de les classer. Ou déjà décider qui a la main la plus forte.

Offline

#28 18-Dec-2019 16:21:56

LBruneteau
Member
From: Rezé
Registered: 12-Sep-2019
Posts: 33
Website

Re: Défis

J'y travaille

Offline

#29 18-Dec-2019 16:32:11

Vader
Administrator
Registered: 05-Oct-2018
Posts: 220

Re: Défis

C'est le principal ! Y arriver sera un plus wink

Offline

#30 18-Dec-2019 17:07:40

Ethan B.G.
Member
From: Rezé
Registered: 16-Sep-2019
Posts: 11
Website

Re: Défis

Pacôme Giraudeau wrote:

J’ai peur que sans le “if”, la fonction ne s’arrête jamais.

Pense que ton while peut prendre en compte plusieurs conditions.
De plus, ton : 

 i == len(tableau)

renvoie un booléen dont tu pourrais te servir pour faire le return.

Voici donc ma proposition qui prend en compte tous mes "conseils" smile :


def touségaux(tableau:list)->bool:
    i = 0
    while i != len(tableau) and tableau[0] == tableau[i]:
        i += 1
    return i == len(tableau)    
 

Last edited by Ethan B.G. (18-Dec-2019 17:10:42)

Offline

#31 18-Dec-2019 18:26:01

LBruneteau
Member
From: Rezé
Registered: 12-Sep-2019
Posts: 33
Website

Re: Défis

https://gitlab.com/LBruneteau/nsi/tree/master/Poker/
Voici mon gitlab. Il y a mon programme de poker dessus. Il est fonctionnel mais quelques fonctionnalités manquent:
-Quand on a une paire ou une double paire le programme ne nous dit pas laquelle
-L'esthétique est à retravailler
-Comparaison entre les mains
-Optimisation générale
-Peut-être un multijoueur pour vraiment jouer au poker

Offline

#32 18-Dec-2019 23:22:25

Vader
Administrator
Registered: 05-Oct-2018
Posts: 220

Re: Défis

Bel effort Louis !! Cela va mériter un travail à long terme, au fur et à mesure de nos explorations. Nous aurons en particulier besoin de fonctions. Vous pourrez revenir dessus et l'améliorer. En tout cas, c'est bien présenté, clair. Point de vue style, essayer d'éviter les cascades de if.

Offline

#33 19-Dec-2019 00:22:23

Pacôme Giraudeau
Member
Registered: 12-Sep-2019
Posts: 67

Re: Défis


"""
-------------------------------------------------------------------------------------------
-------------------------------------PUISSANCE 4 RUNIQUE-------------------------------------------
-------------------------------------------------------------------------------------------
"""

### glossaire unicode ###
#
#     ᛟ = 16DD
#     ᛯ = 16DE
#     ᛰ = 16F0
#
#########################


################################
###   INITIALISATION DU JEU  ###
################################

# Importer easygui
import easygui as eg

# dictionnaire
dico:dict = {0:"ᛰ | ", 1:"ᛯ | ", 2:"ᛟ | "}

# pour utiliser easygui
titre = "Puissance 4 runique"
QJ1 = "Que ᛯ joue"
QJ2 = "Que ᛟ joue"
msg_vic = "Le maître des runes est "

##############################
###  Mise en place du jeu  ###
##############################

L0 = [0, 0, 0, 0, 0, 0, 0]
L1 = [0, 0, 0, 0, 0, 0, 0]
L2 = [0, 0, 0, 0, 0, 0, 0]
L3 = [0, 0, 0, 0, 0, 0, 0]
L4 = [0, 0, 0, 0, 0, 0, 0]
L5 = [0, 0, 0, 0, 0, 0, 0]

# tableau 7x6 (0 = vide, 1 = J1, 2 = J2)
tableau = [L0, L1, L2, L3, L4, L5]

### 42 tours maximum

##############################
###  Mise en forme du msg  ###
##############################

def mise_en_forme(tableau):
    tableau_à_afficher = "1 | 2 | 3 | 4 | 5 | 6 | 7 \n --------------------------- \n"
    for L in range(6):

        for C in range(7):

            case = tableau[L][C]
            conv = dico[case]
            tableau_à_afficher += conv

        tableau_à_afficher += "\n --------------------------- \n"

    return tableau_à_afficher


#######################
### Test 4 alignés  ###
#######################

def test_aligné(tableau, Joueur):

    aligné = 0
    for TestHorizontal in range(7):
        if tableau[y][TestHorizontal] == Joueur:
           aligné += 1
        else:
            aligné = 0
        if aligné == 4:
                eg.msgbox(msg = msg_vic + dico[Joueur], title = titre)
       
    aligné = 0
    for TestVertical in range(6):

        if tableau[TestVertical][x] == Joueur:
            aligné += 1
        else:
            aligné = 0

        if aligné == 4:
            eg.msgbox(msg = msg_vic + dico[Joueur], title = titre)
       

 

######################
###  Début du jeu  ###
######################

for i in range(21):
   
    ########
    tableau_à_afficher = mise_en_forme(tableau)    
    ########


    #################
    ###  TOUR J1  ###
    #################

    joueur = 1

    ### Choix colonne
    x = int(eg.enterbox(msg = tableau_à_afficher + "\n" + QJ1, title = titre, default = ""))-1
    y = 0

    ### Placement jeton
    while y < 5 and tableau[y+1][x] != 2 and tableau[y+1][x] != 1:
   
        y = y + 1

    tableau[y][x] = joueur

    test_aligné(tableau, joueur)
   
   
    ##########
    tableau_à_afficher = mise_en_forme(tableau)
    ##########


    #################
    ###  TOUR J2  ###
    #################

    joueur = 2

    ### Choix colonne
    x = int(eg.enterbox(msg = tableau_à_afficher + "\n" + QJ2, title = titre, default = ""))-1
    y = 0

    ### Placement jeton
    while y < 5 and tableau[y+1][x] != 2 and tableau[y+1][x] != 1:
   
        y = y + 1

    tableau[y][x] = joueur

    test_aligné(tableau, joueur)
 


VOILA MON PUISSANCE 4 POUR DETERMINER LE MEILLEUR MAÎTRE DES RUNES

bon,
Je sens qu'il est pas opti et qu'il y a beaucoup de bricolage.

problème :
- j’ai pas eu le temps de faire  le message pour après 42 tours
- si on met un jeton dans une colonne pleine, je n’ai rien prévu
- je n'ai pas réussi à faire les tests en diagonnal


   aligné = 0
    test_x = x
    test_y = y
    while test_y >= 0 and test_x >= 0:

        if tableau[test_x][test_y] == Joueur:
            aligné += 1
        else:
            aligné = 0

        if aligné == 4:
            eg.msgbox(msg = msg_vic + Joueur, title = titre)


    while test_y <= 5 and test_x <= 6:
        if tableau[test_x][test_y] == Joueur:
            aligné += 1
        else:
            aligné = 0
        if aligné == 4:
           eg.msgbox(msg = msg_vic + Joueur, title = titre)
       
   

    test_x = x
    test_y = y
    while test_y >= 0 and test_x >= 0:
        if tableau[test_x][test_y] == Joueur:
            aligné += 1
        else:
            aligné = 0
        if aligné == 4:
            eg.msgbox(msg = msg_vic + Joueur, title = titre)


    while test_y <= 5 and test_x <= 6:
        if tableau[test_x][test_y] == Joueur:
            aligné += 1
        else:
            aligné = 0
        if aligné == 4:
            eg.msgbox(msg = msg_vic + Joueur, title = titre)

 

j'ai testé ça mais ça bloquait mon script

Je me suis inspiré du poker de Louis, notamment pour le dico

Last edited by Pacôme Giraudeau (19-Dec-2019 08:02:34)

Offline

#34 19-Dec-2019 00:57:19

Vader
Administrator
Registered: 05-Oct-2018
Posts: 220

Re: Défis

Ah, ils sont incorrigibles !! Je n'ai même pas le temps de parler de tableaux, de fonctions, de dictionnaires....Je pensais bien vous donner un puissance 4...mais plus tard ! Effectivement, il faut être habitué aux tableaux avant de se lancer dans un projet ambitieux. On en parle demain car il est quand même minuit ! Ensuite on pourra penser IA, jouer contre la machine, faire jouer des machines entre elles, faire de belles interfaces graphiques, que du bonheur

Offline

#35 08-Jan-2020 18:27:59

Pacôme Giraudeau
Member
Registered: 12-Sep-2019
Posts: 67

Re: Défis

import matplotlib.pyplot as plt

def drapeau(couleur:str)-> None:

    """
    rentre une couleur sous forme de chaîne (noir, rouge, vert, bleu)
    affiche un drapeau en forme de croix blanche sur fond de couleur choisie
    renvoie None
    """

# formation du drapeau sous forme de tableau

    # 5 premières lignes
    image = [ [0 if no_col != 5 else 255 for no_col in range(16)] for no_ligne in range(5) ]    

    # 6 ème ligne
    image.append([ 255 for no_col in range(16) ])  
     
    # 5 dernières lignes
    for no_ligne in range(5):
        image.append([ 0 if no_col != 5 else 255 for no_col in range(16) ])  
   

# choix couleur

    color_choisie = "rouge"
    couleur = "gray" if color_choisie == "noir" else "Reds_r" if color_choisie == "rouge" else "Greens_r" if color_choisie == "vert" else "Blues_r" if color_choisie == "bleu" else "pink_r"


# affichage


    plt.imshow(image, cmap = couleur)
    plt.show()


# fin de la fonction


    return None

 

Offline

#36 08-Jan-2020 19:27:44

Alexandre2602
Member
Registered: 19-Sep-2019
Posts: 5

Re: Défis

Bonsoir, j'ai une question qui pourrait paraître évidente pour certain...
Pourquoi certaines fonctions ont des paramètres mais d'autres pas ?
Merci d'avance.

Offline

#37 08-Jan-2020 20:12:58

Pacôme Giraudeau
Member
Registered: 12-Sep-2019
Posts: 67

Re: Défis

Imagine tu veux une fonction qui affiche juste "bonjour"
Tu peux faire :


def bonjour():
    print("bonjour")
    return None


>>> bonjour()
bonjour
 

Cette fonction a juste besoin d'afficher "bonjour". Peu importe quand tu appelle la fonction, la même action se produira,
Mais si tu veux qu'elle affiche "bonjour" + prénom, il faut un paramètre car ce qui va être affiché peut être différent


def bonjour(prénom):
    print("bonjour ",prénom)
    return None


>>>bonjour("Nicolas")
bonjour Nicolas

>>>bonjour("Pacôme")
bonjour Pacôme
 

ça t'a aidé ?

Last edited by Pacôme Giraudeau (08-Jan-2020 22:24:10)

Offline

#38 08-Jan-2020 22:20:15

Vader
Administrator
Registered: 05-Oct-2018
Posts: 220

Re: Défis

Les enfants, les enfants, un peu d'ordre. Ce n'est pas Messenger. Un forum doit servir à progresser et travailler. On doit pouvoir retrouver les réponses et propositions de chacun. C'est pourquoi chaque fil a un titre et si on veut poser une question sur un autre thème il faut créer un nouveau fil.
Cela vaut pour Pacôme qui doit créer un fil : drapeau coloré
et pour Alexandre qui doit créer un  fil "arguments d'une fonction " par exemple.
Quelques règles simples pour faciliter la compréhension et l'apprentissage.

Offline

#39 08-Jan-2020 22:31:07

Alexandre2602
Member
Registered: 19-Sep-2019
Posts: 5

Re: Défis

Oui merci Pacôme et désolé pour le message messenger

Offline

Board footer

Powered by FluxBB