贪吃蛇怎么存素材java_Java Snake 贪吃蛇游戏代码

时间:2018-11-09

概述:贪吃食 Java游戏

学Java的时候,经常会写一些小游戏,这个snake就是其中之一,通过这种Java小游戏可学习到不少Java编程知识。本贪吃蛇为了获取更好效果,还用到了两张gif图片素材,后边会附上这两张图片素材。下面是代码:

import java.awt.*;

import java.applet.*;

public class Snake extends Applet implements Runnable {

Image dot[] = new Image[400];

Image back;

Image offI;

Graphics offG;

int x[] = new int[400];

int y[] = new int[400];

int rtemp = 1;

int game = 1;

int level;

int z;

int n;

int count = 0;

int score = 0;

int add = 1;

Button b = new Button("Beginner");

Button i = new Button("Intermediate");

Button p = new Button("Professional");

Button X = new Button("Xtreamest");

String stemp;

String s;

String t;

boolean go[] = new boolean[400];

boolean left = false;

boolean right = false;

boolean up = false;

boolean down = false;

boolean started = false;

boolean me = false;

Thread setTime;

public void init() {

add(b);

add(i);

add(p);

add(X);

setBackground(Color.black);

back = getImage(getCodeBase(), "screan.gif");

for (z = 0; z < 400; z++) {

dot[z] = getImage(getCodeBase(), "dot.gif");

}

}

public void update(Graphics g) {

Dimension d = this.size();

if (offI == null) {

offI = createImage(d.width, d.height);

offG = offI.getGraphics();

}

offG.clearRect(0, 0, d.width, d.height);

paint(offG);

g.drawImage(offI, 0, 0, null);

}

public void paint(Graphics g) {

g.drawImage(back, 0, 0, this);

g.setColor(Color.white);

// 游戏开始,显示得分

if (started) {

g.setFont(new Font("Verdana", 1, 12));

t = "Score " + score + "";

g.drawString(t, 75, 220);

}

// 游戏当前所处的状态为1,选择游戏模式

if (game == 1) {

g.setFont(new Font("Arial", 1, 13));

s = "Set Mode";

g.drawString(s, 65, 30);

b.move(75, 50);

i.move(68, 90);

p.move(68, 130);

X.move(73, 170);

}

// 游戏当前所处的状态为2或3

if ((game == 2) || (game == 3)) {

if (!started) {

// 游戏未开始,显示提示信息

g.setFont(new Font("Verdana", 1, 11));

t = "Use the key board arrows to move!";

g.drawString(t, 5, 215);

}

for (z = 0; z <= n; z++) {

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

}

me = true;

}

if (!me) {

g.setFont(new Font("Verdana", 1, 11));

t = "by ali";

g.drawString(t, 5, 215);

}

// 游戏状态为3,游戏结束

if (game == 3) {

g.setFont(new Font("Verdana", 1, 13));

s = "Game Over";

g.drawString(s, 65, 60);

}

}

public void run() {

for (z = 4; z < 400; z++) {

go[z] = false;

}

for (z = 0; z < 4; z++) {

go[z] = true;

x[z] = 91;

y[z] = 91;

}

n = 3;

game = 2;

score = 0;

// 将游戏难度选择按钮移除

b.move(70, -100);

i.move(70, -100);

p.move(70, -100);

X.move(70, -100);

left = false;

right = false;

up = false;

down = false;

locateRandom(4);

while (true) {

if (game == 2) {

if ((x[0] == x[n]) && (y[0] == y[n])) {

go[n] = true;

locateRandom((n + 1));

score += add; // 得分更新

}

for (z = 399; z > 0; z--) {

if (go[z]) {

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

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

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

game = 3;

}

}

}

if (left) {

x[0] -= 10;

}

if (right) {

x[0] += 10;

}

if (up) {

y[0] -= 10;

}

if (down) {

y[0] += 10;

}

}

if (y[0] > 191) {

y[0] = 191;

game = 3;

}

if (y[0] < 1) {

y[0] = 1;

game = 3;

}

if (x[0] > 191) {

x[0] = 191;

game = 3;

}

if (x[0] < 1) {

x[0] = 1;

game = 3;

}

if (game == 3) {

if (count < (1500 / level)) {

count++;

} else {

count = 0;

game = 1;

repaint();

setTime.stop();

}

}

repaint();

try {

// 根据游戏的等级level来设置线程休眠时间

setTime.sleep(level);

} catch (InterruptedException e) {

}

}

}

public void locateRandom(int turn) {

rtemp = (int) (Math.random() * 20);

x[turn] = ((rtemp * 10) + 1);

rtemp = (int) (Math.random() * 20);

y[turn] = ((rtemp * 10) + 1);

n++;

}

// 记录哪个方向键盘被按下

public boolean keyDown(Event e, int key) {

// 如果按下向左键盘并且原来运动方向不是向右

if ((key == Event.LEFT) && (!right)) {

left = true;

up = false;

down = false;

if (!started)

started = true;

}

if ((key == Event.RIGHT) && (!left)) {

right = true;

up = false;

down = false;

if (!started)

started = true;

}

if ((key == Event.UP) && (!down)) {

up = true;

right = false;

left = false;

if (!started)

started = true;

}

if ((key == Event.DOWN) && (!up)) {

down = true;

right = false;

left = false;

if (!started)

started = true;

}

return true;

}

// 根据用户不同的难度选择设置不同的游戏参数

public boolean action(Event event, Object obj) {

stemp = (String) obj;

if (stemp.equals("Beginner")) {

add = 2;

level = 100;

setTime = new Thread(this);

setTime.start();

return true;

}

if (stemp.equals("Intermediate")) {

add = 5;

level = 70;

setTime = new Thread(this);

setTime.start();

return true;

}

if (stemp.equals("Professional")) {

add = 10;

level = 40;

setTime = new Thread(this);

setTime.start();

return true;

}

if (stemp.equals("Xtreamest")) {

add = 20;

level = 20;

setTime = new Thread(this);

setTime.start();

return true;

}

return false;

}

}

用到的两张图片素材,有兴趣的可另存为,然后编译一下代码:1.DOT.GIF,2.SCREAN.GIF。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值