import java.awt.*;
import java.awt.geom.*;
import java.applet.Applet;
import java.math.*;
import java.awt.event.*;
import java.util.*;
import java.text.*;public class animation extends Applet implements Runnable,ActionListener {

Thread animation;
int frame;
int delay;
private int h=390;
Graphics g1=getGraphics();
Button btn,btn1;//声明两个按钮
Font numberFaceFont;
Color numberColor;
int a[]=new int[10];
String blueball[]={"01","02","03","04","05","06","07","08","09","10",
"11","12","13","14","15","16","17","18","19","20","21","22","23","24",
"25","26","27","28","29","30","31","32","33"};  //定义字符类型数组并初始化数组
String b[]=new String[blueball.length];//新建一个数组,存放每次选出一个号码后剩下的号码
//String temp;
int w=blueball.length;
int x=0;
int y;
Random rnd=new Random();        //定义Random对象rnd
             String str;
    

//fps为每秒桢的速度
public void init() {
String str=getParameter("fps");
int fps=(str!=null)?Integer.parseInt(str):10;
delay=(fps>0)?(1000/fps):100;

btn=new Button("Start");//创建开始按钮
btn.addActionListener(this);//以applet本身当成btn的聆听者 
add(btn);将btn按钮加到applet窗口里
numberFaceFont=new Font("Serif",Font.BOLD,20);
numberColor=Color.blue;

for(int i=0;i<6;i++)           //循环,随机选出6个号码
{   
y=0;
x=Math.abs(rnd.nextInt())%w;  // 把随机选中的数提出来,然后剩下数重新排列数组 for(int j=0;j<w;j++)
{
  if(x==j)
  {
   b[i]=blueball[x];
   continue;
   } 
  blueball[y]=blueball[j];
  y++;
}
w--;
//System.out.println(b[i]);         //打印蓝球
}

int red=rnd.nextInt(15)+1;   //选红球(此还没实现"0X"号码)
//if(red==0)
//System.out.println("*");
//red=rnd.nextInt(16);
                  //System.out.println(red); //打印红球
}

public void actionPerformed(ActionEvent e)
{
if(btn.getLabel()=="Start")
animation.start();//按下按钮线程开始

}

public void paint(Graphics g)//画动画所用图
{
g.setColor(Color.blue);
g.draw3DRect(44,55,300,400,true);
g.drawArc(44,55,300,300,180,180);
g.drawArc(100,55,300,400,20,30);
    g.drawArc(100,90,300,500,20,30);
    g.draw3DRect(390,190,200,100,true);
    
g.drawOval(50,a[0],32,32);
g.drawOval(82,a[1],32,32);
g.drawOval(114,a[2],32,32);
g.drawOval(146,a[3],32,32);
g.drawOval(178,a[4],32,32);
g.drawOval(210,a[5],32,32);
g.drawOval(242,a[6],32,32);
g.drawOval(274,a[7],32,32);
g.drawOval(306,a[8],32,32);
for(h=390;h<=557;h+=32)//画出包括数字的圆
{
g.drawOval(h,230,32,32);
}
//将选出的数字画到applet上

g.setColor(numberColor);
g.drawString(b[0],406,250);
g.drawString(b[1],438,250);
g.drawString(b[2],470,250);
g.drawString(b[3],502,250);
g.drawString(b[4],534,250);
g.drawString(b[5],568,250);
g.drawString(b[6],584,250);
} //启动动画线程
public void start(){
if(animation==null)
animation=new Thread(this);
}
public void stop(){

animation=null;
}

public void run(){

Thread t=Thread.currentThread();//创建一个线程对象

while(t==animation){

try{ if((a[0]-=32)<=55)
    a[0]=200; if((a[1]-=32)<=55)
//a[1]+=32;//没用
                    a[1]=232;     

if((a[2]-=32)<=55)
a[2]=264;     

if((a[3]-=40)<=55)
a[3]=300;     

if((a[4]-=50)<=55)
a[4]=309;

if((a[5]-=38)<=55)
                    a[5]=310;     

if((a[6]-=43)<=55)
                    a[6]=300;     

if((a[7]-=35)<=55)
                    a[7]=240;     

if((a[8]-=32)<=55)
                    a[8]=200;     

/*if((h+=32)>=557)
h=557;*/
               
                 //球坐标的移动,如a的初值为0,可运行IF语句,然后在运行中其改变赋值
repaint();//作用清除重画

Thread.sleep(delay);//线程休息时间
}catch(InterruptedException e){
break;
}
frame++;

}
}
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【xiaowei9527】截止到2008-06-25 09:09:08的历史汇总数据(不包括此帖):
    发帖数:0                  发帖分:0                  
    结贴数:0                  结贴分:0                  
    未结数:0                  未结分:0                  
    结贴率:-------------------结分率:-------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    告诉你一个算法, 我们可以用一根线程选择红色求,一根线程选择蓝色球。对于如何选择,这样做:
     1. 将红色球全部放在ArrayList中。 list.add("01");...list.add("33");
     2. 随机选择一个0到32的整数index啊(调整nextInt(int n)就可以取得)。此时以这个整数index为索引,String number=list.remove(index);//这里就得到一个随机的号码啦。
     3.重复第二步,不过这个时候随机的时候是选择一个0到31的整数index。直到重复6次结束。
     4.红色球选择完毕。
    蓝色球道理一样。在另一个线程中运行选择篮球的程序就可以了a