Created
November 18, 2020 09:51
-
-
Save joshuaChoiXD/3b73821d6dec275a2e4561eb34723523 to your computer and use it in GitHub Desktop.
CodeCombat Game Development 2 (Q.21 - 29) Answers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#CodeCombat Game Development 2 | |
#Q.21 - 29 Answers | |
#Welcome to tell me any opinion of my codes. | |
#Check out my other Q.1 - 20 Answers | |
#Level 21 | |
# Mushrooms allow the player to destroy fences for a time. | |
player = game.spawnPlayerXY('captain', 22, 45) | |
player.maxSpeed = 30 | |
player.maxHealth = 10000 | |
game.addMoveGoalXY(23, 55) | |
ui.track(game, "time") | |
# The duration of the mushroom power. | |
game.powerDuration = 5 | |
# The time the mushroom power expires at. | |
game.powerEndTime = 0 | |
# "mushroom"s are collectable items without default effects. | |
game.spawnXY("mushroom", 22, 45) | |
game.spawnXY("mushroom", 12, 52) | |
game.spawnXY("mushroom", 12, 16) | |
game.spawnXY("mushroom", 36, 16) | |
game.spawnXY("mushroom", 36, 52) | |
game.spawnXY("mushroom", 56, 12) | |
game.spawnXY("mushroom", 56, 56) | |
game.spawnXY("mushroom", 56, 34) | |
# The event handler for "collect" events. | |
def onCollect(event): | |
unit = event.target | |
item = event.other | |
if item.type == "mushroom": | |
# "scale" changes the visual size of the unit. | |
unit.scale = 2 | |
game.powerEndTime = game.time + game.powerDuration | |
unit.say("ARRRGH!!!") | |
# The event handler for "collide" events. | |
def onCollide(event): | |
# The event owner who has collided with something. | |
unit = event.target | |
# The object the unit collided with. | |
collidedObject = event.other | |
# If it's a fence. | |
if collidedObject.type == "fence": | |
if unit.scale == 2: | |
# Use the `destroy` method of collidedObject. | |
collidedObject.destroy() | |
pass | |
# Assign onCollide to the "collide" event on the player. | |
player.on("collide", onCollide) | |
# Assign onCollect to the "collect" event on the player. | |
player.on("collect", onCollect) | |
def checkTimers(): | |
# If game time is greater than game.powerEndTime: | |
if game.time > game.powerEndTime: | |
# If player.scale is equal to 2: | |
if player.scale == 2: | |
# Set the player's scale to 1. | |
player.scale = 1 | |
pass | |
while True: | |
checkTimers() | |
#Level 22 | |
# Let's make a game of Freeze Tag! | |
# game.tagged is used to count tagged archers. | |
game.tagged = 0 | |
ui.track(game, "tagged") | |
goal = game.addManualGoal("Tag all archers.") | |
# Spawn the archers. | |
game.spawnXY("archer", 12, 52) | |
game.spawnXY("archer", 12, 16) | |
game.spawnXY("archer", 24, 52) | |
game.spawnXY("archer", 24, 16) | |
player = game.spawnPlayerXY('captain', 68, 24) | |
player.maxSpeed = 30 | |
player.maxHealth = 10000000000 | |
# Make the player bigger so it's easier to tag archers. | |
player.scale = 10 | |
# Set up the archers' speed and behavior properties onSpawn | |
def onSpawn(event): | |
unit = event.target | |
unit.behavior = "Scampers" | |
unit.maxSpeed = 8 | |
game.setActionFor("archer", "spawn", onSpawn) | |
# The event handler for "collide" events. | |
def onCollide(event): | |
# The event owner who has collided with something. | |
unit = event.target | |
# The object the unit collided with. | |
other = event.other | |
# Use behavior as a marker for the current frozen state. | |
# "Scampers" means the archer wasn't yet tagged. | |
if unit.behavior == "Scampers": | |
# If "other" is the player. | |
if other.type == "captain": | |
# Set unit.behavior to "Defends": | |
unit.behavior = "Defends" | |
# Increase game.tagged by 1: | |
game.tagged += 1 | |
pass | |
if unit.behavior == "Defends": | |
# If other's type is "archer": | |
if other.type == "archer": | |
# Set unit.behavior to "Scampers": | |
unit.behavior = "Scampers" | |
# Reduce game.tagged by 1. | |
game.tagged -= 1 | |
# Use setActionFor to assign onCollide to the "collide" event for "archer"s. | |
game.setActionFor("archer", "collide", onCollide) | |
while True: | |
if game.tagged >= 4: | |
game.setGoalState(goal, True) | |
#Level 23 | |
# Generate randomly placed treasures and destroy them later. | |
# This spawns an item with lifetime at a random point. | |
def spawnValuable(itemType, lifetime): | |
x = game.randomInteger(12, 68) | |
y = game.randomInteger(12, 56) | |
item = game.spawnXY(itemType, x, y) | |
item.destroyTime = game.time + lifetime | |
# This spawns the treasure set. | |
def spawnTreasures(): | |
spawnValuable("bronze-coin", 6) | |
spawnValuable("silver-coin", 5) | |
spawnValuable("gold-coin", 4) | |
spawnValuable("gold-coin") | |
spawnValuable("gold-coin", 4) | |
spawnValuable("gem", 2) | |
spawnValuable("bronze-coin", 6) | |
spawnValuable("silver-coin", 5) | |
spawnValuable("gold-coin", 4) | |
spawnValuable("gold-coin") | |
spawnValuable("gold-coin", 4) | |
spawnValuable("gem", 2) | |
# The event handler for items. | |
def onSpawn(event): | |
item = event.target | |
while True: | |
# If the game time is greater than item destroyTime: | |
if game.time >= item.destroyTime: | |
# Destroy the item: | |
item.destroy() | |
pass | |
game.setActionFor("bronze-coin", "spawn", onSpawn) | |
game.setActionFor("silver-coin", "spawn", onSpawn) | |
game.setActionFor("gold-coin", "spawn", onSpawn) | |
game.setActionFor("gem", "spawn", onSpawn) | |
# Game settings, goals and UI. | |
game.spawnTime = 0 | |
game.spawnInterval = 3 | |
game.score = 0 | |
if not db.get("topScore"): | |
db.set("topScore", 0) | |
ui.track(game, "time") | |
ui.track(game, "score") | |
ui.track(db, "topScore") | |
goal = game.addManualGoal("Collect at least 50 gold for 30 seconds.") | |
# The hero setup. | |
hero = game.spawnHeroXY("captain", 40, 34) | |
hero.maxSpeed = 50 | |
def onCollect(event): | |
item = event.other | |
# If the item has 'value' property: | |
if item.value: | |
# Increase the game score by item's value: | |
game.score += item.value | |
hero.on("collect", onCollect) | |
# This checks timers for treasure spawning. | |
def checkSpawns(): | |
# If game time is greater than game spawnTime: | |
if game.time > game.spawnTime: | |
# Use spawnTreasures to create more items. | |
spawnTreasures() | |
# Increase game.spawnTime by game.spawnInterval: | |
game.spawnTime += game.spawnInterval | |
pass | |
# This checks the goal state. | |
def checkGoal(): | |
if game.score > 50: | |
goal.success = True | |
else: | |
goal.success = False | |
# This checks the game state. | |
def checkGameOver(): | |
if game.time > 30: | |
checkGoal() | |
db.set("topScore", game.score) | |
while True: | |
checkSpawns() | |
checkGameOver() | |
#Level 24 | |
# Destroy at least 50 defeated ogres. | |
# This spawns and configures an archer. | |
def spawnArcher(x, y): | |
archer = game.spawnXY("archer", x, y) | |
archer.behavior = "Defends" | |
archer.attackDamage = 20 | |
# This spawns and configures an ogre. | |
def spawnMunchkin(x, y): | |
ogre = game.spawnXY("munchkin", x, y) | |
ogre.behavior = "AttacksNearest" | |
# Spawns some archers in a row. | |
def spawnArcherWall(): | |
spawnArcher(30, 12) | |
spawnArcher(30, 23) | |
spawnArcher(30, 34) | |
spawnArcher(30, 45) | |
spawnArcher(30, 56) | |
# Spawns an ogre wave with a random offset for variety. | |
def spawnOgreWave(): | |
offset = game.randomInteger(-6, 6) | |
spawnMunchkin(80, 16 + offset) | |
spawnMunchkin(80, 22 + offset) | |
spawnMunchkin(80, 28 + offset) | |
spawnMunchkin(80, 34 + offset) | |
spawnMunchkin(80, 40 + offset) | |
spawnMunchkin(80, 46 + offset) | |
spawnMunchkin(80, 52 + offset) | |
def onDefeat(event): | |
unit = event.target | |
# Increase the game.defeated counter by 1. | |
game.defeated += 1 | |
# Use unit.destroy() to destroy it. | |
unit.destroy() | |
# Set "munchkin"s "defeat" event handlers to onDefeat. | |
game.setActionFor("munchkin", "defeat", onDefeat) | |
game.defeated = 0 | |
game.spawnTime = 0 | |
# Add a manual goal. | |
goal = game.addManualGoal("Defeat 77 ogres.") | |
ui.track(game, "defeated") | |
def checkSpawnTimer(): | |
if game.time > game.spawnTime: | |
spawnOgreWave() | |
game.spawnTime += 1 | |
def checkGoal(): | |
# If the game.defeated counter is greater than 77: | |
if game.defeated > 77: | |
# Set the goal as successfully completed. | |
game.setGoalState(goal, True) | |
pass | |
spawnArcherWall() | |
while True: | |
checkSpawnTimer() | |
checkGoal() | |
#Level 25 | |
# Let's start building a new Pac-Man style arcade game. | |
# We will continue working on this game in the next levels. | |
# First we need the forest. | |
# Let's spawn some "forest" tiles in a grid pattern. | |
game.spawnXY("forest", 16, 16) | |
game.spawnXY("forest", 32, 16) | |
game.spawnXY("forest", 48, 16) | |
game.spawnXY("forest", 64, 16) | |
game.spawnXY("forest", 16, 32) | |
game.spawnXY("forest", 32, 32) | |
game.spawnXY("forest", 48, 32) | |
game.spawnXY("forest", 64, 32) | |
game.spawnXY("forest", 16, 48) | |
# As you can see the distance between them is 16 meters. | |
# Spawn more forest tiles in the three spots | |
# where they are missing | |
game.spawnXY("forest", 32, 48) | |
game.spawnXY("forest", 48, 48) | |
game.spawnXY("forest", 64, 48) | |
# Next we spawn coins in between the forests. | |
# Leave free space for mushroom power-ups! | |
# Scroll down, there are many coins. | |
game.spawnXY("bronze-coin", 16, 8) | |
game.spawnXY("bronze-coin", 24, 8) | |
game.spawnXY("bronze-coin", 32, 8) | |
game.spawnXY("bronze-coin", 48, 8) | |
game.spawnXY("bronze-coin", 56, 8) | |
game.spawnXY("bronze-coin", 64, 8) | |
game.spawnXY("bronze-coin", 72, 8) | |
game.spawnXY("bronze-coin", 8, 16) | |
game.spawnXY("bronze-coin", 24, 16) | |
game.spawnXY("bronze-coin", 40, 16) | |
game.spawnXY("bronze-coin", 56, 16) | |
game.spawnXY("bronze-coin", 72, 16) | |
game.spawnXY("bronze-coin", 8, 24) | |
game.spawnXY("bronze-coin", 16, 24) | |
game.spawnXY("bronze-coin", 24, 24) | |
game.spawnXY("bronze-coin", 32, 24) | |
game.spawnXY("bronze-coin", 40, 24) | |
game.spawnXY("bronze-coin", 48, 24) | |
game.spawnXY("bronze-coin", 56, 24) | |
game.spawnXY("bronze-coin", 64, 24) | |
game.spawnXY("bronze-coin", 72, 24) | |
game.spawnXY("bronze-coin", 24, 32) | |
game.spawnXY("bronze-coin", 56, 32) | |
game.spawnXY("bronze-coin", 8, 40) | |
game.spawnXY("bronze-coin", 16, 40) | |
game.spawnXY("bronze-coin", 24, 40) | |
game.spawnXY("bronze-coin", 32, 40) | |
game.spawnXY("bronze-coin", 40, 40) | |
game.spawnXY("bronze-coin", 48, 40) | |
game.spawnXY("bronze-coin", 56, 40) | |
game.spawnXY("bronze-coin", 64, 40) | |
game.spawnXY("bronze-coin", 72, 40) | |
game.spawnXY("bronze-coin", 8, 48) | |
game.spawnXY("bronze-coin", 24, 48) | |
game.spawnXY("bronze-coin", 40, 48) | |
game.spawnXY("bronze-coin", 56, 48) | |
game.spawnXY("bronze-coin", 72, 48) | |
game.spawnXY("bronze-coin", 8, 56) | |
game.spawnXY("bronze-coin", 16, 56) | |
game.spawnXY("bronze-coin", 24, 56) | |
game.spawnXY("bronze-coin", 32, 56) | |
# Spawn more coins in the empty spaces. (8 meters apart) | |
game.spawnXY("bronze-coin", 40, 32) | |
game.spawnXY("bronze-coin", 48, 55) | |
game.spawnXY("bronze-coin", 56, 56) | |
game.spawnXY("bronze-coin", 64, 56) | |
game.spawnXY("bronze-coin", 72, 56) | |
# Mushrooms will be our powerups. | |
game.spawnXY("mushroom", 40, 8) | |
game.spawnXY("mushroom", 8, 32) | |
# Spawn more mushrooms. | |
game.spawnXY("mushroom", 40, 56) | |
game.spawnXY("mushroom", 72, 32) | |
# The player and goal setup. | |
player = game.spawnPlayerXY('knight', 8, 8) | |
player.maxSpeed = 50 | |
game.addCollectGoal() | |
# Now test what you’ve done to make sure it works! | |
#Level 26 | |
# Part 2 of creating a Pac-Man style arcade game. | |
# The game layout and items. Scroll down. | |
game.spawnXY("forest", 16, 16) | |
game.spawnXY("forest", 32, 16) | |
game.spawnXY("forest", 48, 16) | |
game.spawnXY("forest", 64, 16) | |
game.spawnXY("forest", 16, 32) | |
game.spawnXY("forest", 32, 32) | |
game.spawnXY("forest", 48, 32) | |
game.spawnXY("forest", 64, 32) | |
game.spawnXY("forest", 16, 48) | |
game.spawnXY("forest", 32, 48) | |
game.spawnXY("forest", 48, 48) | |
game.spawnXY("forest", 64, 48) | |
game.spawnXY("bronze-coin", 16, 8) | |
game.spawnXY("bronze-coin", 24, 8) | |
game.spawnXY("bronze-coin", 32, 8) | |
game.spawnXY("bronze-coin", 48, 8) | |
game.spawnXY("bronze-coin", 56, 8) | |
game.spawnXY("bronze-coin", 64, 8) | |
game.spawnXY("bronze-coin", 72, 8) | |
game.spawnXY("bronze-coin", 8, 16) | |
game.spawnXY("bronze-coin", 24, 16) | |
game.spawnXY("bronze-coin", 40, 16) | |
game.spawnXY("bronze-coin", 56, 16) | |
game.spawnXY("bronze-coin", 72, 16) | |
game.spawnXY("bronze-coin", 8, 24) | |
game.spawnXY("bronze-coin", 16, 24) | |
game.spawnXY("bronze-coin", 24, 24) | |
game.spawnXY("bronze-coin", 32, 24) | |
game.spawnXY("bronze-coin", 40, 24) | |
game.spawnXY("bronze-coin", 48, 24) | |
game.spawnXY("bronze-coin", 56, 24) | |
game.spawnXY("bronze-coin", 64, 24) | |
game.spawnXY("bronze-coin", 72, 24) | |
game.spawnXY("bronze-coin", 24, 32) | |
game.spawnXY("bronze-coin", 56, 32) | |
game.spawnXY("bronze-coin", 8, 40) | |
game.spawnXY("bronze-coin", 16, 40) | |
game.spawnXY("bronze-coin", 24, 40) | |
game.spawnXY("bronze-coin", 32, 40) | |
game.spawnXY("bronze-coin", 40, 40) | |
game.spawnXY("bronze-coin", 48, 40) | |
game.spawnXY("bronze-coin", 56, 40) | |
game.spawnXY("bronze-coin", 64, 40) | |
game.spawnXY("bronze-coin", 72, 40) | |
game.spawnXY("bronze-coin", 8, 48) | |
game.spawnXY("bronze-coin", 24, 48) | |
game.spawnXY("bronze-coin", 40, 48) | |
game.spawnXY("bronze-coin", 56, 48) | |
game.spawnXY("bronze-coin", 72, 48) | |
game.spawnXY("bronze-coin", 8, 56) | |
game.spawnXY("bronze-coin", 16, 56) | |
game.spawnXY("bronze-coin", 24, 56) | |
game.spawnXY("bronze-coin", 32, 56) | |
game.spawnXY("bronze-coin", 48, 56) | |
game.spawnXY("bronze-coin", 56, 56) | |
game.spawnXY("bronze-coin", 64, 56) | |
game.spawnXY("bronze-coin", 72, 56) | |
game.spawnXY("mushroom", 40, 8) | |
game.spawnXY("mushroom", 8, 32) | |
game.spawnXY("mushroom", 72, 32) | |
game.spawnXY("mushroom", 40, 56) | |
# The game score. | |
game.score = 1000 | |
game.addCollectGoal() | |
# Setting UI for "score" and "time". | |
ui.track(game, "time") | |
ui.track(game, "score") | |
player = game.spawnPlayerXY("knight", 8, 8) | |
# High player speed for now, to simplify your level testing. | |
#lol you should do this a lot earlier | |
player.maxSpeed = 50 | |
def onCollect(event): | |
player = event.target | |
item = event.other | |
# If the item's type is "bronze-coin": | |
if item.type == "bronze-coin": | |
# Increase the game.score by 1. | |
game.score += 1 | |
pass | |
# If the type is "mushroom", then increase game.score by 5. | |
if item.type == "mushroom": | |
game.score += 5 | |
# Assign the event handler on the player's "collect" event. | |
game.setActionFor("knight", "collect", onCollect) | |
# This function reduces the score over time. | |
def checkTimeScore(): | |
# Each time frame we reduce the game.score: | |
game.score -= 0.5 | |
# If the game.score is less than 0: | |
if game.score <= 0: | |
# Set the game.score equal to 0: | |
game.score = 0 | |
# The main game loop. | |
while True: | |
checkTimeScore() | |
# Win the game. | |
#Level 27 | |
# Step 3 of creating a Pac-Man style arcade game. | |
# The game layout and items. Scroll down. | |
game.spawnXY("forest", 16, 16) | |
game.spawnXY("forest", 32, 16) | |
game.spawnXY("forest", 48, 16) | |
game.spawnXY("forest", 64, 16) | |
game.spawnXY("forest", 16, 32) | |
game.spawnXY("forest", 32, 32) | |
game.spawnXY("forest", 48, 32) | |
game.spawnXY("forest", 64, 32) | |
game.spawnXY("forest", 16, 48) | |
game.spawnXY("forest", 32, 48) | |
game.spawnXY("forest", 48, 48) | |
game.spawnXY("forest", 64, 48) | |
game.spawnXY("bronze-coin", 16, 8) | |
game.spawnXY("bronze-coin", 24, 8) | |
game.spawnXY("bronze-coin", 32, 8) | |
game.spawnXY("bronze-coin", 48, 8) | |
game.spawnXY("bronze-coin", 56, 8) | |
game.spawnXY("bronze-coin", 64, 8) | |
game.spawnXY("bronze-coin", 72, 8) | |
game.spawnXY("bronze-coin", 8, 16) | |
game.spawnXY("bronze-coin", 24, 16) | |
game.spawnXY("bronze-coin", 40, 16) | |
game.spawnXY("bronze-coin", 56, 16) | |
game.spawnXY("bronze-coin", 72, 16) | |
game.spawnXY("bronze-coin", 8, 24) | |
game.spawnXY("bronze-coin", 16, 24) | |
game.spawnXY("bronze-coin", 24, 24) | |
game.spawnXY("bronze-coin", 32, 24) | |
game.spawnXY("bronze-coin", 40, 24) | |
game.spawnXY("bronze-coin", 48, 24) | |
game.spawnXY("bronze-coin", 56, 24) | |
game.spawnXY("bronze-coin", 64, 24) | |
game.spawnXY("bronze-coin", 72, 24) | |
game.spawnXY("bronze-coin", 24, 32) | |
game.spawnXY("bronze-coin", 56, 32) | |
game.spawnXY("bronze-coin", 8, 40) | |
game.spawnXY("bronze-coin", 16, 40) | |
game.spawnXY("bronze-coin", 24, 40) | |
game.spawnXY("bronze-coin", 32, 40) | |
game.spawnXY("bronze-coin", 40, 40) | |
game.spawnXY("bronze-coin", 48, 40) | |
game.spawnXY("bronze-coin", 56, 40) | |
game.spawnXY("bronze-coin", 64, 40) | |
game.spawnXY("bronze-coin", 72, 40) | |
game.spawnXY("bronze-coin", 8, 48) | |
game.spawnXY("bronze-coin", 24, 48) | |
game.spawnXY("bronze-coin", 40, 48) | |
game.spawnXY("bronze-coin", 56, 48) | |
game.spawnXY("bronze-coin", 72, 48) | |
game.spawnXY("bronze-coin", 8, 56) | |
game.spawnXY("bronze-coin", 16, 56) | |
game.spawnXY("bronze-coin", 24, 56) | |
game.spawnXY("bronze-coin", 32, 56) | |
game.spawnXY("bronze-coin", 48, 56) | |
game.spawnXY("bronze-coin", 56, 56) | |
game.spawnXY("bronze-coin", 64, 56) | |
game.spawnXY("bronze-coin", 72, 56) | |
game.spawnXY("mushroom", 40, 8) | |
game.spawnXY("mushroom", 8, 32) | |
game.spawnXY("mushroom", 72, 32) | |
game.spawnXY("mushroom", 40, 56) | |
game.score = 1000 | |
ui.track(game, "time") | |
ui.track(game, "score") | |
# Lets simplify the game while we don't have power-ups. | |
game.addCollectGoal(10) | |
game.addSurviveGoal() | |
player = game.spawnPlayerXY("knight", 8, 8) | |
player.maxSpeed = 32 | |
player.maxHealth = 1 | |
def onCollect(event): | |
player = event.target | |
item = event.other | |
if item.type == "bronze-coin": | |
game.score += 1 | |
if item.type == "mushroom": | |
game.score += 5 | |
player.on("collect", onCollect) | |
# Spawn a monster "generator" in the center: | |
gen = game.spawnXY("generator", 40, 33) | |
# Set the generator spawnType to “scout”. | |
gen.spawnType = "scout" | |
# Set the generator spawnDelay to 6 (or greater). | |
gen.spawnDelay = 100 | |
# This function configures new spawned scouts. | |
def onSpawn(event): | |
unit = event.target | |
unit.maxSpeed = 8 | |
# Set the unit's attackDamage to a value that | |
# is greater than or equal to the player's maxHealth. | |
unit.attackDamage = 1 | |
# Set the handler for "scout"s' "spawn" event to onSpawn | |
game.setActionFor("scout", "spawn", onSpawn) | |
def checkTimeScore(): | |
game.score -= 0.5 | |
if game.score < 0: | |
game.score = 0 | |
while True: | |
checkTimeScore() | |
# Win the game. | |
#Level 28 | |
# The game layout and items. Scroll down. | |
game.spawnXY("forest", 16, 16) | |
game.spawnXY("forest", 32, 16) | |
game.spawnXY("forest", 48, 16) | |
game.spawnXY("forest", 64, 16) | |
game.spawnXY("forest", 16, 32) | |
game.spawnXY("forest", 32, 32) | |
game.spawnXY("forest", 48, 32) | |
game.spawnXY("forest", 64, 32) | |
game.spawnXY("forest", 16, 48) | |
game.spawnXY("forest", 32, 48) | |
game.spawnXY("forest", 48, 48) | |
game.spawnXY("forest", 64, 48) | |
game.spawnXY("bronze-coin", 16, 8) | |
game.spawnXY("bronze-coin", 24, 8) | |
game.spawnXY("bronze-coin", 32, 8) | |
game.spawnXY("bronze-coin", 48, 8) | |
game.spawnXY("bronze-coin", 56, 8) | |
game.spawnXY("bronze-coin", 64, 8) | |
game.spawnXY("bronze-coin", 72, 8) | |
game.spawnXY("bronze-coin", 8, 16) | |
game.spawnXY("bronze-coin", 24, 16) | |
game.spawnXY("bronze-coin", 40, 16) | |
game.spawnXY("bronze-coin", 56, 16) | |
game.spawnXY("bronze-coin", 72, 16) | |
game.spawnXY("bronze-coin", 8, 24) | |
game.spawnXY("bronze-coin", 16, 24) | |
game.spawnXY("bronze-coin", 24, 24) | |
game.spawnXY("bronze-coin", 32, 24) | |
game.spawnXY("bronze-coin", 40, 24) | |
game.spawnXY("bronze-coin", 48, 24) | |
game.spawnXY("bronze-coin", 56, 24) | |
game.spawnXY("bronze-coin", 64, 24) | |
game.spawnXY("bronze-coin", 72, 24) | |
game.spawnXY("bronze-coin", 24, 32) | |
game.spawnXY("bronze-coin", 56, 32) | |
game.spawnXY("bronze-coin", 8, 40) | |
game.spawnXY("bronze-coin", 16, 40) | |
game.spawnXY("bronze-coin", 24, 40) | |
game.spawnXY("bronze-coin", 32, 40) | |
game.spawnXY("bronze-coin", 40, 40) | |
game.spawnXY("bronze-coin", 48, 40) | |
game.spawnXY("bronze-coin", 56, 40) | |
game.spawnXY("bronze-coin", 64, 40) | |
game.spawnXY("bronze-coin", 72, 40) | |
game.spawnXY("bronze-coin", 8, 48) | |
game.spawnXY("bronze-coin", 24, 48) | |
game.spawnXY("bronze-coin", 40, 48) | |
game.spawnXY("bronze-coin", 56, 48) | |
game.spawnXY("bronze-coin", 72, 48) | |
game.spawnXY("bronze-coin", 8, 56) | |
game.spawnXY("bronze-coin", 16, 56) | |
game.spawnXY("bronze-coin", 24, 56) | |
game.spawnXY("bronze-coin", 32, 56) | |
game.spawnXY("bronze-coin", 48, 56) | |
game.spawnXY("bronze-coin", 56, 56) | |
game.spawnXY("bronze-coin", 64, 56) | |
game.spawnXY("bronze-coin", 72, 56) | |
game.spawnXY("mushroom", 40, 8) | |
game.spawnXY("mushroom", 8, 32) | |
game.spawnXY("mushroom", 72, 32) | |
game.spawnXY("mushroom", 40, 56) | |
game.score = 1000 | |
# The duration of power-ups. | |
game.powerDuration = 4 | |
# The time until a power-up runs out. Used for UI. | |
game.powerTime = 0 | |
# The time a power-up expires. Used internally. | |
game.powerEndTime = 0 | |
ui.track(game, "time") | |
ui.track(game, "score") | |
# Add ui for game.powerTime: | |
game.addCollectGoal() | |
game.addSurviveGoal(); | |
hero = game.spawnHeroXY("knight", 8, 8) | |
hero.maxSpeed = 50 | |
# The function make the hero big and strong. | |
def powerHeroUp(): | |
hero.scale = 2 | |
hero.attackDamage = 100 | |
game.powerEndTime = game.time + game.powerDuration | |
# The function return the hero in the normal state. | |
def powerHeroDown(): | |
hero.scale = 1 | |
hero.attackDamage = 1 | |
def onCollect(event): | |
player = event.target | |
item = event.other | |
if item.type == "bronze-coin": | |
game.score += 1 | |
if item.type == "mushroom": | |
game.score += 5 | |
# Use powerHeroUp to strengthen the hero: | |
powerHeroUp() | |
def onCollide(event): | |
player = event.target | |
other = event.other | |
# If other is a "scout" and the player's scale is 2: | |
if other.type == 'scout' and player.scale==2: | |
# Defeat the other with the defeat method: | |
other.die() | |
hero.on("collect", onCollect) | |
# Assign the event handler for the hero's "collide" event: | |
hero.on("collide", onCollide) | |
generator = game.spawnXY("generator", 41, 31) | |
generator.spawnType = "scout" | |
generator.spawnDelay = 6; | |
def onSpawn(event): | |
unit = event.target | |
unit.maxSpeed = 8 | |
unit.attackDamage = hero.maxHealth | |
while True: | |
# Enemies run away from the big hero. | |
if hero.scale == 2: | |
unit.behavior = "RunsAway" | |
else: | |
unit.behavior = "AttacksNearest" | |
def onDefeat(event): | |
# Increase game.score for defeated enemies: | |
game.score +=1 | |
pass | |
game.setActionFor("scout", "spawn", onSpawn) | |
# Set the action for "scout"'s "defeat" event: | |
game.setActionFor("scout", "defeat", onDefeat) | |
def checkTimeScore(): | |
game.score -= 0.5 | |
if game.score < 0: | |
game.score = 0 | |
def checkPowerTimer(): | |
# Remaining power time. | |
game.powerTime = game.powerEndTime - game.time | |
if game.powerTime <= 0: | |
game.powerTime = 0 | |
# If the hero's scale is 2: | |
if hero.scale==2: | |
# Use powerHeroDown to end the power-up. | |
powerHeroDown() | |
# Lets combine all the time based functions. | |
def checkTimers(): | |
checkTimeScore() | |
checkPowerTimer() | |
while True: | |
checkTimers() | |
# Win the game. | |
#Level 29 | |
# Step 5 of creating a Pac-Man style arcade game. | |
# GAME PARAMETERS | |
# Game parameters define the game difficulty. | |
# Change the game parameters to balance the game. | |
# How long power-ups work (seconds). | |
POWER_DURATION = 5 # ∆ | |
# Score values for coins, mushrooms and ogres. | |
COIN_SCORE = 2 # ∆ | |
MUSHROOM_SCORE = 10 # ∆ | |
DEFEATED_SCORE = 2 # ∆ | |
# How much the score is reduced each game tick. | |
TIME_SCORE = 2 # ∆ | |
# The player and ogre speeds. | |
HERO_SPEED = 30 # ∆ | |
OGRE_SPEED = 1 # ∆ | |
# The ogre spawn delay (seconds). | |
SPAWN_DELAY = 100 # ∆ | |
# LEVEL LAYOUT | |
# Obstacles and collectable items. | |
game.spawnXY("forest", 16, 16) | |
game.spawnXY("forest", 32, 16) | |
game.spawnXY("forest", 48, 16) | |
game.spawnXY("forest", 64, 16) | |
game.spawnXY("forest", 16, 32) | |
game.spawnXY("forest", 32, 32) | |
game.spawnXY("forest", 48, 32) | |
game.spawnXY("forest", 64, 32) | |
game.spawnXY("forest", 16, 48) | |
game.spawnXY("forest", 32, 48) | |
game.spawnXY("forest", 48, 48) | |
game.spawnXY("forest", 64, 48) | |
game.spawnXY("bronze-coin", 16, 8) | |
game.spawnXY("bronze-coin", 24, 8) | |
game.spawnXY("bronze-coin", 32, 8) | |
game.spawnXY("bronze-coin", 48, 8) | |
game.spawnXY("bronze-coin", 56, 8) | |
game.spawnXY("bronze-coin", 64, 8) | |
game.spawnXY("bronze-coin", 72, 8) | |
game.spawnXY("bronze-coin", 8, 16) | |
game.spawnXY("bronze-coin", 24, 16) | |
game.spawnXY("bronze-coin", 40, 16) | |
game.spawnXY("bronze-coin", 56, 16) | |
game.spawnXY("bronze-coin", 72, 16) | |
game.spawnXY("bronze-coin", 8, 24) | |
game.spawnXY("bronze-coin", 16, 24) | |
game.spawnXY("bronze-coin", 24, 24) | |
game.spawnXY("bronze-coin", 32, 24) | |
game.spawnXY("bronze-coin", 40, 24) | |
game.spawnXY("bronze-coin", 48, 24) | |
game.spawnXY("bronze-coin", 56, 24) | |
game.spawnXY("bronze-coin", 64, 24) | |
game.spawnXY("bronze-coin", 72, 24) | |
game.spawnXY("bronze-coin", 24, 32) | |
game.spawnXY("bronze-coin", 56, 32) | |
game.spawnXY("bronze-coin", 8, 40) | |
game.spawnXY("bronze-coin", 16, 40) | |
game.spawnXY("bronze-coin", 24, 40) | |
game.spawnXY("bronze-coin", 32, 40) | |
game.spawnXY("bronze-coin", 40, 40) | |
game.spawnXY("bronze-coin", 48, 40) | |
game.spawnXY("bronze-coin", 56, 40) | |
game.spawnXY("bronze-coin", 64, 40) | |
game.spawnXY("bronze-coin", 72, 40) | |
game.spawnXY("bronze-coin", 8, 48) | |
game.spawnXY("bronze-coin", 24, 48) | |
game.spawnXY("bronze-coin", 40, 48) | |
game.spawnXY("bronze-coin", 56, 48) | |
game.spawnXY("bronze-coin", 72, 48) | |
game.spawnXY("bronze-coin", 8, 56) | |
game.spawnXY("bronze-coin", 16, 56) | |
game.spawnXY("bronze-coin", 24, 56) | |
game.spawnXY("bronze-coin", 32, 56) | |
game.spawnXY("bronze-coin", 48, 56) | |
game.spawnXY("bronze-coin", 56, 56) | |
game.spawnXY("bronze-coin", 64, 56) | |
game.spawnXY("bronze-coin", 72, 56) | |
game.spawnXY("mushroom", 40, 8) | |
game.spawnXY("mushroom", 8, 32) | |
game.spawnXY("mushroom", 72, 32) | |
game.spawnXY("mushroom", 40, 56) | |
# GAME SETUP | |
# Goals, UI and game global variables. | |
game.score = 1000 | |
game.powerDuration = POWER_DURATION | |
game.powerTime = 0 | |
game.powerEndTime = 0 | |
ui.track(game, "time") | |
ui.track(game, "score") | |
ui.track(game, "powerTime") | |
game.addCollectGoal() | |
game.addSurviveGoal(); | |
# HERO SETUP | |
# The player, its parameters and event handlers. | |
player = game.spawnPlayerXY("knight", 8, 8) | |
player.maxSpeed = HERO_SPEED | |
def powerPlayerUp(): | |
player.scale = 2 | |
player.attackDamage = 100 | |
game.powerEndTime = game.time + game.powerDuration | |
def powerPlayerDown(): | |
player.scale = 1 | |
player.attackDamage = 1 | |
def onCollect(event): | |
player = event.target | |
item = event.other | |
if item.type == "bronze-coin": | |
game.score += COIN_SCORE | |
if item.type == "mushroom": | |
game.score += MUSHROOM_SCORE | |
powerPlayerUp() | |
def onCollide(event): | |
player = event.target | |
other = event.other | |
if other.type == "scout" and player.scale == 2: | |
other.defeat() | |
player.on("collect", onCollect) | |
player.on("collide", onCollide) | |
# ENEMIES | |
# The enemy generator, enemies` events and parameters. | |
generator = game.spawnXY("generator", 41, 31) | |
generator.spawnType = "scout" | |
generator.spawnDelay = SPAWN_DELAY; | |
def onSpawn(event): | |
unit = event.target | |
unit.maxSpeed = OGRE_SPEED | |
unit.attackDamage = player.maxHealth | |
while True: | |
if player.scale == 2: | |
unit.behavior = "RunsAway" | |
else: | |
unit.behavior = "AttacksNearest" | |
def onDefeat(event): | |
game.score += DEFEATED_SCORE | |
game.setActionFor("scout", "spawn", onSpawn) | |
game.setActionFor("scout", "defeat", onDefeat) | |
# GAME LOOP | |
# The main game loop with time-based functions. | |
def checkTimeScore(): | |
game.score -= TIME_SCORE | |
if game.score < 0: | |
game.score = 0 | |
def checkPowerTimer(): | |
game.powerTime = game.powerEndTime - game.time | |
if game.powerTime <= 0: | |
game.powerTime = 0 | |
if player.scale == 2: | |
powerPlayerDown() | |
def checkTimers(): | |
checkTimeScore() | |
checkPowerTimer() | |
while True: | |
checkTimers() | |
# Win the game! |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment