用Java写一个别踩白块小游戏
时间: 2023-11-16 12:06:52 浏览: 56
好的,下面是一个简单的别踩白块小游戏的Java代码实现:
```java
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class BCBKGame extends JPanel implements Runnable, MouseListener {
private static final long serialVersionUID = 1L;
private static final int ROWS = 4; // 行数
private static final int COLS = 4; // 列数
private static final int BLOCK_SIZE = 100; // 方块大小
private static final int PADDING = 10; // 间隔
private static final int WIDTH = COLS * (BLOCK_SIZE + PADDING); // 窗体宽度
private static final int HEIGHT = ROWS * (BLOCK_SIZE + PADDING); // 窗体高度
private int score = 0; // 得分
private boolean gameOver = false; // 游戏是否结束
private int[][] blocks = new int[ROWS][COLS]; // 方块数组
private int[][] colors = new int[ROWS][COLS]; // 方块颜色数组
private Random rand = new Random(); // 随机数生成器
public BCBKGame() {
JFrame frame = new JFrame("别踩白块小游戏");
frame.setSize(WIDTH, HEIGHT);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.add(this);
frame.setVisible(true);
addMouseListener(this);
new Thread(this).start();
}
@Override
public void run() {
while (!gameOver) {
try {
Thread.sleep(500);
moveBlocks();
createBlock();
repaint();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void createBlock() {
int col = rand.nextInt(COLS);
blocks[0][col] = 1;
colors[0][col] = rand.nextInt(3);
}
private void moveBlocks() {
for (int i = ROWS - 1; i > 0; i--) {
for (int j = 0; j < COLS; j++) {
blocks[i][j] = blocks[i - 1][j];
colors[i][j] = colors[i - 1][j];
}
}
for (int j = 0; j < COLS; j++) {
blocks[0][j] = 0;
colors[0][j] = -1;
}
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.WHITE);
g.fillRect(0, 0, WIDTH, HEIGHT);
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (blocks[i][j] == 1) {
g.setColor(getColor(colors[i][j]));
g.fillRect(j * (BLOCK_SIZE + PADDING), i * (BLOCK_SIZE + PADDING), BLOCK_SIZE, BLOCK_SIZE);
}
}
}
g.setColor(Color.BLACK);
g.drawString("得分:" + score, 10, HEIGHT - 10);
if (gameOver) {
g.setColor(Color.RED);
g.drawString("游戏结束!", WIDTH / 2 - 40, HEIGHT / 2);
}
}
private Color getColor(int color) {
switch (color) {
case 0:
return Color.BLUE;
case 1:
return Color.GREEN;
case 2:
return Color.RED;
default:
return Color.BLACK;
}
}
@Override
public void mouseClicked(MouseEvent e) {
if (!gameOver) {
int row = e.getY() / (BLOCK_SIZE + PADDING);
int col = e.getX() / (BLOCK_SIZE + PADDING);
if (row == 3 && blocks[row][col] == 1) {
score++;
blocks[row][col] = 0;
colors[row][col] = -1;
} else if (row < 3 && blocks[row][col] == 1) {
gameOver = true;
}
repaint();
}
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
public static void main(String[] args) {
new BCBKGame();
}
}
```
这个小游戏的实现比较简单,主要是利用Java的Swing框架和线程来实现游戏的绘制和逻辑。在游戏中,每个方块有三种颜色可选,玩家需要点击下方的黑色方块,不能点击上方的白色方块,否则游戏结束。玩家可以通过点击黑色方块来获得得分,游戏会不断生成新的方块,直到游戏结束。