Java贪吃蛇游戏,基于java的贪吃蛇游戏的设计与实现_1

  Java贪吃蛇游戏,基于java的贪吃蛇游戏的设计与实现

  本文详细介绍了Java实现贪吃蛇游戏的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

  如何解决写爬虫IP受阻的问题?立即使用。

  

1. 程序结构

  程序结构图如下图所示:

  

2. 程序设计思路

  

2.1 Data类

  功能:连接Statistics文件夹,将statics资源包中的图片变成图标在面板上绘制。实现:使用class.getResource(字符串路径)方法。代码如下:

  包com.snake导入javax . swing . *;导入Java . net . URL;公共类数据{

  //蛇头

  公共静态URL upUrl=data . class . get resource(/statics/up . png );

  public static image icon up=new image icon(upUrl);

  公共静态URL down URL=data . class . get resource(/statics/down . png );

  public static image icon down=new image icon(down URL);

  公共静态URL left URL=data . class . get resource(/statics/left . png );

  public static image icon left=new image icon(left URL);

  公共静态URL right URL=data . class . get resource(/statics/right . png );

  public static image icon right=new image icon(right URL);

  //饕餮蛇身

  公共静态URL body URL=data . class . get resource(/statics/body . png );

  public静态image icon body=new image icon(body URL);

  //食物

  公共静态URL foodUrl=data . class . get resource(/statics/food . png );

  public静态image icon food=new image icon(foodUrl);}

2.2 StartGame类

  功能:创建游戏窗口,在窗口中添加游戏面板。实现:用JFrame类创建一个游戏窗口,用它的add()方法添加一个GamePanel类实例化对象。代码如下:

  包com.snake导入javax . swing . *;导入Java . awt . *;公共类StartGame {

  公共静态void main(String[] args){

  //建立一个游戏窗口

  JFrame=New JFrame( Java-Snakes Games );//标题

  frame.setSize(900,720);//窗口大小

  frame . setlocationrelativeto(null);//窗口显示屏幕的中间

  frame . setresizable(false);//固定窗口大小

  frame . setdefaultcloseoperation(JFrame。EXIT _ ON _ CLOSE);//设置窗体关闭事件

  frame . add(new game panel());//添加游戏内容

  frame . set visible(true);//将窗体设置为可见

  }}

2.3 GamePanel类

  功能:实现游戏的动态页面。实现:(1)init()方法:初始化蛇位置;

  (2)eat()方法:用随机种子随机定位食物,判断食物位置不能与蛇位置重合;

  (3)继承JPanel类,重写paintComponent(Graphics g)方法,方法中绘制标题栏、蛇位置(根据方向蛇头方向变量绘制蛇头)、蛇身、积分栏、游戏提醒项、失败判断项;

  (4)在KeyListener接口中实现key pressed (key event)方法,获取键盘输入,根据键盘输入改变游戏状态或蛇头的方向变量;

  (5)在ActionListener接口中实现actionPerformed(ActionEvent e)方法,根据游戏状态和方向变量移动蛇(注意禁止直接折返操作),判断是吃食物还是死亡。使用Timer timer使游戏动态变化,使用repaint()方法实时更新界面。

  代码如下:包com.snake导入javax . swing . *;导入Java . awt . *;导入Java . awt . event . action event;导入Java . awt . event . action listener;导入Java . awt . event . key event;导入Java . awt . event . key listener;导入Java . util . random;公共类GamePanel扩展JPanel实现KeyListener,ActionListener {

  int[]snakeX=new int[500];//感恩蛇横坐标

  int[]snakeY=new int[500];//蛇形纵坐标

  int foodX//食物横坐标

  int foodY//食蛇纵坐标

  int长度;//贪吃蛇的长度

  弦方向;//蛇头方向

  int分数;//整数

  Random r=new Random();

  Timer timer=新定时器(100,这个);

  布尔isStart

  布尔isFail

  //构造函数

  公共游戏面板(){

  init();

  这个。setfocusable(true);

  这个。addkey监听器(this);

  计时器。start();

  }

  私有void init(){

  长度=3;

  snakeX[0]=100;snakeY[0]=100;

  snakeX[1]=75;snakeY[1]=100;

  snakeX[2]=50;snakeY[2]=100;

  方向= R

  吃(foodX,foodY);

  isStart=false

  isFail=false

  得分=0;

  }

  私有void eat(int x,int y){

  x=25 25 * r . nextint(34);

  y=75 25 * r . nextint(24);

  for(int I=0;我长度;i ) {

  if(snakeX[i]==xsnakeY[i]==y){

  x=25 25 * r . nextint(34);

  y=75 25 * r . nextint(24);

  }

  }

  foodX=x;foodY=y;

  }

  受保护的空白油漆组件(图形g) {

  超级棒。油漆组分(g);

  这个。设置背景(颜色。白色);//设置背景板为白色

  //画标题

  g.setColor(颜色。绿色);

  g.setFont(新字体(幼圆,字体。粗体,50));

  g。拉绳(贪吃蛇游戏,300,60);

  //绘制游戏区域

  g.setColor(颜色。灰色);

  g。填写rect(2575850600);

  //画贪吃蛇头部

  if(direction==R){

  Data.right.paintIcon(this,g,snakeX[0],snakeY[0]);

  }

  else if(direction==L){

  Data.left.paintIcon(this,g,snakeX[0],snakeY[0]);

  }

  if(direction==U){

  Data.up.paintIcon(this,g,snakeX[0],snakeY[0]);

  }

  else if(direction==D){

  Data.down.paintIcon(this,g,snakeX[0],snakeY[0]);

  }

  //画身体

  for(int I=1;我长度;i ) {

  Data.body.paintIcon(this,g,snakeX[i],snakeY[I]);

  }

  //画食物

  Data.food.paintIcon(this,g,foodX,foodY);

  //绘制积分栏

  g.setColor(颜色。黑色);

  g.setFont(新字体(幼圆,字体。粗体,20));

  g。拉绳(长度:长度,730,30);

  g。拉绳(得分:分数,730,60);

  //游戏开始提醒

  if(isStart==false){

  g.setColor(颜色。黑色);

  g.setFont(新字体(幼圆,字体。粗体,40));

  g。拉绳(按空格键开始游戏,300,300);

  }

  //失败判断

  如果(失败){

  g.setColor(颜色。红色);

  g.setFont(新字体(幼圆,字体。粗体,40));

  g。拉绳(游戏失败,按空格键重新开始,300,300);

  }

  }

  @覆盖

  公共空的按键(按键事件e) {

  int键码=e . get键码();//获取按下的按键

  //判断空格

  if(keyCode==KeyEvent .VK _空间){

  如果(失败){

  isFail=false

  init();

  }

  否则{

  isStart=!isStart

  }

  repaint();

  }

  //判断方向

  if(keyCode==KeyEvent .维生素k向左!=R){

  方向= L

  }

  else if(keyCode==KeyEvent .维生素k方向正确!=L){

  方向= R

  }

  else if(keyCode==KeyEvent .维生素k方向!=D){

  方向= U

  }

  else if(keyCode==KeyEvent .维生素k向下!=U){

  方向= D

  }

  }

  @覆盖

  公开无效密钥已释放(关键事件e){

  }

  @覆盖

  公共空的键入的(按键事件e) {

  }

  @覆盖

  已执行公共无效操作(操作事件e){

  //判断游戏状态

  如果(isStart!isFail){

  //移动身体

  for(int I=length-1;I 0;我- ) {

  snakeX[I]=snakeX[I-1];

  snakeY[I]=snakeY[I-1];

  }

  //移动头部

  if(direction==R){

  snakeX[0]=25;

  if(snakeX[0]850){

  snakeX[0]=25;

  }

  }

  else if(direction==L){

  snakeX[0]-=25;

  if(snakeX[0]25){

  snakeX[0]=850;

  }

  }

  else if(direction==U){

  snakeY[0]-=25;

  if(snakeY[0]75){

  snakeY[0]=650;

  }

  }

  else if(direction==D){

  snakeY[0]=25;

  if(snakeY[0]650){

  snakeY[0]=75;

  }

  }

  //吃食物

  if(snakeX[0]==foodXsnakeY[0]==foodY){

  长度;

  得分=10;

  吃(foodX,foodY);

  }

  //死亡判定

  for(int I=1;我长度;i ) {

  if(snakeX[0]==snakeX[I]snakeY[0]==snakeY[I]){

  isFail=true

  }

  }

  repaint();

  }

  计时器。start();

  }}

3. 游戏展示

  推荐: 《java视频教程》 以上就是爪哇如何实现贪吃蛇小游戏的详细内容,更多请关注我们其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: