[Python-apps-commits] r2374 - in packages/freealchemist (23 files)
dfiloni-guest at users.alioth.debian.org
dfiloni-guest at users.alioth.debian.org
Sun Feb 15 13:11:49 UTC 2009
Date: Sunday, February 15, 2009 @ 13:11:49
Author: dfiloni-guest
Revision: 2374
[svn-inject] Installing original source of freealchemist
Added:
packages/freealchemist/branches/
packages/freealchemist/branches/upstream/
packages/freealchemist/branches/upstream/current/
packages/freealchemist/branches/upstream/current/LICENSE
packages/freealchemist/branches/upstream/current/freealchemist.py
packages/freealchemist/branches/upstream/current/media/
packages/freealchemist/branches/upstream/current/media/background.png
packages/freealchemist/branches/upstream/current/media/gameover.png
packages/freealchemist/branches/upstream/current/media/p1.png
packages/freealchemist/branches/upstream/current/media/p10.png
packages/freealchemist/branches/upstream/current/media/p11.png
packages/freealchemist/branches/upstream/current/media/p12.png
packages/freealchemist/branches/upstream/current/media/p14.png
packages/freealchemist/branches/upstream/current/media/p15.png
packages/freealchemist/branches/upstream/current/media/p16.png
packages/freealchemist/branches/upstream/current/media/p2.png
packages/freealchemist/branches/upstream/current/media/p3.png
packages/freealchemist/branches/upstream/current/media/p4.png
packages/freealchemist/branches/upstream/current/media/p5.png
packages/freealchemist/branches/upstream/current/media/p6.png
packages/freealchemist/branches/upstream/current/media/p7.png
packages/freealchemist/branches/upstream/current/media/p8.png
packages/freealchemist/branches/upstream/current/media/p9.png
Added: packages/freealchemist/branches/upstream/current/LICENSE
===================================================================
--- packages/freealchemist/branches/upstream/current/LICENSE (rev 0)
+++ packages/freealchemist/branches/upstream/current/LICENSE 2009-02-15 13:11:49 UTC (rev 2374)
@@ -0,0 +1,16 @@
+Copyright (C) 2008 Dak
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
+
Added: packages/freealchemist/branches/upstream/current/freealchemist.py
===================================================================
--- packages/freealchemist/branches/upstream/current/freealchemist.py (rev 0)
+++ packages/freealchemist/branches/upstream/current/freealchemist.py 2009-02-15 13:11:49 UTC (rev 2374)
@@ -0,0 +1,386 @@
+#!/usr/bin/python
+# FreeAlchemist (by Dak [dak.linux at gmail.com])
+"""
+Copyright (C) 2008 Dak
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
+"""
+
+__author__ = "Dak"
+__email__ = "dak.linux at gmail.com"
+__program__ = "FreeAlchemist"
+__version__ = "0.4"
+__copyright__ = "Copyright (c) 2008 Dak"
+__license__ = "GPL"
+__sleep__ = 0.1
+
+import pygame
+from pygame.locals import *
+import time
+import sys
+import random
+
+class freealchemist:
+ def __init__(self):
+ self.grid = []
+ self.nextblock = []
+ self.blockgrid = []
+ self.blockpos = None
+ self.points = None
+ self.lim = None
+ self.totalpoints = 0
+ self.mov = None
+ self.over = None
+ self.fail = None
+ self.time = None
+
+
+ # Per quanto riguarda pygame
+ pygame.init()
+ pygame.font.init()
+ self.screen = pygame.display.set_mode((446, 435))
+ pygame.display.set_caption(__program__+" "+__version__)
+ pygame.mouse.set_visible(0)
+
+ self.font = pygame.font.Font(None, 24)
+ self.background = pygame.image.load("media/background.png").convert()
+ self.gameover = pygame.image.load("media/gameover.png")
+ self.p = [None]*16
+ self.p[0] = pygame.image.load("media/p1.png") #20
+ self.p[1] = pygame.image.load("media/p2.png") #40
+ self.p[2] = pygame.image.load("media/p3.png") #70
+ self.p[3] = pygame.image.load("media/p4.png") #110
+ self.p[4] = pygame.image.load("media/p5.png") #150
+ self.p[5] = pygame.image.load("media/p6.png") #200
+ self.p[6] = pygame.image.load("media/p7.png") #260
+ self.p[7] = pygame.image.load("media/p8.png") #330
+ self.p[8] = pygame.image.load("media/p9.png") #410
+ self.p[9] = pygame.image.load("media/p10.png") #500
+ self.p[10] = pygame.image.load("media/p11.png") #600
+ self.p[11] = pygame.image.load("media/p12.png") #1000
+ self.p[13] = pygame.image.load("media/p14.png") #
+ self.p[14] = pygame.image.load("media/p15.png") #
+ self.p[15] = pygame.image.load("media/p16.png") #
+
+ self.s = [None]*5
+ #self.s[0] = pygame.mixer.Sound("explode.wav")
+
+
+ def newGame(self):
+ print "[*] New Game"
+
+ self.lim = 3
+ self.over = False
+ self.mov = False
+ self.fail = 0
+ self.time = 0.0
+
+ # Svuota i punti
+ self.points = 0
+
+ # Riempie la griglia
+ self.grid = []
+
+ for x in xrange(10):
+ line = []
+ for y in xrange(8):
+ line.append(0)
+ self.grid.append(line)
+
+
+ # Riempie la box dei block
+ self.blockgrid = []
+ self.nextblock = [[random.randint(1,self.lim),random.randint(1,self.lim)],[0,0]]
+ self.blockpos = 0
+
+ for x in xrange(2):
+ line = [0,0]
+ self.blockgrid.append(line)
+
+
+ def genBlock(self):
+ self.blockgrid = self.nextblock
+
+ if random.randint(1,30) == 25:
+ self.nextblock = [[random.randint(14,16),random.randint(1,self.lim)],[0,0]]
+ else:
+ self.nextblock = [[random.randint(1,self.lim),random.randint(1,self.lim)],[0,0]]
+
+
+
+ def updateGame(self):
+ # Controlla se ci son spazi vuoti da riempire
+ md = False
+ for x in xrange(len(self.grid)-1,0,-1):
+ for y in xrange(0, len(self.grid[0])):
+ s = 0
+ for a in xrange(len(self.grid)): s += self.grid[a][y]
+
+ if self.grid[x][y] == 0 and s > 0:
+ for a in xrange(x, 0, -1):
+ if self.grid[a-1][y] != 0:
+ self.grid[a][y] = self.grid[a-1][y]
+ self.grid[a-1][y] = 0
+ md = True
+ self.mov = md
+
+ # Controlliamo se possiamo far esplodere qualcosa :P
+ if not self.mov:
+ for x in xrange(-1,len(self.grid)-1):
+ for y in xrange(-1,len(self.grid[0])-1):
+ # La pressa
+ if self.grid[x][y] == 15 and x == len(self.grid)-2:
+ self.grid[len(self.grid)-2][y] = 0
+ self.grid[len(self.grid)-1][y] = 0
+
+ elif self.grid[x][y] == 15:
+ if x < len(self.grid)-1:
+ self.grid[x][y] = 0
+ self.grid[x+1][y] = 15
+
+ # Bomba 1
+ elif self.grid[x][y] == 14:
+ self.grid[x][y] = 0
+ if y-1 != -1: self.grid[x][y-1] = 0
+ if y+1 < len(self.grid[0]): self.grid[x][y+1] = 0
+ if x+1 < len(self.grid): self.grid[x+1][y] = 0
+ if x-1 != -1: self.grid[x-1][y] = 0
+
+ # Bomba 2
+ elif self.grid[x][y] == 16:
+ self.grid[x][y] = 0
+ if y-1 != -1: self.grid[x][y-1] = 0
+ if y+1 < len(self.grid[0]): self.grid[x][y+1] = 0
+ if x+1 < len(self.grid): self.grid[x+1][y] = 0
+ if x-1 != -1: self.grid[x-1][y] = 0
+ if y-1 != -1 and x-1 != -1: self.grid[x-1][y-1] = 0
+ if y+1 < len(self.grid[0]) and x+1 < len(self.grid): self.grid[x+1][y+1] = 0
+ if x+1 < len(self.grid) and y-1 != -1: self.grid[x+1][y-1] = 0
+ if x-1 != -1 and y+1 < len(self.grid[0]): self.grid[x-1][y+1] = 0
+ if y-2 != -2: self.grid[x][y-2] = 0
+ if y+2 < len(self.grid[0]): self.grid[x][y+2] = 0
+ if x+2 < len(self.grid): self.grid[x+2][y] = 0
+ if x-2 != -2: self.grid[x-2][y] = 0
+
+
+ # Normale
+ elif self.grid[x][y] != 0 and self.grid[x][y] < 13:
+ t = self.grid[x][y]
+ if (self.grid[x][y+1] == t and self.grid[x][y-1] == t) or (self.grid[x+1][y] == t and self.grid[x-1][y] == t) or (self.grid[x+1][y] == t and self.grid[x][y+1] == t) or (self.grid[x-1][y] == t and self.grid[x][y-1] == t) or (self.grid[x-1][y] == t and self.grid[x][y+1] == t) or (self.grid[x+1][y] == t and self.grid[x][y-1] == t):
+ if self.grid[x][y] < 12: self.grid[x][y] += 1
+ else: self.grid[x][y] = 0
+ if self.grid[x][y+1] == t: self.grid[x][y+1] = 0
+ if self.grid[x][y-1] == t: self.grid[x][y-1] = 0
+ if self.grid[x+1][y] == t: self.grid[x+1][y] = 0
+ if self.grid[x-1][y] == t: self.grid[x-1][y] = 0
+ self.points += (t*10)+t*t
+
+ if t-1 > self.lim and t-1 < 13: self.lim += 1
+
+ if self.points % 2 != 0: self.points += 1
+
+
+
+
+
+ # Se ci son cubetti nelle prime due righe, game over
+ if not self.mov:
+ if sum(self.grid[0]) > 0: self.fail += 1
+ elif sum(self.grid[1]) > 0: self.fail += 1
+ else: self.fail = 0
+ if self.fail > 2: self.over = True
+
+
+
+ def renderGame(self):
+ self.screen.fill([0, 0, 0])
+ self.screen.blit(self.background, (0, 0))
+
+
+ # Renderizza il punteggio
+ text = self.font.render(str(self.points), 1, (255, 255, 255))
+ self.screen.blit(text, (15,50))
+
+ text = self.font.render(str(int(self.time)/60)+" min", 1, (255, 255, 255))
+ self.screen.blit(text, (15,25))
+
+
+
+ # Renderizza i nexblock
+ self.screen.blit(self.p[self.nextblock[0][0]-1], ((10),(77)))
+ self.screen.blit(self.p[self.nextblock[0][1]-1], ((46),(77)))
+
+ # Renderizza i block correnti
+ if self.blockgrid[0][0] != -1:
+ if self.blockgrid[0][0] != 0: self.screen.blit(self.p[self.blockgrid[0][0]-1], ((106+40*self.blockpos),(7)))
+ if self.blockgrid[0][1] != 0: self.screen.blit(self.p[self.blockgrid[0][1]-1], ((106+40+40*self.blockpos),(7)))
+ if self.blockgrid[1][0] != 0: self.screen.blit(self.p[self.blockgrid[1][0]-1], ((106+40*self.blockpos),(7+40)))
+ if self.blockgrid[1][1] != 0: self.screen.blit(self.p[self.blockgrid[1][1]-1], ((106+40+40*self.blockpos),(7+40)))
+
+
+ # Renderizza tutta la griglia
+ for x in xrange(len(self.grid)):
+ for y in xrange(len(self.grid[0])):
+ if self.grid[x][y] != 0:
+ self.screen.blit(self.p[self.grid[x][y]-1], ((106+y*40),(25+x*40)))
+
+ pygame.display.update()
+ #pygame.time.delay(100)
+
+ def exitGame(self):
+ print "[*] Exit"
+ sys.exit()
+
+
+
+ def keyInputs(self):
+ for event in pygame.event.get():
+ if event.type == QUIT:
+ self.exitGame()
+
+ elif event.type == KEYDOWN:
+ if not self.mov:
+ if event.key == K_UP:
+ old = self.blockgrid[0] + self.blockgrid[1]
+ self.blockgrid = [[old[2],old[0]],[old[3],old[1]]]
+
+ elif event.key == K_DOWN:
+ old = self.blockgrid[0] + self.blockgrid[1]
+ self.blockgrid = [[old[1],old[3]],[old[0],old[2]]]
+
+ elif event.key == K_RIGHT:
+ if self.blockpos < 6: self.blockpos += 1
+
+ elif event.key == K_LEFT:
+ if self.blockpos > 0: self.blockpos -= 1
+
+ elif event.key == K_SPACE:
+ self.mov = True
+ self.points += 10
+ self.grid[0][self.blockpos] = self.blockgrid[0][0]
+ self.grid[0][self.blockpos+1] = self.blockgrid[0][1]
+ self.grid[1][self.blockpos] = self.blockgrid[1][0]
+ self.grid[1][self.blockpos+1] = self.blockgrid[1][1]
+ self.blockgrid[0][0] = -1
+
+ if event.key == K_PAUSE or event.key == K_ESCAPE or event.key == K_p:
+ print "[*] Pause"
+ pause = 1
+
+ self.screen.blit(self.gameover, (0, 0))
+ self.screen.blit(pygame.font.Font(None, 36).render("Pause", 1, (255, 255, 255)), (20,20))
+ self.screen.blit(pygame.font.Font(None, 24).render("Press any key", 1, (255, 255, 255)), (416-120,400-20))
+ pygame.display.update()
+
+ while pause:
+ for event in pygame.event.get():
+ if event.type == QUIT:
+ self.exitGame()
+
+ elif event.type == KEYDOWN:
+ pause = 0
+ time.sleep(__sleep__)
+
+
+
+
+
+
+
+ def start(self):
+ # Presentazione iniziale
+ intro = 0
+ print "[*] FreeAlchemist"
+
+ self.screen.blit(self.background, (0, 0))
+ self.screen.blit(self.gameover, (0, 0))
+ self.screen.blit(pygame.font.Font(None, 36).render(__program__+" "+__version__, 1, (255, 255, 255)), (20,20))
+
+ self.screen.blit(self.p[0], (40, 50))
+ self.screen.blit(self.p[1], (88, 50))
+ self.screen.blit(self.p[2], (88+48, 50))
+ self.screen.blit(self.p[3], (88+88, 50))
+ self.screen.blit(self.p[4], (88*2+48, 50))
+ self.screen.blit(self.p[5], (88*3, 50))
+ self.screen.blit(self.p[6], (40, 100))
+ self.screen.blit(self.p[7], (88, 100))
+ self.screen.blit(self.p[8], (88+48, 100))
+ self.screen.blit(self.p[9], (88+88, 100))
+ self.screen.blit(self.p[10], (88*2+48, 100))
+ self.screen.blit(self.p[11], (88*3, 100))
+ self.screen.blit(self.p[13], (40, 150))
+ self.screen.blit(self.p[14], (88, 150))
+ self.screen.blit(self.p[15], (88+48, 150))
+
+
+ self.screen.blit(pygame.font.Font(None, 24).render("Press any key", 1, (255, 255, 255)), (416-120,400-20))
+ self.screen.blit(pygame.font.Font(None, 22).render("Coded by "+__author__+" under "+__license__+" license", 1, (255, 255, 255)), (48,220))
+ self.screen.blit(pygame.font.Font(None, 22).render("http://pygame.org "+__email__, 1, (255, 255, 255)), (48,240))
+
+ pygame.display.update()
+
+ while not intro:
+ for event in pygame.event.get():
+ if event.type == QUIT:
+ self.exitGame()
+
+ elif event.type == KEYDOWN:
+ intro = 1
+ time.sleep(__sleep__)
+
+
+ # Finche' il pc e' acceso rigioca
+ while 1:
+ # Azzera tutto
+ self.newGame()
+ self.genBlock()
+ self.renderGame()
+
+
+ # Loop di rendering
+ while not self.over:
+ self.updateGame()
+ if self.blockgrid[0][0] == -1: self.genBlock()
+ self.keyInputs()
+ self.renderGame()
+ time.sleep(__sleep__)
+ self.time += __sleep__
+
+
+
+ # Finito il gioco, visualizza il punteggio e attende
+ restart = 0
+ print "[*] Game Over"
+
+ self.screen.blit(self.gameover, (0, 0))
+ self.screen.blit(pygame.font.Font(None, 36).render("Game Over!", 1, (255, 255, 255)), (20,20))
+ self.screen.blit(pygame.font.Font(None, 24).render("Press any key", 1, (255, 255, 255)), (416-120,400-20))
+
+ pygame.display.update()
+
+ while not restart:
+ for event in pygame.event.get():
+ if event.type == QUIT:
+ self.exitGame()
+
+ elif event.type == KEYDOWN:
+ restart = 1
+ time.sleep(__sleep__)
+
+if __name__ == "__main__":
+ game = freealchemist()
+ game.start()
+
+
Added: packages/freealchemist/branches/upstream/current/media/background.png
===================================================================
(Binary files differ)
Property changes on: packages/freealchemist/branches/upstream/current/media/background.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/freealchemist/branches/upstream/current/media/gameover.png
===================================================================
(Binary files differ)
Property changes on: packages/freealchemist/branches/upstream/current/media/gameover.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/freealchemist/branches/upstream/current/media/p1.png
===================================================================
(Binary files differ)
Property changes on: packages/freealchemist/branches/upstream/current/media/p1.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/freealchemist/branches/upstream/current/media/p10.png
===================================================================
(Binary files differ)
Property changes on: packages/freealchemist/branches/upstream/current/media/p10.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/freealchemist/branches/upstream/current/media/p11.png
===================================================================
(Binary files differ)
Property changes on: packages/freealchemist/branches/upstream/current/media/p11.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/freealchemist/branches/upstream/current/media/p12.png
===================================================================
(Binary files differ)
Property changes on: packages/freealchemist/branches/upstream/current/media/p12.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/freealchemist/branches/upstream/current/media/p14.png
===================================================================
(Binary files differ)
Property changes on: packages/freealchemist/branches/upstream/current/media/p14.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/freealchemist/branches/upstream/current/media/p15.png
===================================================================
(Binary files differ)
Property changes on: packages/freealchemist/branches/upstream/current/media/p15.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/freealchemist/branches/upstream/current/media/p16.png
===================================================================
(Binary files differ)
Property changes on: packages/freealchemist/branches/upstream/current/media/p16.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/freealchemist/branches/upstream/current/media/p2.png
===================================================================
(Binary files differ)
Property changes on: packages/freealchemist/branches/upstream/current/media/p2.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/freealchemist/branches/upstream/current/media/p3.png
===================================================================
(Binary files differ)
Property changes on: packages/freealchemist/branches/upstream/current/media/p3.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/freealchemist/branches/upstream/current/media/p4.png
===================================================================
(Binary files differ)
Property changes on: packages/freealchemist/branches/upstream/current/media/p4.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/freealchemist/branches/upstream/current/media/p5.png
===================================================================
(Binary files differ)
Property changes on: packages/freealchemist/branches/upstream/current/media/p5.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/freealchemist/branches/upstream/current/media/p6.png
===================================================================
(Binary files differ)
Property changes on: packages/freealchemist/branches/upstream/current/media/p6.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/freealchemist/branches/upstream/current/media/p7.png
===================================================================
(Binary files differ)
Property changes on: packages/freealchemist/branches/upstream/current/media/p7.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/freealchemist/branches/upstream/current/media/p8.png
===================================================================
(Binary files differ)
Property changes on: packages/freealchemist/branches/upstream/current/media/p8.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: packages/freealchemist/branches/upstream/current/media/p9.png
===================================================================
(Binary files differ)
Property changes on: packages/freealchemist/branches/upstream/current/media/p9.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
More information about the Python-apps-commits
mailing list