steine mit Form

This commit is contained in:
zhe 2021-12-11 11:59:36 +01:00
parent 9194320d79
commit b607886184
16 changed files with 161 additions and 43 deletions

2
.idea/.name generated
View File

@ -1 +1 @@
GamePanel.java
GameGui.java

View File

@ -20,45 +20,53 @@ public class Board extends JPanel implements KeyListener
public static final int BLOCK_SIZE=30;
private Timer loop;
private Color[][] board = new Color[BOARD_WIDTH][BOARD_HEIGHT];
private Color[] [] shape ={
{Color.YELLOW,Color.YELLOW,Color.YELLOW},
{null,Color.YELLOW,null}
};
private int x=4,y=0;
private int normal =650;
private int fast = 50;
private long beginTime;
private int delayTime = normal;
private int deltax = 0;
private boolean collision = false;
private Color[][] board = new Color[BOARD_HEIGHT][BOARD_WIDTH];
private Stein [] steine=new Stein[7];
private Stein currenStein;
private Color[] colors ={Color.decode("#ff00bf"),Color.decode("#0000ff"),Color.decode("#00ff80"),Color.decode("#ff8000"),Color.decode("#ffb3b3"),
Color.decode("#8000ff"),Color.decode("#ff0040"),};
public Board() {
steine[0]= new Stein(new int[][]{
{1,1,1,1}
}, this,colors[0]);
steine[1]= new Stein(new int[][]{
{1,1,1},
{0,1,0}
}, this,colors[1]);
steine[2]= new Stein(new int[][]{
{1,1,1},
{1,0,0}
}, this,colors[2]);
steine[3]= new Stein(new int[][]{
{1,1,1},
{0,0,1}
}, this,colors[3]);
steine[4]= new Stein(new int[][]{
{1,1,1},
{1,1,0}
}, this,colors[4]);
steine[5]= new Stein(new int[][]{
{1,1,0},
{0,1,1}
}, this,colors[5]);
steine[6]= new Stein(new int[][]{
{1,1},
{1,1}
}, this,colors[6]);
currenStein= steine[0];
loop = new Timer(delay, new ActionListener() {
int n = 0;
@Override
public void actionPerformed(ActionEvent e) {
if(collision){
return;
}
if(!(x + deltax + shape[0].length >11) && !(x + deltax<0))
{
x +=deltax;
}
deltax= 0;
if(System.currentTimeMillis() -beginTime > delayTime){
if(!(y+1+shape.length > BOARD_HEIGHT)){
y++;
}else{
collision=true;
}
beginTime=System.currentTimeMillis();
}
update();
repaint();
//System.out.println(n++);
@ -67,24 +75,41 @@ public class Board extends JPanel implements KeyListener
loop.start();
}
private void update(){
currenStein.update();
}
public void setCurrenStein() {
currenStein = steine[1];
currenStein.reset();
}
public Color[][] getBoard(){
return board;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.lightGray);
currenStein.render(g);
//shape mit 2-Forschleife
for(int row=0;row< shape.length;row++){
for(int col = 0;col< shape[0].length;col++){
if(shape[row][col] !=null){
g.setColor(shape[row][col]);
//
g.fillRect(col*BLOCK_SIZE+x*BLOCK_SIZE,row*BLOCK_SIZE+y*BLOCK_SIZE,BLOCK_SIZE,BLOCK_SIZE);
}
for(int row=0;row< board.length;row++){
for(int col = 0;col< board[row].length;col++){
if(board[row][col] !=null){
g.setColor(board[row][col]);
//
g.fillRect(col*BLOCK_SIZE,row*BLOCK_SIZE,BLOCK_SIZE,BLOCK_SIZE);
}
}
}
//shape mit 2-Forschleife
for (int row = 0; row < BOARD_HEIGHT+1; row++) {
g.drawLine(0, BLOCK_SIZE * row, BLOCK_SIZE * BOARD_WIDTH, BLOCK_SIZE * row);
}
@ -102,19 +127,19 @@ public class Board extends JPanel implements KeyListener
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyChar() == KeyEvent.VK_SPACE){
delayTime=fast;
currenStein.speedup();
}else if(e.getKeyChar() == KeyEvent.VK_ENTER){
deltax = 2;
currenStein.moveRigth();
}
else if(e.getKeyChar() == KeyEvent.VK_ESCAPE){
deltax = -2;
currenStein.moveLeft();
}
}
@Override
public void keyReleased(KeyEvent e) {
if(e.getKeyChar() == KeyEvent.VK_SPACE){
delayTime=normal;
currenStein.speedDown();
}
}
}

93
src/Tetris/Stein.java Normal file
View File

@ -0,0 +1,93 @@
package Tetris;
import java.awt.*;
public class Stein {
private int x=4,y=0;
private int normal =850;
private int fast = 50;
private long beginTime;
private int delayTime = normal;
private int deltax = 0;
private boolean collision = false;
public static final int BOARD_WIDTH=11;
public static final int BOARD_HEIGHT=20;
public static final int BLOCK_SIZE=30;
private int[][]coords;
private Board board;
private Color color;
public Stein(int [][] coords, Board board, Color color){
this.coords = coords;
this.board = board;
this.color=color;
}
public void setX(int x){
this.x=x;
}
public void setY(int y){
this.y=y;
}
public void reset(){
this.x=4;
this.y=0;
collision= false;
}
public void update(){
if(collision){
for(int row =0;row < coords.length;row++){
for(int col =0;col < coords[0].length;col++){
if (coords[row][col]!=0){
board.getBoard()[y+row][x+col]= color;
}
}
}
board.setCurrenStein();
return;
}
if(!(x + deltax + coords[0].length >11) && !(x + deltax<0))
{
x +=deltax;
}
deltax= 0;
if(System.currentTimeMillis() -beginTime > delayTime){
if(!(y+1+coords.length > BOARD_HEIGHT)){
y++;
}else{
collision=true;
}
beginTime=System.currentTimeMillis();
}
}
public void render(Graphics g){
for(int row=0;row< coords.length;row++){
for(int col = 0;col< coords[0].length;col++){
if(coords[row][col] !=0){
g.setColor(Color.yellow);
//
g.fillRect(col*BLOCK_SIZE+x*BLOCK_SIZE,row*BLOCK_SIZE+y*BLOCK_SIZE,BLOCK_SIZE,BLOCK_SIZE);
}
}
}
}
public void speedup(){
delayTime=fast;
}
public void speedDown(){
delayTime=normal;
}
public void moveRigth(){
deltax = 2;
}
public void moveLeft(){
deltax = -2;
}
}