package video.snoke;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Random;
import static java.lang.Thread.sleep;
public class CreateSnake {
public static final int ROW = 10;
public static final int CLOUMN = 30;
public static char[][] blackground = new char[ROW][CLOUMN];
static LinkedList<Point> snake_locad = new LinkedList<Point>();
Point food;
static final int UP_DIR = -1;
static final int DOWN_DIR = 1;
static final int LEFT_DIR = -2;
static final int RIGHT_DIR = 2;
static int DIR = 2;
public void createMap(){
for (int i = 0; i <ROW ; i++) {
for (int j = 0; j <CLOUMN ; j++) {
if (i==0||i==(ROW-1)||j==0||j==(CLOUMN-1)){
blackground[i][j]='*';
}else {
blackground[i][j]=' ';
}
}
}
}
public void showMap(){
for (int i = 0; i <ROW ; i++) {
for (int j = 0; j <CLOUMN ; j++) {
System.out.print(blackground[i][j]);
}
System.out.println();
}
}
public void initSnake(){
int x = ROW/2;
int y = CLOUMN/2;
snake_locad.addFirst(new Point(x,y-1));
snake_locad.addFirst(new Point(x,y));
snake_locad.addFirst(new Point(x,y+1));
}
public void showSnake(){
Point head = snake_locad.getFirst();
blackground[head.x][head.y]='$';
for (int i = 1; i <snake_locad.size() ; i++) {
Point body = snake_locad.get(i);
blackground[body.x][body.y]='#';
}
}
public void initFood(){
Random random = new Random();
while (true){
int x = random.nextInt(ROW);
int y = random.nextInt(CLOUMN);
if (blackground[x][y]!='*'){
food = new Point(x,y);
break;
}
}
}
public void showFood(){
blackground[food.x][food.y]='@';
}
public void refresh(){
createMap();
showSnake();
showFood();
showMap();
}
public void changeDir(int DIR2){
if (DIR+DIR2!=0){
this.DIR=DIR2;
}
}
public void move(){
Point head = snake_locad.getFirst();
switch (DIR){
case -1:
{
snake_locad.addFirst(new Point(head.x-1,head.y)); //UP
break;
}
case 1:
{
snake_locad.addFirst(new Point(head.x+1,head.y)); //DOWN
break;
}
case -2:
{
snake_locad.addFirst(new Point(head.x,head.y-1)); //LEFT
break;
}
case 2:
{
snake_locad.addFirst(new Point(head.x,head.y+1)); //RIGHT
break;
}
}
if (eat()) {
initFood();
}
else {
snake_locad.removeLast();
}
}
public boolean eat(){
Point head = snake_locad.getFirst();
if (head.equals(food)){
return true;
}else {
return false;
}
}
public void over(){
Point head = snake_locad.getFirst();
for (int i = 1; i <snake_locad.size() ; i++) {
Point body = snake_locad.get(i);
if (head.equals(body)){
System.out.println("游戏结束,,");
System.exit(0);
}
}
for(Point p :snake_locad){
if (blackground[p.x][p.y]=='*'){
System.out.println("游戏结束,,");
System.exit(0);
}
}
}
public void gUi(){
JFrame jFrame = new JFrame("控制器");
jFrame.add(new JButton("←"),BorderLayout.WEST);
jFrame.add(new JButton("→"),BorderLayout.EAST);
jFrame.add(new JButton("↑"),BorderLayout.NORTH);
jFrame.add(new JButton("↓"),BorderLayout.SOUTH);
JButton jButton = new JButton("点击启动控制器");
jFrame.add(jButton,BorderLayout.CENTER);
srtGui.setGui(jFrame,300,400);
jButton.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT: {
changeDir(-2);
break;
}
case KeyEvent.VK_RIGHT: {
changeDir(2);
break;
}
case KeyEvent.VK_UP: {
changeDir(-1);
break;
}
case KeyEvent.VK_DOWN: {
changeDir(1);
break;
}
}
move();
refresh();
}
});
}
public static void main(String[] args) throws InterruptedException {
CreateSnake snake = new CreateSnake();
snake.createMap();
snake.initFood();
snake.initSnake();
snake.showFood();
snake.showSnake();
snake.showMap();
snake.gUi();
}
}
Java学习:贪吃蛇游戏实现。
最新推荐文章于 2023-04-28 15:40:57 发布