放物運動

/*
    A basic extension of the java.applet.Applet class
*/

import java.awt.*;
import java.applet.*;
import java.lang.Math;

public class Applet1 extends Applet implements Runnable
{
double x,y,x1,y1;
    double ang=45;
    double v0=50;
    double gr=9.8;
    double rad=Math.PI/180;
    Thread th;
    boolean thFlag=true;
    boolean thFlag1=true;
    boolean imgFlag=false;
    Graphics g;
    Image imgs;
   
   
   
    public void init()
    {
   
   
        // Take out this line if you don't use symantec.itools.net.RelativeURL or symantec.itools.awt.util.StatusScroller
        symantec.itools.lang.Context.setApplet(this);
   
        // This code is automatically generated by Visual Cafe when you add
        // components to the visual environment. It instantiates and initializes
        // the components. To modify the code, only use code syntax that matches
        // what Visual Cafe can generate, or Visual Cafe may be unable to back
        // parse your Java file into its visual environment.
        //{{INIT_CONTROLS
        setLayout(null);
        setSize(769,452);
        textField1.setText("80");
        add(textField1);
        textField1.setBounds(96,216,36,24);
        textField2.setText("45");
        add(textField2);
        textField2.setBounds(96,252,36,24);
        label1.setText("初速度");
        add(label1);
        label1.setBounds(36,216,48,24);
        label2.setText("仰角");
        add(label2);
        label2.setBounds(36,252,48,24);
        label3.setText("m/s");
        add(label3);
        label3.setBounds(144,216,38,20);
        label4.setText("度");
        add(label4);
        label4.setBounds(144,252,27,18);
        label5.setText("0");
        add(label5);
        label5.setForeground(java.awt.Color.blue);
        label5.setBounds(300,216,48,27);
        label6.setText("X 座標");
        add(label6);
        label6.setBounds(228,216,57,32);
        label7.setText("Y 座標");
        add(label7);
        label7.setBounds(228,252,63,25);
        label8.setText("0");
        add(label8);
        label8.setForeground(java.awt.Color.blue);
        label8.setBounds(300,252,48,24);
        button1.setLabel("Restart");
        add(button1);
        button1.setBackground(java.awt.Color.lightGray);
        button1.setBounds(36,312,74,24);
        label9.setText("時間");
        add(label9);
        label9.setBounds(228,288,52,26);
        label10.setText("0");
        add(label10);
        label10.setForeground(java.awt.Color.blue);
        label10.setBounds(300,288,108,28);
        imgs=getImage(getDocumentBase(),"formula.gif");
        //}}
   
        //{{REGISTER_LISTENERS
       
       
       
        SymMouse aSymMouse = new SymMouse();
        this.addMouseListener(aSymMouse);
        SymAction lSymAction = new SymAction();
        textField1.addActionListener(lSymAction);
        SymText lSymText = new SymText();
        textField1.addTextListener(lSymText);
        textField2.addTextListener(lSymText);
        button1.addActionListener(lSymAction);
       
       
        //}}
    }
   
    public void start()
    {
   
    if (th == null) {
    th = new Thread(this);
    th.start();
   
    }
   
    }

   
    public void run()
    {
   
    while (true)
    {
    repaint();   
            try
            {
                th.sleep(20);    
            } catch (InterruptedException e) {}
    x=x+8;
   
       
    }
   
    }

    public void update(Graphics g){
        paint(g);
    }
    public void paint(Graphics g) {
    g.drawString("放物体の運動", 20, 30);
    g.drawString("黄色の目標物の座標は  (1344,13)", 20, 50);
    g.drawString(" t = 13.244101  秒後に目標に到達します。",20,70);
    g.drawString("初速度と仰角を計算で求めて目標に当ててください。",20,90);
    g.drawString("当たると OK! が表示されます",20,110);
   
    if(imgFlag)
    {
    g.setColor(Color.red);
    g.drawString("Hint !!",500,290);
    g.drawImage(imgs,500,300,this);
    imgFlag=false;
    }
   
    g.setColor(Color.orange);
    g.fillRect(720,201-10,10,10);
   
    g.setColor(Color.blue);
        g.drawLine(0,201, 1200, 201);
       
        String st1=textField1.getText();
        v0=Integer.parseInt(st1);
       
        String st2=textField2.getText();
        ang=Integer.parseInt(st2);
       
       
       
       
        y=Math.tan(ang*rad)*x-4.9*x*x/((v0*v0*Math.cos(ang*rad)*Math.cos(ang*rad)));//放物線の方程式 教科書参照
        x1=x/2;
        y1=-y/2;
        int x2=(int)x1;
        int y2=(int)y1;
        double t=x/(121*Math.cos(33*rad));
       
       
        label5.setText(""+(int)x);
        label8.setText(""+(int)y);
        label10.setText(""+t);
       
        if((int)x==1344 && (int)y==13)
    {
    g.setColor(Color.red);
    g.drawString("OK!!",720,180);
    try
            {
                th.sleep(3000);    
            } catch (InterruptedException e) {}
   
   
    }
   
    if(x>1200 && y>0)
    {
    if(x<1400 && y<30)
    {
    imgFlag=true;
   
    }
    }
   
        g.setColor(Color.blue);   
        g.drawOval(x2+50,y2+200,1,1);
        if (x>=1500)
    {
    try
            {
                th.sleep(3000);    
            } catch (InterruptedException e) {}
            Color col=getBackground();
            g.setColor(col);
            g.fillRect(0,0,769,452);
    x=0;
    y=0;
   
   
    }
    if (y>=1500 || y<=-1500)
    {
    try
            {
                th.sleep(3000);    
            } catch (InterruptedException e) {}
    Color col=getBackground();
            g.setColor(col);
            g.fillRect(0,0,769,452);
    y=0;
    x=0;
   
    }
   
   
   
   
       
       
           
       
   
   
    }

