This course explores the topic of intelligent software agents with an emphasis on hands-on design of adaptive problem-solving agents for environments of increasing complexity ranging from single-agent computer games to complex real-world multi-agent environments.