2048 ゲームを実装するためのネイティブ js

2048 ゲームを実装するためのネイティブ js

2048ミニゲーム、参考までに具体的な内容は以下のとおりです

まず、2048ゲームは16のグリッドから切り離すことはできません。HTMLとCSSで対応するタグとスタイルを作成し、JSロジックを開始します。

<div id="box">//ボックス内の 16 個の小さな div
 <div id="son"></div>
 <div id="son"></div>
 <div id="son"></div>
 <div id="son"></div>
 <div id="son"></div>
 <div id="son"></div>
 <div id="son"></div>
 <div id="son"></div>
 <div id="son"></div>
 <div id="son"></div>
 <div id="son"></div>
 <div id="son"></div>
 <div id="son"></div>
 <div id="son"></div>
 <div id="son"></div>
 <div id="son"></div>
</div>

対応するスタイルを設定します: (参考のみ)

#箱{
 幅: 450ピクセル;
 高さ: 450px;
 背景色: 茶色;
 ディスプレイ: フレックス;
 flex-wrap: ラップ;
 コンテンツの均等配置: スペースを均等に;
 境界線: 1px実線 #000;
 マージン: 100px 自動;
 境界線の半径: 10px;
 }
 div>div{
 上マージン: 5px;
 幅: 100ピクセル;
 高さ: 100px;
 境界線の半径: 5px;
 背景色: ビスク;
 テキスト配置: 中央;
 行の高さ: 100px;
 フォントサイズ: 40px;
 }

効果は以下のとおりです。

その後、実際の js 部分が始まります。まず、CSS セレクターを使用して、すべての小さなグリッド div を取得します。

var divs = document.querySelectorAll('[id == son]');

次に、これらの16個の小さなグリッドdivのDOMオブジェクトを受け取るための2次元配列を作成します。

var arr = [[],[],[],[]];
var a = 0;
(var i=0;i < 4; i++){
 (var j=0; j < 4; j++){
 arr[i][j] = divs[a];
 ++ ;
 }
}

これにより、i 軸と j 軸が形成されます。

これにより、その後のモバイル操作が容易になります

ここで、16 個のセルからランダムな数字 2 と 4 をランダムに生成し、空のセルに入力するプログラムを作成します。このプログラムは後で呼び出します。

function sj(){ //乱数を生成 var a = Math.floor(Math.random() * 4);
 var b = Math.floor(Math.random() * 4);
 if(arr[a][b].innerHTML == ""){
 もし(Math.random()>0.5){
 arr[a][b].innerHTML = 2;
 }それ以外{
 arr[a][b].innerHTML = 4;
 }
 
 }else{ //グリッドが空でない場合は、関数 sj() を実行します。
 }
}

2 つ目は、ゲームが終了したかどうかを判断する関数です。グリッドのすべての値が空でなくなるとゲームが終了します。 (後日連絡)

function js(){ //ゲームオーバーですか? var bool = true;
 (var i=0;i < 4; i++){
 (var j=0; j < 4; j++){
 if(arr[i][j].innerHTML == ""){
  ブール値 = false;
 }それ以外{
  
 }
 }
 } 
 if(ブール){
 alert("ゲームオーバー");
 (var i=0;i < 4; i++){
 (var j=0; j < 4; j++){
 arr[i][j] = null;
 }
 }
 
 }
}

次に、上、下、左、右のキーをそれぞれ押して実行される関数を記述します。

上キーを押す場合を例に挙げます。

①上の数字が空で下の数字が空でない場合は、上の値と下の値が入れ替わります。
②上の数値が下の数値と等しい場合、上の数値×2となり下の値は空になります。その他の条件は変更ありません。

function downtop(){ //上を押すと実行される関数 for(var i=0;i < 4; i++){
 (var j=0; j < 4; j++){
 if(arr[i][j].innerHTML == "" && i<3 &&arr[i+1][j].innerHTML != ""){
 arr[i][j].innerHTML = arr[i+1][j].innerHTML;
 arr[i+1][j].innerHTML = "";
 downtop(); // 条件が満たされた場合に実行 // 条件が満たされない場合は、if 文には入りません }else if(i<3&&arr[i][j].innerHTML !="" && arr[i+1][j].innerHTML !="" &&arr[i][j].innerHTML == arr[i+1][j].innerHTML){
 arr[i][j].innerHTML = 2*arr[i+1][j].innerHTML;
 arr[i+1][j].innerHTML = "";
 }それ以外{
 
 }
 }
 }

}

同様に、他の 3 つのキーのロジックを完了するには、(いくつかのパラメータを) 変更するだけです。

関数 downbottom(){
 for(var i=3;i > 0;i--){
 (var j=0; j < 4; j++){
 if(arr[i-1][j].innerHTML != "" && i>0 &&arr[i][j].innerHTML == "" ){ 
 arr[i][j].innerHTML = arr[i-1][j].innerHTML;
 arr[i-1][j].innerHTML = "";
 下端();
 }
 そうでない場合、arr[i-1][j].innerHTML !=""&& arr[i][j].innerHTML !="" && i>0 &&arr[i-1][j].innerHTML == arr[i][j].innerHTML){
 arr[i][j].innerHTML = 2*arr[i-1][j].innerHTML;
 arr[i-1][j].innerHTML = "";
 }
 }
 }
}

関数 downleft(){
 (var i=0;i < 4; i++){
 (var j=0; j < 4; j++){
 if(arr[i][j].innerHTML == "" && j<3 &&arr[i][j+1].innerHTML != ""){
 arr[i][j].innerHTML = arr[i][j+1].innerHTML;
 arr[i][j+1].innerHTML = "";
 左下();
 }そうでない場合(j<3&& arr[i][j].innerHTML !=""&& arr[i][j+1].innerHTML !="" &&arr[i][j].innerHTML == arr[i][j+1].innerHTML){
 arr[i][j].innerHTML = 2*arr[i][j+1].innerHTML;
 arr[i][j+1].innerHTML = "";
 }
 }
 }

}


関数 downright(){
 
 (var i=0;i < 4; i++){
 (var j = 3;j > 0;j--){
 if(j > 0 && arr[i][j].innerHTML == ""&&arr[i][j-1].innerHTML != ""){
 arr[i][j].innerHTML = arr[i][j-1].innerHTML;
 arr[i][j-1].innerHTML = "";
 まさに();
 }そうでない場合、j>0 && arr[i][j].innerHTML !=""&& arr[i][j-1].innerHTML !="" &&arr[i][j].innerHTML == arr[i][j-1].innerHTML){
 arr[i][j].innerHTML = 2*arr[i][j-1].innerHTML;
 arr[i][j-1].innerHTML = "";
 }
 }
 }

 }

異なる値に異なる背景色を追加します: (オプション)

関数 color(){

(var i=0;i < 4; i++){
 (var j=0; j < 4; j++){
 スイッチ(arr[i][j].innerHTML){
 case "": arr[i][j].style.backgroundColor = "bisque";break; 
 ケース "2": arr[i][j].style.backgroundColor = "red";break; 
 ケース "4": arr[i][j].style.backgroundColor = "orange";break; 
 ケース "8": arr[i][j].style.backgroundColor = "yellow";break; 
 ケース "16": arr[i][j].style.backgroundColor = "green";break; 
 ケース "32": arr[i][j].style.backgroundColor = "blue";break; 
 ケース "64": arr[i][j].style.backgroundColor = "#000";break; 
 ケース "128": arr[i][j].style.backgroundColor = "aqua";break; 
 ケース "256": arr[i][j].style.backgroundColor = "pink";break; 
 }
 
 
 }
}

}

次に、ウィンドウ全体のキーボード監視イベントを設定します。

キーコード: 38
キーコードは40です
左キーコード: 37
右キーコード: 39
ボタンを押すたびに、①対応する方向の関数を呼び出す ②ランダムなパラメータで関数を呼び出す ③ゲームオーバーかどうかを判定する関数を呼び出す ④異なる値と異なる要素で関数を呼び出す ⑤ゲーム開始時に2回呼び出す(デフォルトでは2回)

window.onkeydown = 関数(e){
 スイッチ(e.keyCode){
 case 37: downleft(); sj(); color(); js(); break; //左 case 38: downtop(); sj(); color(); js(); break; //大文字 case 39: downright(); sj(); color(); js(); break; //右 case 40: downbottom(); sj(); color(); js(); break; //下文字}

}
sj(); //ゲームは 2 つのデフォルトの数字で始まります sj();

シンプルな2048ゲームが完成しました!

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • 2048 ゲーム機能の AngularJS 実装 [ソース コードのダウンロード付き]
  • ネイティブ js で 2048 ミニゲームを書く
  • Javascript で書かれた 2048 ゲーム
  • Javascript で 2048 ゲームを書く
  • 2048 ゲームの JavaScript バージョン
  • JS ネイティブ 2048 ゲーム ソース コード共有 (インターネットの最新情報)

<<:  Linux オペレーティング システムで ssh/sftp を構成して権限を設定する方法

>>:  Linux/Mac MySQL パスワードを忘れた場合の対処方法

推薦する

Tomcat 実行時の JVM エンコーディングの問題を修正

質問:最近、プロジェクトを展開すると文字化けしたデータが出てきました。確認したところ、プロジェクトは...

Reactドラッグフックを実装するための100行以上のコード

序文ソースコードは合計で 100 行強しかありません。これを読めば、react-dnd などの成熟し...

擬似分散グラフィックを実現するための VMware 構成 Hadoop チュートリアル

1. 実験環境シリアルナンバープロジェクトソフトウェアとバージョン1オペレーティング·システムCen...

mysql データベースの作成、ユーザーの追加、ユーザー認証の実用的な方法

1. MySQLデータベースを作成する1. データベース構文を作成する --「testdb」という名...

HTML に FLASH へのリンクを追加し、すべての主要ブラウザと互換性を持たせる方法

まずコードを見てみましょうコードをコピーコードは次のとおりです。 <div style=&qu...

Linux カーネル デバイス ドライバー仮想ファイル システムに関する注意事項

/******************** * 仮想ファイルシステム VFS **********...

HTML タグのリストと使用方法

HTMLタグのリストマークタイプ名前または意味効果述べるファイルのタグ付け<HTML> ...

CSS3 クリックボタン円形進行ティック効果実装コード

目次8. CSS3 クリックボタンの円形進捗チェック効果8.1 画像プレビュー8.2 index.h...

ul リスト タグ デザイン ウェブ ページ 複数列レイアウト

数日前、CSS で 3 列レイアウトを書いていたときに、突然この方法を思いつきました。このアイデアは...

データベース内のSQL整合性制約ステートメントの分析

整合性制約整合性制約はテーブル データの正確性を保つためのものです。データが正しくない場合は、そもそ...

nodejs + koa + typescript の統合と自動再起動に関する問題

目次バージョンノートプロジェクトを作成する依存関係をインストールするコンテンツの記入src/serv...

Jenkinsはマイクロサービスをパッケージ化してDockerイメージを構築し、実行します。

目次環境の準備始める1. GitLabリモートリポジトリがマイクロサービスプロジェクトを作成する2....

Linux でファイルの作成時間を取得する方法と実践的なチュートリアル

背景ファイルの作成時刻を取得する必要がある場合があります。例えば: 「xtrabackup スキーマ...

MySQL スレーブ ライブラリ Seconds_Behind_Master 遅延の概要

目次MySQL スレーブ ライブラリ Seconds_Behind_Master 遅延の概要1. 遅...

Centos7でのMySQLインストールチュートリアル

MySQLインストールチュートリアル、参考までに具体的な内容は次のとおりです。 1. ダウンロードY...