Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Stewan Lheureux
Échecs féeriques
Commits
2d306101
Commit
2d306101
authored
Apr 07, 2020
by
Stewan Lheureux
Browse files
Mise à jour de move validation
parent
74744c54
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/main/ts/move-validation.ts
View file @
2d306101
...
...
@@ -2,6 +2,14 @@ import { Chessboard, isEmpty, Square, squareAtPosition } from "./chessboard";
import
{
Move
}
from
"
./movements
"
;
import
{
equals
,
left
,
right
,
top
,
bottom
}
from
"
./position
"
;
// Fonction de validation des moves
function
isValidEat
(
board
:
Chessboard
,
move
:
Move
):
boolean
{
let
start
:
Square
=
squareAtPosition
(
board
,
move
.
from
!
);
let
destination
:
Square
=
squareAtPosition
(
board
,
move
.
to
!
);
return
(
start
.
piece
!
.
isWhite
!==
destination
.
piece
!
.
isWhite
||
!
start
.
piece
!
.
isWhite
!==
!
destination
.
piece
!
.
isWhite
)
}
/**
* Checks whether a Black Pawn can perform a given move.
* A pawn can move forward to the unoccupied square immediately in front of
...
...
@@ -71,8 +79,17 @@ export function whitePawnMove(board: Chessboard, move: Move): boolean {
* @param move
*/
export
function
kingMove
(
board
:
Chessboard
,
move
:
Move
):
boolean
{
// #TODO: Implement this function
return
true
;
// Mouvement normal & mangeage de pièce
if
(
equals
(
move
.
to
!
,
bottom
(
move
.
from
!
))
||
equals
(
move
.
to
!
,
right
(
move
.
from
!
))
||
equals
(
move
.
to
!
,
top
(
move
.
from
!
))
||
equals
(
move
.
to
!
,
left
(
move
.
from
!
))
||
equals
(
move
.
to
!
,
left
(
top
(
move
.
from
!
)))
||
equals
(
move
.
to
!
,
right
(
top
(
move
.
from
!
)))
||
equals
(
move
.
to
!
,
left
(
bottom
(
move
.
from
!
)))
||
equals
(
move
.
to
!
,
right
(
bottom
(
move
.
from
!
))))
{
let
destination
:
Square
=
squareAtPosition
(
board
,
move
.
to
!
);
return
(
destination
.
isEmpty
||
isValidEat
(
board
,
move
))
}
return
false
;
}
/**
...
...
@@ -84,8 +101,9 @@ export function kingMove(board: Chessboard, move: Move): boolean {
* @param move
*/
export
function
queenMove
(
board
:
Chessboard
,
move
:
Move
):
boolean
{
// #TODO: Implement this function
return
true
;
return
false
;
}
/**
...
...
@@ -101,10 +119,65 @@ export function queenMove(board: Chessboard, move: Move): boolean {
* @param move
*/
export
function
empressMove
(
board
:
Chessboard
,
move
:
Move
):
boolean
{
// #TODO: Implement this function
return
true
;
/* Comme la Tour mais avec en plus les mouvements du chevalier */
/*
// Mouvements du Chevalier
// Mouvement vers le bas
if (equals(move.to!, left(bottom(bottom(move.from!)))) || equals(move.to!, right(bottom(bottom(move.from!))))) {
let destination: Square = squareAtPosition(board, move.to!);
return (destination.isEmpty || isValidEat(board,move))
}
// Mouvement vers le haut
if (equals(move.to!, left(top(top(move.from!)))) || equals(move.to!, right(top(top(move.from!))))) {
let destination: Square = squareAtPosition(board, move.to!);
return (destination.isEmpty || isValidEat(board,move))
}
// Mouvement vers la gauche
if (equals(move.to!, bottom(left(left(move.from!)))) || equals(move.to!, top(left(left(move.from!))))) {
let destination: Square = squareAtPosition(board, move.to!);
return (destination.isEmpty || isValidEat(board,move))
}
// Mouvement vers la droite
if (equals(move.to!, bottom(right(right(move.from!)))) || equals(move.to!, top(right(right(move.from!))))) {
let destination: Square = squareAtPosition(board, move.to!);
return (destination.isEmpty || isValidEat(board,move))
}
*/
// Mouvements de la Tour haut et bas
if
(
move
.
from
!
.
file
==
move
.
to
!
.
file
)
{
// Le déplacement se fait-il sur la même colonne ?
let
moveRange
=
Math
.
abs
(
move
.
from
!
.
file
-
move
.
to
!
.
file
!
);
// combien de cases on veut traverser ?
let
moveFromTop
=
move
.
from
!
;
for
(
let
i
=
1
;
i
<=
moveRange
;
i
++
)
{
// Si on va en haut
if
(
move
.
from
!
.
file
!-
move
.
to
!
.
file
!
<
0
)
{
if
(
equals
(
move
.
to
!
,
top
(
move
.
from
!
)))
{
let
destination
:
Square
=
squareAtPosition
(
board
,
move
.
to
!
);
return
(
destination
.
isEmpty
||
isValidEat
(
board
,
move
));
}
else
{
let
destination
:
Square
=
squareAtPosition
(
board
,
top
(
moveFromTop
));
if
(
!
destination
.
isEmpty
)
{
return
false
;
}
}
moveFromTop
=
top
(
moveFromTop
);
}
}
}
return
false
;
}
/**
* Checks whether a Princess can perform a given move.
* A princess can move any number of squares diagonally,
...
...
@@ -134,6 +207,35 @@ export function princessMove(board: Chessboard, move: Move): boolean {
* @param move
*/
export
function
camelMove
(
board
:
Chessboard
,
move
:
Move
):
boolean
{
// #TODO: Implement this function
return
true
;
}
\ No newline at end of file
/* Comme Chevalier mais avec une case de plus */
// Mouvement vers le bas
if
(
equals
(
move
.
to
!
,
left
(
bottom
(
bottom
(
bottom
(
move
.
from
!
)))))
||
equals
(
move
.
to
!
,
right
(
bottom
(
bottom
(
bottom
(
move
.
from
!
))))))
{
let
destination
:
Square
=
squareAtPosition
(
board
,
move
.
to
!
);
return
(
destination
.
isEmpty
||
isValidEat
(
board
,
move
))
}
// Mouvement vers le haut
if
(
equals
(
move
.
to
!
,
left
(
top
(
top
(
top
(
move
.
from
!
)))))
||
equals
(
move
.
to
!
,
right
(
top
(
top
(
top
(
move
.
from
!
))))))
{
let
destination
:
Square
=
squareAtPosition
(
board
,
move
.
to
!
);
return
(
destination
.
isEmpty
||
isValidEat
(
board
,
move
))
}
// Mouvement vers la gauche
if
(
equals
(
move
.
to
!
,
bottom
(
left
(
left
(
left
(
move
.
from
!
)))))
||
equals
(
move
.
to
!
,
top
(
left
(
left
(
left
(
move
.
from
!
))))))
{
let
destination
:
Square
=
squareAtPosition
(
board
,
move
.
to
!
);
return
(
destination
.
isEmpty
||
isValidEat
(
board
,
move
))
}
// Mouvement vers la droite
if
(
equals
(
move
.
to
!
,
bottom
(
right
(
right
(
right
(
move
.
from
!
)))))
||
equals
(
move
.
to
!
,
top
(
right
(
right
(
right
(
move
.
from
!
))))))
{
let
destination
:
Square
=
squareAtPosition
(
board
,
move
.
to
!
);
return
(
destination
.
isEmpty
||
isValidEat
(
board
,
move
))
}
return
false
;
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment