欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java贪吃蛇代码(最全的java游戏网站)

程序员文章站 2023-11-29 19:54:16
年末啦,小编首先祝各位程序员新年快乐!真的是应了那句话:过了12岁之后,那岁数可就是不按规律的蹭蹭的往上涨啊,就在今年2018年,最后一批90后也步入了18岁的成人礼。正式宣布90后退出青年市场,00...

年末啦,小编首先祝各位程序员新年快乐!真的是应了那句话:过了12岁之后,那岁数可就是不按规律的蹭蹭的往上涨啊,就在今年2018年,最后一批90后也步入了18岁的成人礼。正式宣布90后退出青年市场,00后统治世界~我们也即将是老去的一代。

java贪吃蛇代码(最全的java游戏网站)

小编偶然想到童年玩过的那些经典游戏,在当下吃鸡,撸啊撸风靡的时代,那些小游戏渐渐被人遗忘,现在回想起来,当时那些游戏还是很好玩的呢,各位看官觉得呢?所以小编自己动手写出了贪吃蛇游戏的java代码,又重温了一下,仿佛又回到了童年时代。下面给大家介绍一下代码的逻辑和具体的代码是什么:

1.逻辑判断

要点分析:

1)数据结构:matrix[][]用来存储地图上面的信息,如果什么也没有设置为false,

如果有食物或蛇,设置为true;nodearray,一个linkedlist,用来保存蛇的每

一节;food用来保存食物的位置;而node类是保存每个位置的信息。

2)重要函数:

changedirection(int newdirection) ,用来改变蛇前进的方向,而且只是

保存头部的前进方向,因为其他的前进方向已经用位置来指明了。 其中newdirection

必须和原来的direction不是相反方向,所以相反方向的值用了同样的奇偶性。在测试

的时候使用了direction%2!=newdirection%2 进行判断。

moveon(),用来更新蛇的位置,对于当前方向,把头部位置进行相应改变。如果越界,

结束;否则,检测是否遇到食物(加头部)或身体(结束);如果什么都没有,加上头部,

去掉尾部。由于用了linkedlist数据结构,省去了相当多的麻烦。

java贪吃蛇代码(最全的java游戏网站)

2.具体代码

