PyInvaders Continued

scharala | Δευ, 12/29/2008 - 12:15 | 21' | 3

Το tutorial του παρόντος τεύχους "φτιάξτε ένα arcade game με python" μου άνοιξε την όρεξη και είπα να το εμπλουτίσω κάπως.

Έβαλα 4 επίπεδα όπου αυξάνονται οι σειρές με τους εξωγήινους και η ταχυτητα του παιχνιδιού. (Προκαλώ οποιον θέλει να το τερματίσει εγώ δεν το κατάφερα ακόμα :) )

Επίσης υπάρχουν διάφοροι ήχοι, μουσική και εφέ όταν σκοτώνεται ένας εχθρός.

Τέλος κρατιέται to score κάτω δεξιά και το highcsore σε ξεχωριστό αρχείο. Παραθέτω τον κώδικα παρακάτω.

(Για να τρέξει χρειάζονται τα αρχεία του ήχου οι εικόνες και ένα απλό αρχείο text που θα κρατάει το high score τα οποία τα στέλνω σε όποιον ενδιαφέρεται).

from pygame import *
import pygame
import random
import sys
from pygame.locals import *

if not pygame.font: print 'Warning, fonts disabled'
if not pygame.mixer: print 'Warning, sound disabled'

#function to load a sound file
def load_sound(name):
class NoneSound:
def play(self): pass
if not pygame.mixer:
return NoneSound()
#fullname = os.path.join('data', name)
try:
sound = pygame.mixer.Sound(name)
except pygame.error, message:
print 'Cannot load sound:'
raise SystemExit, message
return sound

#function to display a string in the given position and with a given size
def dis_string(str,pos_x,pos_y,size):
if pygame.font:
font = pygame.font.Font(None, size)
text = font.render(str, 1, (255, 255 , 255))
textpos = text.get_rect(centerx=pos_x,centery=pos_y)
screen.blit(text, textpos)

class Sprite:
def __init__(self, xpos, ypos, filename):
self.x = xpos
self.y = ypos
self.bitmap = image.load(filename)
self.bitmap.set_colorkey((0,0,0))
def set_position(self, xpos, ypos):
self.x = xpos
self.y = ypos
def render(self):
screen.blit(self.bitmap, (self.x, self.y))

def Intersect(s1_x, s1_y, s2_x, s2_y):
if (s1_x > s2_x - 32) and (s1_x < s2_x + 32) and (s1_y > s2_y - 32) and (s1_y < s2_y + 32):
return 1
else:
return 0

#file to hold the high score
highfile=open('highscore','r')
highscore=int(highfile.read())
init()
screen = display.set_mode((640,480))
key.set_repeat(1, 1)
display.set_caption('PyInvaders')
backdrop = image.load('data/backdrop.bmp')
score=0
#dead enemy picture
DeadEnemy=image.load('data/DeadBaddie.bmp')
DeadEnemy.set_colorkey((0,0,0))
enemies = []
senemies= []
x = 0

for count in range(10):
enemies.append(Sprite(50 * x + 50, 50, 'data/baddie.bmp'))
x += 1
x=0

hero = Sprite(20, 400, 'data/hero.bmp')
ourmissile = Sprite(0, 480, 'data/heromissile.bmp')
enemymissile = Sprite(0, 480, 'data/baddiemissile.bmp')
senemymissile = Sprite(0, 480, 'data/baddiemissile.bmp')
tenemymissile = Sprite(0, 480, 'data/baddiemissile.bmp')

quit = 0
enemyspeed = 3
senemyspeed = 3
tenemyspeed=3
#displaying the welcome screen
screen.blit(backdrop, (0, 0))
dis_string("WELCOME STRANGER TO THE PYINVADERS DOMAIN",screen.get_width()/2,screen.get_height()/2-40,34)
dis_string("PRESS ENTER TO BEGIN, Q TO EXIT",screen.get_width()/2,screen.get_height()/2+20,36)
pygame.display.flip()
exit=0
while exit==0:
for ourevent in event.get():
if ourevent.type == KEYDOWN:
if ourevent.key == K_q:
sys.exit()
if ourevent.key == K_RETURN:
exit=1

display.update()
screen.blit(backdrop, (0, 0))
dis_string("LEVEL 0",screen.get_width()/2,screen.get_height()/2+20,44)

display.update()

time.delay(1000)

