Snake Crawling Horiontally : Start and stop Swing based java program

Snake crawling is a program , in which snake position is set in a frame . The frame is provided with two buttons start and stop . When user presses a start button then the snake starts crawling  in horizontal direction (or East direction) . User has the freedom to stop the movement of snake by pressing the stop button provided in the frame .This is an applet based application .  Here snake is represented by **** .
A user can reset the position of the snake by changing the values in the program provided below .
The program given below is run  by giving following inputs


                             appletviewer    SnakeCrawling.java

Remember the above command is to run the program , before that you need to run one more command to get the class file of the program , that is

                            javac     SnakeCrawling.java

The points to understand and learn in this program are :

* It does not matter how many times you call repaint() method , it will only execute once in a method .
   Remember  the scope we are talking about is method .
* Whenever the repaint() is called , it initialises the applet and then run the paint() method again .
* drawString(s ,x ,y ) takes three parameters where s is the string that needs to show at (x,y) position in the
   frame .

Please also note that in the awt and Swing , if we want to do some task or event at the press of button in our
frame then we use event handler. To use event handler , here , on pressing the button .
First step is to implement the ActionListener interface .Then we need to override the actionPerformed(event)
method . In the actionPerformed method , the action to perform after pressing the button ,code is written .

Here you can also make the snake move vertically ,what you need to do is that increment y with  10 each time  in the for loop of the paint method .

In the last part of the code we are checking whether the snake does not cross the frame .
if(x>285)
If it does then we are calling repaint() which actually initialises the paint method again , and our snake will continue to crawl in the frame horizontally.

There is another important thing in the code , to make the java compiler understand that its a Applet file we need to write the following code in the java program
/* <APPLET CODE=ClassName.class WIDTH=X HEIGHT=Y></APPLET> */

Without the above line the java compiler will treat the code as simple java program . But the above line helps java compiler to make the code appletviewer compatible.

Demo :
                       
start and stop swing based java program

















Please find the Code below :


import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
/*  */

public class SnakeCrawling extends Applet implements ActionListener
{
    int x=10,y=20,i,s=0,k=0;
    Button b1,b2;
    public void init()
    {
        setLayout(null);
        b1=new Button("Start");
        b2=new Button("Stop");
        add(b1);
        add(b2);
        b1.setBounds(50,220,60,40);
        b2.setBounds(200,220,60,40);
        b1.addActionListener(this);
        b2.addActionListener(this);
    }
    
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource()==b1)
        repaint();
        if(e.getSource()==b2)
        {
            k=1;
            repaint();
            
        }
    }
    
    
    public void paint(Graphics g)
    {
        
        if(s==1)
        {
            for(i=0;i<1;i++)
            {
                System.out.println("helooo");
                g.drawString("*",x,y);
                g.drawString("*",x+10,y);
                g.drawString("*",x+20,y);
                g.drawString("*",x+30,y);
                if(k==1)
                break;
                x=x+40;
                //      repaint();
                
                System.out.println("over ");
                try
                {
                    Thread.sleep(300);
                }
                catch(InterruptedException e1)
                {}
                System.out.println("oleeee");
                if(x>285)
                x=10;
                repaint();
            }
            

        }                                   
  
      if(s==0)                           
        {
            g.drawString("*",0,20);
            g.drawString("*",10,20);
            g.drawString("*",20,20);
            g.drawString("*",30,20);
            s++;
        }
    }
}



About The Author

Subham Mittal has worked in Oracle for 3 years .
For more java articles ,Click here to Subscribe JavaHungry