public class snakepanel extends jpanel implements keylistener,actionlistener {

imageicon up = new imageicon(“up.png”);

imageicon down = new imageicon(“down.png”);

imageicon right = new imageicon(“right.png”);

imageicon left = new imageicon(“left.png”);

imageicon title = new imageicon(“title.jpg”);

imageicon food = new imageicon(“food.png”);

imageicon body = new imageicon(“body.png”);

/*

* 定义数组记录蛇头和蛇身体的坐标,变量len表示蛇的长度

* 变量方向表示蛇移动的方向

*/

int[] snakex = new int[750];

int[] snakey = new int[750];

random rand = new random();

int foodx = rand.nextint(34)*25+25;

int foody = rand.nextint(24)*25+75;

int len = 3;

int score = 0;

string fangxiang = “r”;//r右、l左、u上、d下

boolean isstarted = false;//判断游戏是否开始

boolean isfailed = false;//判断是否死亡

//计时器:1.时间 2.时间到了去找的对象

timer timer = new timer(300, this);

public snakepanel(){

this.setfocusable(true);//取得焦点

this.addkeylistener(this);

setup();

timer.start();

}

/*

* graphics图像

* public void paint(graphics g) 以绘制组件。

* 应用程序不应直接调用 paint,而是应该使用 repaint 方法来安排重绘组件。

* 参数:g (相当于画笔)- 在其中进行绘制的 graphics 上下文

*/

public void paint(graphics g){

// super.paint(g);

// this.setbackground(color.white);

this.getrootpane().setbackground(color.white);

/*

* public void painticon(component c,graphics g,int x,int y)

* 绘制图标。

* 图标的左上角在图形上下文 g 的坐标空间中的点 (x, y) 处绘制。

* 如果此图标没有图像观察者,则此方法使用 c 组件作为观察者。

* 参数:c(画布) – 用作观察者的组件,如果此图标没有图像观察者

g (画笔)- 图形上下文

x – 图标左上角的 x 坐标

y – 图标左上角的 y 坐标

*/

title.painticon(this, g, 25, 11);

/*

* void java.awt.graphics.fillrect(int x, int y, int width, int height)

* 填充指定的矩形。

* 该矩形左边和右边位于 x 和 x + width – 1。

* 顶边和底边位于 y 和 y + height – 1。

* 得到的矩形覆盖的区域宽度为 width 像素,高度为 height 像素。

* 使用图形上下文的当前颜色填充该矩形。

* 参数:x – 要填充矩形的 x 坐标。

y – 要填充矩形的 y 坐标。

width – 要填充矩形的宽度。

height – 要填充矩形的高度。

*/

g.fillrect(25, 75, 850, 600);

//画蛇头,先判断蛇头的方向

if(fangxiang.equals(“r”)){

right.painticon(this, g, snakex[0], snakey[0]);

}else if(fangxiang.equals(“l”)){

left.painticon(this, g, snakex[0], snakey[0]);

}else if(fangxiang.equals(“u”)){

up.painticon(this, g, snakex[0], snakey[0]);

}else if(fangxiang.equals(“d”)){

down.painticon(this, g, snakex[0], snakey[0]);

}

//画蛇的身体

for (int i = 1; i < len; i++) {

body.painticon(this, g, snakex[i], snakey[i]);

}

//游戏没有开始时,显示提示语(!isstarted)

if(isstarted == false){

g.setcolor(color.white);

g.setfont(new font(“微软雅黑”,font.bold,35));

g.drawstring(“press space to start/pause”, 250, 350);

}

if(isfailed){

g.setcolor(color.white);

g.setfont(new font(“微软雅黑”,font.bold,35));

g.drawstring(“game over! press space to restart”, 200, 350);

}

food.painticon(this, g, foodx, foody);

//添加分数

g.setcolor(color.white);

g.drawstring(“score : “+score, 600, 45);

}

public void setup(){

isstarted = false;

isfailed = false;

len = 3;

snakex[0] = 100;

snakey[0] = 100;

snakex[1] = 75;

snakey[1] = 100;

snakex[2] = 50;

snakey[2] = 100;

}

@override

public void keypressed(keyevent e) {

// todo auto-generated method stub

int keycode = e.getkeycode();

//实现转向,不能实现反转

if(keycode == keyevent.vk_space){

if (isfailed) {

// isstarted = false;

// isfailed = false;

setup();

}else {

// isstarted = true;

isstarted = !isstarted;//改变当前状态

// repaint();

}

}else if(keycode == keyevent.vk_up && fangxiang != “d”){

fangxiang = “u”;

}else if(keycode == keyevent.vk_down && fangxiang != “u”){

fangxiang = “d”;

}else if(keycode == keyevent.vk_right && fangxiang != “l”){

fangxiang = “r”;

}else if(keycode == keyevent.vk_left && fangxiang != “r”){

fangxiang = “l”;

}

}

@override

public void actionperformed(actionevent e) {

// todo auto-generated method stub

//1.再定义个闹钟

timer.start();

//2.移动数据

if (isstarted && !isfailed) {

//移动身体

for (int i = len; i >0; i–) {

snakex[i] = snakex[i-1];

snakey[i] = snakey[i-1];

}

//移动头

if(fangxiang.equals(“r”)){

snakex[0] = snakex[0] + 25;

if(snakex[0] > 850)

snakex[0] = 25;

}else if(fangxiang.equals(“l”)){

snakex[0] = snakex[0] – 25;

if(snakex[0] < 25) snakex[0] = 850;

}else if(fangxiang.equals(“u”)){

snakey[0] = snakey[0] – 25;

if(snakey[0] < 75) snakey[0] = 650;

}else if(fangxiang.equals(“d”)){

snakey[0] = snakey[0] + 25;

if(snakey[0] > 650) snakey[0] = 75;

}

}

//吃食物

if(snakex[0] == foodx && snakey[0] == foody){

len ++;

score ++;

foodx = rand.nextint(34)*25+25;

foody = rand.nextint(24)*25+75;

}

//判断身体相碰,游戏结束

for (int i = 1; i < len; i++) {

if (snakex[0] == snakex[i] && snakey[0] == snakey[i]) {

isfailed = true;

}

}

//3.repaint()

repaint();

}

@override

public void keyreleased(keyevent e) {

// todo auto-generated method stub

}

@override

public void keytyped(keyevent e) {

// todo auto-generated method stub

}

}

package 贪吃蛇;

import java.applet.applet;

import java.io.file;

import java.net.malformedurlexception;

import javax.swing.jframe;

public class snake {

public static void main(string[] args) {

// todo auto-generated method stub

jframe frame = new jframe();

frame.setbounds(10, 10, 900, 720);

frame.setresizable(false);

frame.setdefaultcloseoperation(jframe.exit_on_close);

snakepanel panel = new snakepanel();

frame.add(panel);

frame.setvisible(true);

}

}

代码量有点大,小伙伴们可以复制到eclipse中运行就可以了。

在最后呢,祝各位小伙伴永远18岁,新年快乐~谢谢观看~