java吧 关注:1,244,886贴子:12,721,796
  • 14回复贴,共1

写了个贪吃蛇,只会吃东西T T不会长大

只看楼主收藏回复

求大哥看看我的代码T T给点意见


IP属地:浙江1楼2014-07-01 16:55回复
    就是吃了果实后,会长一个蛇身,然后身体不跟着蛇头跑


    IP属地:浙江2楼2014-07-01 16:57
    收起回复
      package Snake8;
      import javax.swing.*;
      import java.awt.*;
      import java.awt.event.*;
      import java.util.ArrayList;
      import java.util.Vector;
      public class Snake extends JFrame{
      Mypanel mp=null;
      public static void main(String[] args){
      // TODO Auto-generated method stub
      Snake sk=new Snake();
      }
      public Snake()
      {
      mp=new Mypanel();
      this.add(mp);
      this.addKeyListener(mp);
      Thread t=new Thread(mp);
      t.start();
      this.setSize(400,330);
      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      this.setVisible(true);
      }
      }
      class Mypanel extends JPanel implements KeyListener,Runnable
      {
      Snakeheads sh=null;
      Vector<Fruit>fts=new Vector<Fruit>();
      Fruit ft=null;
      Vector<SnakeSS>sks=new Vector<SnakeSS>();
      int pang=5;
      Snakeheadss shss=null;
      SnakeSS sk=null;
      int kongge=1;
      public Mypanel()
      {
      sh=new Snakeheads(20, 20,1);
      //初始化蛇身
      Thread t=new Thread(sh);
      t.start();
      sk=new SnakeSS(20,30,1);
      sks.add(sk);
      //初始化果实
      ft=new Fruit(50,50);
      fts.add(ft);
      }
      //画出蛇头
      public void paint(Graphics g)
      {
      super.paint(g);
      g.fillRect(0, 0, 400, 300);
      g.setColor(Color.yellow);
      //画出我的蛇头
      g.fillOval(sh.x, sh.y, pang, pang);
      //画出我的蛇身
      //alongate();
      for(int i=0;i<sks.size();i++)
      {
      SnakeSS sheshen=sks.get(i);
      System.out.print("N="+i+" ");
      System.out.println(sheshen.getX()+","+sheshen.getY());
      g.fillOval(sheshen.x, sheshen.y, pang, pang);
      }
      g.setColor(Color.red);
      for(int i=0;i<fts.size();i++)
      {
      Fruit guoshi=(Fruit)fts.get(i);
      //画出果实
      if(guoshi!=null&&guoshi.islive==true)
      {
      g.fillOval(ft.x, ft.y, 10, 10);
      }
      else if(guoshi.islive==false)
      {
      fts.remove(i);
      ft=new Fruit((int)(Math.random()*1000/2.8),(int)(Math.random()*1000/3.5));
      fts.add(ft);
      g.fillOval(ft.x, ft.y, 10, 10);
      }
      }
      }
      //吃了果实,蛇身跟着蛇头运动
      public void alongate()
      {
      //shss是个空瓶子
      System.out.println("你的方向"+sh.direct);
      for(int i=sks.size();i>0;i--)
      {
      SnakeSS sheshen1=sks.get(i);
      SnakeSS sheshen0=sks.get(i-1);
      sheshen1.direct=sheshen0.direct;
      }
      SnakeSS sheshen1=sks.get(1);
      sheshen1.direct=sh.direct;
      }
      //判断蛇头是否吃到果实
      public void Eatfruit(Fruit ft,Snakeheads sh)
      {
      switch (sh.direct)
      {
      case 0:
      case 1:
      case 2:
      case 3:
      if(sh.x+2.5>ft.x&&sh.x+2.5<ft.x+10&&sh.y+2.5>ft.y&&sh.y+2.5<ft.y+10)
      {
      ft.islive=false;
      sh.speed+=0.1;
      System.out.println(sh.speed);
      //pang++;
      switch (sh.direct) {
      case 0:
      SnakeSS sk=new SnakeSS(sh.x,sh.y+5,sh.direct);
      sks.add(sk);
      break;
      case 1:
      SnakeSS sk1=new SnakeSS(sh.x,sh.y-5,sh.direct);
      sks.add(sk1);
      break;
      case 2:
      SnakeSS sk2=new SnakeSS(sh.x+5,sh.y,sh.direct);
      sks.add(sk2);
      break;
      case 3:
      SnakeSS sk3=new SnakeSS(sh.x-5,sh.y,sh.direct);
      sks.add(sk3);
      break;
      }
      }
      }
      }
      @Override
      //键被按下
      public void keyTyped(KeyEvent e) {
      // TODO Auto-generated method stub
      }
      @Override
      //键被释放
      public void keyPressed(KeyEvent e) {
      // TODO Auto-generated method stub
      if(e.getKeyCode()==KeyEvent.VK_UP)
      {
      this.sh.setDirect(0);
      }else if(e.getKeyCode()==KeyEvent.VK_DOWN)
      {
      this.sh.setDirect(1);
      }else if(e.getKeyCode()==KeyEvent.VK_LEFT)
      {
      this.sh.setDirect(2);
      }else if(e.getKeyCode()==KeyEvent.VK_RIGHT)
      {
      this.sh.setDirect(3);
      }else if(e.getKeyCode()==KeyEvent.VK_SPACE)
      {
      kongge++;
      if(kongge%2==0)
      this.sh.speed=0;
      else
      this.sh.speed=1;
      }
      //调用repaint()函数,来重绘界面
      this.repaint();
      }
      @Override
      //键的一个值被输出
      public void keyReleased(KeyEvent e) {
      // TODO Auto-generated method stub
      }
      @Override
      public void run() {
      // TODO Auto-generated method stub
      while(true)
      {
      try {
      Thread.sleep(100);
      } catch (Exception e) {
      // TODO: handle exception
      }
      this.Eatfruit(ft, sh);
      // this.alongate();
      this.repaint();
      }
      }
      }
      //定义果实
      class Fruit
      {
      boolean islive=true;
      int x=(int)(Math.random()*1000/2.5);
      int y=(int)(Math.random()*1000/3.3);
      public Fruit(int x,int y)
      {
      this.x=x;
      this.y=y;
      }
      public int getX() {
      return x;
      }
      public void setX(int x) {
      this.x = x;
      }
      public int getY() {
      return y;
      }
      public void setY(int y) {
      this.y = y;
      }
      }
      //蛇的尾巴
      class SnakeSS
      {
      int x,y,direct;
      public int getX() {
      return x;
      }
      public void setX(int x) {
      this.x = x;
      }
      public int getY() {
      return y;
      }
      public void setY(int y) {
      this.y = y;
      }
      public int getDirect() {
      return direct;
      }
      public void setDirect(int direct) {
      this.direct = direct;
      }
      public SnakeSS(int x,int y,int direct)
      {
      this.x=x;
      this.y=y;
      this.direct=direct;
      }
      }
      //存放蛇头的
      class Snakeheadss
      {
      int x,y,direct;
      public Snakeheadss(int x,int y,int direct)
      {
      this.x=x;
      this.y=y;
      this.direct=direct;
      }
      }
      //定义蛇头,并给于运动
      class Snakeheads implements Runnable
      {
      int x;
      int y;
      int direct;
      int speed=1;
      boolean islive=true;
      public int getX() {
      return x;
      }
      public void setX(int x) {
      this.x = x;
      }
      public int getY() {
      return y;
      }
      public void setY(int y) {
      this.y = y;
      }
      public int getDirect() {
      return direct;
      }
      public void setDirect(int direct) {
      this.direct = direct;
      }
      public int getSpeed() {
      return speed;
      }
      public void setSpeed(int speed) {
      this.speed = speed;
      }
      public Snakeheads(int x,int y,int direck)
      {
      this.x=x;
      this.y=y;
      this.direct=direck;
      }
      @Override
      public void run() {
      // TODO Auto-generated method stub
      while(true)
      {
      try {
      Thread.sleep(50);
      } catch (Exception e) {
      // TODO: handle exception
      }
      switch(this.direct)
      {
      case 0:
      y-=speed;
      break;
      case 1:
      y+=speed;
      break;
      case 2:
      x-=speed;
      break;
      case 3:
      x+=speed;
      break;
      }
      if(x>400||y>300||x<0||y<0)
      {
      this.islive=false;
      break;
      }
      }
      }
      }


      IP属地:浙江3楼2014-07-01 16:57
      回复

         ——————————————————————————————Love is ever betrayed only fickle just let people remember。 请叫我七黯
           


        来自Android客户端4楼2014-07-01 16:59
        收起回复
          才五点钟都去次饭了么


          IP属地:浙江5楼2014-07-01 17:05
          回复
            可以做个贪吃龟的……


            IP属地:安徽来自Android客户端6楼2014-07-01 17:09
            收起回复
              好腻害!!!


              7楼2014-07-01 17:12
              收起回复
                小蛇萌萌哒,乃们不要酱紫


                来自Android客户端8楼2014-07-01 19:44
                回复