This commit is contained in:
parent
9010e73d12
commit
c3a2330569
|
@ -3,6 +3,7 @@ import * as redis from 'redis';
|
||||||
import Game, { pack } from '../models/othello-game';
|
import Game, { pack } from '../models/othello-game';
|
||||||
import { publishOthelloGameStream } from '../event';
|
import { publishOthelloGameStream } from '../event';
|
||||||
import Othello from '../../common/othello/core';
|
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 {
|
export default function(request: websocket.request, connection: websocket.connection, subscriber: redis.RedisClient, user: any): void {
|
||||||
const gameId = request.resourceURL.query.game;
|
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;
|
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 }, {
|
await Game.update({ _id: gameId }, {
|
||||||
$set: {
|
$set: {
|
||||||
started_at: new Date(),
|
started_at: new Date(),
|
||||||
is_started: true,
|
is_started: true,
|
||||||
black: bw
|
black: bw,
|
||||||
|
'settings.map': map
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
//#region 盤面に最初から石がないなどして始まった瞬間に勝敗が決定する場合があるのでその処理
|
//#region 盤面に最初から石がないなどして始まった瞬間に勝敗が決定する場合があるのでその処理
|
||||||
const o = new Othello(freshGame.settings.map, {
|
const o = new Othello(map, {
|
||||||
isLlotheo: freshGame.settings.is_llotheo
|
isLlotheo: freshGame.settings.is_llotheo
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<p>ゲームの設定</p>
|
<p>ゲームの設定</p>
|
||||||
|
|
||||||
<el-select class="map" v-model="mapName" placeholder="マップを選択" @change="onMapChange">
|
<el-select class="map" v-model="mapName" placeholder="マップを選択" @change="onMapChange">
|
||||||
|
<el-option label="ランダム" :value="null"/>
|
||||||
<el-option-group v-for="c in mapCategories" :key="c" :label="c">
|
<el-option-group v-for="c in mapCategories" :key="c" :label="c">
|
||||||
<el-option v-for="m in maps" v-if="m.category == c" :key="m.name" :label="m.name" :value="m.name">
|
<el-option v-for="m in maps" v-if="m.category == c" :key="m.name" :label="m.name" :value="m.name">
|
||||||
<span style="float: left">{{ m.name }}</span>
|
<span style="float: left">{{ m.name }}</span>
|
||||||
|
@ -13,7 +14,7 @@
|
||||||
</el-option-group>
|
</el-option-group>
|
||||||
</el-select>
|
</el-select>
|
||||||
|
|
||||||
<div class="board" :style="{ 'grid-template-rows': `repeat(${ game.settings.map.length }, 1fr)`, 'grid-template-columns': `repeat(${ game.settings.map[0].length }, 1fr)` }">
|
<div class="board" v-if="game.settings.map != null" :style="{ 'grid-template-rows': `repeat(${ game.settings.map.length }, 1fr)`, 'grid-template-columns': `repeat(${ game.settings.map[0].length }, 1fr)` }">
|
||||||
<div v-for="(x, i) in game.settings.map.join('')"
|
<div v-for="(x, i) in game.settings.map.join('')"
|
||||||
:class="{ none: x == ' ' }"
|
:class="{ none: x == ' ' }"
|
||||||
@click="onPixelClick(i, x)"
|
@click="onPixelClick(i, x)"
|
||||||
|
@ -124,12 +125,20 @@ export default Vue.extend({
|
||||||
|
|
||||||
onUpdateSettings(settings) {
|
onUpdateSettings(settings) {
|
||||||
this.game.settings = settings;
|
this.game.settings = settings;
|
||||||
|
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(''));
|
const foundMap = Object.entries(maps).find(x => x[1].data.join('') == this.game.settings.map.join(''));
|
||||||
this.mapName = foundMap ? foundMap[1].name : '-Custom-';
|
this.mapName = foundMap ? foundMap[1].name : '-Custom-';
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
onMapChange(v) {
|
onMapChange(v) {
|
||||||
|
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.game.settings.map = Object.entries(maps).find(x => x[1].name == v)[1].data;
|
||||||
|
}
|
||||||
this.$forceUpdate();
|
this.$forceUpdate();
|
||||||
this.updateSettings();
|
this.updateSettings();
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue