public void moveForward(int spaces) { // change y + if (me.direction.equals("N")) { int i = 1; while (!map.isBlocked(me.x, me.y + 1) && i <= spaces) { me.y += 1; i++; } // went too far if (i < spaces) { explode(); } } // change y - else if (me.direction.equals("S")) { int i = 1; while (!map.isBlocked(me.x, me.y - 1) && i <= spaces) { me.y -= 1; i++; } // went too far if (i < spaces) { explode(); } } // change x + else if (me.direction.equals("E")) { int i = 1; while (!map.isBlocked(me.x + 1, me.y) && i <= spaces) { me.x += 1; i++; } // went too far if (i < spaces) { explode(); } } // change x - else if (me.direction.equals("W")) { int i = 1; while (!map.isBlocked(me.x - 1, me.y) && i <= spaces) { me.x -= 1; i++; } // went too far if (i < spaces) { explode(); } } else { // error - do nothing } }
@Override public void create() { super.create(); Music.INSTANCE.play(Assets.HAPPY, true); Music.INSTANCE.volume(ShatteredPixelDungeon.musicVol() / 10f); uiCamera.visible = false; int w = Camera.main.width; int h = Camera.main.height; Archs archs = new Archs(); archs.reversed = true; archs.setSize(w, h); add(archs); float vx = align((w - SKY_WIDTH) / 2); float vy = align((h - SKY_HEIGHT - BUTTON_HEIGHT) / 2); Point s = Camera.main.cameraToScreen(vx, vy); viewport = new Camera(s.x, s.y, SKY_WIDTH, SKY_HEIGHT, defaultZoom); Camera.add(viewport); Group window = new Group(); window.camera = viewport; add(window); boolean dayTime = Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 7; Sky sky = new Sky(dayTime); sky.scale.set(SKY_WIDTH, SKY_HEIGHT); window.add(sky); if (!dayTime) { for (int i = 0; i < NSTARS; i++) { float size = Random.Float(); ColorBlock star = new ColorBlock(size, size, 0xFFFFFFFF); star.x = Random.Float(SKY_WIDTH) - size / 2; star.y = Random.Float(SKY_HEIGHT) - size / 2; star.am = size * (1 - star.y / SKY_HEIGHT); window.add(star); } } float range = SKY_HEIGHT * 2 / 3; for (int i = 0; i < NCLOUDS; i++) { Cloud cloud = new Cloud((NCLOUDS - 1 - i) * (range / NCLOUDS) + Random.Float(range / NCLOUDS), dayTime); window.add(cloud); } int nPatches = (int) (sky.width() / GrassPatch.WIDTH + 1); for (int i = 0; i < nPatches * 4; i++) { GrassPatch patch = new GrassPatch((i - 0.75f) * GrassPatch.WIDTH / 4, SKY_HEIGHT + 1, dayTime); patch.brightness(dayTime ? 0.7f : 0.4f); window.add(patch); } Avatar a = new Avatar(Dungeon.hero.heroClass); // Removing semitransparent contour a.am = 2; a.aa = -1; a.x = PixelScene.align((SKY_WIDTH - a.width) / 2); a.y = SKY_HEIGHT - a.height; window.add(a); final Pet pet = new Pet(); pet.rm = pet.gm = pet.bm = 1.2f; pet.x = SKY_WIDTH / 2 + 2; pet.y = SKY_HEIGHT - pet.height; window.add(pet); window.add( new TouchArea(sky) { protected void onClick(Touch touch) { pet.jump(); }; }); for (int i = 0; i < nPatches; i++) { GrassPatch patch = new GrassPatch((i - 0.5f) * GrassPatch.WIDTH, SKY_HEIGHT, dayTime); patch.brightness(dayTime ? 1.0f : 0.8f); window.add(patch); } Image frame = new Image(Assets.SURFACE); frame.frame(0, 0, FRAME_WIDTH, FRAME_HEIGHT); frame.x = vx - FRAME_MARGIN_X; frame.y = vy - FRAME_MARGIN_TOP; add(frame); if (dayTime) { a.brightness(1.2f); pet.brightness(1.2f); } else { frame.hardlight(0xDDEEFF); } RedButton gameOver = new RedButton("Game Over") { protected void onClick() { Game.switchScene(TitleScene.class); } }; gameOver.setSize(SKY_WIDTH - FRAME_MARGIN_X * 2, BUTTON_HEIGHT); gameOver.setPos(frame.x + FRAME_MARGIN_X * 2, frame.y + frame.height + 4); add(gameOver); Badges.validateHappyEnd(); fadeIn(); }