如何添加游戏级别的蛇代码java

我自己写的,觉得好玩。很简单。请尝试一下。...

主要使用javax.swing.Timer类:

进口?Java . awt . *;

进口?javax . swing . *;

@SuppressWarnings("serial ")

公共?班级?主类?延伸?JFrame?{

ControlSnake?控制;

工具包?套件;

维度?迪门;

公共?静电?作废?main(String[]?args)?{

新的?MainClass("我的?蛇”);

}

公共?MainClass(字符串?s)?{

超级用户;

控制?=?新的?control snake();

control . setfocusable(true);

基特。=?toolkit . getdefaulttoolkit();

迪门?=?kit . getscreensize();

添加(控制);

setLayout(新?BorderLayout());

setLocation(dimen.width?/?3,?迪门。身高?/?3);//?dimen.width/3,dimen.height/3

setSize(FWIDTH,FH height);

setDefaultCloseOperation(JFrame。EXIT _ ON _ CLOSE);

setResizable(false);

set visible(true);

}

公共?静电?决赛?int?FWIDTH?=?315;

公共?静电?决赛?int?FHEIGHT?=?380;

}

进口?Java . util . *;

进口?Java . awt . *;

进口?Java . awt . event . *;

进口?javax . swing . *;

进口?javax . swing . timer;

进口?Java . util . random;

@SuppressWarnings("serial ")

公共?班级?ControlSnake?延伸?JPanel?器物?ActionListener?{

随机?兰德;

ArrayList & lt点& gt?列表,?listBody

字符串?str,?str 1;

静电?布尔?关键;

int?x,?y,?dx,?dy?fx,?fy,?旗帜;

int?蛇身;

int?速度;

公共?ControlSnake()?{

蛇身?=?1;

str?=?“下一个控制键?p键暂停……”;

str1?=?目前长度为:?+?蛇身;

钥匙?=?真实;

旗帜?=?1;

速度?=?700;

兰德?=?新的?random();

列表?=?新的?ArrayList & lt点& gt();

listBody?=?新的?ArrayList & lt点& gt();

x?=?5;

y?=?5;

list.add(新?点(x,?y));

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

dx?=?10;

dy?=?0;

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

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

setBackground(颜色。白色);

setSize(新?维度(318,?380));

决赛?定时器?时间?=?新的?定时器(速度,?这个);

time . start();

addKeyListener(新?KeyAdapter()?{

公共?作废?按键(按键事件?e)?{

如果?(e.getKeyCode()?==?37)?{

dx?=?-10;

dy?=?0;

}?不然呢?如果?(e.getKeyCode()?==?38)?{

dx?=?0;

dy?=?-10;

}?不然呢?如果?(e.getKeyCode()?==?39)?{

dx?=?10;

dy?=?0;

}?不然呢?如果?(e.getKeyCode()?==?40)?{

dx?=?0;

dy?=?10;

}?不然呢?如果?(e.getKeyCode()?==?80)?{

如果?(旗帜?%?2?==?1)?{

time . stop();

}

如果?(旗帜?%?2?==?0)?{

time . start();

}

flag++;

}

}

});

}

公共?作废?油漆(图形?g)?{

g.setColor(颜色。白色);

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

g.setColor(颜色。深灰);

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

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

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

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

g.setColor(颜色。粉色);

为了什么?(int?我?=?0;?我?& lt?list body . size();?i++)?{

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

}

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

g.setColor(颜色。橙色);

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

g.setColor(颜色。深灰);

str1?=?目前长度为:?+?蛇身;

g .拉绳(str,10,?320);

g .拉带(str1,?10,?335);

}

公共?作废?actionPerformed(ActionEvent?e)?{

x?+=?dx;

y?+=?dy;

如果?(makeOut()?==?假)?{

joptionpane . showmessagedialog(null,“重新开始……”);

速度?=?700;

蛇身?=?1;

x?=?5;

y?=?5;

list . clear();

list.add(新?点(x,?y));

list body . clear();

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

dx?=?10;

dy?=?0;

}

addPoint(x,y);

如果?(x?==?fx?& amp& amp?y?==?fy)?{

速度?=?(int)?(速度?*?0.8);//速度增加参数

如果?(速度?& lt?200)?{

速度?=?100;

}

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

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

snake body++;//?2

}?//?2

repaint();

}

公共?作废?addPoint(int?xx,?int?yy)?{

//?动态记录最近50步内移动的坐标。

//?画出最新的蛇身

如果?(list.size()?& lt?100)?{//蛇身最长100。

list.add(新?点(xx,?YY));

}?不然呢?{

list . remove(0);

list.add(新?点(xx,?YY));

}

如果?(蛇身?==?1)?{

list body . remove(0);

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

}?不然呢?{

list body . clear();

如果?(list.size()?& lt?蛇身)?{

为了什么?(int?我?=?list.size()?-?1;?我?& gt?0;?我-)?{

list body . add(list . get(I));

}

}?不然呢?{

为了什么?(int?我?=?list.size()?-?1;?listBody.size()?& lt?蛇身;?我-)?{

list body . add(list . get(I));

}

}

}

}

公共?布尔?makeOut()?{

如果?((x?& lt?3?||?y?& lt?3)?||?(x?& gt?305?||?y?& gt?305))?{

回归?假的;

}

为了什么?(int?我?=?0;?我?& lt?listBody.size()?-?1;?i++)?{

为了什么?(int?j?=?我?+?1;?j?& lt?list body . size();?j++)?{

如果?(listBody.get(i)。equals(listBody.get(j)))?{

回归?假的;

}

}

}

回归?真实;

}

}