龙空技术网

如何用Java语言编辑贪吃蛇

风云之66 137

前言:

今天小伙伴们对“java贪食蛇”可能比较注重,各位老铁们都需要剖析一些“java贪食蛇”的相关文章。那么小编同时在网络上收集了一些有关“java贪食蛇””的相关知识,希望大家能喜欢,朋友们快快来了解一下吧!

确实,您可以使用Java语言来编写贪吃蛇游戏。下面是一个基本的示例:

```java

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Font;

import java.awt.FontMetrics;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import javax.swing.ImageIcon;

import javax.swing.JPanel;

import javax.swing.Timer;

前著

public class SnakeGame extends JPanel implements ActionListener {

private final int B_WIDTH = 300;

private final int B_HEIGHT = 300;

private final int DOT_SIZE = 10;

private final int ALL_DOTS = 900;

private final int RAND_POS = 29;

private final int DELAY = 140;

private final int x[] = new int[ALL_DOTS];

private final int y[] = new int[ALL_DOTS];

private int dots;

private int apple_x;

private int apple_y;

private boolean leftDirection = false;

private boolean rightDirection = true;

private boolean upDirection = false;

private boolean downDirection = false;

private boolean inGame = true;

private Timer timer;

private Image ball;

private Image apple;

private Image head;

public SnakeGame() {

initBoard();

}

private void initBoard() {

addKeyListener(new TAdapter());

setBackground(Color.black);

setFocusable(true);

setPreferredSize(new Dimension(B_WIDTH, B_HEIGHT));

loadImages();

initGame();

}

private void loadImages() {

ImageIcon iid = new ImageIcon("src/resources/dot.png");

ball = iid.getImage();

ImageIcon iia = new ImageIcon("src/resources/apple.png");

apple = iia.getImage();

ImageIcon iih = new ImageIcon("src/resources/head.png");

head = iih.getImage();

}

private void initGame() {

dots = 3;

for (int z = 0; z < dots; z++) {

x[z] = 50 - z * 10;

y[z] = 50;

}

locateApple();

timer = new Timer(DELAY, this);

timer.start();

}

@Override

public void paintComponent(Graphics g) {

super.paintComponent(g);

doDrawing(g);

}

private void doDrawing(Graphics g) {

if (inGame) {

g.drawImage(apple, apple_x, apple_y, this);

for (int z = 0; z < dots; z++) {

if (z == 0) {

g.drawImage(head, x[z], y[z], this);

} else {

g.drawImage(ball, x[z], y[z], this);

}

}

Toolkit.getDefaultToolkit().sync();

} else {

gameOver(g);

}

}

private void gameOver(Graphics g) {

String msg = "Game Over";

Font small = new Font("Helvetica", Font.BOLD, 14);

FontMetrics metr = getFontMetrics(small);

g.setColor(Color.white);

g.setFont(small);

g.drawString(msg, (B_WIDTH - metr.stringWidth(msg)) / 2, B_HEIGHT / 2);

}

private void checkApple() {

if ((x[0] == apple_x) && (y[0] == apple_y)) {

dots++;

locateApple();

}

}

private void move() {

for (int z = dots; z > 0; z--) {

x[z] = x[(z - 1)];

y[z] = y[(z - 1)];

}

if (leftDirection) {

x[0] -= DOT_SIZE;

}

if (rightDirection) {

x[0] += DOT_SIZE;

}

if (upDirection) {

y[0] -= DOT_SIZE;

}

if (downDirection) {

y[0] += DOT_SIZE;

}

}

private void checkCollision() {

for (int z = dots; z > 0; z--) {

if ((z > 4) && (x[0] == x[z]) && (y[0] == y[z])) {

inGame = false;

}

}

if (y[0] >= B_HEIGHT) {

inGame = false;

}

if (y[0] < 0) {

inGame = false;

}

if (x[0] >= B_WIDTH) {

inGame = false;

}

if (x[0] < 0) {

inGame = false;

}

if (!inGame) {

timer.stop();

}

}

private void locateApple() {

int r = (int) (Math.random() * RAND_POS);

apple_x = r * DOT_SIZE;

r = (int) (Math.random() * RAND_POS);

apple_y = r * DOT_SIZE;

}

@Override

public void actionPerformed(ActionEvent e) {

if (inGame) {

checkApple();

checkCollision();

move();

}

repaint();

}

private class TAdapter extends KeyAdapter {

@Override

public void keyPressed(KeyEvent e) {

int key = e.getKeyCode();

if ((key == KeyEvent.VK_LEFT) && (!rightDirection)) {

leftDirection = true;

upDirection = false;

downDirection = false;

}

if ((key == KeyEvent.VK_RIGHT) && (!leftDirection)) {

rightDirection = true;

upDirection = false;

downDirection = false;

}

if ((key == KeyEvent.VK_UP) && (!downDirection)) {

upDirection = true;

rightDirection = false;

leftDirection = false;

}

if ((key == KeyEvent.VK_DOWN) && (!upDirection)) {

downDirection = true;

rightDirection = false;

leftDirection = false;

}

}

}

}

```

这是一个简单的贪吃蛇游戏示例,使用了Java Swing库来创建图形界面。您可以将上述代码保存为SnakeGame.java,并在其他类中实例化并运行该游戏。此示例还包括基本的碰撞检测、移动控制和游戏结束等功能。您可以根据需要扩展和修改代码,以使其符合您自己的需求和设计。

标签: #java贪食蛇 #java贪吃蛇小游戏详解 #贪吃蛇java代码完整版