Java Applet小试

。。。

 于是我拼命的写了快三天60个小时的Java Applet程序,边学边用。Java 真是好学易懂,虽
然从来没有接触过,但还是学了就能用,有限的时间总算勉强搞定了。

有点笨,那会儿不知道Java代码用什么来写,于是用文本编辑器几百行下来,其实已经调试得很累。调试完了倒是有点欣慰。


// --------------------------------------BallsGame0.9-----------------------------------------------
// -==这是一个抛球的小游戏项目,为运行于浏览器的Java Applet程序==-
// -==调试环境:Windows XP,SDK版本:j2sdk-1_4_2_17  浏览器:Mozilla Firefox
// -==Socket问题:即Sever端为VC++写的,通过Socket进行通讯时存在问题,因为二者传递的数据格式存不一样
// --最新修改时间2008.04.02
// **************************************************************************************************
import  java.io. * ;
import  java.net. * ;
import  java.awt. * ;
import  java.awt.event. * ;
import  java.applet. * ;
// -----------------------------------------------------------------------
public   class  BallsGame_Browser  extends  Applet 
{                    
        
private ButtonControls Buttons;
        
private ControlsMassWind Labels;
        
private ResultLabel results;
                
         
public void init() //Java Applet 初始化函数
    {         
         
//setLayout(null);
         setLayout(new BorderLayout());                                
            add(
"North",  Buttons=new ButtonControls());        //按钮
            add("Center", Labels = new ControlsMassWind());    //标签
            add("South",  results=new ResultLabel());
                            
    }
    
      
public void destroy() 
      
{          
      }
       
    
public void start()//Java Applet 启动函数
    {        
            Buttons.setEnabled(
true);            
            Labels.setEnabled(
true);
            results.setEnabled(
true);                    
        
    }

    
public void stop() 
    
{
                Labels.setEnabled(
false);
                results.setEnabled(
false);    
                Buttons.setEnabled(
false);
    }

    
public void processEvent(AWTEvent e) 
    
{
        
if (e.getID() == Event.WINDOW_DESTROY) 
        
{
            System.exit(
0);
        }

    }
        
    
  
public static void main(String args[]) //Main()函数
  {        
        BallsGame_Browser    ball 
= new BallsGame_Browser();
        ball.init();
        ball.start();
  }

    
   
}
// class BallsGame_Browser

 
// -----------------Socket通讯类--------
class  TSocket
{    
    
private  Socket tSock;
    
private  final int sockPort=5555;    //端口号
    
//DataOutputStream os;     DataInputStream is;
     private  String Line;
     
    
public  String SendSock(String strData)//方法打包 :-发送- 接收
    {        
            
//ConnectSock();
            SendString(strData);//发送数据
            Line =RecvString();//接收数据
            
//try{    tSock.close();}     catch(IOException e)         { System.out.println("RecvString error:"+e); }
            return Line;
    }

    
public  String ConnectSock()
    
{
        
final int timeOut=3000;//定义超时时间
        try
         
{
             tSock
=new Socket();
             tSock.connect(
new   InetSocketAddress("127.0.0.1",sockPort),timeOut);
             
//tSock=new Socket("127.0.0.1",sockPort);//与服务器建立连接
             return    "";
         }
 
         
catch(SocketTimeoutException e)    return "SocketError!"; }    
         
catch(IOException e)    return "SocketError!"; }             
    }
    
    
public  void SendString(String stri) //发送字符串的方法
     {
         
int i=Integer.parseInt(stri);
      
try
     

         DataOutputStream os
=new DataOutputStream(tSock.getOutputStream());
         
//DataInputStream is=new DataInputStream(tSock.getInputStream()); 
       
       
//os.writeChars(stri); //向服务器输送string
         
//os.writeUTF(stri);
         os.writeInt(i);
         os.flush();
         }

      
catch(IOException e)     {System.out.println("SendString error:"+e); } 
     }
 
     
public  String RecvString() //接收字符串的方法
     {         
           
try
             

                 
//DataOutputStream os=new DataOutputStream(m_JSock.getOutputStream());
                DataInputStream is=new DataInputStream(tSock.getInputStream()); 
                 
//Line = is.readUTF();
                 Line=String.valueOf(is.readInt());             //从服务器读来的信息                             
                 
             }

           
catch(IOException e)     { System.out.println("RecvString error:"+e); }
         
           
return Line;
     }
 
}
// end class TSocket
// ---------------MControls----------------------

class  ButtonControls   extends  Panel  implements  ActionListener,Runnable
{            
        
private volatile Thread timerThread;  //添加线程对象
        private TSocket tsock;//添加Socket类对象,用于与服务器端通讯
      
        
public static String m_leftTime="60";
        
private  String    m_force="60", m_angle="30", m_mass="5", m_windSpeed="0", m_nextBallMass="5",
                     m_nextWindSpeed
="1",     m_score="0", m_totalScore="0", m_distance="0";
                
        
private TextField textForce, textAngle;  Label labelForce,labelAngle;
        
private Button BeginButton,EndButton,OKButton ;
        
    
public ButtonControls()//构造函数
    {            
            BeginButton 
= new Button("开始"); BeginButton.addActionListener(this);    add(BeginButton); BeginButton.setEnabled(true);
            EndButton 
= new Button("结束");   EndButton.addActionListener(this);    add(EndButton);  EndButton.setEnabled(false);            
            add(labelForce
=new Label("力量:",Label.RIGHT));
            add(textForce 
= new TextField(""5));        
            add(labelAngle
=new Label("角度:",Label.RIGHT));            
            add(textAngle 
= new TextField(""5));    
          OKButton
= new Button("确定"); OKButton.addActionListener(this); add(OKButton);    OKButton.setEnabled(false);
    }

    
        
public void RandWindMass()//下一回合的产生随机数
        {
            
// String.valueOf(num):  int to Str        //str to int:    Integer.parseInt(String  s)                    
            int i; 
            i
=(int)( 11 * Math.random())-5
             m_nextWindSpeed
=String.valueOf(i); //风速-5到5
            
            i
=(int)(  10 * Math.random())+1
             m_nextBallMass
=String.valueOf(i);         //质量大小1-10
        }

        
public void ScoreCount() //计算球抛出距离和得分的函数
        
             
//边界检查:
            if((Double.parseDouble(m_force))>150 || (Double.parseDouble(m_force))<0) m_force="150";
            
if((Double.parseDouble(m_angle))>90 ||  (Double.parseDouble(m_angle))<0) m_angle="90";
            
                
final double PI=3.1515926;//定义常量PI                
                
//计算路程
            
//路程 S= [ fcosa  /m + v " ] *  fsina/5m   得分10 - abs(5 - s) * 10    
                m_distance=String.valueOf( (double)(((Double.parseDouble(m_force))* Math.cos((Double.parseDouble(m_angle))*PI/180)/(Double.parseDouble(m_mass))
                 
+ (Double.parseDouble(m_windSpeed)))* (Double.parseDouble(m_force))* Math.sin((Double.parseDouble(m_angle))*PI/180)/(5*(Double.parseDouble(m_mass)))) );

                
//计算本次得分和总得分    10 - abs(5 - s) * 10
                if(Double.parseDouble(m_distance)>=4 && Double.parseDouble(m_distance)<=6)
                
{    
                        m_score
=String.valueOf((int)(10-Math.abs((5-Double.parseDouble(m_distance))*10) ));
                }

                
else
                
{      m_score=String.valueOf(0); }                
                m_totalScore 
= String.valueOf( Integer.parseInt(m_totalScore) + Integer.parseInt(m_score));
        }

        
     
//-=====================消息响应函数=====================-//重要
     public void actionPerformed(ActionEvent ev) 
      
{
            String label 
= ev.getActionCommand(); //String str;
      
          
if(label.equals("确定"))//如果是 "确定"按钮的事件
            {                
                
if(Integer.parseInt(m_leftTime) <= 0)//如果剩余时间为0
                {
                    BeginButton.setEnabled(
true);
                    EndButton.setEnabled(
false);
                    OKButton.setEnabled(
false);                                    
                }

                                
                m_force
=textForce.getText().trim();//取得玩家的输入,力量和角度
                m_angle=textAngle.getText().trim();
                
                ScoreCount();            
//计算所得结果
                
                
//进入下一个回合,数据更新
                
//RandWindMass();
                m_windSpeed=m_nextWindSpeed;
                m_mass
=m_nextBallMass;    
                RandWindMass();
//产生下一次的随机变量给玩家                
                
//刷新标签:
                ControlsMassWind.UpdateLabel(m_windSpeed,m_mass,m_nextWindSpeed,m_nextBallMass);
                ResultLabel.UpdateLabel(m_distance,m_leftTime,m_score,m_totalScore);
                textForce.setText(m_force);
                textAngle.setText(m_angle);                
            }

            
else if(label.equals("开始")) //"开始"按钮
            {                                    
                    m_force
="40";    m_angle="30";        m_totalScore="0";        m_score="0";
                    
                    RandWindMass();
//产生一个回合的随机数
                    m_windSpeed=m_nextWindSpeed;
                    m_mass
=m_nextBallMass;

                    RandWindMass();
//产生下一个回合的随机数
                        
                    BeginButton.setEnabled(
false);
                    EndButton.setEnabled(
true);
                    OKButton.setEnabled(
true);
                            
                    
//传递和更新数据和标签
                    ControlsMassWind.UpdateLabel(m_windSpeed,m_mass,m_nextWindSpeed,m_nextBallMass);
                    ResultLabel.UpdateLabel(
"0",m_leftTime,"0","0");                    
                    textForce.setText(m_force);
                    textAngle.setText(m_angle);                    
                
                    timerThread 
= new Thread(this);//添加线程对象    
              timerThread.start();                     //启动线程;                    
            }

            
else if(label.equals("结束"))
            
{    
                    BeginButton.setEnabled(
true);
                    EndButton.setEnabled(
false);
                    OKButton.setEnabled(
false);
                    
                    m_leftTime
="0";
                    ResultLabel.leftTime.setText(ButtonControls.m_leftTime);
                 timerThread 
= null//结束分线程                               
            }

     }
     
      
//-----------------------------------------------------------------------------
    public void run() //-------多线程执行函数---
    {   
          m_leftTime
="60";//初始化时间变量
          int intTime=Integer.parseInt(ButtonControls.m_leftTime);        
    
            tsock
=new TSocket();    
        
//Thread me = Thread.currentThread();
        String strTime="60";
        
if(tsock.ConnectSock()!="SocketError")//Socket连接服务器端
        {
                    strTime
=tsock.SendSock(strTime);        
                }

                
else
                
{
                    ResultLabel.leftTime.setText(
"SocketError");
                    BeginButton.setEnabled(
true);
                    EndButton.setEnabled(
false);
                    OKButton.setEnabled(
false);  
                }

                       
        
while (timerThread == Thread.currentThread()) //执行分线程
        {
            
if(intTime <= 0)// 如果时间已经为0
            {
                BeginButton.setEnabled(
true);
                        EndButton.setEnabled(
false);
                        OKButton.setEnabled(
false);  
                        ResultLabel.leftTime.setText(
"时间到!");              
                
                
break;
            }

            
else
            
{            
                
try 
                
{
                    timerThread.sleep(
1000);
                    
--intTime;
                    ButtonControls.m_leftTime
=String.valueOf(intTime);
                    ResultLabel.leftTime.setText(ButtonControls.m_leftTime);
                }
 
                
catch (InterruptedException e) {  ;    }           
          }

        }
//end while
        
    }
//end run
     
}
// end class ButtonControls

class  ControlsMassWind   extends  Panel  // 风速和质量 标签类                                 
{     
      
public static Label nowWind,nowMass,nextWind,nextMass,term;  
        
public ControlsMassWind()//标签布局和显示
        {
            add(term
=new Label("                                                 "));
            add(term
=new Label("                                                 "));
            
            
//setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
            
            add(term
=new Label("  当前回合:     [球大小]:",Label.RIGHT));    //term.setAlignment(Label.RIGHT);
            add(nowMass=new Label(""));        nowMass.setText("    "); 
            
            add(term
=new Label("[风速]:",Label.RIGHT));  //term.setAlignment(Label.RIGHT);
            add(nowWind=new Label(""));     nowWind.setText("    ");
                
            add(term
=new Label("  下一回合:     [球大小]:",Label.RIGHT));    //term.setAlignment(Label.RIGHT);
            add(nextMass=new Label(""));        nextMass.setText("    "); 
            
            add(term
=new Label("[风速]:",Label.RIGHT));  //term.setAlignment(Label.RIGHT);
            add(nextWind=new Label(""));     nextWind.setText("    ");
            
        }

        
public static void UpdateLabel(String str_nowWind,String str_nowMass,String str_nextWind,String str_nextMass)
        
{
            nowWind.setText(str_nowWind); 
            nowMass.setText(str_nowMass); 
            nextWind.setText(str_nextWind); 
            nextMass.setText(str_nextMass); 
        }

        
}
// end class ControlsMassWind

class  ResultLabel   extends  Panel  // 结果 标签类                                
{     
      
public static Label distance,leftTime,score,totalScore,term;  
        
public ResultLabel()//标签布局和显示
        {            
            add(term
=new Label("[射程]:",Label.RIGHT));    
            add(distance
=new Label("    "));                    
            add(term
=new Label("[时间]:",Label.RIGHT));  
            add(leftTime
=new Label("         "));             
            add(term
=new Label("[得分]:",Label.RIGHT));    
            add(score
=new Label("   "));                
            add(term
=new Label("[总分]:",Label.RIGHT));  
            add(totalScore
=new Label("   "));                                   
        }

        
public static void UpdateLabel(String str_distance,String str_leftTime,String str_score,String str_totalScore)
        
{
            distance.setText(str_distance); 
            leftTime.setText(str_leftTime); 
            score.setText(str_score); 
            totalScore.setText(str_totalScore); 
        }

        
}
// end class ResultLabel

 

 从从未接触过到快速的学习和开发应用, 是因为我在这方面凑合着算个人才,还是有一天我也将因此而失业? 

 难道,我也选择了一个靠青春吃饭的行业? 我总也感到危机。只是我依然相信,毕业了 一身良好的技术背景不会是错误的选择--没文化也就算了,没钱也无所谓,只是男人总得有个混的资本,好好混也就是了。  安身立命,纵饿死亦不觉枉然。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值