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 ; });