    public void stop() {
    if (th != null) {
    th.stop();
    th = null;
    }
    }
   


   
   
    //{{DECLARE_CONTROLS
    java.awt.TextField textField1 = new java.awt.TextField();
    java.awt.TextField textField2 = new java.awt.TextField();
    java.awt.Label label1 = new java.awt.Label();
    java.awt.Label label2 = new java.awt.Label();
    java.awt.Label label3 = new java.awt.Label();
    java.awt.Label label4 = new java.awt.Label();
    java.awt.Label label5 = new java.awt.Label();
    java.awt.Label label6 = new java.awt.Label();
    java.awt.Label label7 = new java.awt.Label();
    java.awt.Label label8 = new java.awt.Label();
    java.awt.Button button1 = new java.awt.Button();
    java.awt.Label label9 = new java.awt.Label();
    java.awt.Label label10 = new java.awt.Label();
    //}}

   

   

   

    class SymMouse extends java.awt.event.MouseAdapter
    {
        public void mouseClicked(java.awt.event.MouseEvent event)
        {
            Object object = event.getSource();
            if (object == Applet1.this)
                Applet1_MouseClicked(event);
        }
    }

    void Applet1_MouseClicked(java.awt.event.MouseEvent event)
    {
        // to do: code goes here.
       
        if (thFlag)
        {
        th.suspend();
        thFlag=false;
        button1.hide();
       
        }
        else if (thFlag==false)
        {
        th.resume();
        thFlag=true;
        button1.show();
        }
           
    }

    class SymAction implements java.awt.event.ActionListener
    {
        public void actionPerformed(java.awt.event.ActionEvent event)
        {
            Object object = event.getSource();
            if (object == textField1)
                textField1_ActionPerformed(event);
            else if (object == button1)
                button1_ActionPerformed(event);
        }
    }

    void textField1_ActionPerformed(java.awt.event.ActionEvent event)
    {
        // to do: code goes here.
           
    }

    class SymText implements java.awt.event.TextListener
    {
        public void textValueChanged(java.awt.event.TextEvent event)
        {
            Object object = event.getSource();
            if (object == textField1)
                textField1_TextValueChanged(event);
            else if (object == textField2)
                textField2_TextValueChanged(event);
        }
    }

    void textField1_TextValueChanged(java.awt.event.TextEvent event)
    {
        // to do: code goes here.
        String str1=textField1.getText();
        int val1=Integer.parseInt(str1);
        if (val1>=501)
        {
        textField1.setText("500");
       
            }
            if (val1<=0)
            {
            textField1.setText("1");
            }
           
    }

    void textField2_TextValueChanged(java.awt.event.TextEvent event)
    {
        // to do: code goes here.
        String str2=textField2.getText();
        int val2=Integer.parseInt(str2);
        if (val2>=90)
        {
        textField2.setText("70");
       
            }
            if (val2<=0)
            {
            textField2.setText("1");
            }   
    }

    void button1_ActionPerformed(java.awt.event.ActionEvent event)
    {
   
   
   
   
        x=0;
        Graphics g=getGraphics();
        Color col=getBackground();
        g.setColor(col);
        g.fillRect(0,0,769,452);
        if (thFlag1)
        {
        th.suspend();
        thFlag1=false;
        button1.setLabel("Start");
        }
        else {
        button1.setLabel("Clear");
        thFlag1=false;
       
        th.resume();
        thFlag1=true;
        }
    }
}

BACK >>