Jeu de cartes avec Pygame: comment afficher les cartes
gai_maito
Messages postés
6
Statut
Membre
-
yg_be Messages postés 24281 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 24281 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je suis en train de programmer un jeu de cartes avec PYGAME. Je suis arrivé au point où quand je pioche(en cliquant sur l'image), je dois afficher les cartes une-à-une sauf que mon programme affiche directement toutes les cartes.
Quelqu'un pourrait me proposer une solution?
Merci d'avance

Je suis en train de programmer un jeu de cartes avec PYGAME. Je suis arrivé au point où quand je pioche(en cliquant sur l'image), je dois afficher les cartes une-à-une sauf que mon programme affiche directement toutes les cartes.
Quelqu'un pourrait me proposer une solution?
Merci d'avance


Configuration: Windows / Chrome 100.0.4896.88
A voir également:
- Jeu de cartes avec Pygame: comment afficher les cartes
- 94 jeu - Télécharger - Puzzle & Réflexion
- 94 degrés jeu - Télécharger - Divers Jeux
- Whatsapp avec 2 cartes sim - Guide
- Jeu zuma - Télécharger - Jeux vidéo
- Jeu logo - Télécharger - Jeux vidéo
2 réponses
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
bonjour,
peux-tu partager ton code en utilisant les balises de code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code ?
peux-tu partager ton code en utilisant les balises de code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code ?
OK mais tu n'as pas mis les balises de code comme expliqué dans le lien donne par yg_be ...
import pygame
from random import shuffle
from test import init_pioche_fichier
from test import pioche_liste
pygame.init()
pygame.display.set_caption("Alliance des réussites")
screen = pygame.display.set_mode((1095, 720))
background = pygame.image.load('assets1/bg.jpg')
background = pygame.transform.scale(background,(2000,720))
clock = pygame.time.Clock()
class Carte(pygame.sprite.Sprite):
def __init__(self, value, color, pos_x, pos_y) -> None:
super().__init__()
self.color = color
self.value = value
self.image = pygame.image.load(f"assets1/cartes/carte-{value}-{color}.png")
self.image = pygame.transform.scale(self.image,(72,96))
self.rect = self.image.get_rect()
self.rect.x = 15
self.rect.y = 15
self.pos_x = pos_x
self.pos_y= pos_y
self.velocity = 3
self.clicked = False
self.Isvisible = True
def draw_card(self,screen):
if(self.rect.x < self.pos_x):
self.rect.x += self.velocity
if(self.rect.y < self.pos_y):
self.rect.y += self.velocity
screen.blit(self.image, (self.rect.x,self.rect.y))
def set_visible(self, bVisible):
if bVisible == False:
self.image = pygame.image.load("assets1/cartes/carte-dos-dos.png")
self.image = pygame.transform.scale(self.image,(72,96))
def compare(self, other):
info1 = self.value, self.color
info2 = other.value, other.color
a, b = False, False
if info1[0] == info2[0]:
a = True
if info1[1] == info2[1]:
b = True
return(a or b) #soit même valeur soit même couleur
def init_liste_Card(self):
liste = []
i = 0
while(i < len(game.card_infos)):
carte = Carte(game.card_infos[i]['valeur'],game.card_infos[i]['couleur'], 15, 15)
liste.append(carte)
i += 1
return liste
def battre(self, liste):
shuffle(liste)
class Game:
def __init__(self, mode) -> None:
self.mode = mode
self.card_infos = init_pioche_fichier(f"jeu-{mode}.txt") #une fonction qui lit dans un fichier contenant les valeurs des cartes
pioche = Carte('dos','dos',15,15)
game = Game(32)
def init_liste_Card_Pos(pos_X = 15, pos_Y = 200): #au départ la 1ere carte est en bas de la pioche
liste_card = []
i, j = 0, 0
while(i < len(game.card_infos)):
if (pos_X + 72) < (screen.get_width()-87): #87 = bordure fin + une carte
pos_X = 15+90*j
carte = Carte(game.card_infos[i]['valeur'],game.card_infos[i]['couleur'],pos_X, pos_Y)
liste_card.append(carte)
j += 1
else:
pos_X = 15
pos_Y += 115
j = 0
i -= 1
i +=1
return liste_card
list_pioche_Pos = init_liste_Card_Pos() #liste cartes deja en positions differentes
carte = Carte('dos','dos', 15, 15)
list_pioche_Stable = carte.init_liste_Card()
jeu = [] #jeu vide qu'on va contenir au fur et à mesure les cartes piochées
def affiche():
screen.blit(background, (0, 0))
pioche.draw_card(screen)
index_card_afficher = 0
#!!!C'est ici que je dois implémenter l'affichage des cartes une-à-une!!!!#
if pioche.clicked == True and len(list_pioche_Stable) != 0:
pioche_liste(jeu, list_pioche_Stable) #pioche dans la liste_pioche la met dans jeu et efface dans liste_pioche
index_card_afficher = len(jeu) - 1 #toujours vouloir afficher la dernière carte prise
jeu[index_card_afficher].draw_card(screen) #carte pioché affichée
#!!!Et c'est ici qu'il y a un problème!!!#
pygame.display.flip()
# _______________________BUTTON__________________________#
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
pygame.quit()
if event.type == pygame.MOUSEBUTTONDOWN:
if pioche.rect.collidepoint(event.pos):
if pygame.mouse.get_pressed()[0] == 1:
pioche.clicked = True
elif pygame.mouse.get_pressed()[0] == 0:
pioche.clicked = False
def main():
running = True
while running:
affiche()
clock.tick(30)
if __name__ == '__main__':
main()
J'ai un peu modifié mais ça ne marche pas, mais c'est le code intégral