要使用Java编写俄罗斯方块游戏,可以使用Java图形库(如AWT或JavaFX)来创建游戏界面和图形。下面是一个简单的示例代码以帮助你入门:
import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; public class Tetris extends JPanel implements ActionListener, KeyListener { private static final int WIDTH = 10; private static final int HEIGHT = 20; private static final int SQUARE_SIZE = 30; private static final int DELAY = 300; private Timer timer; private boolean isFallingFinished = false; private boolean isStarted = false; private boolean isPaused = false; private int score = 0; private int currentX = 0; private int currentY = 0; private Listtetrominoes = new ArrayList<>(); private int[][] board = new int[WIDTH][HEIGHT]; public Tetris() { setPreferredSize(new Dimension(WIDTH * SQUARE_SIZE, HEIGHT * SQUARE_SIZE)); setBackground(Color.BLACK); setFocusable(true); addKeyListener(this); initializeTetrominoes(); } private void initializeTetrominoes() { tetrominoes.add(new int[][] { { 1, 1, 1, 1 } }); // I shape tetrominoes.add(new int[][] { { 1, 1, 0 }, { 0, 1, 1 } }); // Z shape tetrominoes.add(new int[][] { { 0, 1, 1 }, { 1, 1, 0 } }); // S shape tetrominoes.add(new int[][] { { 1, 1, 1 }, { 0, 0, 1 } }); // J shape tetrominoes.add(new int[][] { { 1, 1, 1 }, { 1, 0, 0 } }); // L shape tetrominoes.add(new int[][] { { 0, 1, 0 }, { 1, 1, 1 } }); // T shape tetrominoes.add(new int[][] { { 1, 1 }, { 1, 1 } }); // O shape } private void start() { isStarted = true; isPaused = false; score = 0; clearBoard(); newPiece(); timer = new Timer(DELAY, this); timer.start(); } private void pause() { if (!isStarted) { return; } isPaused = !isPaused; if (isPaused) { timer.stop(); } else { timer.start(); } repaint(); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); drawBoard(g); drawPiece(g); } private void drawBoard(Graphics g) { for (int i = 0; i < WIDTH; i++) { for (int j = 0; j < HEIGHT; j++) { if (board[i][j] != 0) { g.setColor(Color.CYAN); g.fillRect(i * SQUARE_SIZE, j * SQUARE_SIZE, SQUARE_SIZE, SQUARE_SIZE); } } } } private void drawPiece(Graphics g) { g.setColor(Color.YELLOW); for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (tetrominoes.get(0)[i][j] != 0) { g.fillRect((currentX + i) * SQUARE_SIZE, (currentY + j) * SQUARE_SIZE, SQUARE_SIZE, SQUARE_SIZE); } } } } private void newPiece() { int randomIndex = (int) (Math.random() * tetrominoes.size()); currentX = WIDTH / 2; currentY = 0; if (!isMoveValid(tetrominoes.get(randomIndex), currentX, currentY)) { isStarted = false; timer.stop(); } } private boolean isMoveValid(int[][] shape, int newX, int newY) { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { int x =