Refactor reversi engine (#2633)
* Refactor reversi engine * Add puttablePlaces
This commit is contained in:
		
							parent
							
								
									1cc183ecdb
								
							
						
					
					
						commit
						498094b3c7
					
				
					 1 changed files with 13 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
import { count } from "../../prelude/array";
 | 
			
		||||
import { count, countIf } from "../../prelude/array";
 | 
			
		||||
 | 
			
		||||
// MISSKEY REVERSI ENGINE
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -90,8 +90,8 @@ export default class Reversi {
 | 
			
		|||
		//#endregion
 | 
			
		||||
 | 
			
		||||
		// ゲームが始まった時点で片方の色の石しかないか、始まった時点で勝敗が決定するようなマップの場合がある
 | 
			
		||||
		if (this.canPutSomewhere(BLACK).length == 0) {
 | 
			
		||||
			if (this.canPutSomewhere(WHITE).length == 0) {
 | 
			
		||||
		if (!this.canPutSomewhere(BLACK)) {
 | 
			
		||||
			if (!this.canPutSomewhere(WHITE)) {
 | 
			
		||||
				this.turn = null;
 | 
			
		||||
			} else {
 | 
			
		||||
				this.turn = WHITE;
 | 
			
		||||
| 
						 | 
				
			
			@ -172,9 +172,9 @@ export default class Reversi {
 | 
			
		|||
 | 
			
		||||
	private calcTurn() {
 | 
			
		||||
		// ターン計算
 | 
			
		||||
		if (this.canPutSomewhere(!this.prevColor).length > 0) {
 | 
			
		||||
		if (this.canPutSomewhere(!this.prevColor)) {
 | 
			
		||||
			this.turn = !this.prevColor;
 | 
			
		||||
		} else if (this.canPutSomewhere(this.prevColor).length > 0) {
 | 
			
		||||
		} else if (this.canPutSomewhere(this.prevColor)) {
 | 
			
		||||
			this.turn = this.prevColor;
 | 
			
		||||
		} else {
 | 
			
		||||
			this.turn = null;
 | 
			
		||||
| 
						 | 
				
			
			@ -206,10 +206,17 @@ export default class Reversi {
 | 
			
		|||
	/**
 | 
			
		||||
	 * 打つことができる場所を取得します
 | 
			
		||||
	 */
 | 
			
		||||
	public canPutSomewhere(color: Color): number[] {
 | 
			
		||||
	public puttablePlaces(color: Color): number[] {
 | 
			
		||||
		return Array.from(this.board.keys()).filter(i => this.canPut(color, i));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 打つことができる場所があるかどうかを取得します
 | 
			
		||||
	 */
 | 
			
		||||
	public canPutSomewhere(color: Color): boolean {
 | 
			
		||||
		return this.puttablePlaces(color).length > 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 指定のマスに石を打つことができるかどうかを取得します
 | 
			
		||||
	 * @param color 自分の色
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue