New to python
Page 1 of 114 Replies - 1819 Views - Last Post: 19 January 2010 - 05:11 PM
#1
New to python
Posted 11 November 2009 - 03:42 PM
Replies To: New to python
#2
Re: New to python
Posted 11 November 2009 - 03:54 PM
#3
Re: New to python
Posted 11 November 2009 - 03:55 PM
This is REALLY good for ABSOLUTE beginner:
http://www.byteofpython.info/
These two are really good as a supplement:
http://www.freenetpa.../hp/alan.gauld/
http://www.sthurlow.com/python/
Finally here is a list of resources from Python.org: (sometimes confusing)
http://wiki.python.o.../BeginnersGuide
There are links to beginner to programming and beginner to python...
-- Cheers!
girasquid, on 11 Nov, 2009 - 04:54 PM, said:
As a beginner, I actually found this rather confusing. But that's up to you.
#4
Re: New to python
Posted 11 November 2009 - 03:57 PM
#6
Re: New to python
Posted 11 November 2009 - 06:10 PM
It might be easy for some things, but it's really annoying unless you get the code just right. Of course, part of that might be because it's so different from other languages I know.
#7
Re: New to python
Posted 11 November 2009 - 08:02 PM
Quote
Quote
#9
Re: New to python
Posted 16 November 2009 - 06:30 AM
Thanks in advance. Will appreciate help pointing me in the right direction.
pygame.display.set_caption("Ant Simulation")
background = pygame.Surface(screen.get_size())
background = background.convert()
background.fill((0,255,0))
screen.blit(background, (0,0))
class antWorld(object):
def __init__(self):
self.ant = {}
self.food = {}
self.antNo = 0
pygame.draw.circle(self.background,(200, 255, 200), (300,300), 200)
def add_ant(self, ant):
self.antNo += 1
class ant(object):
def __init__(self, antWorld, antImage, antWeight):
self.antWorld = antWorld
self.antImage = antImage
antImage = pygame.draw.circle(self.background,(230, 255, 219), )
self.antWeight = 0
def carryFood(self, foodImage):
self.carry_food = foodImage
#def dropFood(self, surface):
class food(object):
def __init__(self, antWorld, foodImage, foodWeight):
self.antWorld = antWorld
self.foodImage = foodImage
foodImage = pygame.draw.rectangle
self.foodWeight = foodWeight
#10
Re: New to python
Posted 16 November 2009 - 08:16 AM
[code]
import pygame
from pygame.locals import *
#self.font = pygame.font.Font(None, 64)
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Ant Simulation")
background = pygame.Surface(screen.get_size())
background = background.convert()
background.fill((0,255,0))
screen.blit(background, (0,0))
pygame.draw.circle(background, (0,0,255), (640/8,480/4), 60)
pygame.display.flip()
screen.blit(background, (0,0))
line1 = pygame.draw.line(background, (255,0,0), (580,50), (580,75), 2)
#screen.blit(font.render("weight", (0,255,0)), (10, 345))
pygame.display.flip()
screen.blit(background, (0,0))
line2 = pygame.draw.line(background, (0,0,255), (580,175), (580,250), 2)
pygame.display.flip()
screen.blit(background, (0,0))
pygame.draw.rect(background, (0,255,0), (25,25), (75,100))
pygame.display.flip()
screen.blit(background, (0,0))
pygame.draw.rect(background, (0,255,0), (25,175), (75,100))
pygame.display.flip()
screen.blit(background, (0,0))
#11
Re: New to python
Posted 16 November 2009 - 08:55 AM
SCREEN_SIZE = (640, 480)
NEST_POSITION = (320, 240)
ANT_COUNT = 20
NEST_SIZE = 100.
import pygame
from pygame.locals import *
from random import randint, choice
from gameobjects.vector2 import Vector2
class State(object):
def __init__(self, name):
self.name = name
def do_actions(self):
pass
def check_conditions(self):
pass
def entry_actions(self):
pass
def exit_actions(self):
pass
class StateMachine(object):
def __init__(self):
self.states = {}
self.active_state = None
def add_state(self, state):
self.states[state.name] = state
def think(self):
if self.active_state is None:
return
self.active_state.do_actions()
new_state_name = self.active_state.check_conditions()
if new_state_name is not None:
self.set_state(new_state_name)
def set_state(self, new_state_name):
if self.active_state is not None:
self.active_state.exit_actions()
self.active_state = self.states[new_state_name]
self.active_state.entry_actions()
class World(object):
def __init__(self):
self.entities = {}
self.entity_id = 0
self.background = pygame.surface.Surface(SCREEN_SIZE).convert()
self.background.fill((255, 255, 255))
pygame.draw.circle(self.background, (200, 255, 200), NEST_POSITION, int(NEST_SIZE))
def add_entity(self, entity):
self.entities[self.entity_id] = entity
entity.id = self.entity_id
self.entity_id += 1
def remove_entity(self, entity):
del self.entities[entity.id]
def get(self, entity_id):
if entity_id in self.entities:
return self.entities[entity_id]
else:
return None
def process(self, time_passed):
time_passed_seconds = time_passed / 1000.0
for entity in self.entities.values():
entity.process(time_passed_seconds)
def render(self, surface):
surface.blit(self.background, (0, 0))
for entity in self.entities.itervalues():
entity.render(surface)
def get_close_entity(self, name, location, range=100.):
location = Vector2(*location)
for entity in self.entities.itervalues():
if entity.name == name:
distance = location.get_distance_to(entity.location)
if distance < range:
return entity
return None
class GameEntity(object):
def __init__(self, world, name, image):
self.world = world
self.name = name
self.image = image
self.location = Vector2(0, 0)
self.destination = Vector2(0, 0)
self.speed = 0.
self.brain = StateMachine()
self.id = 0
def render(self, surface):
x, y = self.location
w, h = self.image.get_size()
surface.blit(self.image, (x-w/2, y-h/2))
def process(self, time_passed):
self.brain.think()
if self.speed > 0. and self.location != self.destination:
vec_to_destination = self.destination - self.location
distance_to_destination = vec_to_destination.get_length()
heading = vec_to_destination.get_normalized()
travel_distance = min(distance_to_destination, time_passed * self.speed)
self.location += travel_distance * heading
class Leaf(GameEntity):
def __init__(self, world, image):
GameEntity.__init__(self, world, "leaf", image)
class Spider(GameEntity):
def __init__(self, world, image):
GameEntity.__init__(self, world, "spider", image)
# Make a 'dead' spider image by turning it upside down
self.dead_image = pygame.transform.flip(image, 0, 1)
self.health = 25
self.speed = 50. + randint(-20, 20)
def bitten(self):
# Spider as been bitten
self.health -= 1
if self.health <= 0:
self.speed = 0.
self.image = self.dead_image
self.speed = 140.
def render(self, surface):
GameEntity.render(self, surface)
# Draw a health bar
x, y = self.location
w, h = self.image.get_size()
bar_x = x - 12
bar_y = y + h/2
surface.fill( (255, 0, 0), (bar_x, bar_y, 25, 4))
surface.fill( (0, 255, 0), (bar_x, bar_y, self.health, 4))
def process(self, time_passed):
x, y = self.location
if x > SCREEN_SIZE[0] + 2:
self.world.remove_entity(self)
return
GameEntity.process(self, time_passed)
class Ant(GameEntity):
def __init__(self, world, image):
GameEntity.__init__(self, world, "ant", image)
# State classes are defined below
exploring_state = AntStateExploring(self)
seeking_state = AntStateSeeking(self)
delivering_state = AntStateDelivering(self)
hunting_state = AntStateHunting(self)
self.brain.add_state(exploring_state)
self.brain.add_state(seeking_state)
self.brain.add_state(delivering_state)
self.brain.add_state(hunting_state)
self.carry_image = None
def carry(self, image):
self.carry_image = image
def drop(self, surface):
if self.carry_image:
x, y = self.location
w, h = self.carry_image.get_size()
surface.blit(self.carry_image, (x-w, y-h/2))
self.carry_image = None
def render(self, surface):
GameEntity.render(self, surface)
if self.carry_image:
x, y = self.location
w, h = self.carry_image.get_size()
surface.blit(self.carry_image, (x-w, y-h/2))
class AntStateExploring(State):
def __init__(self, ant):
State.__init__(self, "exploring")
self.ant = ant
def random_destination(self):
w, h = SCREEN_SIZE
self.ant.destination = Vector2(randint(0, w), randint(0, h))
def do_actions(self):
if randint(1, 20) == 1:
self.random_destination()
def check_conditions(self):
# If ant sees a leaf, go to the seeking state
leaf = self.ant.world.get_close_entity("leaf", self.ant.location)
if leaf is not None:
self.ant.leaf_id = leaf.id
return "seeking"
# If the ant sees a spider attacking the base, go to hunting state
spider = self.ant.world.get_close_entity("spider", NEST_POSITION, NEST_SIZE)
if spider is not None:
if self.ant.location.get_distance_to(spider.location) < 100.:
self.ant.spider_id = spider.id
return "hunting"
return None
def entry_actions(self):
self.ant.speed = 120. + randint(-30, 30)
self.random_destination()
class AntStateSeeking(State):
def __init__(self, ant):
State.__init__(self, "seeking")
self.ant = ant
self.leaf_id = None
def check_conditions(self):
# If the leaf is gone, then go back to exploring
leaf = self.ant.world.get(self.ant.leaf_id)
if leaf is None:
return "exploring"
# If we are next to the leaf, pick it up and deliver it
if self.ant.location.get_distance_to(leaf.location) < 5.0:
self.ant.carry(leaf.image)
self.ant.world.remove_entity(leaf)
return "delivering"
return None
def entry_actions(self):
# Set the destination to the location of the leaf
leaf = self.ant.world.get(self.ant.leaf_id)
if leaf is not None:
self.ant.destination = leaf.location
self.ant.speed = 160. + randint(-20, 20)
class AntStateDelivering(State):
def __init__(self, ant):
State.__init__(self, "delivering")
self.ant = ant
def check_conditions(self):
# If inside the nest, randomly drop the object
if Vector2(*NEST_POSITION).get_distance_to(self.ant.location) < NEST_SIZE:
if (randint(1, 10) == 1):
self.ant.drop(self.ant.world.background)
return "exploring"
return None
def entry_actions(self):
# Move to a random point in the nest
self.ant.speed = 60.
random_offset = Vector2(randint(-20, 20), randint(-20, 20))
self.ant.destination = Vector2(*NEST_POSITION) + random_offset
class AntStateHunting(State):
def __init__(self, ant):
State.__init__(self, "hunting")
self.ant = ant
self.got_kill = False
def do_actions(self):
spider = self.ant.world.get(self.ant.spider_id)
if spider is None:
return
self.ant.destination = spider.location
if self.ant.location.get_distance_to(spider.location) < 15.:
# Give the spider a fighting chance to avoid being killed!
if randint(1, 5) == 1:
spider.bitten()
# If the spider is dead, move it back to the nest
if spider.health <= 0:
self.ant.carry(spider.image)
self.ant.world.remove_entity(spider)
self.got_kill = True
def check_conditions(self):
if self.got_kill:
return "delivering"
spider = self.ant.world.get(self.ant.spider_id)
# If the spider has been killed then return to exploring state
if spider is None:
return "exploring"
# If the spider gets far enough away, return to exploring state
if spider.location.get_distance_to(NEST_POSITION) > NEST_SIZE * 3:
return "exploring"
return None
def entry_actions(self):
self.speed = 160. + randint(0, 50)
def exit_actions(self):
self.got_kill = False
def run():
pygame.init()
screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32)
world = World()
w, h = SCREEN_SIZE
clock = pygame.time.Clock()
ant_image = pygame.image.load("ant.png").convert_alpha()
leaf_image = pygame.image.load("leaf.png").convert_alpha()
spider_image = pygame.image.load("spider.png").convert_alpha()
# Add all our ant entities
for ant_no in xrange(ANT_COUNT):
ant = Ant(world, ant_image)
ant.location = Vector2(randint(0, w), randint(0, h))
ant.brain.set_state("exploring")
world.add_entity(ant)
while True:
for event in pygame.event.get():
if event.type == QUIT:
return
time_passed = clock.tick(30)
# Add a leaf entity 1 in 20 frames
if randint(1, 10) == 1:
leaf = Leaf(world, leaf_image)
leaf.location = Vector2(randint(0, w), randint(0, h))
world.add_entity(leaf)
# Add a spider entity 1 in 100 frames
if randint(1, 100) == 1:
spider = Spider(world, spider_image)
spider.location = Vector2(-50, randint(0, h))
spider.destination = Vector2(w+50, randint(0, h))
world.add_entity(spider)
world.process(time_passed)
world.render(screen)
pygame.display.update()
if __name__ == "__main__":
run()
#12
Re: New to python
Posted 28 December 2009 - 11:49 AM
Help please.
#14
Re: New to python
Posted 05 January 2010 - 06:36 PM
Za_Slanka, on 28 Dec, 2009 - 10:49 AM, said:
Help please.
Better to start a new thread with this request ...
And it would be good to supply an example of the data (structure) in the CSV file
Oh yes ... don't forget to show the code you have so far
If you are really lost ... here is a free online Python (version 3.1) tutorial that might help you gain some experience with problem solving and working code.
http://developers-he...sg83.html#msg83
#15
Re: New to python
Posted 19 January 2010 - 05:11 PM
|
|

New Topic/Question
Reply




MultiQuote









|