如下:
import java.awt.*;。
import java.awt.event.*;。
import javax.swing.JButton;。
import javax.swing.JFrame;。
import javax.swing.JPanel;。
import javax.swing.Timer;。
import java.awt.geom.*;。
import java.util.*;。
class Clock extends Canvas。
implements ActionListener{。
static JButton jb=new JButton("开始");。
static JButton jb1=new JButton("暂停");。
Date date;
Timer secondTime;。
int hour,munite,second;。
Line2D secondLine,muniteLine,hourLine;。
int a,b,c;
double pointSX[]=new double[60],//用来表示秒针端点坐标的数组。
pointSY[]=new double[60],。
pointMX[]=new double[60], //用来表示分针端点坐标的数组。
pointMY[]=new double[60],。
pointHX[]=new double[60], //用来表示时针端点坐标的数组。
pointHY[]=new double[60];。
Clock()
{ secondTime=new Timer(1000,this);。
pointSX[0]=0; //12点秒针位置。
pointSY[0]=-100;。
pointMX[0]=0; //12点分针位置。
pointMY[0]=-90;。
pointHX[0]=0; //12点时针位置。
pointHY[0]=-70;。
double angle=6*Math.PI/180; //刻度为6度。
for(int i=0;i<59;i++) //计算出各个数组中的坐标。
{ pointSX[i+1]=pointSX[i]*Math.cos(angle)-Math.sin(angle)*pointSY[i];。
pointSY[i+1]=pointSY[i]*Math.cos(angle)+pointSX[i]*Math.sin(angle);。
pointMX[i+1]=pointMX[i]*Math.cos(angle)-Math.sin(angle)*pointMY[i];。
pointMY[i+1]=pointMY[i]*Math.cos(angle)+pointMX[i]*Math.sin(angle);。
pointHX[i+1]=pointHX[i]*Math.cos(angle)-Math.sin(angle)*pointHY[i];。
pointHY[i+1]=pointHY[i]*Math.cos(angle)+pointHX[i]*Math.sin(angle);。
for(int i=0;i<60;i++)。
{ pointSX[i]=pointSX[i]+120; //坐标平移。
pointSY[i]=pointSY[i]+120;。
pointMX[i]=pointMX[i]+120; //坐标平移。
pointMY[i]=pointMY[i]+120;。
pointHX[i]=pointHX[i]+120; //坐标平移。
pointHY[i]=pointHY[i]+120;。
secondLine=new Line2D.Double(0,0,0,0);。
muniteLine=new Line2D.Double(0,0,0,0);。
hourLine=new Line2D.Double(0,0,0,0);。
secondTime.start(); //秒针开始计时。
public void paint(Graphics g)。
{ for(int i=0;i<60;i++) //绘制表盘上的小刻度和大刻度。
{ int m=(int)pointSX[i];。
int n=(int)pointSY[i];。
if(i%5==0)
{ g.setColor(Color.red);。
g.fillOval(m-4,n-4,8,8);。
else
{ g.setColor(Color.cyan);。
g.fillOval(m-2,n-2,4,4);。
g.fillOval(115,115,10,10); //钟表中心的实心圆。
Graphics2D g_2d=(Graphics2D)g;。
g_2d.setColor(Color.red);。
g_2d.draw(secondLine);。
BasicStroke bs=。
new BasicStroke(3f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER);。
g_2d.setStroke(bs);。
g_2d.setColor(Color.blue);。
g_2d.draw(muniteLine);。
bs=new BasicStroke(6f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER);。
g_2d.setStroke(bs);。
g_2d.setColor(Color.green);。
g_2d.draw(hourLine);。
public void actionPerformed(ActionEvent e)。
{ if(e.getSource()==secondTime){。
date=new Date();。
String s=date.toString();。
hour=Integer.parseInt(s.substring(11,13));。
munite=Integer.parseInt(s.substring(14,16));。
second=Integer.parseInt(s.substring(17,19)); //获取时间中的秒。
int h=hour%12;
a=second; //秒针端点的坐标。
b=munite; //分针端点的坐标。
c=h*5+munite/12; //时针端点的坐标。
secondLine.setLine(120,120,(int)pointSX[a],(int)pointSY[a]);。
muniteLine.setLine(120,120,(int)pointMX[b],(int)pointMY[b]);。
hourLine.setLine(120,120,(int)pointHX[c],(int)pointHY[c]);。
repaint();
} if(e.getSource()==jb){。
secondTime.start();。
}if(e.getSource()==jb1){。
secondTime.stop();。
public static void main(String args[]){。
JFrame win=new JFrame("时钟");。
JPanel jp=new JPanel();。
jp.add(jb);。
jp.add(jb1);。
Clock clock=new Clock();。
jb.addActionListener(clock);。
jb1.addActionListener(clock);。
win.add(clock,BorderLayout.CENTER);。
win.add(jp,"South");。
win.setVisible(true);。
win.setSize(246,300);。
win.setDefaultCloseOperation(3) ;。
win.validate();。
}
运行截图:
有问题就追问,满意请采纳。
AS2.0这我们提供了一些绘图方法,利用这些方法,我们可以绘制一些图形。下面来认识一下这些方法。首先是画直线,要画线应先确定线的类型等,AS提供的是:lineStyle() 方法:该方法确定线条的类型。
常用格式:MC.lineStyle(粗细,颜色,透明度)。该方法还有其它一些参数,本文就不介绍了。
比如:my_mc. lineStyle(1,0xff0000,100) 。
这就指明了线条粗细为1,颜色是红色,透明度为100%。有了线条样式后就可以画直线了,首先将画笔移到要开始画直线的起始点上,AS提供了:
moveTo()方法:该方法将画笔移到起画点上。
用法:MC.moveTo(x,y); 起画点有了,就可以画线了,AS提供了:
lineTo()方法: 该方法将从起画点到终点画一条直线,并将起画点移到终点。
用法:MC.lineTo(x,y) 。
有了上面的三个方法就可以画直线了,下面就画一条:this.lineStyle(1,0xff0000,100); 。
this.moveTo(0,0); 。
this.lineTo(200,200);测试影片,上面的代码画了一条从(0,0)到(200,200)的红色直线。下面扩展一下,画个三角形:this.lineStyle(1,0xff0000,100); 。
this.moveTo(200,200); 。
this.lineTo(300,200); 。
this.lineTo(250,300); 。
this.lineTo(200,200);我想我们绘画,肯定不会甘心只画一些线条,还想画一些形状,下面的方法对我们这种愿望提供了可能。beginFill()方法:该方法从字面上就能理解,开始填充。
用法:MC.beginFill(颜色,透明度) endFill()方法:用beginFill()中的颜色填充图形。
比如将上面的三角形填上蓝色:this.lineStyle(1,0xff0000,100); 。
this.beginFill(0x0000ff,100); 。
this.moveTo(200,200); 。
this.lineTo(300,200); 。
this.lineTo(250,300); 。
this.lineTo(200,200); 。
ebdFill();测试影片,会看到一个红色笔触蓝色填充的三角形。如果想要无笔触的三角形,那么上面第一句不要就行了。看起来到目前为止,我们已经自认为已学会了用AS绘图了,很想跃跃欲试画点什么玩意儿,好吧,就满足你吧,下面我们来画一个五星吧^_^ 用矩形工具画一个与舞始一样大的黑色矩形。为什么要画这个?很简单,黑色背景下红五星要好看些。为什么不直接将文档的背景色设为黑色?因为很多网站插入的swf文件默认是透明的,比如我们论坛。当然你完全可以连这个黑色矩形都用AS来完成。将下列代码输入到帧动作面板中:this.createEmptyMovieClip("wx_mc",this.getNextHighestDepth()); 。
wx_mc._x = Stage.width/2; 。
wx_mc._y = Stage.height/2; 。
wx_mc.beginFill(0xFF0000,100); 。
wx_mc.moveTo(0,0); 。
wx_mc.lineTo(0,-100); 。
wx_mc.lineTo(25,-30); 。
wx_mc.lineTo(0,0); 。
wx_mc.endFill(); 。
wx_mc.beginFill(0xee0202,100); 。
wx_mc.moveTo(0,0); 。
wx_mc.lineTo(0,-100); 。
wx_mc.lineTo(-25,-30); 。
wx_mc.lineTo(0,0); 。
wx_mc.endFill(); 。
for(i=0;i<5;i++){ 。
wx_mc.duplicateMovieClip("wx1"+i,this.getNextHighestDepth()); 。
wx1 = eval("wx1"+i); 。
wx1._rotation = i*72; 。
}
this.createEmptyMovieClip("xg_mc",this.getNextHighestDepth()); 。
xg_mc._x = Stage.width/2; 。
xg_mc._y= Stage.height/2; 。
xg_mc.lineStyle(1,0xeed600,100); 。
xg_mc.moveTo(0,-120); 。
xg_mc.lineTo(0,-140); 。
xg_mc.moveTo(10,-160); 。
xg_mc.lineTo(10,-180); 。
for(j=0;j<37;j++){ 。
xg_mc.duplicateMovieClip("xg"+j,this.getNextHighestDepth()); 。
xg1_mc = eval("xg"+j); 。
xg1_mc._rotation = j*10; 。
} 测试影片,效果出来了。
首先,手动画一个小乌龟,如下:
然后,按照Java绘图基本步骤一步步来。
swing 编程步骤:
1. 继承JFrame
2. 定义组件
3.创建组件(构造函数)
4.添加组件
5.对窗体设置
6.显示窗体
最终效果如下:
代码如下:
/**
* 功能:画一个乌龟
*/
package com.test1; 。
import java.awt.*; 。
import javax.swing.*; 。
public class MyTortoise extends JFrame{ 。
MyPanel2 mp = null; 。
//构造函数
public MyTortoise(){ 。
mp = new MyPanel2(); 。
this.add(mp); 。
this.setTitle("小乌龟,丑丑哒"); 。
this.setSize(400,300); 。
this.setVisible(true); 。
this.setLocation(300,200); 。
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 。
}
public static void main(String[] args) { 。
MyTortoise mtg = new MyTortoise(); 。
}
}
//我的面板。只有JPanel有画图方法,JFrame没有,故必须在JFrame中添加JPanel 。
class MyPanel2 extends JPanel{ 。
//定义一个乌龟
Tortoise t = null; 。
//构造函数
public MyPanel2(){ 。
t = new Tortoise(100,100); 。
}
//画乌龟
public void drawTortoise(int x, int y, Graphics g){ 。
//1.画脸 。
g.setColor(Color.green); 。
g.fillOval(x+60, y, 30, 15); 。
//2.画左眼 。
g.setColor(Color.black); 。
g.fillOval(x+65, y+3, 5, 5); 。
//3.画右眼 。
g.fillOval(x+78, y+3, 5, 5); 。
//4.画脖子 。
g.setColor(Color.green); 。
g.fillOval(x+70, y, 10, 42); 。
//5.画乌龟壳 。
g.setColor(Color.red); 。
g.fillOval(x+40, y+40, 70, 100); 。
//6.画左上脚 。
g.setColor(Color.green); 。
g.fillOval(x+15, y+60, 30, 10); 。
//7.画右上脚 。
g.fillOval(x+105, y+60, 30, 10); 。
//8.画左下脚 。
g.fillOval(x+15, y+110, 30, 10); 。
//9.画右下脚 。
g.fillOval(x+105, y+110, 30, 10); 。
//10.画尾巴 。
g.setColor(Color.black); 。
g.drawLine(x+70,y+140,x+130,y+210); 。
g.drawOval(x+95, y+150, 30, 30); 。
}
//覆盖JPanel的paint方法 。
//Graphics 是绘图的重要类。你可以把他理解成一只画笔 。
public void paint(Graphics g){ 。
//1.调用父类函数完成初始化任务 。
//这句话不能少 。
super.paint(g); 。
//2.画乌龟,调用方法即可 。
this.drawTortoise(50, 50, g); 。
}
}
//定义一个乌龟类
class Tortoise { 。
//表示乌龟的横坐标 。
int x = 0; 。
//表示乌龟的纵坐标 。
int y = 0; 。
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 Tortoise(int x, int y){ 。
this.x = x; 。
this.y = y; 。
}
就是这个程序 把他变成五子棋程序 。
import java.awt.*;。
import java.awt.event.*;。
//创建棋盘的类
class ChessPad extends Panel implements MouseListener,ActionListener。
int x=-1,y=-1,棋子颜色=-1;。
Button button=new Button("重新开局");。
TextField text_1=new TextField("请黑棋下子");。
TextField text_2=new TextField();。
ChessPad()
{ setSize(440,440);。
setLayout(null); setBackground(Color.orange);。
addMouseListener(this); add(button);button.setBounds(10,5,60,26);。
button.addActionListener(this);。
add(text_1);text_1.setBounds(90,5,90,24);。
add(text_2);text_2.setBounds(290,5,90,24);。
text_1.setEditable(false);text_2.setEditable(false);。
}
public void paint(Graphics g)//绘制棋盘外观。
{ for(int i=40;i<=400;i=i+20)//两种划线的方式,分用于行和列。
{ g.drawLine(40,i,400,i);。
}
//g.drawLine(40,400,400,400);//最后一行。
for(int j=40;j<=380;j=j+20)。
{ g.drawLine(j,40,j,400);。
}
g.drawLine(400,40,400,400);//最后一列。
g.fillOval(97,97,6,6);g.fillOval(337,97,6,6);//oval表示椭圆,这里是指棋盘中的五个圆点。
g.fillOval(97,337,6,6);g.fillOval(337,337,6,6);。
g.fillOval(217,217,6,6);。
}
public void mousePressed(MouseEvent e)//当按下鼠标左键时下棋子。
{ if(e.getModifiers()==InputEvent.BUTTON1_MASK)。
{ x=(int)e.getX();y=(int)e.getY();//鼠标所在位置的XY坐标。
ChessPoint_black chesspoint_black=new ChessPoint_black(this);。
ChessPoint_white chesspoint_white=new ChessPoint_white(this);。
int a=(x+10)/20,b=(y+10)/20;。
if(x/20<2||y/20<2||x/20>19||y/20>19)//棋盘以外不下棋子 。
{ }
else
{
if(棋子颜色==1)。
{ this.add(chesspoint_black);。
chesspoint_black.setBounds(a*20-10,b*20-10,20,20);。
棋子颜色=棋子颜色*(-1);。
text_2.setText("请白棋下子");。
text_1.setText("");。
}
else if(棋子颜色==-1)。
{ this.add(chesspoint_white);。
chesspoint_white.setBounds(a*20-10,b*20-10,20,20);。
棋子颜色=棋子颜色*(-1);。
text_2.setText("请黑棋下子");。
text_1.setText("");。
}
}
}
}
public void mouseReleased(MouseEvent e){}。
public void mouseEntered(MouseEvent e){}。
public void mouseExited(MouseEvent e){}。
public void mouseClicked(MouseEvent e){}。
public void actionPerformed(ActionEvent e)。
{
this.removeAll();棋子颜色=-1;。
add(button);button.setBounds(10,5,60,26);。
add(text_1);text_1.setBounds(90,5,90,24);。
text_2.setText("");text_1.setText("请黑棋下子");。
add(text_2);text_2.setBounds(290,5,90,24);。
}
//负责创建黑色棋子的类
class ChessPoint_black extends Canvas implements MouseListener。
ChessPad chesspad=null;。
ChessPoint_black(ChessPad p)。
{ //setSize(20,20);。
chesspad=p;addMouseListener(this);。
}
public void paint(Graphics g)//绘制棋子的大小。
{ g.setColor(Color.black);g.fillOval(0,0,20,20);。
}
public void mousePressed(MouseEvent e)。
{ if(e.getModifiers()==InputEvent.BUTTON3_MASK)//标记。
{ chesspad.remove(this);。
chesspad.棋子颜色=1;。
chesspad.text_2.setText("");chesspad.text_1.setText("请黑棋下子");。
}
}
public void mouseReleased(MouseEvent e){}。
public void mouseEntered(MouseEvent e){}。
public void mouseExited(MouseEvent e){}。
public void mouseClicked(MouseEvent e)。
{ if(e.getClickCount()>=2)。
chesspad.remove(this);//双击时吃掉该棋子。
}
//负责创建白色棋子的类
class ChessPoint_white extends Canvas implements MouseListener。
{ ChessPad chesspad=null;。
ChessPoint_white(ChessPad p)。
{ //setSize(20,20);。
addMouseListener(this);。
chesspad=p;
}
public void paint(Graphics g)。
{ g.setColor(Color.white);g.fillOval(0,0,20,20);。
}
public void mousePressed(MouseEvent e)。
{ if(e.getModifiers()==InputEvent.BUTTON3_MASK)。
{ chesspad.remove(this);chesspad.棋子颜色=-1;。
chesspad.text_2.setText("请白棋下子");。
chesspad.text_1.setText("");。
}
}
public void mouseReleased(MouseEvent e){}。
public void mouseEntered(MouseEvent e){}。
public void mouseExited(MouseEvent e){}。
public void mouseClicked(MouseEvent e)。
{
if(e.getClickCount()>=2)。
chesspad.remove(this);。
}
}
public class Chess extends Frame//添加棋盘窗口。
{ ChessPad chesspad=new ChessPad();。
Chess()
{
setVisible(true);。
setLayout(null);。
Label label=new Label("单击左键下棋子,双击吃棋子,用右键单击棋子悔棋",Label.CENTER);。
add(label);label.setBounds(70,55,440,26);。
add(chesspad);chesspad.setBounds(70,90,440,440);。
addWindowListener(new WindowAdapter()。
{ public void windowClosing (WindowEvent e)。
{ System.exit(0);。
});
//pack();
setSize(600,550);。
public static void main(String args[])。
{ Chess chess=new Chess();。
}
我有个300多行的单机版五子棋。。不知道你说的小程序是指在网页上运行的,还是代码量少的程序。
------------------------------。
import java.awt.*;。
import java.awt.event.*;。
import javax.swing.*;。
class mypanel extends Panel implements MouseListener。
int chess[][] = new int[11][11];。
boolean Is_Black_True;。
mypanel()
{
Is_Black_True = true;。
for(int i = 0;i < 11;i++)。
{
for(int j = 0;j < 11;j++)。
{
chess[i][j] = 0;。
}
}
addMouseListener(this);。
setBackground(Color.BLUE);。
setBounds(0, 0, 360, 360);。
setVisible(true);。
}
public void mousePressed(MouseEvent e)。
{
int x = e.getX();。
int y = e.getY();。
if(x < 25 || x > 330 + 25 ||y < 25 || y > 330+25)。
{
return;
}
if(chess[x/30-1][y/30-1] != 0)。
{
return;
}
if(Is_Black_True == true)。
{
chess[x/30-1][y/30-1] = 1;。
Is_Black_True = false;。
repaint();。
Justisewiner();。
return;。
}
if(Is_Black_True == false)。
{
chess[x/30-1][y/30-1] = 2;。
Is_Black_True = true;。
repaint();。
Justisewiner();。
return;。
}
}
void Drawline(Graphics g)。
{
for(int i = 30;i <= 330;i += 30)。
{
for(int j = 30;j <= 330; j+= 30)。
{
g.setColor(Color.WHITE);。
g.drawLine(i, j, i, 330);。
}
}
for(int j = 30;j <= 330;j += 30)。
{
g.setColor(Color.WHITE);。
g.drawLine(30, j, 330, j);。
}
}
void Drawchess(Graphics g)。
{
for(int i = 0;i < 11;i++)。
{
for(int j = 0;j < 11;j++)。
{
if(chess[i][j] == 1)。
{。
g.setColor(Color.BLACK);。
g.fillOval((i + 1) * 30 - 8, (j + 1) * 30 - 8, 16, 16);。
}。
if(chess[i][j] == 2)。
{。
g.setColor(Color.WHITE);。
g.fillOval((i + 1) * 30 - 8, (j + 1) * 30 - 8, 16, 16);。
}。
}
}
}
void Justisewiner()。
{
int black_count = 0;。
int white_count = 0;。
int i = 0;。
for(i = 0;i < 11;i++)//横向判断。
{
for(int j = 0;j < 11;j++)。
{
if(chess[i][j] == 1)。
{。
black_count++;。
if(black_count == 5)。
{。
JOptionPane.showMessageDialog(this, "黑棋胜利");。
Clear_Chess();。
return;。
}。
}。
else。
{。
black_count = 0;。
}。
if(chess[i][j] == 2)。
{。
white_count++;。
if(white_count == 5)。
{。
JOptionPane.showMessageDialog(this, "白棋胜利");。
Clear_Chess();。
return;。
}。
}。
else。
{。
white_count = 0;。
}。
}
}
for(i = 0;i < 11;i++)//竖向判断。
{
for(int j = 0;j < 11;j++)。
{
if(chess[j][i] == 1)。
{。
black_count++;。
if(black_count == 5)。
{。
JOptionPane.showMessageDialog(this, "黑棋胜利");。
Clear_Chess();。
return;。
}。
}。
else。
{。
black_count = 0;。
}。
if(chess[j][i] == 2)。
{。
white_count++;。
if(white_count == 5)。
{。
JOptionPane.showMessageDialog(this, "白棋胜利");。
Clear_Chess();。
return;。
}。
}。
else。
{。
white_count = 0;。
}。
}
}
for(i = 0;i < 7;i++)//左向右斜判断。
{
for(int j = 0;j < 7;j++)。
{
for(int k = 0;k < 5;k++)。
{。
if(chess[i + k][j + k] == 1)。
{。
black_count++;。
if(black_count == 5)。
{。
JOptionPane.showMessageDialog(this, "黑棋胜利");。
Clear_Chess();。
return;。
}。
}。
else。
{。
black_count = 0;。
}。
if(chess[i + k][j + k] == 2)。
{。
white_count++;。
if(white_count == 5)。
{。
JOptionPane.showMessageDialog(this, "白棋胜利");。
Clear_Chess();。
return;。
}。
}。
else。
{。
white_count = 0;。
}。
}。
}
}
for(i = 4;i < 11;i++)//右向左斜判断。
{
for(int j = 6;j >= 0;j--)。
{
for(int k = 0;k < 5;k++)。
{。
if(chess[i - k][j + k] == 1)。
{。
black_count++;。
if(black_count == 5)。
{。
JOptionPane.showMessageDialog(this, "黑棋胜利");。
Clear_Chess();。
return;。
}。
}。
else。
{。
black_count = 0;。
}。
if(chess[i - k][j + k] == 2)。
{。
white_count++;。
if(white_count == 5)。
{。
JOptionPane.showMessageDialog(this, "白棋胜利");。
Clear_Chess();。
return;。
}。
}。
else。
{。
white_count = 0;。
}。
}。
}
}
}
void Clear_Chess()。
{
for(int i=0;i<11;i++)。
{
for(int j=0;j<11;j++)。
{
chess[i][j]=0;。
}
}
repaint();
}
public void paint(Graphics g)。
{
Drawline(g);。
Drawchess(g);。
}
public void mouseExited(MouseEvent e){}。
public void mouseEntered(MouseEvent e){}。
public void mouseReleased(MouseEvent e){}。
public void mouseClicked(MouseEvent e){}。
class myframe extends Frame implements WindowListener。
mypanel panel;。
myframe()
{
setLayout(null);。
panel = new mypanel();。
add(panel);。
panel.setBounds(0,23, 360, 360);。
setTitle("单人版五子棋");。
setBounds(200, 200, 360, 383);。
setVisible(true);。
addWindowListener(this);。
}
public void windowClosing(WindowEvent e)。
{
System.exit(0);。
}
public void windowDeactivated(WindowEvent e){}。
public void windowActivated(WindowEvent e){}。
public void windowOpened(WindowEvent e){}。
public void windowClosed(WindowEvent e){}。
public void windowIconified(WindowEvent e){}。
public void windowDeiconified(WindowEvent e){}。
public class mywindow。
public static void main(String argc [])。
{
myframe f = new myframe();。
}