经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » HTML/CSS » CSS3 » 查看文章
纯CSS3实现的井字棋游戏_css3_CSS
来源:jb51  时间:2020/11/23 11:51:04  对本文有异议

运行效果:

html

  1. .tic-tac-toe
  2. - for (var turn = 1; turn <= 9; turn++)
  3. - for (var row = 1; row <= 3; row++)
  4. - for (var column = 1; column <= 3; column++)
  5. - var player = "1"
  6. - var positionHorizontal = ""
  7. - var positionVertical = ""
  8. - var positionDiagonal = ""
  9. if( turn % 2 == 0 )
  10. - var player = "2"
  11. if( column == 1 )
  12. - var positionHorizontal = " left first-column"
  13. else if( column == 2 )
  14. - var positionHorizontal = " middle second-column"
  15. else if( column == 3 )
  16. - var positionHorizontal = " right third-column"
  17. if( row == 1 )
  18. - var positionVertical = " top first-row"
  19. else if( row == 2 )
  20. - var positionVertical = " center second-row"
  21. else if( row == 3 )
  22. - var positionVertical = " bottom third-row"
  23. if( row == 1 && column == 1 )
  24. - var positionDiagonal = " first-diagonal"
  25. else if( row == 1 && column == 3 )
  26. - var positionDiagonal = " second-diagonal"
  27. else if( row == 2 && column == 2 )
  28. - var positionDiagonal = " first-diagonal second-diagonal"
  29. else if( row == 3 && column == 1 )
  30. - var positionDiagonal = " second-diagonal"
  31. else if( row == 3 && column == 3 )
  32. - var positionDiagonal = " first-diagonal"
  33. input(id="block" + turn + "-" + row + "-" + column type="radio" class="player-" + player + positionHorizontal + positionVertical + positionDiagonal + " turn-" + turn)
  34. label(for="block" + turn + "-" + row + "-" + column class="turn-" + turn)
  35.  
  36. .end
  37. h3
  38. a(href="") Restart
  39. h5 Note: use the Full Page view for the best experience.

css3

  1. @import "compass/css3";
  2.  
  3. /* Variables
  4. -------------------------------------------------------------- */
  5.  
  6. $size-sm: 90px;
  7. $size: 140px;
  8. $spacing: 5px;
  9.  
  10. $player-1-icon: "\f00d";
  11. $player-2-icon: "\f10c";
  12.  
  13. $player-1-color: #dc685a;
  14. $player-2-color: #ecaf4f;
  15. $hover-color: #3d4250;
  16.  
  17. /* Body and Notice styling
  18. -------------------------------------------------------------- */
  19.  
  20. body {
  21. color: #b6b5ca;
  22. font-family: 'Arial', sans-serif;
  23. margin: 0;
  24. text-align: center;
  25. }
  26.  
  27. h5 {
  28. font-weight: 400;
  29. padding: 0 20px;
  30. }
  31.  
  32. /* Tic-tac-toe game
  33. -------------------------------------------------------------- */
  34.  
  35. .tic-tac-toe {
  36. font-family: 'Open Sans', sans-serif;
  37. height: ($size-sm + $spacing*2)*3;
  38. overflow: hidden;
  39. margin: 50px auto 30px auto;
  40. position: relative;
  41. width: ($size-sm + $spacing*2)*3;
  42. @media(min-width: 450px) {
  43. height: ($size + $spacing*2)*3;
  44. width: ($size + $spacing*2)*3;
  45. }
  46. input[type="radio"] {
  47. // Hide radio buttons
  48. display: none;
  49. // Put the label above the rest, when checked
  50. &:checked + label {
  51. cursor: default;
  52. z-index: 10 !important;
  53. }
  54. // Player 1 icon
  55. &.player-1 + label:after { content: $player-1-icon; }
  56. // Player 2 icon
  57. &.player-2 + label:after { content: $player-2-icon; }
  58. // Show icon when checked
  59. &.player-1:checked + label:after,
  60. &.player-2:checked + label:after { opacity: 1; }
  61. // Player 1 color
  62. &.player-1:checked + label { background-color: $player-1-color; }
  63. // Player 2 color
  64. &.player-2:checked + label { background-color: $player-2-color; }
  65. // Stack each turn on top of another
  66. @for $i from 1 through 9 {
  67. &.turn-#{$i} + label {
  68. z-index: $i;
  69. }
  70. }
  71. // Display the first turn
  72. &.turn-1 + label { display: block; }
  73. // Show next turn, once the current label has been :checked
  74. @for $i from 1 through 8 {
  75. &.turn-#{$i}:checked ~ .turn-#{$i+1} + label { display: block; }
  76. }
  77. // Label positioning
  78. &.left + label { left: 0; }
  79. &.top + label { top: 0; }
  80. &.middle + label { left: ($size-sm + $spacing*2); }
  81. &.right + label { left: ($size-sm + $spacing*2)*2; }
  82. &.center + label { top: ($size-sm + $spacing*2); }
  83. &.bottom + label { top: ($size-sm + $spacing*2)*2; }
  84. @media(min-width: 450px) {
  85. &.middle + label { left: ($size + $spacing*2); }
  86. &.right + label { left: ($size + $spacing*2)*2; }
  87. &.center + label { top: ($size + $spacing*2); }
  88. &.bottom + label { top: ($size + $spacing*2)*2; }
  89. }
  90. }
  91. // If all 9 turns have been played, show the end pop-up and set the text to "It is a tie!"
  92. input[type="radio"]:checked ~ input[type="radio"]:checked ~ input[type="radio"]:checked ~
  93. input[type="radio"]:checked ~ input[type="radio"]:checked ~ input[type="radio"]:checked ~
  94. input[type="radio"]:checked ~ input[type="radio"]:checked ~ input[type="radio"]:checked ~ .end {
  95. display: block;
  96. > h3:before { content: "It is a tie!"; }
  97. }
  98. // Check for all posibble victories, for both players individually
  99. @for $i from 1 through 2 {
  100. .player-#{$i}.first-column:checked ~ .player-#{$i}.first-column:checked ~ .player-#{$i}.first-column:checked ~ .end,
  101. .player-#{$i}.second-column:checked ~ .player-#{$i}.second-column:checked ~ .player-#{$i}.second-column:checked ~ .end,
  102. .player-#{$i}.third-column:checked ~ .player-#{$i}.third-column:checked ~ .player-#{$i}.third-column:checked ~ .end,
  103. .player-#{$i}.first-row:checked ~ .player-#{$i}.first-row:checked ~ .player-#{$i}.first-row:checked ~ .end,
  104. .player-#{$i}.second-row:checked ~ .player-#{$i}.second-row:checked ~ .player-#{$i}.second-row:checked ~ .end,
  105. .player-#{$i}.third-row:checked ~ .player-#{$i}.third-row:checked ~ .player-#{$i}.third-row:checked ~ .end,
  106. .player-#{$i}.first-diagonal:checked ~ .player-#{$i}.first-diagonal:checked ~ .player-#{$i}.first-diagonal:checked ~ .end,
  107. .player-#{$i}.second-diagonal:checked ~ .player-#{$i}.second-diagonal:checked ~ .player-#{$i}.second-diagonal:checked ~ .end {
  108. display: block;
  109. h3:before { content: "Player #{$i} wins!" !important; }
  110. }
  111. }
  112. // Label style
  113. label {
  114. background-color: #78bec5;
  115. border-radius: 14px;
  116. cursor: pointer;
  117. color: #fff;
  118. display: none;
  119. height: $size-sm;
  120. margin: $spacing;
  121. position: absolute;
  122. width: $size-sm;
  123. @include transition(background-color .3s);
  124. @media(min-width: 450px) {
  125. height: $size;
  126. width: $size;
  127. }
  128. // Label hover effect
  129. &:hover {
  130. background-color: $hover-color;
  131. &:after { opacity: .4; }
  132. }
  133. // Icon style
  134. &:after {
  135. left: 0;
  136. font-family: "FontAwesome";
  137. font-size: $size-sm*0.5;
  138. margin-top: -($size-sm*0.5)/2;
  139. opacity: 0;
  140. position: absolute;
  141. text-align: center;
  142. text-shadow: 2px 2px 4px rgba(0, 0, 0, .2);
  143. top: 50%;
  144. width: 100%;
  145. @media(min-width: 450px) {
  146. font-size: $size*0.5;
  147. margin-top: -($size*0.5)/2;
  148. }
  149. }
  150. }
  151. // End screen style
  152. .end {
  153. background: rgba(255, 255, 255, .8);
  154. bottom: 5px;
  155. color: #3d4250;
  156. display: none;
  157. left: 5px;
  158. padding-top: 55px;
  159. position: absolute;
  160. right: 5px;
  161. top: 5px;
  162. text-align: center;
  163. z-index: 11;
  164. @media(min-width: 450px) {
  165. padding-top: 110px;
  166. }
  167. h3 {
  168. font-size: 30px;
  169. font-weight: 300;
  170. @media(min-width: 450px) { font-size: 40px; }
  171. }
  172. a {
  173. background-color: #3d4250;
  174. border-radius: 4px;
  175. color: #fff;
  176. padding: 14px 45px;
  177. text-decoration: none;
  178. @include transition(background-color .2s);
  179. &:hover {
  180. background-color: #262934;
  181. cursor: pointer;
  182. }
  183. }
  184. }
  185. }

以上就是纯CSS3实现的井字棋游戏的详细内容,更多关于CSS3 井字棋游戏的资料请关注w3xue其它相关文章!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号