源代码如下
1.游戏基本操作
用空格键攻击,kill the king。
css样式源码
@charset "UTF-8";
@font-face {
font-family: "AddLGBitmap09";
src: url("https://assets.codepen.io/217233/AddLGBitmap09.woff2") format("woff2"), url("https://assets.codepen.io/217233/AddLGBitmap09.woff") format("woff");
font-weight: normal;
font-style: normal;
font-display: swap;
}
body {
background: black;
color: white;
margin: 0;
padding: 0;
overflow: hidden;
font-family: "AddLGBitmap09";
}
.game_lose,
.game_win {
position: absolute;
background: rgba(14, 3, 13, 0.94);
z-index: 99999;
width: 100%;
height: 100%;
text-align: center;
display: none;
}
.game_lose.show,
.game_win.show {
display: block;
}
.game_lose .inner,
.game_win .inner {
position: absolute;
width: 500px;
left: 0;
right: 0;
margin: auto;
top: 50%;
transform: translateY(-50%);
}
.game_lose .inner p,
.game_win .inner p {
font-size: 12px;
line-height: 20px;
}
#app {
background: url("https://assets.codepen.io/217233/ssBg.png");
background-size: cover;
background-position: center;
height: 100vh;
width: 100%;
position: relative;
transition: all 0.1s;
position: relative;
}
@-webkit-keyframes shake {
0% {
left: -3px;
top: 3px;
}
20% {
left: 3px;
top: -3px;
}
40% {
left: 3px;
top: 3px;
}
60% {
left: -3px;
top: -3px;
}
80% {
left: 3px;
top: 3px;
}
100% {
left: 0;
top: 0px;
}
}
@keyframes shake {
0% {
left: -3px;
top: 3px;
}
20% {
left: 3px;
top: -3px;
}
40% {
left: 3px;
top: 3px;
}
60% {
left: -3px;
top: -3px;
}
80% {
left: 3px;
top: 3px;
}
100% {
left: 0;
top: 0px;
}
}
#app.pressed {
-webkit-animation: shake 0.1s forwards;
animation: shake 0.1s forwards;
}
.game_intro {
background: rgba(14, 3, 13, 0.94);
width: 100%;
height: 100%;
position: fixed;
z-index: 99;
transition: all 0.3s;
}
.game_intro.gamestarted {
opacity: 0;
pointer-events: none;
}
.game_intro__inner {
position: absolute;
left: 0;
right: 0;
margin: auto;
top: 50%;
width: 680px;
transform: translateY(-50%);
text-align: center;
transition: all 0.3s;
font-size: 12px;
line-height: 30px;
}
.game_intro__inner .begin {
text-align: center;
margin-top: 80px;
cursor: pointer;
transition: all 0.3s;
}
.game_intro__inner .begin:hover {
color: #76ece2;
}
.game_intro__inner .dialogue {
float: left;
width: 60%;
background: black;
color: white;
border-radius: 20px;
padding: 20px 31px;
position: relative;
}
.game_intro__inner p {
text-align: left;
clear: both;
}
.game_intro__inner span {
display: block;
color: #76ece2;
font-size: 9px;
text-align: left;
margin-bottom: -11px;
text-transform: uppercase;
}
.game_intro__inner .king {
float: right;
width: 140px !important;
}
.game_intro__inner.start {
transition: all 1s;
}
.game_intro__inner.start.gamestarted {
opacity: 0;
pointer-events: none;
}
.game_intro__inner .continue {
position: absolute;
z-index: 1;
cursor: pointer;
right: 20px;
font-size: 10px;
top: 175px;
transition: all 0.3s;
}
.game_intro__inner .continue:hover {
color: #76ece2;
}
.game_intro__inner.end {
opacity: 1;
pointer-events: all;
transition: all 1s 1s;
}
.game_intro__inner.end .continue {
opacity: 1;
transition: all 0.3s 6s;
}
.game_intro__inner.end.gamestarted {
opacity: 0;
}
.game_intro__inner.end.gamestarted .continue {
opacity: 0;
}
.game_intro__inner.gamestarted {
pointer-events: none;
}
.game_intro__inner img:nth-of-type(1) {
width: 400px;
-ms-interpolation-mode: nearest-neighbor;
image-rendering: -moz-crisp-edges;
image-rendering: pixelated;
}
.game_intro__inner img:nth-of-type(2) {
position: relative;
left: 0px;
}
.game_intro__inner img:nth-of-type(2) {
cursor: pointer;
margin-top: 40px;
}
.game_inner__tooltip {
width: 390px;
margin: 0 auto;
text-align: left;
position: absolute;
top: calc(50% + 240px);
left: 0;
right: 0;
margin: auto;
opacity: 0;
transition: all 0.3s;
}
.game_inner__tooltip.active {
opacity: 1;
}
.game_inner__tooltip .smash {
width: 100%;
text-align: center;
margin-top: 23px;
font-size: 9px;
}
.game_inner__tooltip .space {
width: 390px;
margin-top: 50px;
height: 50px;
background: white;
position: relative;
top: 0;
border-radius: 6px;
box-shadow: 0 10px #d6d6d6;
-webkit-animation: press2 0.1s infinite;
animation: press2 0.1s infinite;
}
@-webkit-keyframes press2 {
0% {
box-shadow: 0 10px #d6d6d6;
top: 0px;
}
100% {
box-shadow: 0 0px #d6d6d6;
top: 10px;
}
}
@keyframes press2 {
0% {
box-shadow: 0 10px #d6d6d6;
top: 0px;
}
100% {
box-shadow: 0 0px #d6d6d6;
top: 10px;
}
}
.game_inner__footer {
position: fixed;
left: 50px;
font-size: 7px;
z-index: 2;
bottom: 40px;
width: calc(100% - 100px);
}
.game_inner__footer .madeby {
position: relative;
top: 50px;
}
.game_inner__footer .resources {
float: right;
}
.game_inner__footer .resources div {
margin: 0 0 10px 0;
font-size: 12px;
}
.game_inner__footer .resources div img {
position: relative;
top: 3px;
margin-right: 8px;
}
.game_inner__footer a {
color: #d0295f;
text-decoration: none;
}
.game_inner__left {
text-align: center;
float: left;
position: relative;
width: calc(100%);
height: 100vh;
}
.game_inner__left .buttons {
float: right;
padding: 50px;
}
.game_inner__left .buttons img {
width: 32px;
float: left;
margin-left: 12px;
cursor: pointer;
}
.game_inner__left .buttons img.off {
opacity: 0.3;
}
.game_inner__left .logo {
padding: 50px;
float: left;
}
.game_inner__left .ui {
width: 100%;
}
.game_inner__left .ui_spaces {
font-size: 24px;
margin-bottom: 7px;
}
.game_inner__left .ui_progress {
width: 500px;
margin: 0 auto;
text-align: left;
position: absolute;
top: calc(50% - 300px);
left: 0;
right: 0;
margin: auto;
}
.game_inner__left .ui_progress__stage {
font-size: 9px;
margin-bottom: 11px;
}
.game_inner__left .ui_progress__bar {
width: 100%;
position: relative;
}
.game_inner__left .ui_progress__bar .inner {
background: url("https://assets.codepen.io/217233/ktkProgressInner.png");
height: 7px;
width: calc(100% - 6px);
background-size: 494px 7px;
position: absolute;
top: 10px;
z-index: 1;
left: 3px;
transition: all 0.4s;
max-width: 494px;
}
.game_inner__left .ui_progress__bar .outer {
background: url("https://assets.codepen.io/217233/ktkProgressOuter.png");
height: 12px;
width: 100%;
background-size: 500px 12px;
position: absolute;
top: 8px;
}
.game_inner__left .ui_progress__icons {
display: flex;
justify-content: space-between;
position: relative;
z-index: 1;
padding: 0 14px;
}
.game_inner__left .ui_progress__icons .icon {
flex-grow: 1;
text-align: center;
}
.game_inner__left .ui_progress__icons .icon_bg {
width: 28px;
height: 28px;
margin: auto;
background: url("https://assets.codepen.io/217233/ktkStageLocked.png");
}
.game_inner__left .ui_progress__icons .icon_bg.active:after {
width: 10px;
height: 10px;
content: "▲";
display: block;
position: relative;
top: 31px;
left: 9px;
font-size: 10px;
}
.game_inner__left .ui_progress__icons .icon_bg.complete {
background: url("https://assets.codepen.io/217233/ktkStageComplete.png");
}
.game_inner__left .ui_presses {
font-size: 12px;
opacity: 0.4;
}
.game_inner__left .center {
position: absolute;
left: 0;
right: 0;
margin: auto;
top: 50%;
transform: translateY(-50%);
width: 390px;
}
.game_inner__left .center .player_sprite,
.game_inner__left .center .enemy_sprite {
width: 150px;
height: 150px;
-webkit-animation: idle 0.5s steps(7, end) infinite;
animation: idle 0.5s steps(7, end) infinite;
transform: scale(5);
-ms-interpolation-mode: nearest-neighbor;
image-rendering: -moz-crisp-edges;
image-rendering: pixelated;
}
.game_inner__left .center .player_sprite.pressed,
.game_inner__left .center .enemy_sprite.pressed {
-webkit-animation: attack 0.15s steps(3, end);
animation: attack 0.15s steps(3, end);
}
.game_inner__left .center .characters {
width: 400px;
margin: 80px auto;
}
.game_inner__left .center .characters .stand {
width: 100%;
height: 100px;
background: #141627;
border-radius: 100%;
position: absolute;
bottom: -20px;
left: 9px;
}
.game_inner__left .center .characters .player {
z-index: 1;
position: relative;
left: 10px;
top: 60px;
transition: all 1s 0.3s;
}
.game_inner__left .center .characters .player.run {
left: 400px;
opacity: 0;
}
.game_inner__left .center .characters .player .stats {
position: absolute;
left: -110px;
text-align: left;
transform: translateY(4px);
font-size: 8px;
-webkit-animation: health 2s infinite;
animation: health 2s infinite;
}
.game_inner__left .center .characters .player .stats span {
font-size: 6px;
opacity: 0.75;
display: block;
padding-left: 24px;
padding-top: 4px;
}
.game_inner__left .center .characters .player .stats div {
margin-bottom: 10px;
}
.game_inner__left .center .characters .player .stats div img {
position: relative;
margin-right: 4px;
top: 3px;
}
.game_inner__left .center .characters .enemy {
position: relative;
top: -134px;
left: -40px;
transition: all 0.3s;
}
.game_inner__left .center .characters .enemy.run {
opacity: 0;
}
.game_inner__left .center .characters .enemy,
.game_inner__left .center .characters .player {
width: 50%;
float: left;
}
.game_inner__left .center .enemy {
width: 100px;
}
.game_inner__left .center .enemy_hit, .game_inner__left .center .enemy_gold, .game_inner__left .center .enemy_xp {
position: absolute;
left: 98px;
top: 40px;
z-index: 1;
opacity: 0;
}
.game_inner__left .center .enemy_hit.pressed, .game_inner__left .center .enemy_gold.pressed, .game_inner__left .center .enemy_xp.pressed {
-webkit-animation: hit 0.15s forwards;
animation: hit 0.15s forwards;
}
.game_inner__left .center .enemy_gold.killed {
-webkit-animation: hit 0.3s 0.1s forwards;
animation: hit 0.3s 0.1s forwards;
}
.game_inner__left .center .enemy_xp {
left: 0;
right: 0;
}
.game_inner__left .center .enemy_xp.killed {
-webkit-animation: hit 0.3s 0.12s forwards;
animation: hit 0.3s 0.12s forwards;
}
.game_inner__left .center .enemy_sprite {
background: url("https://assets.codepen.io/217233/ssEnemyIdle_1.png");
-webkit-animation: none;
animation: none;
width: 200px;
-webkit-animation: enemyIdle 0.5s steps(7, end) infinite;
animation: enemyIdle 0.5s steps(7, end) infinite;
transform: scaleX(-5) scaleY(5);
position: relative;
}
.game_inner__left .center .enemy_sprite.boss {
background: url("https://assets.codepen.io/217233/ktkTrostIdle.png");
-webkit-animation: bossIdle 1s steps(7, end) infinite;
animation: bossIdle 1s steps(7, end) infinite;
width: 160px;
top: 10px;
left: 40px;
height: 105px;
filter: hue-rotate(0deg) !important;
}
.game_inner__left .center .enemy_sprite.boss.pressed {
-webkit-animation: bossHit 0.15s steps(3, end);
animation: bossHit 0.15s steps(3, end);
}
.game_inner__left .center .enemy_sprite.boss.killed {
-webkit-animation: bossKilled 0.8s steps(5, end);
animation: bossKilled 0.8s steps(5, end);
}
.game_inner__left .center .enemy_sprite.pressed {
-webkit-animation: enemyHit 0.15s steps(3, end);
animation: enemyHit 0.15s steps(3, end);
}
.game_inner__left .center .enemy_sprite.killed {
-webkit-animation: enemyKilled 0.8s steps(5, end);
animation: enemyKilled 0.8s steps(5, end);
}
.game_inner__left .center .enemy_health {
width: 190px;
height: 12px;
position: absolute;
left: 0;
font-size: 13px;
right: 0;
line-height: 39px;
border-radius: 10px;
top: 10px;
padding-top: 0px;
margin: auto;
background: url(https://assets.codepen.io/217233/ktkEnemyHealth.png);
-webkit-animation: health 2s infinite;
animation: health 2s infinite;
}
.game_inner__left .center .enemy_health_stats {
font-size: 7px;
padding-top: 6px;
text-align: left;
}
.game_inner__left .center .enemy_health_stats .name {
float: left;
}
.game_inner__left .center .enemy_health_stats .level {
float: right;
}
.game_inner__left .center .enemy_health_inner {
position: absolute;
left: 4px;
top: 3px;
height: 5px;
border-radius: 10px;
transition: all 0.1s;
max-width: 182px;
background: url(https://assets.codepen.io/217233/ktkEnemyHealthInner.png);
}
.game_inner__left .spaceBar {
width: 390px;
margin-top: 50px;
height: 50px;
background: white;
position: relative;
top: 0;
border-radius: 6px;
box-shadow: 0 10px #d6d6d6;
-webkit-animation: press2 0.1s forwards;
animation: press2 0.1s forwards;
}
@-webkit-keyframes health {
0% {
top: 10px;
}
50% {
top: 13px;
}
100% {
top: 10px;
}
}
@keyframes health {
0% {
top: 10px;
}
50% {
top: 13px;
}
100% {
top: 10px;
}
}
@-webkit-keyframes idle {
0% {
background: url("https://assets.codepen.io/217233/ssIdle.png");
background-position: 0% 0;
}
100% {
background: url("https://assets.codepen.io/217233/ssIdle.png");
background-position: 100% 0;
}
}
@keyframes idle {
0% {
background: url("https://assets.codepen.io/217233/ssIdle.png");
background-position: 0% 0;
}
100% {
background: url("https://assets.codepen.io/217233/ssIdle.png");
background-position: 100% 0;
}
}
@-webkit-keyframes attack {
0% {
background: url("https://assets.codepen.io/217233/ssAttack1.png");
background-position: 0% 0;
}
100% {
background: url("https://assets.codepen.io/217233/ssAttack1.png");
background-position: 100% 0;
}
}
@keyframes attack {
0% {
background: url("https://assets.codepen.io/217233/ssAttack1.png");
background-position: 0% 0;
}
100% {
background: url("https://assets.codepen.io/217233/ssAttack1.png");
background-position: 100% 0;
}
}
@-webkit-keyframes enemyIdle {
0% {
background: url("https://assets.codepen.io/217233/ssEnemyIdle_1.png");
background-position: 0% 0;
}
100% {
background: url("https://assets.codepen.io/217233/ssEnemyIdle_1.png");
background-position: 100% 0;
}
}
@keyframes enemyIdle {
0% {
background: url("https://assets.codepen.io/217233/ssEnemyIdle_1.png");
background-position: 0% 0;
}
100% {
background: url("https://assets.codepen.io/217233/ssEnemyIdle_1.png");
background-position: 100% 0;
}
}
@-webkit-keyframes bossIdle {
0% {
background: url("https://assets.codepen.io/217233/ktkTrostIdle.png");
background-position: 0% 0;
}
100% {
background: url("https://assets.codepen.io/217233/ktkTrostIdle.png");
background-position: 100% 0;
}
}
@keyframes bossIdle {
0% {
background: url("https://assets.codepen.io/217233/ktkTrostIdle.png");
background-position: 0% 0;
}
100% {
background: url("https://assets.codepen.io/217233/ktkTrostIdle.png");
background-position: 100% 0;
}
}
@-webkit-keyframes bossHit {
0% {
background: url("https://assets.codepen.io/217233/ktkTrostHit.png");
background-position: 0% 0;
}
100% {
background: url("https://assets.codepen.io/217233/ktkTrostHit.png");
background-position: 100% 0;
}
}
@keyframes bossHit {
0% {
background: url("https://assets.codepen.io/217233/ktkTrostHit.png");
background-position: 0% 0;
}
100% {
background: url("https://assets.codepen.io/217233/ktkTrostHit.png");
background-position: 100% 0;
}
}
@-webkit-keyframes bossKilled {
0% {
background: url("https://assets.codepen.io/217233/ktkTrostKilled.png");
background-position: 0% 0;
}
100% {
background: url("https://assets.codepen.io/217233/ktkTrostKilled.png");
background-position: 100% 0;
}
}
@keyframes bossKilled {
0% {
background: url("https://assets.codepen.io/217233/ktkTrostKilled.png");
background-position: 0% 0;
}
100% {
background: url("https://assets.codepen.io/217233/ktkTrostKilled.png");
background-position: 100% 0;
}
}
@-webkit-keyframes enemyHit {
0% {
background: url("https://assets.codepen.io/217233/ssEnemyHit_1.png");
background-position: 0% 0;
}
100% {
background: url("https://assets.codepen.io/217233/ssEnemyHit_1.png");
background-position: 100% 0;
}
}
@keyframes enemyHit {
0% {
background: url("https://assets.codepen.io/217233/ssEnemyHit_1.png");
background-position: 0% 0;
}
100% {
background: url("https://assets.codepen.io/217233/ssEnemyHit_1.png");
background-position: 100% 0;
}
}
@-webkit-keyframes enemyKilled {
0% {
background: url("https://assets.codepen.io/217233/ssEnemyDeath_1.png");
background-position: 0% 0;
opacity: 1;
}
100% {
background: url("https://assets.codepen.io/217233/ssEnemyDeath_1.png");
background-position: 100% 0;
opacity: 0;
}
}
@keyframes enemyKilled {
0% {
background: url("https://assets.codepen.io/217233/ssEnemyDeath_1.png");
background-position: 0% 0;
opacity: 1;
}
100% {
background: url("https://assets.codepen.io/217233/ssEnemyDeath_1.png");
background-position: 100% 0;
opacity: 0;
}
}
@-webkit-keyframes hit {
0% {
top: 40px;
opacity: 0;
}
100% {
top: -30px;
opacity: 1;
}
}
@keyframes hit {
0% {
top: 40px;
opacity: 0;
}
100% {
top: -30px;
opacity: 1;
}
}
@-webkit-keyframes hit-1 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 387px;
bottom: 96px;
opacity: 0;
}
}
@keyframes hit-1 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 387px;
bottom: 96px;
opacity: 0;
}
}
@-webkit-keyframes hit-2 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 470px;
bottom: 81px;
opacity: 0;
}
}
@keyframes hit-2 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 470px;
bottom: 81px;
opacity: 0;
}
}
@-webkit-keyframes hit-3 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 114px;
bottom: 30px;
opacity: 0;
}
}
@keyframes hit-3 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 114px;
bottom: 30px;
opacity: 0;
}
}
@-webkit-keyframes hit-4 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 262px;
bottom: 36px;
opacity: 0;
}
}
@keyframes hit-4 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 262px;
bottom: 36px;
opacity: 0;
}
}
@-webkit-keyframes hit-5 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 109px;
bottom: 95px;
opacity: 0;
}
}
@keyframes hit-5 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 109px;
bottom: 95px;
opacity: 0;
}
}
@-webkit-keyframes hit-6 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 100px;
bottom: 68px;
opacity: 0;
}
}
@keyframes hit-6 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 100px;
bottom: 68px;
opacity: 0;
}
}
@-webkit-keyframes hit-7 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 265px;
bottom: 1px;
opacity: 0;
}
}
@keyframes hit-7 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 265px;
bottom: 1px;
opacity: 0;
}
}
@-webkit-keyframes hit-8 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 86px;
bottom: 45px;
opacity: 0;
}
}
@keyframes hit-8 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 86px;
bottom: 45px;
opacity: 0;
}
}
@-webkit-keyframes hit-9 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 313px;
bottom: 89px;
opacity: 0;
}
}
@keyframes hit-9 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 313px;
bottom: 89px;
opacity: 0;
}
}
@-webkit-keyframes hit-10 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 438px;
bottom: 46px;
opacity: 0;
}
}
@keyframes hit-10 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 438px;
bottom: 46px;
opacity: 0;
}
}
@-webkit-keyframes hit-11 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 232px;
bottom: 6px;
opacity: 0;
}
}
@keyframes hit-11 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 232px;
bottom: 6px;
opacity: 0;
}
}
@-webkit-keyframes hit-12 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 397px;
bottom: 61px;
opacity: 0;
}
}
@keyframes hit-12 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 397px;
bottom: 61px;
opacity: 0;
}
}
@-webkit-keyframes hit-13 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 345px;
bottom: 100px;
opacity: 0;
}
}
@keyframes hit-13 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 345px;
bottom: 100px;
opacity: 0;
}
}
@-webkit-keyframes hit-14 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 476px;
bottom: 34px;
opacity: 0;
}
}
@keyframes hit-14 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 476px;
bottom: 34px;
opacity: 0;
}
}
@-webkit-keyframes hit-15 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 460px;
bottom: 61px;
opacity: 0;
}
}
@keyframes hit-15 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 460px;
bottom: 61px;
opacity: 0;
}
}
@-webkit-keyframes hit-16 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 87px;
bottom: 47px;
opacity: 0;
}
}
@keyframes hit-16 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 87px;
bottom: 47px;
opacity: 0;
}
}
@-webkit-keyframes hit-17 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 381px;
bottom: 2px;
opacity: 0;
}
}
@keyframes hit-17 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 381px;
bottom: 2px;
opacity: 0;
}
}
@-webkit-keyframes hit-18 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 320px;
bottom: 20px;
opacity: 0;
}
}
@keyframes hit-18 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 320px;
bottom: 20px;
opacity: 0;
}
}
@-webkit-keyframes hit-19 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 169px;
bottom: 3px;
opacity: 0;
}
}
@keyframes hit-19 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 169px;
bottom: 3px;
opacity: 0;
}
}
@-webkit-keyframes hit-20 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 469px;
bottom: 87px;
opacity: 0;
}
}
@keyframes hit-20 {
0% {
left: 0px;
bottom: 0px;
opacity: 1;
}
60% {
opacity: 1;
}
100% {
left: 469px;
bottom: 87px;
opacity: 0;
}
}
.game_inner__left .spaceBar.pressed {
-webkit-animation: press 0.05s forwards;
animation: press 0.05s forwards;
}
.game_inner__right {
float: right;
position: fixed;
width: 720px;
background: #160917;
left: 0;
right: 0;
border-radius: 10px;
border: 2px solid white;
z-index: 999;
top: 50%;
box-shadow: 0 0 0 1160px #0a0209d1;
margin: auto;
transform: translateY(-50%);
}
.game_inner__right p {
text-align: left;
font-size: 10px;
padding: 26px;
}
.game_inner__right .xp {
padding: 0 26px;
font-size: 12px;
}
.game_inner__right .nextPhase {
background: #73256a;
width: calc(100% - 52px);
margin: 0 26px 26px 26px;
text-align: center;
font-size: 12px;
padding: 20px 0;
border-radius: 10px;
cursor: pointer;
box-shadow: 0 4px #3d074e;
}
.game_inner__right .upgrades {
padding: 24px;
}
.game_inner__right .upgrades h2 {
text-transform: capitalize;
margin-bottom: 12px;
font-weight: normal;
font-size: 14px;
}
.game_inner__right .upgrades_upgrade .upgrade {
border: 2px solid white;
padding: 12px;
border-radius: 6px;
opacity: 0.6;
transition: all 0.3s;
pointer-events: none;
position: relative;
margin-bottom: 6px;
font-size: 11px;
}
.game_inner__right .upgrades_upgrade .upgrade:hover {
background: #ffffff0f;
padding: 12px 12px 12px 20px;
}
.game_inner__right .upgrades_upgrade .upgrade.max {
background: black;
pointer-events: none;
}
.game_inner__right .upgrades_upgrade .upgrade.max:after {
content: "max";
display: block;
position: absolute;
left: 0;
right: 0;
text-align: center;
margin: auto;
top: 50%;
transform: translateY(-50%);
width: 100%;
text-transform: uppercase;
}
.game_inner__right .upgrades_upgrade .upgrade.max div {
opacity: 0.12;
}
.game_inner__right .upgrades_upgrade .upgrade.bought {
pointer-events: none !important;
background: green;
opacity: 0.2 !important;
}
.game_inner__right .upgrades_upgrade .upgrade .name {
font-size: 11px;
margin-bottom: 5px;
text-transform: uppercase;
}
.game_inner__right .upgrades_upgrade .upgrade .description {
font-size: 8px;
opacity: 0.5;
margin-bottom: 4px;
}
.game_inner__right .upgrades_upgrade .upgrade .cost {
font-size: 8px;
color: red;
transition: all 0.3s;
margin-bottom: 3px;
}
.game_inner__right .upgrades_upgrade .upgrade .level {
font-size: 8px;
position: absolute;
right: 12px;
bottom: 12px;
}
.game_inner__right .upgrades_upgrade .upgrade .effect {
font-size: 8px;
}
.game_inner__right .upgrades_upgrade .upgrade.available {
opacity: 1;
pointer-events: all;
cursor: pointer;
}
.game_inner__right .upgrades_upgrade .upgrade.available .cost {
color: green;
}
.timer {
width: 128px;
margin: 0 auto;
text-align: left;
position: absolute;
top: calc(50% - 400px);
left: 4px;
right: 0;
font-size: 14px;
margin: auto;
}
.timer_inner {
position: relative;
top: -40px;
text-align: center;
}
.timer_inner div {
display: inline-block;
width: 28px;
position: relative;
margin: 0 3px 0;
}
.timer_inner div:after {
display: block;
content: ":";
position: absolute;
right: -11px;
top: 50%;
transform: translateY(-50%);
}
.timer_inner .ms {
font-size: 9px;
opacity: 0.7;
width: 22px;
}
.timer_inner .ms:after {
display: none;
}
html源码
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="google-site-verification" content="i3bVXD3ywVilJt3b0Denbr2n41les3p8ciIldduw4X0" />
<title>海拥 | 杀死国王</title>
<link rel="icon" type="image/x-icon" href="http://haiyong.site/wp-content/uploads/2021/07/cropped-59255587-1-192x192.jpg"/>
<meta name="keywords" content="杀死国王" />
<meta name="description" content="杀死国王——游戏——海拥;立志打造一个拥有100个小游戏的摸鱼网站。Made By Haiyong,技术支持——海拥" />
<meta name="author" content="海拥(http://haiyong.site)" />
<meta name="copyright" content="海拥(http://haiyong.site)" />
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div :class="{'pressed': pressed}" id='app'>
<audio controls='' crossorigin='anonymous' style='display: none;'>
<source src='https://assets.codepen.io/217233/ktkBgAudio.mp3' type='audio/mp3'>
</audio>
<div class='game'>
<div :class="{'show': gameover}" class='game_lose'>
<div class='inner'>
<h1>你没时间了!</h1>
<p>特罗斯特国王获胜,刷新以重试。</p>
<p>
你可以
<a href='https://github.com/wanghao221/moyu/'>在 Github 上关注我</a>
获取更多好玩的游戏
</p>
</div>
</div>
<div :class="{'show': gamewin}" class='game_win'>
<div class='inner'>
<h1>你赢了!</h1>
<p>特罗斯特国王被杀,恭喜!</p>
<p>
你可以
<a href='https://github.com/wanghao221/moyu/'>在 Github 上关注我</a>
获取更多好玩的游戏
</p>
</div>
</div>
<div :class="{'gamestarted': gameStarted}" class='game_intro'>
<div :class="{'gamestarted': introClicked}" class='game_intro__inner start'>
<img src='https://assets.codepen.io/217233/ktkLogo.png'>
<br>
<p @click='introClicked = !introClicked, audioController.play("crushyou")' class='begin'>BEGIN GAME</p>
</div>
<div :class="{'gamestarted': !introClicked}" class='game_intro__inner end'>
<div class='dialogue'>
<span>特罗斯特王</span>
<p>哈哈哈,你真的以为你能打败我!? 我的人会粉碎你,小屁孩。</p>
<p @click='introClicked = !introClicked, startGame()' class='continue'>Continue 点击继续</p>
</div>
<img class='king' src='https://assets.codepen.io/217233/kingTrost.png'>
</div>
</div>
<div class='game_inner'>
<div :class="{'active': tooltip}" class='game_inner__tooltip'>
<div class='space'></div>
<div class='smash'>粉碎空格键!</div>
</div>
<div class='game_inner__footer'>
<div class='madeby'>
Made by
<a href='http://haiyong.site' target='_blank'>Hai Yong</a>
</div>
<div class='resources'>
<div class='ui_xp'>
<img src='https://assets.codepen.io/217233/ktkXpIxon.png'>
{{ xp }}xp
</div>
</div>
</div>
<div class='game_inner__left'>
<div class='buttons'>
<img :class="{'off': !audioController.sfxOn}" @click='audioController.sfxOn = !audioController.sfxOn' src='https://assets.codepen.io/217233/ktkSfxButton.png'>
<img :class="{'off': muteBg}" @click='toggleBg()' src='https://assets.codepen.io/217233/ktkBgButton.png'>
</div>
<div class='logo'>
<img src='https://assets.codepen.io/217233/ktkLogo.png'>
</div>
<div class='timer'>
<img src='https://assets.codepen.io/217233/ktkTimerBg.png'>
<div class='timer_inner'>
<div class='minutes'>
{{ minutes }}
</div>
<div class='seconds'>
{{ seconds }}
</div>
<div class='ms'>
{{ ms }}
</div>
</div>
</div>
<div class='ui'>
<div class='ui_progress'>
<div class='ui_progress__stage'>
STAGE {{ stage }}
</div>
<div class='ui_progress__bar'>
<div :style='{width: `${((500 / enemiesPerStage) * (enemiesDefeated + 1)) - ((500 / enemiesPerStage) / 2)}px`}' class='inner'></div>
<div class='outer'></div>
</div>
<div class='ui_progress__icons'>
<div :key='enemies' class='icon' v-for='(enemies, index) in enemiesPerStage'>
<div :class="{'complete': index < enemiesDefeated, 'active': index == enemiesDefeated}" class='icon_bg'></div>
</div>
</div>
</div>
</div>
<div class='center'>
<div class='characters'>
<div :class="{'run': stageComplete}" class='player'>
<div class='stats'>
<div class='ui_strength'>
<img src='https://assets.codepen.io/217233/ktkStrengthIcon.png'>
{{ strength }} STR
<br>
</div>
<div class='ui_intelligence'>
<img src='https://assets.codepen.io/217233/ktkKnowledgeIcon.png'>
{{ intelligence }} INT
</div>
<div class='ui_speed'>
<img src='https://assets.codepen.io/217233/ktkSpeedIcon.png'>
{{ speed }} SPD
</div>
</div>
<div :class="{'pressed': pressed}" class='player_sprite'></div>
</div>
<div :class="{'run': stageComplete}" class='enemy'>
<div :class="{'pressed': pressed, 'killed' : enemyKilled, 'boss' : boss}" :style='{filter: `hue-rotate(${80 * (stage - 1)}deg)`}' class='enemy_sprite'></div>
<div :class="{'pressed': pressed}" class='enemy_hit'>
{{ damage }}
</div>
<div :class="{'killed': enemyKilled}" class='enemy_xp'>
<img src='https://assets.codepen.io/217233/ktkXpIxon.png'>
{{ xpGained }}xp
</div>
<div class='enemy_health'>
<div class='enemy_health_stats'>
<div class='name'>
{{ enemy.name }}
</div>
<div class='level'>
HP: {{ enemy.health }}
</div>
</div>
<div :style='{width: `${100 * (enemy.health / enemy.initHealth)}%`}' class='enemy_health_inner'></div>
</div>
</div>
</div>
</div>
</div>
<div class='game_inner__right' v-if='shoppingPhase'>
<div class='timer'>
<img src='https://assets.codepen.io/217233/ktkTimerBg.png'>
<div class='timer_inner'>
<div class='minutes'>
{{ minutes }}
</div>
<div class='seconds'>
{{ seconds }}
</div>
<div class='ms'>
{{ ms }}
</div>
</div>
</div>
<p>将您的金币和经验用于升级</p>
<div class='xp'>
<img src='https://assets.codepen.io/217233/ktkXpIxon.png'>
{{ xp }}xp
</div>
<div class='upgrades'>
<div :key='upgrades.name' class='upgrades_upgrade' v-for='(upgrade, index) in upgrades'>
<h2>{{ index != 0 ? upgrade.type != upgrades[index - 1].type ? upgrade.type : '' : 'Skills' }}</h2>
<div :class="{'max' : upgrade.level > upgrade.maxLevel, 'available': upgrade.type == 'stat' ? xp >= upgrade.cost : gold >= upgrade.cost, 'bought': upgrade.bought}" @click='buy(index, upgrade.type, upgrade.stat);audioController.play("upgrade")' @mouseenter='audioController.play("hover")' class='upgrade'>
<div class='name'>{{ upgrade.names }}</div>
<div class='description'>{{ upgrade.descriptions }}</div>
<div class='cost'>
Cost: {{ upgrade.cost }} {{ upgrade.type == "stat" ? 'xp' : 'gold' }}
</div>
<div class='effect'>
+{{ upgrade.type == "stat" ? upgrade.increment : upgrade.damage }} {{ upgrade.metric }}
</div>
<div class='level' v-if="upgrade.type == 'stat'">
Level: {{ upgrade.level }}
</div>
</div>
</div>
</div>
<div @click='exitShoppingPhase' class='nextPhase'>下一关</div>
</div>
</div>
</div>
</div>
</body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.9/vue.min.js"></script>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?a9430a37066911650e26adadcc42798a";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<script src="js/script.js"></script>
</html>
由于代码太多了,在资源绑定下载吧。