Jeu vidéo, IA Intelligence Artificielle, Python, Pygame, langage C, langage informatique, Windows, Linux, Mac OS, jeu de société, logique
Le document comprend le code qui permet de développer un jeu vidéo. Le but est de transformer un jeu de société classique en jeu vidéo, en utilisant le langage informatique de son choix parmi Python/Pygame ou C/SDL. Le jeu doit pouvoir tourner sur les trois principaux systèmes d'exploitation : Linux, Windows and Mac OS X.
[...] if len(list_plat)>20 : ecran_final(screen, background, "Trop de grilles enregistrees \ Veuillez faire de l'ordre dans le dossier \"data/plat\"", sounds) butdict={} compt=0 nom = #on rajoute un bouton pour chaque fichier for pl in list_plat: #position du bouton pos = ((compt % * 250 + 325, ((compt/4)+3) * height/10) butdict[pl]=Button( pos, pl ( #on initialise activ_buttons.add(butdict[pl]) #on active compt = compt + 1 #on incremente le compteur #boucle principale while going: pygame.time.wait(60) #on gere les evenements for event in pygame.event.get(): #cas ou l'on quitte if event.type QUIT: going = False quit = True break elif event.type KEYDOWN and event.key K_ESCAPE: going = False quit = True break #cas d'un clic elif event.type MOUSEBUTTONDOWN: mousepos = pygame.mouse.get_pos() #on gere selon le bouton if butok.rect.collidepoint(mousepos) and nom = sounds["select"].play() going = False if butquit.rect.collidepoint(mousepos): sounds["select"].play() going = False quit = True if butmenu.rect.collidepoint(mousepos): sounds["select"].play() going = False #cas de la suppression. [...]
[...] "scarab" : "pharaon" : 100, "anubis" : "sphynx" : "pyramide" : : } #donne le score du plateau, positif pour joueur 1 def score(plat): score = 0 for x in range(10): for y in range(8): piece = plat.cases[x][y].piece score : : : 0}[piece.player] * sc[piece.typ] return score #fonction min de l'algo minmax #on met a False le dernier argument pour rotate, swap, et laser, pour desactiver #les effets visuels (et en particulier les attentes). [...]
[...] #renvoit l'orientation de sortie, et un booleen qui renseigne si l'on doit #ou non continuer def fire(self, ori_laser, sndk, snda, vis): typ=self.piece.typ pos=self.piece.pos ori=self.piece.ori nori_laser=op[ori_laser] #on inverse l'orientation du laser (on est dans la nouvelle case) if vis: #on ajoute cette orientation aux orientations a dessiner self.laser.append(nori_laser) #si on tue une piece if nori_laser in self.piece.dos : if vis: #on joue le bruitage correpondant sndk.play() gr=self.piece.groups() self.piece.kill() self.piece=Piece('0', pos, return nori_laser, False #si l'on est absorbe par un anubis ou un sphynx if typ=='anubis' or typ=='sphynx': if vis: snda.play() return nori_laser, False #si la case est vide if nori_laser = op[nori_laser] #si la case est un miroir: if typ=='pyramide' or typ=='scarab': if ori in nori_laser=ns_mir[nori_laser] else : nori_laser=eo_mir[nori_laser] #on rajoute la nouvelle orientation aux orientations a dessiner if vis: self.laser.append(nori_laser) return nori_laser, True #classe pour une piece class Piece(pygame.sprite.Sprite): #methode d'initialisation def __init__(self, player, pos, typ, ori): pygame.sprite.Sprite.__init__(self) self.image, self.rect = load_image("img/" + typ + player + ".png", self.rect.topleft = 100*pos[0], 100*pos[1] self.pos=pos self.ori=ori self.typ=typ self.player=player #on intialise le dos de la piece self.dos=[] if typ "pharaon" : self.dos=['N', elif typ "anubis" : self.dos=[cw[ori], op[ori], ccw[ori]] elif typ "pyramide" : self.dos=[ccw[ori], op[ori]] #on fait tourner l'image selon l'orientation self.image=pygame.transform.rotate(self.image, deg[self.ori]) #methode qui effectue une rotation dans le sens precise def rotate(self, sens, snd, vis=1): if vis: snd.play() degr={ : 270, 'ccw' : 90, } #on modifie l'image if vis: self.image = pygame.transform.rotate(self.image, degr[sens]) #on change l'orientation if sens self.ori = cw[self.ori] else : self.ori = ccw[self.ori] #on modifie le dos de la piece ndos=[] for d in self.dos: if sens : ndos.append(cw[d]) else : ndos.append(ccw[d]) self.dos=ndos #classe qui gere les boutons du jeu class Button(pygame.sprite.Sprite): def __init__(self, height, ratio, center, msg, fontsize, color): pygame.sprite.Sprite.__init__(self) self.ratio=ratio #ratio largeur / hauteur voulu parmis 1,2,4,5 #on charge toutes les images des le debut self.imageb, r = load_image("img/but" + str(ratio) + "b.png") self.imageg, r = load_image("img/but" + str(ratio) + ".png") self.imagev, r = load_image("img/but" + str(ratio) + "v.png") self.size = (ratio * height, height) #taille du bouton #on scale les images a la bonne taille self.imageg = pygame.transform.scale(self.imageg, self.size) self.imageb = pygame.transform.scale(self.imageb, self.size) self.imagev = pygame.transform.scale(self.imagev, self.size) r = self.imageg.get_rect() self.rect = Rect((0,0), self.size) self.rect.center=center self.fontsize = fontsize self.color = color #on initialise le texte et sa position font = pygame.font.Font(None, fontsize) text = font.render(msg color) textpos = text.get_rect(center = r.center) #on affiche le texte sur les trois images for img in [self.imageg, self.imagev, self.imageb]: img.blit(text, textpos) self.bleu=0 self.vert=0 #l'image n'est pas bleue ni verte self.image = self.imageg.copy() #initialement le bouton est gris #methode update servant a bleuer au passage de la souris def update(self): mousepos=pygame.mouse.get_pos() #si la souris est sur le bouton et que le bouton n'est pas bleu : on bleuit if self.rect.collidepoint(mousepos) and not self.bleu: self.bleu=1 self.image = self.imageb.copy() #si la souris est ailleurs et que le bouton est bleu : on debleuit elif self.bleu and not self.rect.collidepoint(mousepos) : self.bleu=0 if self.vert : self.image = self.imagev.copy() else: self.image = self.imageg.copy() #methode qui rend le bouton vert def verdis(self): self.vert = 1 self.image = self.imagev.copy() #methode qui rerend le bouton gris def deverdis(self): self.vert = 0 self.image = self.imageg.copy() FICHIER “khetGUI.py” : FICHIER PRINCIPAL import os, sys import pygame from pygame.locals import * import copy from classes import * import ia import random #fonction pour jouer une partie de 1 contre 1 sur le plateau passe en entree. [...]
[...] On fait attention a ne pas le faire si la #case est deja grisee . [...]
[...] On reinitialise une piece pour faire disparaitre #les fleches vertes def deselect(self): self.selectionnee=0 #on enregistre les attributs et les groupes de la piece player = self.piece.player ori = self.piece.ori typ = self.piece.typ pos = self.piece.pos gr=self.piece.groups() #on tue la piece self.piece.kill() #on initialize une nouvelle piece avec les memes attributs et on l'ajoute aux groupes self.piece = Piece(player, pos, typ, ori) self.piece.add(gr) #methode qui fait arriver le laser en provenance de l'orientation donnee. [...]
Source aux normes APA
Pour votre bibliographieLecture en ligne
avec notre liseuse dédiée !Contenu vérifié
par notre comité de lecture