display.update()
term=0
#level 0
iam=load_sound('reli.wav').play(10)
while quit == 0:
screen.blit(backdrop, (0, 0))

if len(enemies)>0:
for count in range(len(enemies)):
enemies[count].x += enemyspeed
enemies[count].render()

if enemies[len(enemies)-1].x > 590:
enemyspeed = -3
for count in range(len(enemies)):
enemies[count].y += 5

if enemies[0].x < 10:
enemyspeed = 3
for count in range(len(enemies)):
enemies[count].y += 5

if ourmissile.y < 479 and ourmissile.y > 0:
ourmissile.render()
ourmissile.y -= 5
if len(enemies)>0:
if enemymissile.y >= 480 and len(enemies) > 0:
enemymissile.x = enemies[random.randint(0, len(enemies) - 1)].x
enemymissile.y = enemies[0].y
if Intersect(hero.x, hero.y, enemymissile.x, enemymissile.y):
quit = 1
term=1
iam.stop()
load_sound('terminator.wav').play()
time.delay(2500)
if score>highscore:
highscore=score
print "CONGRATULATIONS YOU SET A NEW HIGHSCORE:", score
highfile.close()
file=open('highscore','w')
file.write(str(highscore))
else:
print "CONGRATULATIONS!! YOUR SCORE IS:",score
sys.exit()
if Intersect(ourmissile.x,ourmissile.y,enemymissile.x,enemymissile.y):
ourmissile.x=0
ourmissile.y=480
enemymissile.x=0
enemymissile.y=480
load_sound('electric.wav').play()
if len(enemies)>0:
for count in range(0, len(enemies)):
if Intersect(ourmissile.x, ourmissile.y, enemies[count].x, enemies[count].y):
screen.blit(DeadEnemy,(enemies[count].x,enemies[count].y))
del enemies[count]
score+=1
load_sound('explosion.wav').play()
break

if len(enemies) == 0:
load_sound('applause.wav').play()
quit = 1

for ourevent in event.get():
if ourevent.type == QUIT:
quit = 1
term = 1
if ourevent.type == KEYDOWN:
if ourevent.key == K_RIGHT and hero.x < 590:
hero.x += 5
if ourevent.key == K_LEFT and hero.x > 10:
hero.x -= 5
if ourevent.key == K_SPACE:
ourmissile.x = hero.x
ourmissile.y = hero.y

if len(enemies)>0:
enemymissile.render()
enemymissile.y += 5
hero.render()
yscore="Your Score Is: " + str(score)
dis_string(yscore,screen.get_width()-100,screen.get_height()-36,36)
display.update()
time.delay(10)

if term==1:
if score>highscore:
highscore=score
print "CONGRATULATIONS YOU SET A NEW HIGHSCORE:", score
highfile.close()
file=open('highscore','w')
file.write(str(highscore))
else:
print "CONGRATULATIONS!! YOUR SCORE IS:",score
sys.exit()

screen.blit(backdrop, (0, 0))
dis_string("CONGRATULATIONS!!",screen.get_width()/2,screen.get_height()/2-20,44)
dis_string("MOVING TO LEVEL 1",screen.get_width()/2,screen.get_height()/2+20,44)

display.update()

time.delay(1000)

display.update()

for count in range(10):
enemies.append(Sprite(50 * x + 50, 50, 'data/baddie.bmp'))
x += 1
x=0
for count in range(10):
senemies.append(Sprite(50 * x + 50, 100, 'data/baddie.bmp'))
x += 1

quit=0
term=0
#level 1
while quit == 0:
screen.blit(backdrop, (0, 0))

if len(enemies)>0:
for count in range(len(enemies)):
enemies[count].x += enemyspeed
enemies[count].render()

if enemies[len(enemies)-1].x > 590:
enemyspeed = -3
for count in range(len(enemies)):
enemies[count].y += 5

if enemies[0].x < 10:
enemyspeed = 3
for count in range(len(enemies)):
enemies[count].y += 5
if len(senemies)>0:
for count in range(len(senemies)):
senemies[count].x +=senemyspeed
senemies[count].render()

if senemies[len(senemies)-1].x > 590:
senemyspeed = -3
for count in range(len(senemies)):
senemies[count].y += 5

if senemies[0].x < 10:
senemyspeed = 3
for count in range(len(senemies)):
senemies[count].y += 5

if ourmissile.y < 479 and ourmissile.y > 0:
ourmissile.render()
ourmissile.y -= 5
if len(enemies)>0:
if enemymissile.y >= 480 and len(enemies) > 0:
enemymissile.x = enemies[random.randint(0, len(enemies) - 1)].x
enemymissile.y = enemies[0].y
if len(senemies)>0:
if senemymissile.y >= 480 and len(senemies) > 0:
senemymissile.x = senemies[random.randint(0, len(senemies) - 1)].x
senemymissile.y = senemies[0].y

if Intersect(hero.x, hero.y, enemymissile.x, enemymissile.y):
quit = 1
iam.stop()
load_sound('terminator.wav').play()
time.delay(2500)
if score>highscore:
highscore=score
print "CONGRATULATIONS YOU SET A NEW HIGHSCORE:", score
highfile.close()
file=open('highscore','w')
file.write(str(highscore))
else:
print "CONGRATULATIONS!! YOUR SCORE IS:",score
sys.exit()
if Intersect(hero.x, hero.y, senemymissile.x, senemymissile.y):
quit = 1
iam.stop()
load_sound('terminator.wav').play()
time.delay(2500)
if score>highscore:
highscore=score
print "CONGRATULATIONS YOU SET A NEW HIGHSCORE:", score
highfile.close()
file=open('highscore','w')
file.write(str(highscore))
else:
print "CONGRATULATIONS!! YOUR SCORE IS:",score
sys.exit()
if Intersect(ourmissile.x,ourmissile.y,enemymissile.x,enemymissile.y):
ourmissile.x=0
ourmissile.y=480
enemymissile.x=0
enemymissile.y=480
load_sound('electric.wav').play()
if Intersect(ourmissile.x,ourmissile.y,senemymissile.x,senemymissile.y):
ourmissile.x=0
ourmissile.y=480
senemymissile.x=0
senemymissile.y=480
if len(enemies)>0:
for count in range(0, len(enemies)):
if Intersect(ourmissile.x, ourmissile.y, enemies[count].x, enemies[count].y):
screen.blit(DeadEnemy,(enemies[count].x,enemies[count].y))
del enemies[count]
score+=1
load_sound('explosion.wav').play()
break
if len(senemies)>0:
for count in range(0, len(senemies)):
if Intersect(ourmissile.x, ourmissile.y, senemies[count].x, senemies[count].y):
screen.blit(DeadEnemy,(senemies[count].x,senemies[count].y))
del senemies[count]
score+=1
load_sound('explosion.wav').play()
break

if len(enemies) == 0 and len(senemies)== 0:
load_sound('applause.wav').play()
quit = 1

for ourevent in event.get():
if ourevent.type == QUIT:
term = 1
quit = 1
if ourevent.type == KEYDOWN:
if ourevent.key == K_RIGHT and hero.x < 590:
hero.x += 5
if ourevent.key == K_LEFT and hero.x > 10:
hero.x -= 5
if ourevent.key == K_SPACE:
ourmissile.x = hero.x
ourmissile.y = hero.y

if len(enemies)>0:
enemymissile.render()
enemymissile.y += 5
if len(senemies)>0:
senemymissile.render()
senemymissile.y += 5

hero.render()
yscore="Your Score Is: " + str(score)
dis_string(yscore,screen.get_width()-100,screen.get_height()-36,36)
display.update()
time.delay(10)
if term==1:
if score>highscore:
highscore=score
print "CONGRATULATIONS YOU SET A NEW HIGHSCORE:", score
highfile.close()
file=open('highscore','w')
file.write(str(highscore))
else:
print "CONGRATULATIONS!! YOUR SCORE IS:",score
sys.exit()

screen.blit(backdrop, (0, 0))
dis_string("CONGRATULATIONS!!",screen.get_width()/2,screen.get_height()/2-20,44)
dis_string("MOVING TO LEVEL 2",screen.get_width()/2,screen.get_height()/2+20,44)

display.update()

time.delay(1000)

display.update()

tenemies = []

x=0
for count in range(10):
enemies.append(Sprite(50 * x + 50, 50, 'data/baddie.bmp'))
x += 1
x=0
for count in range(10):
senemies.append(Sprite(50 * x + 50, 100, 'data/baddie.bmp'))
x += 1
x=0
for count in range(10):
tenemies.append(Sprite(50 * x + 50, 150, 'data/baddie.bmp'))
x += 1
quit=0
term=0
#level 2
while quit == 0:
screen.blit(backdrop, (0, 0))

