生成 Bingo 卡片

xiaoxiao2021-02-28  108

1.Bingo 卡片是什么

5*5的卡片,五个列上标着B-I—N—G-O ,格子中包含1-75 的数字,正中间是一个空的格子,通常印着free

每列可以包含的数字大的范围如下: B列 1~15; I列16~30; N列31~45; G列46~60; O列61~75. 不可以有重复的数字或空的格子。 2.HTML代码:

<body> <h1>Create A Bingo Card</h1> <table> <tr> <th width="20%">B</td> <th width="20%">I</td> <th width="20%">N</td> <th width="20%">G</td> <th width="20%">O</td> </tr> <tr> <td id="square0"> </td> <td id="square1"> </td> <td id="square2"> </td> <td id="square3"> </td> <td id="square4"> </td> </tr> <tr> <td id="square5"> </td> <td id="square6"> </td> <td id="square7"> </td> <td id="square8"> </td> <td id="square9"> </td> </tr> <tr> <td id="square10"> </td> <td id="square11"> </td> <td id="free">free</td> <td id="square12"> </td> <td id="square13"> </td> </tr> <tr> <td id="square14"> </td> <td id="square15"> </td> <td id="square16"> </td> <td id="square17"> </td> <td id="square18"> </td> </tr> <tr> <td id="square19"> </td> <td id="square20"> </td> <td id="square21"> </td> <td id="square22"> </td> <td id="square23"> </td> </tr> </table> <p><a href="Bingo卡片.html" id="reload">Click here</a>to create a new card</p> </body>

3.CSS样式:

<style type="text/css"> table{ border-collapse: collapse; /*为表格设置合并边框模型*/ } table tr td, th{ border: 2px solid #666; text-align: center; padding: 10px; } </style>

4.JS代码:

window.onload = initAll; var usedNums = new Array(); function initAll(){ if(document.getElementById){ document.getElementById("reload").onclick = anotherCard; newCard(); }else{ alert("sorry,your browser doesn't support this script"); } } function newCard(){ for(var i=0 ; i<24 ; i++ ){ setSquare(i); } } function setSquare(thisSquare){ //thisSquare为形参,实参为传入的不同 i var currSquare = "square" + thisSquare; var colPlace = new Array(0,1,2,3,4,0,1,2,3,4,0,1,3,4,0,1,2,3,4,0,1,2,3,4); var colBasis = colPlace[thisSquare] * 15; var newNum; do{ newNum = colBasis + getNewNum() + 1 ; }while(usedNums[newNum]); usedNums[newNum] = true; document.getElementById(currSquare).innerHTML = newNum; } function getNewNum(){ return Math.floor(Math.random()*15); } function anotherCard(){ for(var i=0 ; i<usedNum.length ; i++){ usedNums[newNum] = false; } newCard(); return false; }

效果图: 5.js代码中各个函数的作用:

1) initAll()

调用该函数处理所需的初始化步骤。

在该函数中进行了对象探测,就是对要寻找的对象进行条件测试,

if(document.getElementById){} 如果该对象存在,脚本继续执行,但是,如果浏览器不理解这个对象,测试就会返回false,此时弹出警告框中的内容。

调用 newCard()生成卡片调用anotherCard() 在使用户自定义生成新的卡片

2)newCard()

创建新的卡片,调用 setSquare()函数设置每个格子,并向 setSquare()函数传入实参 i,以便后边以此得到每个各自的 id。

3)setSquare(thisSquare)

设置每个格子

此处应注意两点:格子中每列 数字的范围;格子中不可有重复数字和空格子。

首先确定范围: var currSquare = “square”+ thisSquare 得到当前格子的id 由于每列格子数字范围不同,所以要进行范围限制,

var colPlace = new Array(0,1,2,3,4,0,1,2,3,4,0,1,3,4,0,1,2,3,4,0,1,2,3,4);

其次保证每个数字出现至多一次即进行更新数组: 新建一个数组包含76 个元素,这76 个元素分别代表1~75个数处的布尔值。忽略第 0 号元素的值。 var usedNums = newArray(76);

var newNum; 在创建newNum 变量时对它进行初始化。因为将多次设置它,所以在进入循环之前创建只需要创建一次。

将 newNum = colBasis + getNewNum() + 1 ; 放在do while 代码块中,则至少会执行一次,生成第一个数。

while(usedNums[newNum])中,usedNums[newNum] 如为true,则继续生成新的数字直到检查结果为false,将找到之前没有使用过的数字,后usedNums[newNum] 设置为true ,表示该数用过了,将 newNum 写到卡片上。

4) getNewNum()

生成0~15 的随机数并向上取整,由于需要多次用到,将其封装成一个函数。

5) anotherCard()

用户自定义生成新的卡片。

将usedNums数组中所有元素设置为false重新利用, 调用 newCard(), 返回false 值,使用户停止点击后浏览器不会装载 herf 指向的页面。

6.总结

要检查脚本使用的对象浏览器是否理解,用到探测对象,步骤如下 :

if(document.getElementById){ 如果条件语句中的对象存在,测试会返回true,向下运行 }else{

alert(“你的浏览器不支持该脚本”); } 注意不是总是检查 document.getElementById,要检查的对象取决于脚本要使用的对象。

函数可以返回任何值,字符串 布尔值 数字都可以。

布尔值在初始化之前默认false。

do/while 循环一种常用的用途是从输入的数据中去掉空格或无效的字符,并且会至少执行一次。

函数结尾处的return false 表示停止对用户点击的处理,这样就不会继续装载 href 指向的页面。

转载请注明原文地址: https://www.6miu.com/read-66307.html

最新回复(0)