Worm [Python+PyGame] v0.1
12 listopada, 2009
Ok ovo sam morao prije napraviti ali nisam imao volje a sad je hvala bogu imam 😀
Radim na svojoj prvoj grafickoj igri. Ta igra je klon vrlo popularne igre ‘Zmija’ veoma zastupljene na Nokijinim mobitelima :). Za sada nemam u planu nikakve “dodatke” vec samo jednostvna kopija, skupljate tocke i rastete.
Za sada sam rijesio nesto sto ja volim zvati “movement, self-collision & border collision”. Sa self collision-om(dodirom) ima jedan bug koji mi se trenutno neda pisati ali vec u sljedecom postu ce biti ispravljen jer treba dodati samo par linija koda ;).
Pa pocnimo 🙂
Faza 1
Primarni cilj mi je bio napraviti movement, dakle, “crv” se krece povrsinom a vi ga upravljate strelicama (gore, dolje, lijevo, desno), sto mi je predstavilo malo glavolomku jer nisam znao kako rijesiti da pixel prati “glavu” sto sam nekako uspio :P. Sljedeci problem mi je bio kako napraviti da zadnja tocka nestaje,tu mi je pomogao moj vjerni prijatelj Google 🙂 i nasao sam funkciju koja brise odredene stvari na zaslonu! I sljedeci problem je bio kako napraviti provjeru dali je udareno u rub, za sto je bila dovoljna jedna if petlja :P. Ok mislim da je dosta price za prvu fazu, vas naravno zanima samo kod 😉 pa evo ga:
_______________________________
import pygame
class Worm:
def __init__(self, surface, x, y, length):
self.surface = surface
self.x = x
self.y = y
self.length = length
self.dir_x = 0
self.dir_y = -1
self.body = []
self.crashed = False
def key_event(self, event):
if event.key == pygame.K_UP:
self.dir_x = 0
self.dir_y = -1
elif event.key == pygame.K_DOWN:
self.dir_x = 0
self.dir_y = 1
elif event.key == pygame.K_LEFT:
self.dir_x = -1
self.dir_y = 0
elif event.key == pygame.K_RIGHT:
self.dir_x = 1
self.dir_y = 0
def move(self):
self.x += self.dir_x
self.y += self.dir_y
r, g, b, a = self.surface.get_at((self.x, self.y))
if (r, g, b) != (0,0,0):
self.crashed = True
self.body.insert(0, (self.x, self.y))
if len(self.body) > self.length:
self.body.pop()
def draw(self):
for x, y in self.body:
self.surface.set_at((x, y), (255, 255, 255))
width = 640
height = 480
screen = pygame.display.set_mode((width, height))
clock = pygame.time.Clock()
running = True
w = Worm(screen, width/2, height/2, 200)
while running:
screen.fill((0,0,0))
w.draw()
w.move()
if w.crashed or w.x <= 0 or w.x >= width-1 or w.y <= 0 or w.y >= height-1:
print "Crash!"
running = False
for event in pygame.event.get():
if event.type == pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
w.key_event(event)
pygame.display.flip()
clock.tick(240)
___________________________________