if len(enemies)>0:
for count in range(len(enemies)):
enemies[count].x += enemyspeed
enemies[count].render()

if enemies[len(enemies)-1].x > 590:
enemyspeed = -3
for count in range(len(enemies)):
enemies[count].y += 5

if enemies[0].x < 10:
enemyspeed = 3
for count in range(len(enemies)):
enemies[count].y += 5
if len(senemies)>0:
for count in range(len(senemies)):
senemies[count].x +=senemyspeed
senemies[count].render()

if senemies[len(senemies)-1].x > 590:
senemyspeed = -3
for count in range(len(senemies)):
senemies[count].y += 5

if senemies[0].x < 10:
senemyspeed = 3
for count in range(len(senemies)):
senemies[count].y += 5
if len(tenemies)>0:
for count in range(len(tenemies)):
tenemies[count].x +=tenemyspeed
tenemies[count].render()

if tenemies[len(tenemies)-1].x > 590:
tenemyspeed = -3
for count in range(len(tenemies)):
tenemies[count].y += 5

if tenemies[0].x < 10:
tenemyspeed = 3
for count in range(len(tenemies)):
tenemies[count].y += 5

if ourmissile.y < 479 and ourmissile.y > 0:
ourmissile.render()
ourmissile.y -= 5
if len(enemies)>0:
if enemymissile.y >= 480 and len(enemies) > 0:
enemymissile.x = enemies[random.randint(0, len(enemies) - 1)].x
enemymissile.y = enemies[0].y
if len(senemies)>0:
if senemymissile.y >= 480 and len(senemies) > 0:
senemymissile.x = senemies[random.randint(0, len(senemies) - 1)].x
senemymissile.y = senemies[0].y

if len(tenemies)>0:
if tenemymissile.y >= 480 and len(tenemies) > 0:
tenemymissile.x = tenemies[random.randint(0, len(tenemies) - 1)].x
tenemymissile.y = tenemies[0].y

if Intersect(hero.x, hero.y, enemymissile.x, enemymissile.y):
quit = 1
iam.stop()
load_sound('terminator.wav').play()
time.delay(2500)
if score>highscore:
highscore=score
print "CONGRATULATIONS YOU SET A NEW HIGHSCORE:", score
highfile.close()
file=open('highscore','w')
file.write(str(highscore))
else:
print "CONGRATULATIONS!! YOUR SCORE IS:",score
sys.exit()
if Intersect(hero.x, hero.y, senemymissile.x, senemymissile.y) or Intersect(hero.x, hero.y, tenemymissile.x, tenemymissile.y):
quit = 1
iam.stop()
load_sound('terminator.wav').play()
time.delay(2500)
if score>highscore:
highscore=score
print "CONGRATULATIONS YOU SET A NEW HIGHSCORE:", score
highfile.close()
file=open('highscore','w')
file.write(str(highscore))
else:
print "CONGRATULATIONS!! YOUR SCORE IS:",score
sys.exit()
if Intersect(ourmissile.x,ourmissile.y,enemymissile.x,enemymissile.y):
ourmissile.x=0
ourmissile.y=480
enemymissile.x=0
enemymissile.y=480
load_sound('electric.wav').play()
if Intersect(ourmissile.x,ourmissile.y,senemymissile.x,senemymissile.y):
ourmissile.x=0
ourmissile.y=480
senemymissile.x=0
senemymissile.y=480
if Intersect(ourmissile.x,ourmissile.y,tenemymissile.x,tenemymissile.y):
ourmissile.x=0
ourmissile.y=480
tenemymissile.x=0
tenemymissile.y=480
if len(enemies)>0:
for count in range(0, len(enemies)):
if Intersect(ourmissile.x, ourmissile.y, enemies[count].x, enemies[count].y):
screen.blit(DeadEnemy,(enemies[count].x,enemies[count].y))
del enemies[count]
score+=1
load_sound('explosion.wav').play()
break
if len(senemies)>0:
for count in range(0, len(senemies)):
if Intersect(ourmissile.x, ourmissile.y, senemies[count].x, senemies[count].y):
screen.blit(DeadEnemy,(senemies[count].x,senemies[count].y))
del senemies[count]
score+=1
load_sound('explosion.wav').play()
break
if len(tenemies)>0:
for count in range(0, len(tenemies)):
if Intersect(ourmissile.x, ourmissile.y, tenemies[count].x, tenemies[count].y):
screen.blit(DeadEnemy,(tenemies[count].x,tenemies[count].y))
del tenemies[count]
score+=1
load_sound('explosion.wav').play()
break

