Created
October 27, 2012 03:23
-
-
Save bfb/3962827 to your computer and use it in GitHub Desktop.
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
package my.company.app | |
import net.scage.ScageScreenApp | |
import net.scage.ScageLib._ | |
import net.scage.support.{State, Vec} | |
import com.weiglewilczek.slf4s.Logger | |
import net.scage.support.tracer3.{TraceTrait, ScageTracer} | |
object Snake extends ScageScreenApp("Snake") { | |
private val log = Logger(this.getClass.getName) | |
val homer_tracer = new ScageTracer[Homer](solid_edges = false) { | |
render { | |
for{ | |
x <- 0 until N_x | |
y <- 0 until N_y | |
point = point_matrix(x)(y) | |
if point.size > 0 | |
snake_part = point.head | |
} snake_part.render() | |
} | |
} | |
val beer_tracer = new ScageTracer[Beer](solid_edges = false) { | |
render { | |
for{ | |
x <- 0 until N_x | |
y <- 0 until N_y | |
point = point_matrix(x)(y) | |
if point.size > 0 | |
snake_part = point.head | |
} snake_part.render() | |
} | |
} | |
private var count = 0 | |
interface { | |
print("TOTAL DRANK: " + count, 20, windowHeight-20, BLACK) | |
} | |
val LAND = image("land.png", 800, 600, 0, 0, 800, 600) | |
backgroundColor = WHITE | |
render(-10) { | |
drawDisplayList(LAND, windowCenter) | |
} | |
private var homer_dir = Vec(1, 0) | |
private var beer_dir = Vec(0, -1) | |
private var homer = homer_tracer.addTrace(Vec(homer_tracer.N_x/4, homer_tracer.N_y/6), new Homer) | |
private var beer = beer_tracer.addTrace(Vec(beer_tracer.N_x/2, beer_tracer.N_y/2), new Beer) | |
//key(KEY_UP, onKeyDown = dir = Vec(0,1)) | |
//key(KEY_DOWN, onKeyDown = dir = Vec(0,-1)) | |
key(KEY_RIGHT, onKeyDown = homer_dir = Vec(1,0)) | |
key(KEY_LEFT, onKeyDown = homer_dir = Vec(-1,0)) | |
val game_speed = property("game.speed", 100) | |
action(game_speed) { | |
// se o Homer achar uma cerveja, deve bebe-la | |
// beer_tracer.tracesInPoint(beer_tracer.outsidePoint(beer.location + beer_dir)).find(!_.isHomer) match { | |
// case Some(part_in_point) => { | |
// part_in_point.changeState(beer, new State("taken")) | |
// count += 1 | |
// deployNewPart() | |
// } | |
// case _ => | |
// } | |
if(beer_tracer.outsidePoint(beer.location + beer_dir) == homer_tracer.outsidePoint(homer.location + homer_dir)){ | |
count += 1 | |
//deployNewPart() | |
val random_point = beer_tracer.randomPoint() | |
if(beer_tracer.tracesInPoint(random_point).isEmpty) { | |
log.info("Drank beer!") | |
beer_tracer.updateLocation(beer, random_point) | |
//deleteSelf() | |
} else log.info("wrong place! Will choose another one on next turn") | |
} | |
//beer_tracer.tracesInPoint(beer_tracer.outsidePoint(beer.location + beer_dir)) | |
// homer_tracer.tracesInPoint(homer_tracer.outsidePoint(homer.location + homer_dir)).find(!_.wasTaken) match { | |
// case Some(part_in_point) => { | |
// part_in_point.changeState(homer, new State("taken")) | |
// count += 1 | |
// deployNewPart() | |
// } | |
// case _ => | |
// } | |
//nextMove(head, head.location + dir) | |
beer_tracer.updateLocation(beer, beer.location + beer_dir) | |
homer_tracer.updateLocation(homer, homer.location + homer_dir) | |
} | |
// def nextMove(part:SnakePart, new_position:Vec) { | |
// if(tracer.tracesInPoint(tracer.outsidePoint(new_position)).isEmpty) { | |
// val previous_position = part.location.copy | |
// tracer.updateLocation(part, new_position) | |
// if(part.nextPart != null) nextMove(part.nextPart, previous_position) | |
// } | |
// } | |
def deployNewPart() { | |
action(game_speed) { | |
val random_point = beer_tracer.randomPoint() | |
if(beer_tracer.tracesInPoint(random_point).isEmpty) { | |
log.info("Drank beer!") | |
beer_tracer.updateLocation(beer, random_point) | |
deleteSelf() | |
} else log.info("wrong place! Will choose another one on next turn") | |
} | |
} | |
deployNewPart() | |
} | |
import Snake._ | |
class Beer extends TraceTrait { | |
protected var was_taken = false | |
def wasDrank = was_taken | |
def state = new State() | |
type ChangerType = Beer | |
def changeState(changer:Beer, s:State) { | |
s.neededKeys { | |
case ("taken", true) => | |
was_taken = true | |
changer.changeState(this, new State("drank")) | |
} | |
} | |
def render() { | |
drawFilledRectCentered(beer_tracer.pointCenter(location), beer_tracer.h_x, beer_tracer.h_y, GREEN) | |
} | |
} | |
class Homer extends TraceTrait { | |
protected var was_taken = false | |
def isHomer = was_taken | |
def state = new State() | |
type ChangerType = Homer | |
def changeState(changer:Homer, s:State) { | |
s.neededKeys { | |
case ("taken", true) => | |
was_taken = true | |
changer.changeState(this, new State("drank")) | |
} | |
} | |
def render() { | |
drawFilledRectCentered(homer_tracer.pointCenter(location), homer_tracer.h_x, homer_tracer.h_y, RED) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment