Package blocksthatfall

Source Code of blocksthatfall.GamePlayState

package blocksthatfall;

import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;

public class GamePlayState extends BasicGameState {

    int stateID = -1;
   
    GamePlayState(int stateID) {
       this.stateID = stateID;
    }
   
    @Override
    public int getID() {
        return stateID;
    }

    PieceFactory pieceFactory;
    int blockSize;
    int pitPositionX;
    int pitPositionY;
    Pit pit;
   
    Piece piece;
    Piece nextPiece;
   
    int score;
   
    boolean paused = false;
   
    static int DELAY  = 300;
    int deltaCounter = DELAY;
    int deltaInput = DELAY/4;
   
    int posX;
    int posY;
   
    @Override
    public void init(GameContainer gc, StateBasedGame sbg) throws SlickException
        pieceFactory = new PieceFactory();
        blockSize = 28;
       
        pit = new Pit(10, 20);
       
        pitPositionX = blockSize*9;
        pitPositionY = (600 - blockSize*pit.height)/2;
       
        piece = pieceFactory.generateRandomPiece();
        nextPiece = pieceFactory.generateRandomPiece();
       
        posX = (pit.width - piece.getMatrix().toArray().length)/2;
        posY = -piece.getBlankLinesAtTop();
       
        score = 0;
    }

    @Override
    public void render(GameContainer gc, StateBasedGame sbg, Graphics grphcs) throws SlickException {
        grphcs.setColor(Color.black);
        drawBorder(grphcs);
        drawPit(grphcs);
        drawPiece(grphcs, piece, pitPositionX+posX*blockSize, pitPositionY+posY*blockSize);
        drawNextPiece(grphcs);
        drawScore(grphcs);
        if(paused) {
            Color fadedWhite = new Color(0, 0, 0, 0.7f);
            grphcs.setColor(fadedWhite);
            grphcs.fillRect(0, 0, 800, 600);
            grphcs.setColor(Color.black);
            grphcs.drawString("GAME PAUSED", pitPositionX+blockSize*3, pitPositionX);
        }
    }

    @Override
    public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException {
        Input in = gc.getInput();
       
        if(in.isKeyDown(Input.KEY_ESCAPE)) gc.exit();
        if(in.isKeyPressed(Input.KEY_P)) paused = !paused;
       
        if(paused) return;
       
        score += pit.eraseFullLines();
       
        if(in.isKeyDown(Input.KEY_DOWN)) DELAY = 50;
        else {DELAY = 300; }
       
        deltaCounter -= delta;
        if(deltaCounter <= 0) {
            boolean collides = pit.pieceCollidesAt(piece, posX, posY+1);
            if(!collides) posY += 1;
            else {
                pit.insertPieceAt(piece, posX, posY);
                piece = nextPiece;
                nextPiece = pieceFactory.generateRandomPiece();
                posX = (pit.width - piece.getMatrix().toArray().length)/2;
                posY= -piece.getBlankLinesAtTop();
               
                if(pit.pieceCollidesAt(piece, posX, posY)) {
                    BlocksThatFall.score = score;
                    sbg.enterState(BlocksThatFall.GAMEOVERSTATE);
                    init(gc, sbg);
                }
               
                deltaCounter = DELAY;
                return;
            }
            deltaCounter = DELAY;
        }
       
        if(in.isKeyPressed(Input.KEY_SPACE)) {
            Piece rotatedPiece = piece.rotated();
            if(!pit.pieceCollidesAt(rotatedPiece, posX, posY)) {
                piece = rotatedPiece;
            }
        }
       
        deltaInput -= delta;
        if(deltaInput <= 0) {
            boolean leftDown = in.isKeyDown(Input.KEY_LEFT);
            boolean rightDown = in.isKeyDown(Input.KEY_RIGHT);
            if(leftDown || rightDown) {
                if(leftDown && !pit.pieceCollidesAt(piece, posX-1, posY)) posX -= 1;
                else if(rightDown && !pit.pieceCollidesAt(piece, posX+1, posY)) posX += 1;
            }
            deltaInput = DELAY/4;
        }
    }
   
    void drawBorder(Graphics g) {
        g.drawRect(pitPositionX, pitPositionY, blockSize*pit.width, blockSize*pit.height);
    }
   
    void drawPit(Graphics g) {
        for(int j=0; j < pit.height; j++) {
            for(int i=0; i < pit.width; i++) {
                if(pit.getBlockAt(i, j) != 0) g.fillRect(pitPositionX+blockSize*i, pitPositionY+blockSize*j, blockSize, blockSize);
            }
        }
    }
   
    void drawNextPiece(Graphics g) {
        drawPiece(g, nextPiece, pitPositionX+pit.width*blockSize+blockSize, pitPositionY);
    }
   
    void drawScore(Graphics g) {
        g.drawString("Score: "+score, pitPositionX+pit.width*blockSize+blockSize, pitPositionY+5*blockSize);
    }
   
    void drawPiece(Graphics g, Piece piece, int x, int y) {
        int[][] matrix = piece.getMatrix().toArray();
        for(int j=0; j < matrix.length; j++) {
            for(int i=0; i < matrix[j].length; i++) {
                if(matrix[j][i] != 0) {
                    g.fillRect(x+blockSize*i, y+blockSize*j, blockSize, blockSize);
                }
            }
        }
    }
   
}
TOP

Related Classes of blocksthatfall.GamePlayState

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.