Skip to content

Instantly share code, notes, and snippets.

@sinistersnare
Last active May 17, 2022 15:32

Revisions

  1. sinistersnare revised this gist Oct 22, 2020. No changes.
  2. sinistersnare revised this gist Jul 19, 2015. 2 changed files with 2 additions and 2 deletions.
    2 changes: 1 addition & 1 deletion Drop.java
    Original file line number Diff line number Diff line change
    @@ -6,7 +6,7 @@

    public class Drop extends Game {

    SpriteBatch batch;
    SpriteBatch batch;
    BitmapFont font;

    public void create() {
    2 changes: 1 addition & 1 deletion GameScreen.java
    Original file line number Diff line number Diff line change
    @@ -17,7 +17,7 @@
    import com.badlogic.gdx.utils.TimeUtils;

    public class GameScreen implements Screen {
    final Drop game;
    final Drop game;

    Texture dropImage;
    Texture bucketImage;
  3. sinistersnare revised this gist Jul 19, 2015. 1 changed file with 1 addition and 3 deletions.
    4 changes: 1 addition & 3 deletions MainMenuScreen.java
    Original file line number Diff line number Diff line change
    @@ -6,9 +6,7 @@
    import com.badlogic.gdx.graphics.OrthographicCamera;

    public class MainMenuScreen implements Screen {

    final Drop game;

    final Drop game;
    OrthographicCamera camera;

    public MainMenuScreen(final Drop gam) {
  4. sinistersnare revised this gist Mar 26, 2014. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions MainMenuScreen.java
    Original file line number Diff line number Diff line change
    @@ -2,7 +2,7 @@

    import com.badlogic.gdx.Gdx;
    import com.badlogic.gdx.Screen;
    import com.badlogic.gdx.graphics.GL10;
    import com.badlogic.gdx.graphics.GL20;
    import com.badlogic.gdx.graphics.OrthographicCamera;

    public class MainMenuScreen implements Screen {
    @@ -22,7 +22,7 @@ public MainMenuScreen(final Drop gam) {
    @Override
    public void render(float delta) {
    Gdx.gl.glClearColor(0, 0, 0.2f, 1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    camera.update();
    game.batch.setProjectionMatrix(camera.combined);
  5. sinistersnare renamed this gist Mar 26, 2014. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  6. sinistersnare created this gist Aug 28, 2013.
    28 changes: 28 additions & 0 deletions Drop.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,28 @@
    package com.badlogic.drop;

    import com.badlogic.gdx.Game;
    import com.badlogic.gdx.graphics.g2d.BitmapFont;
    import com.badlogic.gdx.graphics.g2d.SpriteBatch;

    public class Drop extends Game {

    SpriteBatch batch;
    BitmapFont font;

    public void create() {
    batch = new SpriteBatch();
    // Use LibGDX's default Arial font.
    font = new BitmapFont();
    this.setScreen(new MainMenuScreen(this));
    }

    public void render() {
    super.render(); // important!
    }

    public void dispose() {
    batch.dispose();
    font.dispose();
    }

    }
    168 changes: 168 additions & 0 deletions GameScreen.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,168 @@
    package com.badlogic.drop;

    import java.util.Iterator;

    import com.badlogic.gdx.Gdx;
    import com.badlogic.gdx.Input.Keys;
    import com.badlogic.gdx.Screen;
    import com.badlogic.gdx.audio.Music;
    import com.badlogic.gdx.audio.Sound;
    import com.badlogic.gdx.graphics.GL10;
    import com.badlogic.gdx.graphics.OrthographicCamera;
    import com.badlogic.gdx.graphics.Texture;
    import com.badlogic.gdx.math.MathUtils;
    import com.badlogic.gdx.math.Rectangle;
    import com.badlogic.gdx.math.Vector3;
    import com.badlogic.gdx.utils.Array;
    import com.badlogic.gdx.utils.TimeUtils;

    public class GameScreen implements Screen {
    final Drop game;

    Texture dropImage;
    Texture bucketImage;
    Sound dropSound;
    Music rainMusic;
    OrthographicCamera camera;
    Rectangle bucket;
    Array<Rectangle> raindrops;
    long lastDropTime;
    int dropsGathered;

    public GameScreen(final Drop gam) {
    this.game = gam;

    // load the images for the droplet and the bucket, 64x64 pixels each
    dropImage = new Texture(Gdx.files.internal("droplet.png"));
    bucketImage = new Texture(Gdx.files.internal("bucket.png"));

    // load the drop sound effect and the rain background "music"
    dropSound = Gdx.audio.newSound(Gdx.files.internal("drop.wav"));
    rainMusic = Gdx.audio.newMusic(Gdx.files.internal("rain.mp3"));
    rainMusic.setLooping(true);

    // create the camera and the SpriteBatch
    camera = new OrthographicCamera();
    camera.setToOrtho(false, 800, 480);

    // create a Rectangle to logically represent the bucket
    bucket = new Rectangle();
    bucket.x = 800 / 2 - 64 / 2; // center the bucket horizontally
    bucket.y = 20; // bottom left corner of the bucket is 20 pixels above
    // the bottom screen edge
    bucket.width = 64;
    bucket.height = 64;

    // create the raindrops array and spawn the first raindrop
    raindrops = new Array<Rectangle>();
    spawnRaindrop();

    }

    private void spawnRaindrop() {
    Rectangle raindrop = new Rectangle();
    raindrop.x = MathUtils.random(0, 800 - 64);
    raindrop.y = 480;
    raindrop.width = 64;
    raindrop.height = 64;
    raindrops.add(raindrop);
    lastDropTime = TimeUtils.nanoTime();
    }

    @Override
    public void render(float delta) {
    // clear the screen with a dark blue color. The
    // arguments to glClearColor are the red, green
    // blue and alpha component in the range [0,1]
    // of the color to be used to clear the screen.
    Gdx.gl.glClearColor(0, 0, 0.2f, 1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    // tell the camera to update its matrices.
    camera.update();

    // tell the SpriteBatch to render in the
    // coordinate system specified by the camera.
    game.batch.setProjectionMatrix(camera.combined);

    // begin a new batch and draw the bucket and
    // all drops
    game.batch.begin();
    game.font.draw(game.batch, "Drops Collected: " + dropsGathered, 0, 480);
    game.batch.draw(bucketImage, bucket.x, bucket.y);
    for (Rectangle raindrop : raindrops) {
    game.batch.draw(dropImage, raindrop.x, raindrop.y);
    }
    game.batch.end();

    // process user input
    if (Gdx.input.isTouched()) {
    Vector3 touchPos = new Vector3();
    touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0);
    camera.unproject(touchPos);
    bucket.x = touchPos.x - 64 / 2;
    }
    if (Gdx.input.isKeyPressed(Keys.LEFT))
    bucket.x -= 200 * Gdx.graphics.getDeltaTime();
    if (Gdx.input.isKeyPressed(Keys.RIGHT))
    bucket.x += 200 * Gdx.graphics.getDeltaTime();

    // make sure the bucket stays within the screen bounds
    if (bucket.x < 0)
    bucket.x = 0;
    if (bucket.x > 800 - 64)
    bucket.x = 800 - 64;

    // check if we need to create a new raindrop
    if (TimeUtils.nanoTime() - lastDropTime > 1000000000)
    spawnRaindrop();

    // move the raindrops, remove any that are beneath the bottom edge of
    // the screen or that hit the bucket. In the later case we play back
    // a sound effect as well.
    Iterator<Rectangle> iter = raindrops.iterator();
    while (iter.hasNext()) {
    Rectangle raindrop = iter.next();
    raindrop.y -= 200 * Gdx.graphics.getDeltaTime();
    if (raindrop.y + 64 < 0)
    iter.remove();
    if (raindrop.overlaps(bucket)) {
    dropsGathered++;
    dropSound.play();
    iter.remove();
    }
    }
    }

    @Override
    public void resize(int width, int height) {
    }

    @Override
    public void show() {
    // start the playback of the background music
    // when the screen is shown
    rainMusic.play();
    }

    @Override
    public void hide() {
    }

    @Override
    public void pause() {
    }

    @Override
    public void resume() {
    }

    @Override
    public void dispose() {
    dropImage.dispose();
    bucketImage.dispose();
    dropSound.dispose();
    rainMusic.dispose();
    }

    }
    64 changes: 64 additions & 0 deletions MainMenuScreenScreen.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,64 @@
    package com.badlogic.drop;

    import com.badlogic.gdx.Gdx;
    import com.badlogic.gdx.Screen;
    import com.badlogic.gdx.graphics.GL10;
    import com.badlogic.gdx.graphics.OrthographicCamera;

    public class MainMenuScreen implements Screen {

    final Drop game;

    OrthographicCamera camera;

    public MainMenuScreen(final Drop gam) {
    game = gam;

    camera = new OrthographicCamera();
    camera.setToOrtho(false, 800, 480);

    }

    @Override
    public void render(float delta) {
    Gdx.gl.glClearColor(0, 0, 0.2f, 1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    camera.update();
    game.batch.setProjectionMatrix(camera.combined);

    game.batch.begin();
    game.font.draw(game.batch, "Welcome to Drop!!! ", 100, 150);
    game.font.draw(game.batch, "Tap anywhere to begin!", 100, 100);
    game.batch.end();

    if (Gdx.input.isTouched()) {
    game.setScreen(new GameScreen(game));
    dispose();
    }
    }

    @Override
    public void resize(int width, int height) {
    }

    @Override
    public void show() {
    }

    @Override
    public void hide() {
    }

    @Override
    public void pause() {
    }

    @Override
    public void resume() {
    }

    @Override
    public void dispose() {
    }
    }