예제 #1
0
파일: knight.go 프로젝트: gnarlyskier/chess
func (t *knight) GetMoves(curPos core.Position, b *Board) []core.Position {
	pos := []core.Position{
		curPos.Add(core.Offset{1, 2}),
		curPos.Add(core.Offset{2, 1}),
		curPos.Add(core.Offset{1, -2}),
		curPos.Add(core.Offset{2, -1}),
		curPos.Add(core.Offset{-1, 2}),
		curPos.Add(core.Offset{-2, 1}),
		curPos.Add(core.Offset{-1, -2}),
		curPos.Add(core.Offset{-2, -1}),
	}
	return b.trimInvalidPos(pos, t.GetPlayer())
}
예제 #2
0
파일: pawn.go 프로젝트: gnarlyskier/chess
func (t *pawn) GetMoves(curPos core.Position, b *Board) []core.Position {
	pos := []core.Position{}
	// forward move
	forward := curPos.Add(core.Offset{0, t.GetPlayer().ForwardDir()})
	if b.OnBoard(forward) && b.GetPos(forward) == nil {
		pos = append(pos, forward)
	}
	// first move
	if !t.HasMoved() {
		forward2 := forward.Add(core.Offset{0, t.GetPlayer().ForwardDir()})
		if b.OnBoard(forward2) && b.GetPos(forward) == nil && b.GetPos(forward2) == nil {
			pos = append(pos, forward2)
		}
	}
	// captures
	cap1 := curPos.Add(core.Offset{1, t.GetPlayer().ForwardDir()})
	if b.isCapture(cap1, t.GetPlayer()) {
		pos = append(pos, cap1)
	}
	cap2 := curPos.Add(core.Offset{-1, t.GetPlayer().ForwardDir()})
	if b.isCapture(cap2, t.GetPlayer()) {
		pos = append(pos, cap2)
	}
	return pos
}
예제 #3
0
파일: king.go 프로젝트: gnarlyskier/chess
func (t *king) GetMoves(curPos core.Position, b *Board) []core.Position {
	pos := []core.Position{
		curPos.Add(core.Offset{0, 1}),
		curPos.Add(core.Offset{1, 1}),
		curPos.Add(core.Offset{-1, 1}),
		curPos.Add(core.Offset{0, -1}),
		curPos.Add(core.Offset{1, -1}),
		curPos.Add(core.Offset{-1, -1}),
		curPos.Add(core.Offset{1, 0}),
		curPos.Add(core.Offset{-1, 0}),
	}
	return b.trimInvalidPos(pos, t.GetPlayer())
}