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)
___________________________________

Komentiraj