LibGdx Chess Board

Viewed 41

I try to create a chess board, just the board in libGdx but for some reason, I can't. I still miss two other rows in the chess. I will show you my code, maybe you can find the problem in my code, if not, I can easily accept another solution.

package com.mygdx.game;

 import com.badlogic.gdx.ApplicationAdapter;
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.Input.Keys;
 import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.GL20;
 import com.badlogic.gdx.graphics.OrthographicCamera;
 import com.badlogic.gdx.graphics.Pixmap;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.Pixmap.Format;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.graphics.g2d.TextureRegion;
 import com.badlogic.gdx.maps.MapLayers;
 import com.badlogic.gdx.maps.tiled.TiledMap;
 import com.badlogic.gdx.maps.tiled.TiledMapTileLayer;
 import com.badlogic.gdx.maps.tiled.TiledMapTileLayer.Cell;
  import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer;
  import com.badlogic.gdx.maps.tiled.tiles.StaticTiledMapTile;
  import com.badlogic.gdx.utils.ScreenUtils;
   import com.badlogic.gdx.utils.viewport.Viewport;

public class MyGdxGame extends ApplicationAdapter {
SpriteBatch batch;
Texture img;
private OrthographicCamera camera;
private OrthogonalTiledMapRenderer render;
private final static int width = 100, height = 80, layercount = 8;
private TiledMap map;

@Override
public void create() {
    float w = Gdx.graphics.getWidth();
    float h = Gdx.graphics.getHeight();

    camera = new OrthographicCamera(w, h);

    Pixmap pixmap = new Pixmap(100, 80, Format.RGBA8888);
    pixmap.setColor(Color.WHITE); // add your 1 color here
    pixmap.fillRectangle(0, 0, 80, 80);

    pixmap.setColor(Color.BLACK); // add your 2 color here
    pixmap.fillRectangle(0, 0, 80, 80);
    // the outcome is an texture with an blue left square and an red right
    // square
    Texture t = new Texture(pixmap);
    TextureRegion reg1 = new TextureRegion(t, 0, 0, 80, 80);
    TextureRegion reg2 = new TextureRegion(t, 80, 0, 80, 80);

    TiledMap map = new TiledMap();
    MapLayers layers = map.getLayers();
    for (int l = 0; l < layercount; l++) {
        TiledMapTileLayer layer = new TiledMapTileLayer(width, height, 80,
                80);
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                Cell cell = new Cell();
                if (y % 2!= 0) {
                    if (x % 2 != 0) {
                        cell.setTile(new StaticTiledMapTile(reg1));
                    } else {
                        cell.setTile(new StaticTiledMapTile(reg2));
                    }
                } else {
                    if (x % 2 != 0) {
                        cell.setTile(new StaticTiledMapTile(reg2));
                    } else {
                        cell.setTile(new StaticTiledMapTile(reg1));
                    }
                }
                layer.setCell(x, y, cell);
            }
        }
        layers.add(layer);
    }
    render = new OrthogonalTiledMapRenderer(map);
    render.setView(camera);
    camera.translate(Gdx.graphics.getWidth() / 2,
            Gdx.graphics.getHeight() / 2);
}

@Override
public void dispose() {
    render.dispose();
    map.dispose();
}

private static final float movmentspeed = 5f;

@Override
public void render() {

    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    camera.update();
    render.setView(camera);
    render.render();

    if (Gdx.input.isKeyPressed(Keys.LEFT)) {
        camera.translate(-movmentspeed, 0);
    } else if (Gdx.input.isKeyPressed(Keys.RIGHT)) {
        camera.translate(movmentspeed, 0);
    } else if (Gdx.input.isKeyPressed(Keys.UP)) {
        camera.translate(0, movmentspeed);
    } else if (Gdx.input.isKeyPressed(Keys.DOWN)) {
        camera.translate(0, -movmentspeed);
    }
}

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

}

@Override
public void pause() {
}

@Override
public void resume() {
}
}

Here is my code. I need a solution to this as fast as possible if you can...

1 Answers

Your second call to

pixmap.setColor(Color.BLACK); // add your 2 color here
pixmap.fillRectangle(0, 0, 80, 80);

overwrites the colour set by the first because you are writing to the same area.

Within the nested loop iterating over the board, you could simplify finding the alternating cell type for the chessboard to

if ((x+(y*8)) % 2 = 0 ) {
//Cell is bottom left square color
} else {
//Cell is the other colour
}

Although its nice to generate the chess board for special effects later, you could also just import one from the tiled editor and then you can experiment more with how it looks. Tile map loaders absolutely not the pain you might imagine they are super short, literally a snippets worth, there is a written loader here https://gamefromscratch.com/libgdx-tutorial-11-tiled-maps-part-1-simple-orthogonal-maps/

(also and not relevant this Pixmap pixmap = new Pixmap(100, 80, Format.RGBA8888); is a larger region than you ever use.)

There is a no AI libGDX chess game here as well if you want to just extend with AI. https://github.com/axlan/libgdx-chess

Related