Changeset 25:6d6ab0c1479d


Ignore:
Timestamp:
Aug 30, 2009, 6:14:07 PM (11 years ago)
Author:
Neil Muller <drnlmuller@…>
Branch:
default
Convert:
svn:b4e93282-eac8-4b8b-b765-0f5d36de2b68@26
Message:

Add placing some chickens and foxes

Location:
gamelib
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • gamelib/engine.py

    r15 r25  
    33from pgu.engine import Game, State, Quit
    44import pygame
    5 from pygame.locals import USEREVENT, QUIT, KEYDOWN, K_ESCAPE
     5from pygame.locals import USEREVENT, QUIT, KEYDOWN, K_ESCAPE, K_n, K_d
    66
    77import gameboard
     8import animal
     9import random
    810
    911class Engine(Game):
     
    3941
    4042class DayState(State):
     43    def init(self):
     44        """Add some chickens to the farm"""
     45        # Very simple, we walk around the tilemap, and, for each farm tile,
     46        # we randomly add a chicken (1 in 10 chance) until we have 5 chickens
     47        # or we run out of board
     48        self.game.gameboard.clear_foxes()
     49        chickens = len(self.game.gameboard.chickens)
     50        x, y = 0, 0
     51        width, height = self.game.gameboard.tv.size
     52        while chickens < 5:
     53            if x < width:
     54                tile = self.game.gameboard.tv.get((x, y))
     55            else:
     56                y += 1
     57                if y >= height:
     58                    break
     59                x = 0
     60                continue
     61            # See if we place a chicken
     62            if tile == 1:
     63                # Farmland
     64                roll = random.randint(1, 10)
     65                # We don't place within a tile of the fence, this is to make things
     66                # easier
     67                for xx in range(x-1, x+2):
     68                    if xx >= height or xx < 0:
     69                        continue
     70                    for yy in range(y-1, y+2):
     71                        if yy >= height or yy < 0:
     72                            continue
     73                        neighbour = self.game.gameboard.tv.get((xx, yy))
     74                        if neighbour == 2:
     75                            # Fence
     76                            roll = 10
     77                if roll == 1:
     78                    # Create a chicken
     79                    chickens += 1
     80                    chick = animal.Chicken((x, y))
     81                    self.game.gameboard.add_chicken(chick)
     82            x += 1
     83
    4184    def event(self, e):
    4285        if events_equal(e, START_NIGHT):
     
    4487        elif e.type is KEYDOWN and e.key == K_ESCAPE:
    4588            return MainMenuState(self.game)
     89        elif e.type is KEYDOWN and e.key == K_n:
     90            return pygame.event.post(START_NIGHT)
    4691        elif events_equal(e, GO_MAIN_MENU):
    4792            return MainMenuState(self.game)
     
    61106
    62107class NightState(State):
     108    def init(self):
     109        """Add some foxes to the farm"""
     110        # Very simple, we walk around the tilemap, and, for each farm tile,
     111        # we randomly add a chicken (1 in 10 chance) until we have 5 chickens
     112        # or we run out of board
     113        foxes = len(self.game.gameboard.foxes)
     114        x, y = 0, 0
     115        width, height = self.game.gameboard.tv.size
     116        while foxes < 5:
     117            if x < width:
     118                tile = self.game.gameboard.tv.get((x, y))
     119            else:
     120                y += 1
     121                if y >= height:
     122                    break
     123                x = 0
     124                continue
     125            # See if we place a fox
     126            if tile == 0:
     127                # Forest
     128                roll = random.randint(1, 10)
     129                if roll == 1:
     130                    # Create a fox
     131                    foxes += 1
     132                    fox = animal.Fox((x, y))
     133                    self.game.gameboard.add_fox(fox)
     134            x += 5
     135
    63136    def event(self, e):
    64137        if events_equal(e, START_DAY):
    65138            return DayState(self.game)
     139        elif e.type is KEYDOWN and e.key == K_d:
     140            return pygame.event.post(START_DAY)
     141        elif e.type is KEYDOWN and e.key == K_ESCAPE:
     142            return MainMenuState(self.game)
     143        elif e.type is not QUIT:
     144            self.game.gameboard.event(e)
     145
     146    def loop(self):
     147        self.game.gameboard.loop()
     148
     149    def paint(self, screen):
     150        self.game.gameboard.paint(screen)
     151        pygame.display.flip()
     152
     153    def update(self, screen):
     154        update = self.game.gameboard.update(screen)
     155        pygame.display.update(update)
     156
    66157
    67158# pygame events
  • gamelib/gameboard.py

    r24 r25  
    2121        self.tools.png_folder_load_tiles(data.filepath('tiles'))
    2222        self.populate_toolbar()
     23        self.chickens = []
     24        self.foxes = []
    2325
    2426        self.selected_tool = None
     
    5456
    5557    def loop(self):
    56         return
    57         x = random.randint(0, self.tv.size[0]-1)
    58         y = random.randint(0, self.tv.size[1]-1)
    59         tile = random.randint(0, 4)
    60         self.tv.set((x, y), tile)
     58        self.tv.loop()
    6159
    6260    def select_tool(self, e):
     
    7977            else:
    8078                self.use_tool(e)
     79
     80    def clear_foxes(self):
     81        for fox in self.foxes:
     82            self.tv.sprites.remove(fox)
     83        self.foxes = [] # Remove all the foxes
     84
     85    def add_chicken(self, chicken):
     86        self.chickens.append(chicken)
     87        self.tv.sprites.append(chicken)
     88
     89    def add_fox(self, fox):
     90        self.foxes.append(fox)
     91        self.tv.sprites.append(fox)
Note: See TracChangeset for help on using the changeset viewer.