diff --git a/src/api/stream/othello-game.ts b/src/api/stream/othello-game.ts index 9ca4864a5..cc936805b 100644 --- a/src/api/stream/othello-game.ts +++ b/src/api/stream/othello-game.ts @@ -3,6 +3,7 @@ import * as redis from 'redis'; import Game, { pack } from '../models/othello-game'; import { publishOthelloGameStream } from '../event'; import Othello from '../../common/othello/core'; +import * as maps from '../../common/othello/maps'; export default function(request: websocket.request, connection: websocket.connection, subscriber: redis.RedisClient, user: any): void { const gameId = request.resourceURL.query.game; @@ -105,16 +106,25 @@ export default function(request: websocket.request, connection: websocket.connec bw = freshGame.settings.bw as number; } + function getRandomMap() { + const mapCount = Object.entries(maps).length; + const rnd = Math.floor(Math.random() * mapCount); + return Object.entries(maps).find((x, i) => i == rnd)[1].data; + } + + const map = freshGame.settings.map != null ? freshGame.settings.map : getRandomMap(); + await Game.update({ _id: gameId }, { $set: { started_at: new Date(), is_started: true, - black: bw + black: bw, + 'settings.map': map } }); //#region 盤面に最初から石がないなどして始まった瞬間に勝敗が決定する場合があるのでその処理 - const o = new Othello(freshGame.settings.map, { + const o = new Othello(map, { isLlotheo: freshGame.settings.is_llotheo }); diff --git a/src/web/app/common/views/components/othello.room.vue b/src/web/app/common/views/components/othello.room.vue index 6c8ce1653..745074b17 100644 --- a/src/web/app/common/views/components/othello.room.vue +++ b/src/web/app/common/views/components/othello.room.vue @@ -5,6 +5,7 @@

ゲームの設定

+ {{ m.name }} @@ -13,7 +14,7 @@ -
+
x[1].data.join('') == this.game.settings.map.join('')); - this.mapName = foundMap ? foundMap[1].name : '-Custom-'; + if (this.game.settings.map == null) { + this.mapName = null; + } else { + const foundMap = Object.entries(maps).find(x => x[1].data.join('') == this.game.settings.map.join('')); + this.mapName = foundMap ? foundMap[1].name : '-Custom-'; + } }, onMapChange(v) { - this.game.settings.map = Object.entries(maps).find(x => x[1].name == v)[1].data; + if (v == null) { + this.game.settings.map = null; + } else { + this.game.settings.map = Object.entries(maps).find(x => x[1].name == v)[1].data; + } this.$forceUpdate(); this.updateSettings(); },