用java编写有个贪吃蛇
时间: 2023-11-26 15:04:38 浏览: 39
好的,这个问题我可以回答。下面是Java实现贪吃蛇的基本思路:
1. 创建游戏面板并初始化贪吃蛇和食物。
2. 监听键盘事件,控制贪吃蛇的移动方向。
3. 在每一帧中更新贪吃蛇的位置并检查是否吃到了食物。
4. 如果贪吃蛇撞到了边界或者撞到了自己,游戏结束。
5. 当贪吃蛇吃到食物时,生成一个新的食物并增加贪吃蛇的长度。
6. 在游戏结束时显示游戏结束的提示信息。
下面是一个简单的 Java 代码实现贪吃蛇的例子:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SnakeGame extends JFrame implements KeyListener{
private static final int WIDTH = 500;
private static final int HEIGHT = 500;
private static final int BLOCK_SIZE = 10;
private JPanel gamePanel;
private int[][] board;
private int snakeX, snakeY, foodX, foodY, score, dirX, dirY;
public SnakeGame(){
setTitle("贪吃蛇");
setSize(WIDTH, HEIGHT);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(false);
gamePanel = new JPanel();
gamePanel.setBackground(Color.WHITE);
add(gamePanel);
board = new int[WIDTH/BLOCK_SIZE][HEIGHT/BLOCK_SIZE];
snakeX = board.length / 2;
snakeY = board[0].length / 2;
foodX = (int)(Math.random() * board.length);
foodY = (int)(Math.random() * board[0].length);
score = 0;
dirX = 0;
dirY = 0;
addKeyListener(this);
setVisible(true);
runGameLoop();
}
private void runGameLoop(){
while(true){
updateSnake();
checkCollision();
checkFood();
gamePanel.repaint();
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
private void updateSnake(){
snakeX += dirX;
snakeY += dirY;
if(snakeX >= board.length || snakeX < 0 || snakeY >= board[0].length || snakeY < 0){
snakeX -= dirX;
snakeY -= dirY;
gameOver();
}
board[snakeX][snakeY] = 1;
}
private void checkCollision(){
for(int i = 0; i < board.length; i++){
for(int j = 0; j < board[i].length; j++){
if(board[i][j] == 1 && (i != snakeX || j != snakeY)){
gameOver();
}
}
}
}
private void checkFood(){
if(snakeX == foodX && snakeY == foodY){
score++;
foodX = (int)(Math.random() * board.length);
foodY = (int)(Math.random() * board[0].length);
}
}
private void gameOver(){
JOptionPane.showMessageDialog(this, "游戏结束!得分:" + score);
System.exit(0);
}
@Override
public void paint(Graphics g){
super.paint(g);
for(int i = 0; i < board.length; i++){
for(int j = 0; j < board[i].length; j++){
if(board[i][j] == 1){
g.setColor(Color.BLACK);
g.fillRect(i * BLOCK_SIZE, j * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE);
}else if(i == foodX && j == foodY){
g.setColor(Color.RED);
g.fillOval(i * BLOCK_SIZE, j * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE);
}
}
}
}
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch(key){
case KeyEvent.VK_UP:
dirX = 0;
dirY = -1;
break;
case KeyEvent.VK_DOWN:
dirX = 0;
dirY = 1;
break;
case KeyEvent.VK_LEFT:
dirX = -1;
dirY = 0;
break;
case KeyEvent.VK_RIGHT:
dirX = 1;
dirY = 0;
break;
}
}
@Override
public void keyReleased(KeyEvent e) {}
@Override
public void keyTyped(KeyEvent e) {}
}
```
这个代码实现了一个简单的贪吃蛇游戏,你可以运行代码试玩一下。