java小程序贪吃蛇代码_写一个贪吃蛇小程序

这个程序最重要的是对集合子类的LinkedList操作,了解其特有方法,getFirst(),getLast(),

在实现过程中我发现,当对 Point head = snack.getFirst(),对head操作时,会同步到对集合的首元素操作,明天我将验证对其他的集合子类是否具有相应的特性。其中Point是java自带的工具类,实现了equal等常用方法,然后就是要注意二维数组的越界问题,先不多说,附上源码。

package cn.itcast.snake;

import java.awt.Point;

import java.io.IOException;

import java.util.Random;

import java.util.Scanner;

import javax.xml.transform.Templates;

/*

@Author 吴想

@Time 2019年4月19日

类说明:

*/

public class SnackServer {

// 初始化背景

public void initBackground() {

for (int i = 0; i < Parameter.background.length; i++)

for (int j = 0; j < Parameter.background[i].length; j++) {

if (i == 0 || j == 0 || i == Parameter.background.length - 1

|| j == Parameter.background[i].length - 1) {

Parameter.background[i][j] = '*';

} else {

Parameter.background[i][j] = '-';

}

}

}

// 显示游戏界面

public void showGamePanel() {

for (int i = 0; i < Parameter.background.length; i++) {

for (int j = 0; j < Parameter.background[i].length; j++) {

System.out.print(Parameter.background[i][j]);

}

System.out.println();

}

}

// 初始化蛇

public void initSnake() {

Parameter.snake.addFirst(new Point(10, 13));

Parameter.snake.addFirst(new Point(10, 14));

Parameter.snake.addFirst(new Point(10, 15));

Parameter.snake.addFirst(new Point(10, 16));

}

// 把蛇加入背景

public void addSnackToBackground() {

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

Point head = Parameter.snake.get(i);

if (i == 0) {

Parameter.background[head.x][head.y] = '@';

} else {

Parameter.background[head.x][head.y] = '#';

}

}

}

// 调转方向

public void getChangeDir(int changeDir) {

if (changeDir + Parameter.currentDir != 0)

Parameter.currentDir = changeDir;

}

// 移动蛇

public void moveSnake() {

Point head = Parameter.snake.getFirst();

int x, y;

switch (Parameter.currentDir) {

case 1:// 上

x = head.x - 1;

y = head.y;

Parameter.snake.addFirst(new Point(x, y));

break;

case -1:// 下

x = head.x + 1;

y = head.y;

Parameter.snake.addFirst(new Point(x, y));

break;

case 2:// 左

x = head.x;

y = head.y - 1;

Parameter.snake.addFirst(new Point(x, y));

break;

case -2:// 右

x = head.x;

y = head.y + 1;

Parameter.snake.addFirst(new Point(x, y));

break;

default:

break;

}

if (isEatFood(Parameter.snake.getFirst())) {

createFood();

} else {

Parameter.snake.removeLast();

}

if (isHit()) {

System.err.println("GAME OVER!");

System.exit(0);

}

refrush();

}

// 碰撞检测

public boolean isHit() {

if (Parameter.snake.getFirst().equals(Parameter.snake.getLast()) || Parameter.snake.getFirst().x == 0

|| Parameter.snake.getFirst().x == Parameter.heigth || Parameter.snake.getFirst().y == 0

|| Parameter.snake.getFirst().y == Parameter.width) {

return true;

} else {

return false;

}

}

// 刷新地图

public void refrush() {

initBackground();

addFoodToBackground();

addSnackToBackground();

showGamePanel();

}

// 创造食物

public void createFood() {

Random r = new Random();

while (true) {

int x = r.nextInt(Parameter.heigth);

int y = r.nextInt(Parameter.width);

if (Parameter.background[x][y] != '*') {

Parameter.food = new Point(x, y);

break;

}

}

}

// 把食物加入背景

public void addFoodToBackground() {

Parameter.background[Parameter.food.x][Parameter.food.y] = '@';

}

// 是否吃到了食物

public boolean isEatFood(Point p) {

return Parameter.food.equals(p);

}

public void run() {

initBackground();

initSnake();

createFood();

System.out.println("GAME START!");

refrush();

while (true) {

if (sc.hasNext()) {

String dir = sc.next();

switch (dir) {

case "w":

getChangeDir(1);

break;

case "d":

getChangeDir(-2);

break;

case "a":

getChangeDir(2);

break;

case "s":

getChangeDir(-1);

break;

default:

break;

}

}

if (!isHit()) {

moveSnake();

}

}

}

}

package cn.itcast.snake;

import java.awt.Point;

import java.util.LinkedList;

/*

@Author 吴想

@Time 2019年4月19日

类说明:

*/

public class Parameter {

//宽

public static final int width = 60;

//高

public static final int heigth = 20;

//蛇

public static LinkedList snake = new LinkedList();

//食物

public static Point food;

//现在的方向

public static int currentDir = 1;

//改变的方向

public static int upDir = 1;

public static int downDir = -1;

public static int leftDir = -2;

public static int rightDir = 2;

//背景

public static char[][] background = new char[heigth][width];

}

package cn.itcast.snake;

/*

@Author 吴想

@Time 2019年4月19日

类说明:

*/

public class Snake {

public static void main(String[] args) {

SnackServer server = new SnackServer();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值