js实现可自己编写新机器人的机器人大战游戏代码
代码语言:html
所属分类:游戏
代码描述:js实现可自己编写新机器人的机器人大战游戏代码,内置了5款机器人,你可以直接写新的机器人加入对战,玩法:两个机器人进入竞技场。获胜的机器人将获得荣耀和财富。 移动 每个机器人都有一个“大脑”类,可以被赋予逻辑,以便在游戏每次更新时做出决定。(默认更新速率为 100 毫秒。) 机器人每次更新可以做出的可能决定有: “左” “右” “上” “下” “射击” 能力 此外,你创建的大脑将有 5 个可能的点数分配给机器人。它们将在以下能力之间分配: 护甲 扫描距离 子弹威力 你可以给每个能力任意数量的点
代码标签: js 自己 编写 新 机器人 机器人 大战 游戏 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/prism.css"> <style> body { background: #222; } #arena { border: 1px solid rgba(255, 255, 255, 0.2); height: auto; width: calc(100% - 2px); max-width: 500px; margin-top: 3em; } button { cursor: pointer; font-family: "Roboto", sans-serif; } .container { left: 50%; position: absolute; transform: translate(-50%); width: 100vw; max-width: 500px; } #log { height: 80px; width: 100%; /* max-width: 500px; */ background: #ccc; border-radius: 10px; font-family: monospace; overflow-y: auto; border: 2px dashed #666; width: calc(100% - 6px); } #log > span { display: block; padding: 5px; border: 1px solid #111; border-radius: 10px; box-sizing: border-box; color: #333; } .shield, .bandolier { transition: stroke-dasharray 200ms; } .bot, .shield, .scan, .bandolier { transition: 100ms; } .startBtn:hover, .endBtn:hover { opacity: 0.7; } .startBtn, .endBtn { border-radius: 5px; display: inline-block; background: none; padding: 5px; width: 100px; font-weight: bold; font-size: 1.8em; color: #f5f5f5; font-family: monospace; } .startBtn { float: right; border: 2px solid forestgreen; } .endBtn { float: left; border: 2px solid firebrick; } .matchupContainer { position: relative; display: inline-block; width: 100%; margin-bottom: 5px; } .versus { color: #f5f5f5; font-family: monospace; position: absolute; left: 50%; transform: translate(-50%); padding-top: 6px; } .s1 { float: left; } .s2 { float: right; } .selectedFighter { cursor: pointer; position: relative; border: 1px solid #111; border-radius: 10px; width: 200px; max-width: 45%; padding: 4px; font-weight: bold; background: goldenrod; color: #fff; /* font-family: "Roboto", sans-serif; */ font-family: monospace; font-size: 1.3em; text-shadow: 0.5px 0px 2px #000; padding-left: 8px; padding-right: 8px; } .selectedFighter > option { cursor: pointer; text-shadow: 0.5px 0px 2px #000; } option { text-align: center; text-shadow: 0.5px 0px 2px #000; cursor: pointer; } .templateLoader { background-color: rgba(155, 155, 155, 0.8); padding: 5px; font-size: 80%; width: 172px; position: relative; left: 50%; border-radius: 0 0 5px 5px; transform: translate(-50%); } /* menu stuff */ .menuArea { position: fixed; top: 0%; right: 0%; z-index: 999; height: 100%; width: 200px; border-left: 3px solid rgb(50, 50, 50); border-right: 3px solid rgb(50, 50, 50); box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; display: flex; flex-wrap: wrap; flex-direction: column; background: rgba(60, 60, 60, 0.8); opacity: 1; transition: 200ms; overflow-y: auto; overflow-x: hidden; box-shadow: -3px 0px 5px rgba(25, 25, 25, 0.5); color: #fff; font-family: "Roboto", sans-serif; } .btnContainer { margin-top: 70px; margin-bottom: 20px; text-align: center; } .btnContainer > button { flex: 1; width: 100%; height: 48px; cursor: pointer; background: rgb(100, 100, 100); color: #fff; font-size: 1.05em; font-family: monospace; } .btnContainer > button:hover { opacity: 0.8; } .leftPlayerBtn { height: 3em; width: 3em; position: fixed; left: 10px; top: 10px; background: rgba(0, 0, 0, 0.8); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' stroke='%23fff' stroke-width='2' fill='none' stroke-linecap='round' stroke-linejoin='round' class='css-i6dzq1'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: center; border: 2px solid rgb(150, 150, 150); border-radius: 50%; z-index: 9999; box-shadow: 2px 0px 3px #000; cursor: pointer; transition: 100ms; } .rightPlayerBtn { height: 3em; width: 3em; position: fixed; right: 10px; top: 10px; background: #000; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 80 80' width='24px' height='24px'%3E%3Cpath d='M 35 38 L 28 43 L 24 38 L 16 42 L 8 39 L 6 31 L 13 31 L 18 24 L 5 24 L 11 16 L 14 20 L 18 11 L 32 5 L 20 18 L 31 12 L 38 5 L 50 5 L 39 12 L 35 22 L 30 18 L 23 23 L 17 35 L 26 32 L 26 28 L 30 24 L 31 34 L 38 31 L 35 27 L 42 23 L 43 33 L 48 31 L 44 17 L 47 13 L 51 25 L 58 20 L 50 10 L 59 9 L 59 15 L 63 12 L 63 18 L 69 17 L 74 26 L 67 21 L 58 25 L 53 34 L 42 38 L 42 42 L 27 48 L 32 51 L 39 48 L 48 46 L 51 41 L 56 42 L 56 37 L 62 35 L 61 29 L 68 29 L 73 32 L 72 39 L 74 45 L 72 55 L 67 52 L 68 46 L 67 36 L 63 40 L 57 47 L 48 53 L 39 53 L 35 57 L 44 59 L 56 54 L 62 48 L 63 56 L 67 57 L 61 60 L 54 59 L 51 64 L 56 64 L 53 69 L 58 71 L 55 76' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: center; border: 2px solid rgb(150, 150, 150); border-radius: 50%; z-index: 9999; box-shadow: 2px 0px 3px #000; cursor: pointer; transition: 100ms; } .rightPlayerBtn:hover, .infoBtn:hover { opacity: 0.8; } .rightPlayerBtn:active, .infoBtn:active { box-shadow: 1px 0px 1px #000; } .closed { height: 0%; overflow: hidden; } .closed > * { display: none; } .customBrain { max-width: 180px; min-width: 180px; width: 180px; min-height: 200px; } /* modal stuff */ dialog { z-index: 1000; background: #ccc; box-shadow: 0px 3px 8px #000; border-radius: 8px; border: none; padding-top: 35px; position: relative; font-family: "Roboto", sans-serif; min-width: 350px; max-width: 500px; width: 80%; min-height: 500px; max-height: 700px; height: 80%; overflow: hidden; } .gameInfo { max-height: 100%; width: 100%; overflow-y: auto; } .gameInfo > h3 { text-align: center; } .closeDialog { position: absolute; font-size: 2em; /* font-weight: 900; */ top: 0px; right: 0px; border: none; background: none; cursor: pointer; height: 30px; width: 30px; color: #fff; font-family: monospace; } .closeDialog:hover { color: rgba(0, 0, 0, 0.5); } .header { text-align: center; margin-top: -30px; } #open { margin-top: 12px; width: 100px; border: 2px solid rgba(0,255,255,0.5); background: none; color: #0ff; padding: 10px; font-family: "Roboto", sans-serif; border-radius: 20px; cursor: pointer; position: absolute; } /* width */ ::-webkit-scrollbar { width: 8px; } /* Track */ ::-webkit-scrollbar-track { box-shadow: inset 0 0 3px grey; border-radius: 10px; } /* Handle */ .menuArea::-webkit-scrollbar-thumb { background: #666; border-radius: 10px; } /* Handle on hover */ .menuArea::-webkit-scrollbar-thumb:hover { background: #888; } /* Handle */ .gameInfo::-webkit-scrollbar-thumb { background: #666; border-radius: 10px; } /* Handle on hover */ .gameInfo::-webkit-scrollbar-thumb:hover { background: #888; } /* Handle */ ::-webkit-scrollbar-thumb { background: #666; border-radius: 10px; } /* Handle on hover */ ::-webkit-scrollbar-thumb:hover { background: #888; } .playerLink { word-wrap: break-word; } .newPlayer { border: 2px dotted #fff; border-radius: 5px; padding: 5px; } </style> </head> <body translate="no"> <button title="Settings" class="rightPlayerBtn"></button> <div class="menuArea closed"> <button id="open" title="How the game is played">How to Play</button> <dialog> <h3 class="header">How to Play</h3> <button type="button" class="closeDialog" title="Close">x</button> <div class="gameInfo">Just figure it out... Duh 🙄 <br /> <br /> No, but for real, 2 bots enter. 1 bot leaves victorious, shrouded in glory and riches. <br /> <br /> <hr /> <h3>Moves</h3> Each bot will have a Brain class that can be given logic to make a decision every time the game updates. <br /> <small>(The default update rate is 100ms.)</small> <br /> <br /> The possible decisions a bot can make each update are <ul> <li><b>"left"</b></li> <li><b>"right"</b></li> <li><b>"up"</b></li> <li><b>"down"</b></li> <li><b>"shoot"</b></li> </ul> <br /> <hr /> <h3>Powers</h3> Additionally, your created brain will have <i>5</i> possible points to assign to the bot. They will be split between <ul> <li><svg viewBox="0 0 24 24" width="16" height="16" stroke="green" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"> <path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path> </svg> Armor</li> <li><svg viewBox="0 0 24 24" width="16" height="16" stroke="steelblue" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"> <circle cx="12" cy="12" r="2"></circle> <path d="M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14"></path> </svg> Scan Distance</li> <li><svg viewBox="0 0 24 24" width="16" height="16" stroke="firebrick" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"> <circle cx="12" cy="12" r="10"></circle> <circle cx="12" cy="12" r="6"></circle> <circle cx="12" cy="12" r="2"></circle> </svg> Bullet Power</li> </ul> You can give any number of points (up to 5) to each power, but you only have 5 points to give. <br /> <small>**note**: If you go over 5 total points... <br /> (ex. {armor: 3, s.........完整代码请登录后点击上方下载按钮下载查看
网友评论0