Implement othello map editing
This commit is contained in:
		
							parent
							
								
									13b27b15d9
								
							
						
					
					
						commit
						59fbf693ed
					
				
					 2 changed files with 30 additions and 22 deletions
				
			
		| 
						 | 
					@ -69,6 +69,7 @@ export default class Othello {
 | 
				
			||||||
	 * 黒石の比率
 | 
						 * 黒石の比率
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public get blackP() {
 | 
						public get blackP() {
 | 
				
			||||||
 | 
							if (this.blackCount == 0 && this.whiteCount == 0) return 0;
 | 
				
			||||||
		return this.blackCount / (this.blackCount + this.whiteCount);
 | 
							return this.blackCount / (this.blackCount + this.whiteCount);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -76,6 +77,7 @@ export default class Othello {
 | 
				
			||||||
	 * 白石の比率
 | 
						 * 白石の比率
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public get whiteP() {
 | 
						public get whiteP() {
 | 
				
			||||||
 | 
							if (this.blackCount == 0 && this.whiteCount == 0) return 0;
 | 
				
			||||||
		return this.whiteCount / (this.blackCount + this.whiteCount);
 | 
							return this.whiteCount / (this.blackCount + this.whiteCount);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,6 +16,7 @@
 | 
				
			||||||
	<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" :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)"
 | 
				
			||||||
		>
 | 
							>
 | 
				
			||||||
			<template v-if="x == 'b'">%fa:circle%</template>
 | 
								<template v-if="x == 'b'">%fa:circle%</template>
 | 
				
			||||||
			<template v-if="x == 'w'">%fa:circle R%</template>
 | 
								<template v-if="x == 'w'">%fa:circle R%</template>
 | 
				
			||||||
| 
						 | 
					@ -23,11 +24,11 @@
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<div class="rules">
 | 
						<div class="rules">
 | 
				
			||||||
		<mk-switch v-model="game.settings.is_llotheo" @change="onIsLlotheoChange" text="石の少ない方が勝ち(ロセオ)"/>
 | 
							<mk-switch v-model="game.settings.is_llotheo" @change="updateSettings" text="石の少ない方が勝ち(ロセオ)"/>
 | 
				
			||||||
		<div>
 | 
							<div>
 | 
				
			||||||
			<el-radio v-model="game.settings.bw" label="random" @change="onBwChange">ランダム</el-radio>
 | 
								<el-radio v-model="game.settings.bw" label="random" @change="updateSettings">ランダム</el-radio>
 | 
				
			||||||
			<el-radio v-model="game.settings.bw" :label="1" @change="onBwChange">{{ game.user1.name }}が黒</el-radio>
 | 
								<el-radio v-model="game.settings.bw" :label="1" @change="updateSettings">{{ game.user1.name }}が黒</el-radio>
 | 
				
			||||||
			<el-radio v-model="game.settings.bw" :label="2" @change="onBwChange">{{ game.user2.name }}が黒</el-radio>
 | 
								<el-radio v-model="game.settings.bw" :label="2" @change="updateSettings">{{ game.user2.name }}が黒</el-radio>
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -114,34 +115,38 @@ export default Vue.extend({
 | 
				
			||||||
			this.$forceUpdate();
 | 
								this.$forceUpdate();
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							updateSettings() {
 | 
				
			||||||
 | 
								this.connection.send({
 | 
				
			||||||
 | 
									type: 'update-settings',
 | 
				
			||||||
 | 
									settings: this.game.settings
 | 
				
			||||||
 | 
								});
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		onUpdateSettings(settings) {
 | 
							onUpdateSettings(settings) {
 | 
				
			||||||
			this.game.settings = settings;
 | 
								this.game.settings = settings;
 | 
				
			||||||
			this.mapName = Object.entries(maps).find(x => x[1].data.join('') == this.game.settings.map.join(''))[1].name;
 | 
								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) {
 | 
							onMapChange(v) {
 | 
				
			||||||
			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.connection.send({
 | 
					 | 
				
			||||||
				type: 'update-settings',
 | 
					 | 
				
			||||||
				settings: this.game.settings
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
			this.$forceUpdate();
 | 
								this.$forceUpdate();
 | 
				
			||||||
 | 
								this.updateSettings();
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		onIsLlotheoChange(v) {
 | 
							onPixelClick(pos, pixel) {
 | 
				
			||||||
			this.connection.send({
 | 
								const x = pos % this.game.settings.map[0].length;
 | 
				
			||||||
				type: 'update-settings',
 | 
								const y = Math.floor(pos / this.game.settings.map[0].length);
 | 
				
			||||||
				settings: this.game.settings
 | 
								const newPixel =
 | 
				
			||||||
			});
 | 
									pixel == ' ' ? '-' :
 | 
				
			||||||
			this.$forceUpdate();
 | 
									pixel == '-' ? 'b' :
 | 
				
			||||||
		},
 | 
									pixel == 'b' ? 'w' :
 | 
				
			||||||
 | 
									' ';
 | 
				
			||||||
		onBwChange(v) {
 | 
								const line = this.game.settings.map[y].split('');
 | 
				
			||||||
			this.connection.send({
 | 
								line[x] = newPixel;
 | 
				
			||||||
				type: 'update-settings',
 | 
								this.$set(this.game.settings.map, y, line.join(''));
 | 
				
			||||||
				settings: this.game.settings
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
			this.$forceUpdate();
 | 
								this.$forceUpdate();
 | 
				
			||||||
 | 
								this.updateSettings();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
| 
						 | 
					@ -172,6 +177,7 @@ export default Vue.extend({
 | 
				
			||||||
			border solid 2px #ddd
 | 
								border solid 2px #ddd
 | 
				
			||||||
			border-radius 6px
 | 
								border-radius 6px
 | 
				
			||||||
			overflow hidden
 | 
								overflow hidden
 | 
				
			||||||
 | 
								cursor pointer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			*
 | 
								*
 | 
				
			||||||
				pointer-events none
 | 
									pointer-events none
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue