Demo jQuery 練習-Tic Tac Toe- Demo
1. Introduction 介紹 這是 jQuery 操作 click 事件搭配新增 class 實現圈叉遊戲。
需兩方輪流操作點擊後新增 class、插入兩方字串來顯示’o’與’x’
判定兩方誰達成連線
須判定和局、已觸發過點擊事件的欄位
2. 功能 先宣告圈與叉的變數字串、計算雙方輪流操作的變數等,主要都是用if、else if、else來判斷。 觸發 click 事件後,先判定圈是否有連成一線,再判定叉是否有連線,如果有連線都需要將全部欄新增的o、x、還有disabled以點擊過的 class 刪除,並將全部欄位的文字清空、計數 turns 歸 0。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <div id ="container" > <header > <h1 > Tic Tac Toe</h1 > </header > <ul id ="board" > <li id ="spot1" > +</li > <li id ="spot2" > +</li > <li id ="spot3" > +</li > <li id ="spot4" > +</li > <li id ="spot5" > +</li > <li id ="spot6" > +</li > <li id ="spot7" > +</li > <li id ="spot8" > +</li > <li id ="spot9" > +</li > </ul > <div class ="clearfix" > </div > <footer > <button id ="reset" > Reset Game</button > </footer > </div >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 $(document ).ready(function ( ) { var x = "x" ; var o = "o" ; var turns = 0 ; var spot1 = $("#spot1" ); var spot2 = $("#spot2" ); var spot3 = $("#spot3" ); var spot4 = $("#spot4" ); var spot5 = $("#spot5" ); var spot6 = $("#spot6" ); var spot7 = $("#spot7" ); var spot8 = $("#spot8" ); var spot9 = $("#spot9" ); $("#board li" ).on("click" , function ( ) { if ( (spot1.hasClass("o" ) && spot2.hasClass("o" ) && spot3.hasClass("o" )) || (spot4.hasClass("o" ) && spot5.hasClass("o" ) && spot6.hasClass("o" )) || (spot7.hasClass("o" ) && spot8.hasClass("o" ) && spot9.hasClass("o" )) || (spot1.hasClass("o" ) && spot4.hasClass("o" ) && spot7.hasClass("o" )) || (spot2.hasClass("o" ) && spot5.hasClass("o" ) && spot8.hasClass("o" )) || (spot3.hasClass("o" ) && spot6.hasClass("o" ) && spot9.hasClass("o" )) || (spot3.hasClass("o" ) && spot5.hasClass("o" ) && spot7.hasClass("o" )) || (spot1.hasClass("o" ) && spot5.hasClass("o" ) && spot9.hasClass("o" )) ) { alert("Winner: O" ); $("#board li" ).text("+" ); $("#board li" ).removeClass("disable" ); $("#board li" ).removeClass("o" ); $("#board li" ).removeClass("x" ); } else if ( '同上面' o'的判斷式...' ) { alert("Winner: X" ); } }); });
和局判定,一樣需要 reset。 全部共有九個欄位,用一開始宣告用來輪流操作的變數,計算++後,值等於 9 即為和局。
1 2 3 4 5 6 7 8 else if (turns == 9 ) { alert("Tie Game" ); $("#board li" ).text("+" ); $("#board li" ).removeClass("disable" ); $("#board li" ).removeClass("o" ); $("#board li" ).removeClass("x" ); turns = 0 ; }
點擊過的欄位,如果再去點擊則不能執行
1 2 3 else if ($(this ).hasClass("disable" )) { alert("This spot is already filled" ); }
輪流操作,點擊後新增 class,利用餘數除以 2 計算雙方操作,判斷成立後新增 class,每一次行為後都要判定是否連線。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 else if (turns % 2 == 0 ) { turns++; $(this ).text(o); $(this ).addClass("disable o" ); if ('o連線判定' ) { alert("Winner: O" ); turns = 0 ; } } else { turns++; $(this ).text(x); $(this ).addClass("disable x" ); if ('x連線判定' ) { alert("Winner: X" ); turns = 0 ; } }
這邊則是獨立的 reset 按鈕,讓遊戲隨時可以重新開始。
1 2 3 4 5 6 7 8 $("#reset" ).on("click" , function ( ) { $("#board li" ).text("+" ); $("#board li" ).removeClass("disable" ); $("#board li" ).removeClass("o" ); $("#board li" ).removeClass("x" ); turns = 0 ; });