현재 위치 - 중국오락넷 - 엔터테인먼트 주제 - 스네이크 자바 코드

스네이크 자바 코드

재미로 직접 작성했는데 매우 간단합니다. 한번 시도해 보세요...

저는 주로 javax.swing.Timer 클래스를 사용합니다:

import java.awt.*;

import javax.swing.*;

@SuppressWarnings("serial")

공용 클래스 MainClass 확장 JFrame {

ControlSnake 컨트롤;

툴킷 키트;

차원 크기;

public static void main(String[] args) {

< p> new MainClass("나의 뱀");

}

public MainClass(String s) {

super(s);

< p> control = new ControlSnake();

control.setFocusable(true);

kit = Toolkit.getDefaultToolkit();

dimen = 키트. getScreenSize ();

add(control);

setLayout(new BorderLayout());

setLocation(dimen.width / 3, dimen.height / 3 );// dimen.width/3,dimen.height/3

setSize(FWIDTH, FHEIGHT);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setRessible(false);

setVisible(true);

}

public static final int FWIDTH = 315;

public static final int FHEIGHT = 380;

}

java.util.* 가져오기;

java.awt.* 가져오기;

가져오기 java .awt.event.*;

javax.swing.* 가져오기;

javax.swing.Timer 가져오기;

java.util.Random 가져오기;

@SuppressWarnings("serial")

공용 클래스 ControlSnake는 JPanel을 확장하여 ActionListener를 구현합니다. {

Random rand;

ArrayList list , listBody;

문자열 str, str1;

정적 부울 키;

int x, y, dx, dy, fx, fy, flag;< /p> p>

int snakeBody;

int speed;

public ControlSnake() {

sn

akeBody = 1;

str = "위, 아래, 왼쪽 및 오른쪽 화살표 키는 P 키를 제어하여 일시 중지합니다...";

str1 = "현재 길이는 다음과 같습니다. " + snakeBody;

키 = true;

플래그 = 1;

속도 = 700;

rand = new Random() ;

list = new ArrayList();

listBody = new ArrayList();

x = 5;

y = 5;< /p>

list.add(new Point(x, y));

listBody.add(list.get(0));

dx = 10;< /p>

dy = 0;

fx = rand.nextInt(30) * 10 + 5;// 2

fy = rand.nextInt(30) * 10 + 5;// 2

setBackground(Color.WHITE);

setSize(new Dimension(318, 380));

최종 타이머 시간 = new Timer(speed, this);

time.start();

addKeyListener(new KeyAdapter() {

public void keyPressed(KeyEvent e) {< /p>

if (e.getKeyCode() == 37) {

dx = -10;

dy = 0;< /p>

} else if (e.getKeyCode() == 38) {

dx = 0;

dy = -10;

} else if (e.getKeyCode( ) == 39) {

dx = 10;

dy = 0;

} else if (e.getKeyCode () == 40) {< /p>

dx = 0;

dy = 10;

} else if (e.getKeyCode() == 80) {

if (플래그 % 2 == 1) {

time.stop();

}

if (플래그 % 2 == 0) {

time.start();

}

플래그++;

}

}

});

}

public void 페인트(그래픽 g) {

g.setColor(Color.WHITE);

g .fillRect(0, 0, 400, 400);

g.setColor(Color.DARK_GRAY);

g.drawLine(3, 3 , 305, 3);

p>

g.dra

wLine(3, 3, 3, 305);

g.drawLine(305, 3, 305, 305);

g.drawLine(3, 305, 305, 305) ;

g.setColor(Color.PINK);

for (int i = 0; i < listBody.size(); i++) {

g .fillRect(listBody.get(i).x, listBody.get(i).y, 9, 9);

}

g.fillRect(x, y, 9 , 9);

g.setColor(Color.ORANGE);

g.fillRect(fx, fy, 9, 9);

g.setColor (Color.DARK_GRAY);

str1 = "현재 길이:" + snakeBody;

g.drawString(str, 10, 320);

g.drawString(str1, 10, 335);

}

public void actionPerformed(ActionEvent e) {

x += dx;

y += dy;

if (makeOut() == false) {

JOptionPane.showMessageDialog(null, "다시 시작...")

>

속도 = 700;

snakeBody = 1;

x = 5;

y = 5;

목록. clear();

list.add(new Point(x, y));

listBody.clear();

listBody.add(list. get(0));

dx = 10;

dy = 0;

}

addPoint(x, y);

if (x == fx && y == fy) {

speed = (int) (speed * 0.8);//속도 증가 매개변수

if (속도 < 200) {

속도 = 100;

}

fx = rand.nextInt(30) * 10 + 5;/ / 2< /p>

fy = rand.nextInt(30) * 10 + 5;// 2

snakeBody++;// 2

} // 2< p> repaint();

}

public void addPoint(int xx, int yy) {

// 최신 이벤트를 동적으로 기록 50 이내의 좌표로 이동 steps

// 최신 snakeBody를 그립니다.

if (list.size() < 100) {//가장 긴 뱀 몸 길이는 100입니다.

list .add(new Point(xx, yy));

} else {

목록

.remove(0);

list.add(new Point(xx, yy));

}

if (snakeBody == 1) {< /p>

listBody.remove(0);

listBody.add(0, list.get(list.size() - 1));

} else {

listBody.clear();

if (list.size() < snakeBody) {

for (int i = list.size() - 1 ; i > 0; i--) {

listBody.add(list.get(i));

}

} else {

for (int i = list.size() - 1; listBody.size() < snakeBody; i--) {

listBody.add(list.get(i));< /p>

}

}

}

}

public boolean makeOut() {

if ((x < 3 || y < 3) || (x > 305 || y > 305)) {

false 반환;

}

< p> for (int i = 0; i < listBody.size() - 1; i++) {

for (int j = i + 1; j < listBody.size(); j++) {< /p>

if (listBody.get(i).equals(listBody.get(j))) {

return false;

}

}

}

true를 반환합니다.

}

}

copyright 2024중국오락넷