if len(enemies) == 0 and len(senemies)== 0 and len(tenemies) == 0:
load_sound('applause.wav').play()
quit = 1

for ourevent in event.get():
if ourevent.type == QUIT:
quit = 1
term = 1
if ourevent.type == KEYDOWN:
if ourevent.key == K_RIGHT and hero.x < 590:
hero.x += 5
if ourevent.key == K_LEFT and hero.x > 10:
hero.x -= 5
if ourevent.key == K_SPACE:
ourmissile.x = hero.x
ourmissile.y = hero.y

if len(enemies)>0:
enemymissile.render()
enemymissile.y += 5
if len(senemies)>0:
senemymissile.render()
senemymissile.y += 5

if len(tenemies)>0:
tenemymissile.render()
tenemymissile.y += 5

hero.render()
yscore="Your Score Is: " + str(score)
dis_string(yscore,screen.get_width()-100,screen.get_height()-36,36)
display.update()
time.delay(10)
if term==1:
print "CONGRATULATIONS!! YOUR SCORE IS:",score
sys.exit()

screen.blit(backdrop, (0, 0))
dis_string("CONGRATULATIONS!!",screen.get_width()/2,screen.get_height()/2-20,44)
dis_string("MOVING TO LEVEL 3",screen.get_width()/2,screen.get_height()/2+20,44)

display.update()

time.delay(1000)

display.update()

tenemies = []

x=0
for count in range(10):
enemies.append(Sprite(50 * x + 50, 50, 'data/baddie.bmp'))
x += 1
x=0
for count in range(10):
senemies.append(Sprite(50 * x + 50, 100, 'data/baddie.bmp'))
x += 1
x=0
for count in range(10):
tenemies.append(Sprite(50 * x + 50, 150, 'data/baddie.bmp'))
x += 1
quit=0
term=0
#level 3
while quit == 0:
screen.blit(backdrop, (0, 0))

if len(enemies)>0:
for count in range(len(enemies)):
enemies[count].x += enemyspeed
enemies[count].render()

if enemies[len(enemies)-1].x > 590:
enemyspeed = -3
for count in range(len(enemies)):
enemies[count].y += 5

if enemies[0].x < 10:
enemyspeed = 3
for count in range(len(enemies)):
enemies[count].y += 5
if len(senemies)>0:
for count in range(len(senemies)):
senemies[count].x +=senemyspeed
senemies[count].render()

if senemies[len(senemies)-1].x > 590:
senemyspeed = -3
for count in range(len(senemies)):
senemies[count].y += 5

if senemies[0].x < 10:
senemyspeed = 3
for count in range(len(senemies)):
senemies[count].y += 5
if len(tenemies)>0:
for count in range(len(tenemies)):
tenemies[count].x +=tenemyspeed
tenemies[count].render()

if tenemies[len(tenemies)-1].x > 590:
tenemyspeed = -3
for count in range(len(tenemies)):
tenemies[count].y += 5

if tenemies[0].x < 10:
tenemyspeed = 3
for count in range(len(tenemies)):
tenemies[count].y += 5

if ourmissile.y < 479 and ourmissile.y > 0:
ourmissile.render()
ourmissile.y -= 5
if len(enemies)>0:
if enemymissile.y >= 480 and len(enemies) > 0:
enemymissile.x = enemies[random.randint(0, len(enemies) - 1)].x
enemymissile.y = enemies[0].y
if len(senemies)>0:
if senemymissile.y >= 480 and len(senemies) > 0:
senemymissile.x = senemies[random.randint(0, len(senemies) - 1)].x
senemymissile.y = senemies[0].y

if len(tenemies)>0:
if tenemymissile.y >= 480 and len(tenemies) > 0:
tenemymissile.x = tenemies[random.randint(0, len(tenemies) - 1)].x
tenemymissile.y = tenemies[0].y

