?? climb.java
字號:
import java.awt.*;
import java.awt.event.*;
public class climb extends Frame implements ActionListener
{
Button getNode,start,clear;
TextField tf;
int width=800,height=700;
int centerX=width/2,centerY=height/2;
int drawPen=0;
int up=1,right=1,odd=1;
double x0,y0;
public climb()
{
super("爬山法! 制作人: 符雙");
setSize(width,height);
setLocation(100,0);
setResizable(false);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
Panel p1=new Panel();
p1.setBackground(Color.cyan);
getNode=new Button("Get inital node");
getNode.setBackground(Color.yellow);
start=new Button("Start");
start.setBackground(Color.green);
clear=new Button("Clear");
clear.setBackground(Color.white);
tf=new TextField(10);
p1.add(getNode);
p1.add(start);
p1.add(clear);
p1.add(tf);
add(p1,"South");
getNode.addActionListener(this);
start.addActionListener(this);
clear.addActionListener(this);
}
public void paint(Graphics g)
{
int scale=50;
double step=0.001;
double e=0.000000001;
if(drawPen==-1)
{
g.clearRect(0,0,width,height);
drawPen=0;
}
if(drawPen==0)
{
double x,z;
int rr,gg,bb;
rr = 200;
gg = 200;
bb = 255;
for(z=step; z<=0.5; z+=step)
{
g.setColor(new Color(rr,gg,bb));
x = Math.sqrt((1/z-2)/2);
g.fillOval(centerX-(int)x*scale/2,centerY-(int)x*scale/2,(int)x*scale,(int)x*scale);
rr = (rr + 40) %255;
gg = (gg + 10) %255;
bb = (bb + 55) %255;
}
g.setColor(Color.black);
g.drawLine(width/20,centerY,width*19/20,centerY);
g.drawLine(width*19/20-10,centerY-5,width*19/20,centerY);
g.drawLine(width*19/20-10,centerY+5,width*19/20,centerY);
g.drawString("x",width*19/20-10,centerY+15);
g.drawLine(centerX,height/20,centerX,height*19/20);
g.drawLine(centerX,height/20,centerX-5,height/20+5);
g.drawLine(centerX,height/20,centerX+5,height/20+5);
g.drawString("y",centerX+10,height/20+5);
}
if(drawPen==1)
{
g.setColor(Color.white);
x0 = up*(Math.random()*5+1);
y0 = right*(Math.random()*5+1);
if(odd==1) { right *= -1; odd = 0; }
else { up *=-1; odd = 1; }
g.fillOval((int)(centerX+x0*scale-5),(int)(centerY-y0*scale-5),10,10);
}
if(drawPen==2)
{
g.setColor(Color.white);
double x,y,t;
t = Math.pow(x0*x0+y0*y0+2,-4)*4*x0*x0 +
Math.pow(x0*x0+y0*y0+2,-4)*4*y0*y0;
while(t>e)
{
x = x0 - Math.pow(x0*x0+y0*y0+2,-2)*2*x0;
y = y0 - Math.pow(x0*x0+y0*y0+2,-2)*2*y0;
g.fillOval((int)(centerX+x*scale-5),(int)(centerY-y*scale-5),10,10);
t = Math.pow(x0*x0+y0*y0+2,-4)*4*x0*x0 +
Math.pow(x0*x0+y0*y0+2,-4)*4*y0*y0;
x0 = x;
y0 = y;
try{ Thread.sleep(20); }
catch(Exception ee) { }
}
tf.setText(" Get top!");
tf.setBackground(Color.red);
}
}
public void update(Graphics g)
{
paint(g);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==getNode)
{
drawPen=1;
tf.setText(" Ready!");
tf.setBackground(Color.yellow);
repaint();
}
if(e.getSource()==start)
{
drawPen=2;
tf.setText(" Go...");
tf.setBackground(Color.green);
repaint();
}
if(e.getSource()==clear)
{
drawPen=-1;
tf.setText("");
tf.setBackground(Color.white);
repaint();
}
}
public static void main(String arg[])
{
new climb().setVisible(true);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -