用JavaScript自己写的一个彩票生成号码程序

一个朋友要我帮他写个7色球的生成号码程序,本以为挺简单的,但是的确耗费了我满多时间,而且第一个版本还把算法搞错了 :(,用了两个晚上大概4个小时的时间才完成一个Java Swing版和一个JavaScript版,看来我的基础还真是弱啊,需要多多锻炼

要求:随机生成7个数字,前6个是1-33的整数,但是不能重复,第七个数字范围1-16,不受前面数字影响。

Java Swing版,刚开始我没在意,觉得挺容易,就用Java自己手写Frame来做,然后编译、打包并用exe4j生成.exe文件,可以说很简单一件事让我搞的挺复杂。结果是编译、打包和生成.exe文件我都搞熟了(生成的exe文件必须要有Java运行环境,Java做应用程序果然不方便),但是程序没写好, 我开了7个线程,分别由7个类来控制数字的变化,但是后来一想,前面的数字生成完毕以后,后面的数字才知道自己的取值范围,7个线程同时跑是不对的,最终放弃了这个版本,做这个版本主要是想熟悉上面几个蹩脚的过程,刚好练练Swing :P。

JS版,用动态语言做小东西真是不知道要比静态类型好多少倍,不用编译直接跑,最重要的是用JavaScript我就不用写那么多重复代码了,要是用Java实现那么多Label,不用反射就得狂拷贝代码,不知道大家有什么更好的方法。思路很简单,每次生成一个号码,点停止按钮一个数字生成,下一个开始,并且要把前面生成的数字拿出去。

由于我JS的水平实在是很烂,所以实现这个东西也着实费了好大劲。希望大家看到以后能给出意见或者提供更好的算法,谢谢!

 

<!---->DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script language="javascript">
/**//**
 * 重新定义setTimeout方法,使得可以接受一个变量做参数
 *
*/

var _st = window.setTimeout; 
window.setTimeout 
= function(fRef, mDelay) ...
 
if(typeof fRef == 'function')...
  
var argu = Array.prototype.slice.call(arguments,2); 
  
var f = (function()...{ fRef.apply(null, argu); }); 
  
return _st(f, mDelay); 
 }
 
 
return _st(fRef,mDelay); 
}
 

/**//**
 * 初始化一个长度为33的数组
 *
*/

function initArr()...{
    
var arr = new Array();
    
for(i=0; i<33; i++)...{
        arr[i]
=i+1;
    }

    
return arr;
}

var startArr = initArr();
/**//**
 * 数组中删除一个元素的方法
 *
*/

Array.prototype.remove
=function(num)...{
    
if(isNaN(num)||num>33)...{
        
return false;
    }


    
for(i=0;i<this.length;i++)...{
        
if(num==startArr[i])...{
            
this.splice(num-1,1);
            
this.length-=1;
            
break;
        }

    }

}


/**//**
 * 前六个数字的计算
 *
*/

function optionChange(startNum)...{
    
var obj = document.getElementById("value" + startNum);
    
var len = startArr.length;
    
var value = Math.round(Math.random()*len) + 1;

    
if(obj.value==0)...{
        document.getElementById(
"numberField" + startNum).innerText=value;        
        window.setTimeout(optionChange,
500,startNum);
    }

}


/**//**
 * 点开始按钮后从第一位开始
 *
*/

function startChange()...{
    
for(i=1;i<=7;i++)...{
        document.getElementById(
"numberField" + i).innerText=0;
    }

    document.getElementById(
"value1").value="0";
    document.getElementById(
"startButton").disabled=true;
    optionChange(
1);
}


/**//**
 * 设定起始位置1
 * 按停止按钮的时候,对应位置数字停止,下一个开始
 *
*/

var cont = 1;
function changeNumber()...{
    
if(cont<6)...{
        document.getElementById(
"value" + cont).value=cont;
        startArr.remove(document.getElementById(
"value" + cont).innerText);
        cont
++;
        document.getElementById(
"value" + cont).value="0";
        optionChange(cont);
    }
 else if(cont==6)...{
        document.getElementById(
"value6").value=cont;
        document.getElementById(
"value7").value=0;
        cont
++;
        optionChange7();
    }
 else if(cont==7)...{
        document.getElementById(
"value7").value=cont;
        document.getElementById(
"startButton").disabled=false;
        cont
=1;
    }

}

/**//**
 * 第7个数字时特别处理
 *
*/

function optionChange7()...{
    
var value = document.getElementById("value7").value;
    
if(value==0)...{
        document.getElementById(
"numberField7").innerText=Math.round(Math.random()*16+1);
        setTimeout(
"optionChange7()",500);
    }

}

script>
HEAD>

<BODY>
<table width="100%">
<tr>
    随机数生成:
    
<span id="numberField1">0span><input type="hidden" name="value1" value="1" />&nbsp;&nbsp;
    
<span id="numberField2">0span><input type="hidden" name="value2" value=

你可能感兴趣的:(JavaScript,多线程,算法,swing,prototype)