if Intersect(hero.x, hero.y, enemymissile.x, enemymissile.y):
quit = 1
iam.stop()
load_sound('terminator.wav').play()
time.delay(2500)
if score>highscore:
highscore=score
print "CONGRATULATIONS YOU SET A NEW HIGHSCORE:", score
highfile.close()
file=open('highscore','w')
file.write(str(highscore))
else:
print "CONGRATULATIONS!! YOUR SCORE IS:",score
sys.exit()
if Intersect(hero.x, hero.y, senemymissile.x, senemymissile.y) or Intersect(hero.x, hero.y, tenemymissile.x, tenemymissile.y):
quit = 1
iam.stop()
load_sound('terminator.wav').play()
time.delay(2500)
if score>highscore:
highscore=score
print "CONGRATULATIONS YOU SET A NEW HIGHSCORE:", score
highfile.close()
file=open('highscore','w')
file.write(str(highscore))
else:
print "CONGRATULATIONS!! YOUR SCORE IS:",score
sys.exit()
if Intersect(ourmissile.x,ourmissile.y,enemymissile.x,enemymissile.y):
ourmissile.x=0
ourmissile.y=480
enemymissile.x=0
enemymissile.y=480
load_sound('electric.wav').play()
if Intersect(ourmissile.x,ourmissile.y,senemymissile.x,senemymissile.y):
ourmissile.x=0
ourmissile.y=480
senemymissile.x=0
senemymissile.y=480
if Intersect(ourmissile.x,ourmissile.y,tenemymissile.x,tenemymissile.y):
ourmissile.x=0
ourmissile.y=480
tenemymissile.x=0
tenemymissile.y=480
if len(enemies)>0:
for count in range(0, len(enemies)):
if Intersect(ourmissile.x, ourmissile.y, enemies[count].x, enemies[count].y):
screen.blit(DeadEnemy,(enemies[count].x,enemies[count].y))
del enemies[count]
score+=1
load_sound('explosion.wav').play()
break
if len(senemies)>0:
for count in range(0, len(senemies)):
if Intersect(ourmissile.x, ourmissile.y, senemies[count].x, senemies[count].y):
screen.blit(DeadEnemy,(senemies[count].x,senemies[count].y))
del senemies[count]
score+=1
load_sound('explosion.wav').play()
break
if len(tenemies)>0:
for count in range(0, len(tenemies)):
if Intersect(ourmissile.x, ourmissile.y, tenemies[count].x, tenemies[count].y):
screen.blit(DeadEnemy,(tenemies[count].x,tenemies[count].y))
del tenemies[count]
score+=1
load_sound('explosion.wav').play()
break

if len(enemies) == 0 and len(senemies)== 0 and len(tenemies) == 0:
load_sound('applause.wav').play()
quit = 1

for ourevent in event.get():
if ourevent.type == QUIT:
term = 1
quit = 1
if ourevent.type == KEYDOWN:
if ourevent.key == K_RIGHT and hero.x < 590:
hero.x += 5
if ourevent.key == K_LEFT and hero.x > 10:
hero.x -= 5
if ourevent.key == K_SPACE:
ourmissile.x = hero.x
ourmissile.y = hero.y

if len(enemies)>0:
enemymissile.render()
enemymissile.y += 5
if len(senemies)>0:
senemymissile.render()
senemymissile.y += 5

if len(tenemies)>0:
tenemymissile.render()
tenemymissile.y += 5

hero.render()
yscore="Your Score Is: " + str(score)
dis_string(yscore,screen.get_width()-100,screen.get_height()-36,36)
display.update()
time.delay(4)
if quit==1:
if score>highscore:
highscore=score
print "CONGRATULATIONS YOU SET A NEW HIGHSCORE:", score
highfile.close()
file=open('highscore','w')
file.write(str(highscore))
else:
print "CONGRATULATIONS!! YOUR SCORE IS:",score
sys.exit()

Φόρουμ
Δώσε αστέρια!

MO: (ψήφοι: 0)

Σχόλια

Τέτοια γίνονται για να θυμόμαστε περί τίνος μιλάμε όταν λέμε για ελεύθερο λογισμικό...

Αν και ένα είναι post ενός χρόνου, αξίζει χίλια μπράβο...

 

Είναι εύκολο να ανεβάσεις κάπου τα αρχεία που λείπουν; Θα ήθελα πραγματικά να το δοκιμάσω, γιατί σκέτο δεν τρέχει.