Inscrit le: 21 Fév 2007, 01:00 Messages: 39 Points d'aide: 0/60
Créations :
Voir ses créations
|
J'ai fait une petite mise à jour de ce script : Les nouveautés :[list] - Graphisme entièrement personnalisable - Possibilité de mettre du son - Animation quand une ligne est détruite - Animation en fin de partie [/list:u] Voilà le script : - Code: Tout sélectionner
#======================================================================= #TETRIS #version 1.2 #Créé par phacog le 02/10/07 #----------------------------------------------------------------------------------------------------
#Dans un evenement, faire "inserer un script" et taper : #Pour lancer le jeu #Tetris.start(niveau) #remplacer niveau par le niveau auquel le jeu commence (1 par défaut) #----------------------------------------------------------------------------------------------------
#Pour recuperer le score dans une variable : #Tetris.score_to_var(num) #En replaçant num par le numéro de la variable #De même pour récuperer le nombre de ligne détruite ou le niveau atteint : #Tetris.ligne_to_var(num) #ou #Tetris.niveau_to_var(num) #=======================================================================
module Tetris #Le fond d'écran : remplacer nil par le nom du fichier sans l'extension ( doit se trouver dans le #dossier Pictures). FOND_ECRAN = nil #L'image utilisé pour définir les graphismes des briques : elle doit être de dimension 21 sur 168 #Les 7 premiers carré de 21 sur 21 définissent les graphismes des 7 pieces du jeu. #Le dernier carré de 21 sur 21 définit les graphisme du "puit". #Remplacer nil par le nom de l'image sans l'extension (doit se trouver dans le dossier picture) BRIQUES = nil #Les différents sons utilisé dans le jeu #Remplacer nil par le nom du fichier sans l'extension #MUSQUE doit se trouver dans le dossier BGM #Les autres sons doivent se trouver dans le dossier SE MUSIQUE = nil SON_DEPLACE = nil SON_ROTATION = nil SON_POSE = nil SON_LIGNE = nil #Changer les deux premieres coordonnés pour déplacer les différents éléments du jeu ECRAN_JEU = Viewport.new(52, 0, 210, 462) ECRAN_PIECE = Rect.new(400, 80, 116, 116) ECRAN_SCORE = Rect.new(360, 220, 200, 122) #====================================================================== #Définitions des différentes pieces avec leurs couleurs #====================================================================== PIECES = [[[false, false, false, false], [false, true, true, false], [false, true, true, false], [false, false, false, false]], [[false, true, false, false], [false, true,false, false], [false, true, false, false], [false, true, false, false]], [[false, false, false, false], [false, true, false, false], [true, true, true, false], [false, false, false, false]], [[false, false, false, false], [false, true,true, false], [true, true, false, false], [false, false, false, false]], [[false, false, false, false], [false, true,true, false], [false, false, true, true], [false, false, false, false]], [[false, false, false, false], [false, false,true, false], [true, true, true, false], [false, false, false, false]], [[false, false, false, false], [true, false,false, false], [true, true, true, false], [false, false, false, false]]]
if BRIQUES != nil @image_briques = RPG::Cache.picture(BRIQUES) else @image_briques = Bitmap.new(21, 21 * 8) colors = [Color.new(0, 0, 255), Color.new(255, 0, 0), Color.new(255, 85, 0), Color.new(0, 255, 0), Color.new(255, 0, 255), Color.new(255, 255, 0), Color.new(255, 255, 255)] for i in 0..6 @image_briques.fill_rect(0, i * 21, 21, 21, Color.new(0, 255, 255)) @image_briques.fill_rect(1, i * 21 + 1 , 19, 19, colors[i]) end @image_briques.fill_rect(0, 147, 21, 21, Color.new(136, 92, 189)) @image_briques.fill_rect(1, 148 , 19, 19, Color.new(67, 210, 154)) end #======================================================================= #Demarre le jeu #======================================================================= def Tetris.start(n = 1) @score = 0 @ligne = 0 @niveau = 0 $scene = Scene_Jeu.new(n) end def Tetris.briques return @image_briques end #======================================================================= #Score, nombre de lignes détruites et niveau #======================================================================= def Tetris.score(s = 0) @score += s return @score end def Tetris.score_to_var(n) $game_variables[n] = @score end def Tetris.ligne(l = 0) @ligne += l return @ligne end def Tetris.ligne_to_var(n) $game_variables[n] = @ligne end def Tetris.niveau(n = 0) @niveau += n return @niveau end def Tetris.niveau_to_var(n) $game_variables[n] = @niveau end #======================================================================
#======================================================================= #PIECE #======================================================================= class Piece < Sprite attr_reader :matrice def initialize super(ECRAN_JEU) @id = rand(7) @matrice = PIECES[@id] self.bitmap = Bitmap.new(84, 84) self.y = 0 self.x = 42 @undo = proc {self.visible = false} refresh end def refresh self.bitmap.clear 4.times do |i| 4.times do |j| if @matrice[j][i] rect = Rect.new(0, 21 * @id, 21, 21) self.bitmap.blt(21 * i, 21*j, Tetris.briques, rect) end end end end def move_left @undo = proc {move_right} self.x -= 21 end def move_right @undo = proc {move_left} self.x += 21 end def rotate_right @undo = proc {rotate_left} piece = [[],[],[],[]] 4.times do |i| 4.times do |j| piece[i][j] = @matrice[3 - j][i] end end @matrice = piece refresh end def rotate_left @undo = proc {rotate_right} piece = [[],[],[],[]] 4.times do |i| 4.times do |j| piece[i][j] = @matrice[j][3 - i] end end @matrice = piece refresh end def move @undo = proc {self.y -= 21} self.y += 21 end def undo @undo.call end end
#======================================================================= #Affichage du score #======================================================================= class Score < Window_Base def initialize super(ECRAN_SCORE.x, ECRAN_SCORE.y, ECRAN_SCORE.width, ECRAN_SCORE.height) self.contents = Bitmap.new(self.width - 32, self.height - 32) self.contents.font = Font.new($fontface , 24) self.contents.font.color = Color.new(255, 255, 0) self.opacity = 180 self.z = 2 refresh end def refresh self.contents.clear self.contents.draw_text(0, 0, 200, 30, "Niveau : #{Tetris.niveau}") self.contents.draw_text(0, 30, 200, 30, "Lignes : #{Tetris.ligne}") self.contents.draw_text(0, 60, 200, 30, "Score : #{Tetris.score}") end def niveau(l) Tetris.niveau(1) if Tetris.ligne / 10 != Tetris.ligne(l) / 10 Tetris.score(10 * l * (l + 1) / 2) refresh end end #====================================================================== #fenetre pour afficher la piece suivante #====================================================================== class Window_Piece < Window_Base def initialize super(ECRAN_PIECE.x, ECRAN_PIECE.y, ECRAN_PIECE.width, ECRAN_PIECE.height) self.opacity = 180 self.z = 2 end end #======================================================================= #Fenetre de fin du jeu #======================================================================= class Window_Fin < Window_Base def initialize super(150, 100, 300, 100) self.contents = Bitmap.new(self.width - 32, self.height - 32) self.contents.font = Font.new($fontface, 40) self.contents.font.color = Color.new(255, 255, 0) self.z = 10 refresh end def refresh self.contents.clear self.contents.draw_text(0, 14, self.width - 32, 40, "Score : #{Tetris.score}", 1) end end
|
|