import java.awt.*;import java.applet.*;import java.awt.event.*;
class People extends Button implements FocusListener  //代表华容道人物的类.
{  Rectangle rect=null;
   int left_x,left_y;//按扭的左上角坐标.
   int width,height; //按扭的宽和高.
   String name; int number;
   People(int number,String s,int x,int y,int w,int h,Hua_Rong_Road road)
   {  super(s);
      name=s;this.number=number;
       left_x=x;left_y=y;
      width=w;height=h;setBackground(Color.orange);
      road.add(this);    addKeyListener(road);
      setBounds(x,y,w,h);addFocusListener(this);
      rect=new Rectangle(x,y,w,h);
   }
   public void focusGained(FocusEvent e)
   {  setBackground(Color.red);
   }
    public void focusLost(FocusEvent e)
   {   setBackground(Color.orange);
   }
}
public class Hua_Rong_Road extends Applet implements KeyListener,ActionListener
{  People people[]=new People[10];
   Rectangle left,right,above ,below;//华容道的边界 .
   Button restart=new Button("重新开始");
   public void init()
   {  setLayout(null); add(restart);
      restart.setBounds(5,5,80,25);
      restart.addActionListener(this);
      people[0]=new People(0,"曹操",104,54,100,100,this);
      people[1]=new People(1,"关羽",104,154,100,50,this);
      people[2]=new People(2,"张飞",54, 154,50,100,this);
    people[3]=new People(3,"刘备",204,154,50,100,this);
    people[4]=new People(4,"张辽",54, 54, 50,100,this);
    people[5]=new People(5,"曹仁",204, 54, 50,100,this);
    people[6]=new People(6,"兵  ",54,254,50,50,this);
    people[7]=new People(7,"兵  ",204,254,50,50,this);
    people[8]=new People(8,"兵  ",104,204,50,50,this);
      people[9]=new People(9,"兵  ",154,204,50,50,this);
    people[9].requestFocus();
    left=new Rectangle(49,49,5,260);
  people[0].setForeground(Color.white) ;
    right=new Rectangle(254,49,5,260);
      above=new Rectangle(49,49,210,5);
      below=new Rectangle(49,304,210,5);
   }
   public void paint(Graphics g)
   {  //画出华容道的边界:
      g.setColor(Color.cyan);
      g.fillRect(49,49,5,260);//left.
      g.fillRect(254,49,5,260);//right.
      g.fillRect(49,49,210,5); //above.
      g.fillRect(49,304,210,5);//below.
      //提示曹操逃出位置和按键规则:
      g.drawString("点击相应的人物,然后按键盘上的上下左右箭头移动",100,20);
      g.setColor(Color.red);
      g.drawString("曹操到达该位置",110,300);
   }
   public void keyPressed(KeyEvent e)
   {  People man=(People)e.getSource();//获取事件源.
       man.rect.setLocation(man.getBounds().x, man.getBounds().y);
       if(e.getKeyCode()==KeyEvent.VK_DOWN)
            {  man.left_y=man.left_y+50;     //向下前进50个单位.
            man.setLocation(man.left_x,man.left_y);
            man.rect.setLocation(man.left_x,man.left_y);
              //判断是否和其它人物或下边界出现重叠,如果出现重叠就退回50个单位距离.
            for(int i=0;i<10;i++)
                {if((man.rect.intersects(people[i].rect))&&(man.number!=i))
                    {  man.left_y=man.left_y-50;
                       man.setLocation(man.left_x,man.left_y);
                       man.rect.setLocation(man.left_x,man.left_y);
                    }
                 }
             if(man.rect.intersects(below))
                 {  man.left_y=man.left_y-50;
                    man.setLocation(man.left_x,man.left_y);
                    man.rect.setLocation(man.left_x,man.left_y);
                 }
         }
           if(e.getKeyCode()==KeyEvent.VK_UP)
        {  man.left_y=man.left_y-50;     //向上前进50个单位.
           man.setLocation(man.left_x,man.left_y);
           man.rect.setLocation(man.left_x,man.left_y);
           //判断是否和其它人物或上边界出现重叠,如果出现重叠就退回50个单位距离.
           for(int i=0;i<10;i++)
               {  if((man.rect.intersects(people[i].rect))&&(man.number!=i))
                      {  man.left_y=man.left_y+50;
                         man.setLocation(man.left_x,man.left_y);
                          man.rect.setLocation(man.left_x,man.left_y);
                       }
               }
            if(man.rect.intersects(above))
               {  man.left_y=man.left_y+50;
                  man.setLocation(man.left_x,man.left_y);
                  man.rect.setLocation(man.left_x,man.left_y);
               }
        }
      if(e.getKeyCode()==KeyEvent.VK_LEFT)
        {  man.left_x=man.left_x-50;     //向左前进50个单位.
           man.setLocation(man.left_x,man.left_y);
           man.rect.setLocation(man.left_x,man.left_y);
              //判断是否和其它人物或左边界出现重叠,如果出现重叠就退回50个单位距离.
          for(int i=0;i<10;i++)
               {  if((man.rect.intersects(people[i].rect))&&(man.number!=i))
                    { man.left_x=man.left_x+50;
                      man.setLocation(man.left_x,man.left_y);
                      man.rect.setLocation(man.left_x,man.left_y);
                     }
               }
          if(man.rect.intersects(left))
              {  man.left_x=man.left_x+50;
                 man.setLocation(man.left_x,man.left_y);
                 man.rect.setLocation(man.left_x,man.left_y);
               }
        }
      if(e.getKeyCode()==KeyEvent.VK_RIGHT)
       {  man.left_x=man.left_x+50;     //向右前进50个单位.
          man.setLocation(man.left_x,man.left_y);
          man.rect.setLocation(man.left_x,man.left_y);
         //判断是否和其它人物或右边界出现重叠,如果出现重叠就退回50个单位距离.
          for(int i=0;i<10;i++)
              {  if((man.rect.intersects(people[i].rect))&&(man.number!=i))
                    { man.left_x=man.left_x-50;
                      man.setLocation(man.left_x,man.left_y);
                      man.rect.setLocation(man.left_x,man.left_y);
                     }
               }
           if(man.rect.intersects(right))
               {  man.left_x=man.left_x-50;
                  man.setLocation(man.left_x,man.left_y);
                  man.rect.setLocation(man.left_x,man.left_y);
                }
         }
   }
   public void keyTyped(KeyEvent e){}
   public void keyReleased(KeyEvent e){}
   public void actionPerformed(ActionEvent e)
   {  this.removeAll();
      this.init();
   }
   }
//count往哪加啊?
还有 有哪位大虾能把游戏加载到手机上玩,特别是moto的l7。我将万分感激!!!

解决方案 »

  1.   

    用J2ME SDK编译一下。打个JAR包应该就可以了。我的邮箱是[email protected]
      

  2.   

    static 方法就是 技术用的啊.其他一概不知.能得分否看楼主的了哈哈
      

  3.   

    把count作为Hua_Rong_Road类的成员方法,在初始化的时候,和重新开始游戏的时候设置为0.楼主应该把所有移动的代码封装到一个方法里。
    比如 move(参数一 方向,参数二 距离);
    不过我看你的代码都是50距离,直接用一个参数的 move(参数 方向);
    在方法内部先计算移动后的坐标,再用计算后的坐标去判断是否重叠,
    如果不重叠则移动,在后再count++。
    如果重叠,则直接返回了,不移动也不增加count