css+js实现国际益智类象棋游戏代码
代码语言:html
所属分类:游戏
代码描述:css+js实现国际益智类象棋游戏代码,使用标准的国际象棋走法,将黑色棋子移动到红色目标格。 黑兵在顶层行晋升。不允许吃子。尽量减少移动次数。
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <style> @import url("https://fonts.googleapis.com/css2?family=Poppins&display=swap"); * { box-sizing: border-box; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; scroll-behavior: smooth; touch-action: manipulation; } html, body { height: 100%; overflow: hidden; } :root { color-scheme: light dark; --bg-light: #cecece; --bg-dark: #333; } [data-theme="light"] { color-scheme: light only; } [data-theme="dark"] { color-scheme: dark only; } body { display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center; align-items: center; text-align: center; margin: 0; font-family: Poppins; } body, .intro-screen, .info-screen { background: linear-gradient(#333, #171a21); background: linear-gradient( 196deg, light-dark(var(--bg-light), #3b434a), light-dark(#aaa, #171a21) ); } [data-theme="light"] :is(body, .intro-screen, .info-screen) { background: linear-gradient(196deg, var(--bg-light), #aaa); } [data-theme="dark"] :is(body, .intro-screen, .info-screen) { background: linear-gradient(196deg, #3b434a, #171a21); } select, input, button { font-family: Poppins; border-radius: 6px; padding: 4px 6px; cursor: pointer; -webkit-user-select: none; -ms-user-select: none; user-select: none; } header { position: absolute; top: 0; width: 100%; z-index: 200; display: flex; align-items: center; justify-content: space-between; } header .logo { text-decoration: none; color: light-dark(var(--bg-dark), var(--bg-light)); display: flex; align-items: center; -webkit-user-select: none; -ms-user-select: none; user-select: none; cursor: pointer; } header .logo svg { display: inline-block; width: 42px; height: 42px; fill: light-dark(var(--bg-dark), var(--bg-light)); margin-right: -6px; } .mid-header { gap: 12px; display: none; align-items: center; } @media screen and (max-width: 680px) { .mid-header { position: fixed; top: unset; bottom: 16px; width: 100vw; justify-content: space-between; flex-wrap: wrap; padding: 0 24px; } .mid-header > :nth-child(n + 2) { width: 30%; } .mid-header > :nth-child(-n + 2) { width: 44%; order: 1; } .mid-header > * { width: fit-content; } .mid-header .btn:hover svg { top: 2px; } } #toggleColorScheme { margin: 12px; width: 24px; height: 24px; filter: grayscale(1); cursor: pointer; } .intro-screen, .info-screen { position: absolute; width: 100%; height: 100%; display: flex; flex-direction: column; justify-content: center; align-items: center; -webkit-user-select: none; -ms-user-select: none; user-select: none; } .intro-screen { z-index: 100; } .intro-screen h2, .info-screen h2 { font-size: 2em; margin-bottom: 0; line-height: 100%; text-shadow: 0 2px 3px #000; } .intro-screen p { margin-top: 0; } .intro-screen p, .info-screen p { margin-bottom: 2em; padding: 0 16px; text-shadow: 0 2px 3px #000; } .intro-screen p a { text-decoration: none; color: inherit; } .intro-screen p a:hover { text-decoration: underline; } .btn, .btn-text, .btn svg { transition: all 0.2s ease-in-out; } .btn { position: relative; border: 1px solid #3333; padding: 4px 16px; border-radius: 4px; background: light-dark(#292929, #bbbbbb); color: light-dark(#fff, #292929); box-shadow: 0 2px 2px 0 #3333, inset 2px 2px 2px 0 #fff3, inset -2px -2px 2px 0 #0003; cursor: pointer; overflow: hidden; white-space: nowrap; } .btn:hover { border: 1px solid #3335; box-shadow: 0 0 0 0 #3330; translate: 0 2px; } .btn:hover .btn-text { filter: blur(5px); } .btn svg { width: 22px; height: 22px; position: absolute; left: 0; right: 0; margin: auto; top: 42px; } .btn:hover svg { top: 4px; } .btn svg :is(path, polyline, line) { stroke: light-dark(#fff, #292929); stroke-width: 0.8px; fill: #0000; } .btn.btn-right svg :is(path, polyline, line) { stroke-width: 2px; } .btn svg circle { fill: light-dark(#fff, #292929); } .btn.btn-rotate:hover svg { animation: btn-rotate 1s ease-in-out forwards; } @keyframes btn-rotate { 0% { rotate: 0deg; } 100% { rotate: -360deg; } } .btn.btn-right:hover svg { animation: btn-right 0.4s ease-in-out forwards; } @keyframes btn-right { 0% { left: -124%; } 100% { left: 0; } } select { -webkit-appearance: none; -moz-appearance: none; appearance: none; background-color: #fff; border: 1px solid #ccc; border-radius: 4px; padding: 4px 16px; font-size: 0.9em; line-height: 142%; color: #333; } select:focus { outline: none; border-color: #a0bacf; box-shadow: 0 0 5px rgba(191, 201, 209, 0.6); } .info-screen { z-index: 99; } .info-screen h2 { font-size: 2em; margin-bottom: 0; line-height: 100%; } .intro-screen > img { position: absolute; opacity: 0.1; width: min(400px, 50vw); pointer-events: none; z-index: -1; } .level-clear { position: absolute; background: light-dark(#fffc, #000c); width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; z-index: 101; } .lvl-clear-box { background: light-dark(var(--bg-light), var(--bg-dark)); border: 1px solid light-dark(var(--bg-dark), var(--bg-light)); box-shadow: 0 4px 12px 0 #0004; color: light-dark(var(--bg-dark), var(--bg-light)); } .lvl-clear-box h2 { padding: 16px; border-bottom: 1px solid light-dark(var(--bg-dark), var(--bg-light)); padding-bottom: 12px; margin-top: 0; } .lvl-clear-box p { line-height: 100%; padding: 0; padding-bottom: 8px; margin: 8px 0; } .lvl-clear-box span:not(.btn-text) { font-weight: 1000; font-size: 1.2em; margin-right: 12px; display: inline-block; text-align: center; } .lvl-clear-box .next-lvl, .lvl-clear-box .same-lvl { background: light-dark(var(--bg-dark), var(--bg-light)); color: light-dark(var(--bg-light), var(--bg-dark)); width: fit-content; margin: auto; padding: 4px 16px; margin-bottom: 24px; cursor: pointer; } .lvl-clear-box .same-lvl { scale: 0.8; } #scoreboard-container { display: none; position: absolute; height: 100%; width: 100%; justify-content: center; align-items: center; z-index: 102; background-color: #000a; } #scoreboard-container.show { display: flex; } .scoreboard { min-width: min(80vw, 242px); max-width: calc(100% - 16px); height: fit-content; position: relative; margin: auto; background: light-dark(#fffc, #000c); padding: 0 12px; border: 1px solid light-dark(var(--bg-dark), var(--bg-light)); box-shadow: 0 4px 12px 0 #0004; -webkit-user-select: none; -ms-user-select: none; user-select: none; } .scoreboard #close-score { position: absolute; right: 4px; top: 4px; line-height: 100%; cursor: pointer; font-size: 1em; } .scoreboard #close-score svg { width: 22px; } .scoreboard #close-score svg * { fill: light-dark(#000c, #fffc); } .scoreboard #close-score:hover svg * { fill: light-dark(rgba(92, 92, 92, 0.8), rgba(129, 129, 129, 0.8)); } .scoreboard h2 { line-height: 100%; margin: 12px; } .scoreboard hr { margin: 0; } .scores { display: flex; flex-direction: column; flex-wrap: wrap; max-height: 300px; max-height: min(50vh, 320px); overflow: hidden; margin-bottom: 4px; } .scoreboard p { text-align: left; line-height: 100%; padding: 0; padding-bottom: 3px; margin: 3px 0 0 0; width: 100px; white-space: nowrap; } .scoreboard p:not(:last-child) { border-bottom: 1px solid #fff3; } .scoreboard span { background: light-dark(var(--bg-dark), var(--bg-light)); color: light-dark(var(--bg-light), var(--bg-dark)); padding: 4px; margin-right: 12px; width: 54px; display: inline-block; text-align: center; font-weight: 800; white-space: nowrap; } #chessboard { --size: min(min(12vw, 10vh), 64px); display: grid; align-items: center; justify-content: center; grid-template-columns: repeat(var(--cols, 8), var(--size)); grid-template-rows: repeat(var(--rows, 8), var(--size)); gap: 2px; margin-bottom: 20px; position: relative; } .square { width: var(--size); height: var(--size); display: flex; justify-content: center; align-items: center; font-size: 24px; border: 1px solid light-dark(#0002, #fff3); color: transparent; position: relative; cursor: grab; -webkit-user-select: none; -ms-user-select: none; user-select: none; transform-style: preserve-3d; transform: rotateY(-90deg); perspective: 200px; animation: flip 0.4s linear forwards; } @keyframes flip { 0% { transform: perspective(200px) rotateY(-90deg); } 100% { transform: perspective(200px) rotateY(0deg); } } .square[data-piece="wn"]::before { --piece-img: var(--p-wn); } .square[data-piece="bn"]::before { --piece-img: var(--p-bn); } .square[data-piece="wb"]::before { --piece-img: var(--p-wb); } .square[data-piece="bb"]::before { --piece-img: var(--p-bb); } .square[data-piece="wp"]::before { --piece-img: var(--p-wp); } .square[data-piece="bp"]::before { --piece-img: var(--p-bp); } .square[data-piece="wr"]::before { --piece-img: var(--p-wr); } .square[data-piece="br"]::before { --piece-img: var(--p-br); } .square[data-piece="wq"]::before { --piece-img: var(--p-wq); } .square[data-piece="bq"]::before { --piece-img: var(--p-bq); } .square[data-piece="wk"]::before { --piece-img: var(--p-wk); } .square[data-piece="bk"]::before { --piece-img: var(--p-bk); } .square[data-piece]::before { content: ""; display: block; position: absolute; width: 100%; height: 100%; background-size: cover; pointer-events: none; background-image: var(--piece-img); } .white { background-color: #ffffff; } .black { background-color: #888; } .highlight { background-color: #e0ffbc; } .black.highlight { background-color: #9ab379; } .selected-piece { border: 3px solid #000; } .gray-out { background-color: transparent; pointer-events: none; border: none; opacity: 0.4; } .target-square { box-shadow: inset 0 0 0 100px #f303; border: 2px solid #f006; } .square.drag-over { border: 2px dashed #000; } .promotion-options { position: absolute; left: 0; right: 0; margin: auto; width: fit-content; z-index: 101; background: #fff; border: 1px solid #000; padding: 12px; border-radius: 4px; display: flex; flex-direction: column; gap: 12px; box-shadow: 0 4px 24px 0 #000; } body:has(.promotion-options) :is(.square, .mid-header) { pointer-events: none; } .promotion-options button { display: flex; align-items: center; cursor: pointer; background: #fff; color: #000; border: 1px solid #0003; box-shadow: 0 2px 3px 0 #0003; transition: all 0.2s ease-in-out; } .promotion-options button::before { content: ""; display: inline-block; width: 20px; height: 20px; margin: 2px 6px 2px 0px; --piece-img: var(--p-bq); background-image: var(--piece-img); background-repeat: no-repeat; background-size: cover; } .promotion-options button:nth-child(2):before { --piece-img: var(--p-bn); } .promotion-options button:hover { background: #0003; translate: 0 2px; box-shadow: 0 0px 1px .........完整代码请登录后点击上方下载按钮下载查看
网友评论0