JS Bingo游戏无法实现的随机数

csdaa2010 2012-03-11 03:50:51
最近老师布置了一道用js做小游戏的作业,同学都是把书上的打一遍,
我不想当打印机,了解了书上的思想后,自己用另外一种思想写,
但是出现了问题,调试了3天还没调出来,下周要交了,希望高手帮帮忙,感激不尽!!

我的思路:

产生随机数==》保存到数组==》查找重复==》写入Html中(依据<td>的id类似是二维数组的下标)
点击单元格==》有效点击+1(重复点击,有效点击-1)==》把点击


出现问题:
JS Bingo游戏无法实现的随机数 和 二维数组出现下标越界

<html>
<head>
<title>BinGo</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<style rel="stylesheet" type="text/css">
td{
padding: 10px;
text-align: center;
width: 20%;
font-size:50px;

}
table{
border-collapse: collapse;
}
</style>
</head>
<body>
<table style="background:lightblue;text-align:center;" border="2" align="center" height="500" width="500">
<tr>
<td onclick="checkWin(this)" no="11" id="r11">1</td>
<td onclick="checkWin(this)" no="12" id="r12">1</td>
<td onclick="checkWin(this)" no="13" id="r13">1</td>
<td onclick="checkWin(this)" no="14" id="r14">1</td>
<td onclick="checkWin(this)" no="15" id="r15">1</td>
</tr>
<tr>
<td onclick="checkWin(this)" no="21" id="r21">1</td>
<td onclick="checkWin(this)" no="22" id="r22">1</td>
<td onclick="checkWin(this)" no="23" id="r23">1</td>
<td onclick="checkWin(this)" no="24" id="r24">1</td>
<td onclick="checkWin(this)" no="25" id="r25">1</td>
</tr>
<tr>
<td onclick="checkWin(this)" no="31" id="r31">1</td>
<td onclick="checkWin(this)" no="32" id="r32">1</td>
<td onclick="checkWin(this)" no="33" id="r33" style="color:green;">F</td>
<td onclick="checkWin(this)" no="34" id="r34">1</td>
<td onclick="checkWin(this)" no="35" id="r35">1</td>
</tr>
<tr>
<td onclick="checkWin(this)" no="41" id="r41">1</td>
<td onclick="checkWin(this)" no="42" id="r42">1</td>
<td onclick="checkWin(this)" no="43" id="r43">1</td>
<td onclick="checkWin(this)" no="44" id="r44">1</td>
<td onclick="checkWin(this)" no="45" id="r45">1</td>
</tr>
<tr>
<td onclick="checkWin(this)" no="51" id="r51">1</td>
<td onclick="checkWin(this)" no="52" id="r52">1</td>
<td onclick="checkWin(this)" no="53" id="r53">1</td>
<td onclick="checkWin(this)" no="54" id="r54">1</td>
<td onclick="checkWin(this)" no="55" id="r55">1</td>
</tr>
</table>
<a href="1.htm" onClick="location.reload;">单击此处,刷新</a>
</body>
<script type="text/javascript" language="javascript" src="1.js">
</script>
</html>




/*
* id:是标签的id
* bgNoArr:是一列的数组
* cNo:行号
**/
//有效的选中次数
var isClick=0;
//保存Bingo中产生的随机数
var bgNoArr = Array(5);
init();

function init()
{
//alert("准备开始");
try{
//重复5次,把5组 td数组写入内容
//x是次数 、 列号
nWrite();
}
catch(errMsg)
{
alert("出现错误\n"+errMsg.message);
}
//alert("结束!!!");
}

function nWrite()
{
bgNoArr = Array(5);
//把没有重复的数组拿出来,再根据行号cNo写入表格
var id;
for(var i =1;i<6;i++)
{
bgNoArr = find(i);
for(var x =1;x<6;x++)
{
// id="r15"
// id="r21"
if(""+x+i=="33")
{
//中央的Free不输出
continue;
}
id = "r"+ x + i;//r + 列号 + 列排名 r?1
//alert("id:"+id);
var o = document.getElementById(id);
o.innerHTML = bgNoArr[x];
}
}
}
function getArr(cNo)
{
bgNoArr = Array(5);
for(var x=1;x<6;x++)
{
bgNoArr[x] = getNo(cNo);
}
return bgNoArr;

}
function find(cNo)
{
bgNoArr = Array(5);
bgNoArr = getArr(cNo);
var aa=5;
for(var x=0;x<6;x++)
{
for(var j=0;j<6;j++)
{
if(bgNoArr[j] == bgNoArr[x])
{
while(aa--){
if(bgNoArr[j] != bgNoArr[aa+1])
bgNoArr[j]=getNo(cNo);//alert(bgNoArr[j]+" : "+bgNoArr[j]+"出现重复");
}aa=5;
}
}
}
return bgNoArr;
}
function getNo(cNo)
{
switch(cNo)
{
case 1:
{
cNo = 15;
break;
}
case 2:
{
cNo = 30;
break;
}
case 3:
{
cNo = 45;
break;
}
case 4:
{
cNo = 60;
break;
}
case 5:
{
cNo = 75;
break;
}
default:alert("switch出错了!!");
}

var n;
n = Math.random();
n=n*10;
n = cNo - Math.floor(n);
return n;
}
function checkWin(td)
{
var element = td;
var color = td.style.background;

if(color != "red")
{
td.style.background="red";
isClick++;

}
else
{
td.style.background = "lightblue";
isClick--;
}
//如果 有效的点击超过了4个就开始判断
if(isClick>4)
{
wasClick();
}

}
function wasClick()
{
//把表格中 被选中的格子 依据下标写入数组中对应的位置
var count= new Array([0,0,0,0,0,0],[0,0,0,0,0,0]);
var td;
var id;
//判断count 是否 横 或者 竖 或者 对角线 有5个格子的都被选中
var isWin=0;


for(var i=1;i<6;i++)
{
for(var j=1;j<6;j++)
{
id = "r"+ i + j;
td = document.getElementById(id);
if(td.style.background == "red")
{
count[i][j] = 1;

}//alert("i:"+i+"\nj:"+j);
}
}

for(var i=0;i<5;i++)
{
for(var j=0;j<5;j++)
{

if(count[i][j] == count[j][i]|| count[i][j] == count[i-1][j-1])
{
isWin++;
}
}
}
if(isWin==5)
{
alert("Bingo!!");
}
else
{
alert("点击了"+isClick+"\niswin:"+isWin);
}
}
...全文
119 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdaa2010 2012-03-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hch126163 的回复:]

js 产生随机数 Math.random()

2 维数组,js 没2 维数组,有 数组的数组
var arr=[[1,2],[3,4,5]];
用 arr.length 属性就不会超界了
[/Quote]
谢谢 你的帮助
Math.random()是可以产生随机数,但是没法保证不重复,所以需要人为的干预,我用两个for循环检查来找出重复的数,但是算法有问题
原来js的没有二维数组,我看帮助文档上写的语法挺简单的,没仔细看,误以为有二维数组
hch126163 2012-03-12
  • 打赏
  • 举报
回复
js 产生随机数 Math.random()

2 维数组,js 没2 维数组,有 数组的数组
var arr=[[1,2],[3,4,5]];
用 arr.length 属性就不会超界了
csdaa2010 2012-03-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 acesidonu 的回复:]

看不出你要做什么样的游戏
[/Quote]
BinGo
Acesidonu 2012-03-11
  • 打赏
  • 举报
回复
看不出你要做什么样的游戏

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