ホームページ  >  記事  >  ウェブフロントエンド  >  テトリスの原則と具体的な手順の HTML5 JS 実装_html5 チュートリアルのスキル

テトリスの原則と具体的な手順の HTML5 JS 実装_html5 チュートリアルのスキル

WBOY
WBOYオリジナル
2016-05-16 15:48:311726ブラウズ
このゲームの実装の基本原則:

ゲーム領域は、限られたサイズの領域です。各長方形は 21×25 個あります。幅は 10 単位、高さは 6 単位です (キャンバスの絶対単位はピクセルではなく固定です)。

対応するデータと動作を含む RusBlock クラスを作成し、ゲーム領域にマークされた四角形を記録する 2 次元配列 aState[21][25] を作成します。

テトリスには 7 つのパーツがあり、各パーツが占める四角形の数と位置が異なるので、パーツ クラスを作成し、7 つのパーツを格納する配列を作成します。パーツが占める四角形の数と位置。落下したパーツが最下位に到達すると、新しいパーツが生成され、そのパーツのマークされた四角形がゲーム領域の配列に割り当てられます。

ゲームループ機能で、落下部分、固定部分、次の落下部分を印刷します。

基礎知識:

HTML5 CSS JS
このゲームには 3 つのファイルが含まれています:

RusBlock.html: 要素の設定
RusBlock.css: スタイルの設定
RusBlock.js: スクリプト コントロール

ステップ 1: インターフェイスの設定とマテリアルの準備

RusBlock.html

コードをコピー
コードは次のとおりです。



/title> <br><link rel=”stylesheet” type=”text/css” href=”RusBlock.css”> <br><script type=”text/javascript”> <br>function ShareGame () { <br>var URL = “http://share.renren.com/share/buttonshare.do?link=” document.URL “&title=RusBlock” <br>window.showModalDialog([URL]); } <br></script> <br></head> <br><body onkeyup=”loop” id=” Background-AudioPlayer ” preload=”auto”> <br><source src=”audio/background.mp3″ type=”audio/mp3″/> <br></audio><audio id=” GameOver-AudioPlayer” preload=”auto”> <br></audio> =”Score-AudioPlayer” preload=”auto”><br><source src=”audio/score.mp3″ type=”audio/mp3″/> <br></audio>< ;div id=”ゲームエリア”> <br><div id=”ボタンエリア”>h1 id=”ゲーム名”>RusBlock<br>< ;button id=”Button-Game-Start” onclick=”GameStart()”>開始</button><br><button id=”Button-Game-End” onclick=”GameEnd()”>終了< ;/button> <br><form id=”Form-Game-Level”> <br><select id="”Select-Game-Level”"><br><option value="”"></option><オプション値=”300″>ノーマル<br><オプション値=”200″>ハード</オプション> </select> <br></form> <br><button onclick=”ShareGame()” id=”Button-Game-Share”>Renren に共有</button> div> <br><canvas id=”Game-Canvas”></canvas> <br><h2>スコア</h2> 🎜><p id=”ゲームスコア”>/p> <br></div> <br><script type=”text /javascript” src= 「RusBlock.js」><br><br><br><br>ステップ 2: スタイル <br> RosBlock.css <br><br><br><br><br><br>コードをコピー<br><br><br>コードは次のとおりです:<br><div class="msgborder" id="phpcode25"> <br>body { <br>背景色:グレー; <br>text-align:center; <br>font-family:'Times New Roman'; <br>背景画像:url(""); <br>} <br>h1#ゲーム名 { <br>背景色:白; <br>幅:100%; <br>フォントサイズ:x-large; <br>} <br>h2,#Game-Score { <br>font-size:x-large; <br>背景色:白; <br>} <br>#Game-Area { <br>位置:絶対; <br>左:10%; <br>幅:80%; <br>高さ:99%; <br>} <br>canvas#Game-Canvas { <br>背景色:白; <br>幅:80%; <br>高さ:98%; <br>浮動小数点:左; <br>} <br>#ボタンエリア ,#スコアエリア{ <br>width:10%; <br>高さ:100%; <br>浮動小数点:左; <br>} <br>#ボタンゲーム開始、#ボタンゲーム終了、#ボタンゲーム共有、#選択ゲームレベル{ <br>width:100%; <br>高さ:10%; <br>フォントサイズ: 大きく; <br>border-right-width:3px; <br>背景色:白; <br>} <br>#Select-Game-Level { <br>width:100%; <br>高さ:100%; <br>フォントサイズ:x-large; <br>ボーダーカラー:グレー; <br>} <br> </div> <br><strong> 第三步:编写js代码 <br><br></strong>RusBlock.js <br><br>Rusblock类に含まれる成员解析: <br><br>データ: <br><br>nCurrentComID:現在落下している部品のID <br><br>aState[21][25]:存储游戏領域状態态的数组 <br><br>CurrentCom:現在落下しているコンポーネント <br><br>NextCom: 下の部分 <br><br>ptIndex: 現在落下するコンポーネントの相对游戏領域のインデックス <br><br>関数: <br><br>NewNextCom(): 新しく生成されたもの下部分 <br><br>NextComToCurrentCom(): 下部分のデータを現在落下するコンポーネント上に移動します <br><br>CanDown(): 当前コンポーネントが以下に落下可能かどうか判断します <br><br>CanNew (): 新しい部品を生成できるかどうかを判断します。 <br><br>Left():当前部品方向左移動 <br><br>Right():当前部品方向右移動 <br><br>Rotate() :当前部品顺時针旋转 <br><br>Acceleratet():当前部品方向下加速 <br><br>Dislapse():消去一行 <br><br>CheckFail():判断否か游戏失败 <br> <br>InvalidateRect():刷新当前コンポーネントの領域 <br><br> 完了:<a target="_blank" href="http://pan.baidu.com/s/13nnRI">デモのダウンロード</a> <br><img alt="" src="http://files.jb51.net/file_images/article/201311/201311291618142.gif?20131029161836"></select> </div></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>声明:</span><div>この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。</div></div></div><div class="nphpSytBox"><span>前の記事:<a class="dBlack" title="html5 で実装された特殊効果 (実践的な共有)_html5 チュートリアルのスキルをメモします。" href="http://m.php.cn/ja/faq/6130.html">html5 で実装された特殊効果 (実践的な共有)_html5 チュートリアルのスキルをメモします。</a></span><span>次の記事:<a class="dBlack" title="html5 で実装された特殊効果 (実践的な共有)_html5 チュートリアルのスキルをメモします。" href="http://m.php.cn/ja/faq/6134.html">html5 で実装された特殊効果 (実践的な共有)_html5 チュートリアルのスキルをメモします。</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>関連記事</h2><em><a href="http://m.php.cn/ja/article.html" class="bBlack"><i>続きを見る</i><b></b></a></em><div class="clear"></div></div><ul class="nphpXgwzList"><li><b></b><a href="http://m.php.cn/ja/faq/348281.html" title="AlloyTouch 全画面スクロール プラグインは 30 秒で滑らかな H5 ページを作成します" class="aBlack">AlloyTouch 全画面スクロール プラグインは 30 秒で滑らかな H5 ページを作成します</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/348372.html" title="HTML5の実戦とタッチイベント解析(touchstart、touchmove、touchend)" class="aBlack">HTML5の実戦とタッチイベント解析(touchstart、touchmove、touchend)</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/348373.html" title="HTML5 Canvas 9での画像描画例を詳しく解説" class="aBlack">HTML5 Canvas 9での画像描画例を詳しく解説</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/348374.html" title="正規表現と新しい HTML5 要素" class="aBlack">正規表現と新しい HTML5 要素</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/348469.html" title="NodeJS と HTML5 を組み合わせて複数のファイルをドラッグ アンド ドロップしてサーバーにアップロードする方法" class="aBlack">NodeJS と HTML5 を組み合わせて複数のファイルをドラッグ アンド ドロップしてサーバーにアップロードする方法</a><div class="clear"></div></li></ul></div></div><div class="nphpFoot"><div class="nphpFootBg"><ul class="nphpFootMenu"><li><a href="http://m.php.cn/ja/"><b class="icon1"></b><p>ホームページ</p></a></li><li><a href="http://m.php.cn/ja/course.html"><b class="icon2"></b><p>コース</p></a></li><li><a href="http://m.php.cn/ja/wenda.html"><b class="icon4"></b><p>に質問</p></a></li><li><a href="http://m.php.cn/ja/login"><b class="icon5"></b><p>私の</p></a></li><div class="clear"></div></ul></div></div><div class="nphpYouBox" style="display: none;"><div class="nphpYouBg"><div class="nphpYouTitle"><span onclick="$('.nphpYouBox').hide()"></span><a href="http://m.php.cn/ja/"></a><div class="clear"></div></div><ul class="nphpYouList"><li><a href="http://m.php.cn/ja/"><b class="icon1"></b><span>ホームページ</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/course.html"><b class="icon2"></b><span>コース</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/article.html"><b class="icon3"></b><span>記事</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/wenda.html"><b class="icon4"></b><span>に質問</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/dic.html"><b class="icon6"></b><span>辞書</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/course/type/99.html"><b class="icon7"></b><span>マニュアル</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/xiazai/"><b class="icon8"></b><span>ダウンロード</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/faq/zt" title="特集"><b class="icon12"></b><span>特集</span><div class="clear"></div></a></li><div class="clear"></div></ul></div></div><div class="nphpDing" style="display: none;"><div class="nphpDinglogo"><a href="http://m.php.cn/ja/"></a></div><div class="nphpNavIn1"><div class="swiper-container nphpNavSwiper1"><div class="swiper-wrapper"><div class="swiper-slide"><a href="http://m.php.cn/ja/" >ホームページ</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/article.html" class="hover">記事</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/wenda.html" >に質問</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/course.html" >コース</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/faq/zt" >特集</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/xiazai" >ダウンロード</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/game" >ゲーム</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/dic.html" >辞書</a></div><div class="clear"></div></div></div><div class="langadivs" ><a href="javascript:;" class="bg4 bglanguage"></a><div class="langadiv" ><a onclick="javascript:setlang('zh-cn');" class="language course-right-orders chooselan " href="javascript:;"><span>简体中文</span><span>(ZH-CN)</span></a><a onclick="javascript:setlang('en');" class="language course-right-orders chooselan " href="javascript:;"><span>English</span><span>(EN)</span></a><a onclick="javascript:setlang('zh-tw');" class="language course-right-orders chooselan " href="javascript:;"><span>繁体中文</span><span>(ZH-TW)</span></a><a onclick="javascript:;" class="language course-right-orders chooselan chooselanguage" href="javascript:;"><span>日本語</span><span>(JA)</span></a><a onclick="javascript:setlang('ko');" class="language course-right-orders chooselan " href="javascript:;"><span>한국어</span><span>(KO)</span></a><a onclick="javascript:setlang('ms');" class="language course-right-orders chooselan " href="javascript:;"><span>Melayu</span><span>(MS)</span></a><a onclick="javascript:setlang('fr');" class="language course-right-orders chooselan " href="javascript:;"><span>Français</span><span>(FR)</span></a><a onclick="javascript:setlang('de');" class="language course-right-orders chooselan " href="javascript:;"><span>Deutsch</span><span>(DE)</span></a></div></div><script> var swiper = new Swiper('.nphpNavSwiper1', { slidesPerView : 'auto', observer: true,//修改swiper自己或子元素时,自动初始化swiper observeParents: true,//修改swiper的父元素时,自动初始化swiper }); </script></div></div><!--顶部导航 end--><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body></html>