Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % main.erl
- -module(main).
- -compile([export_all]).
- %
- % w = 119
- % b = 98
- % . = 46
- deletePawn(Pos, Board) ->
- {List1,End} = lists:split(Pos, Board),
- Start = lists:droplast(List1),
- Start++[46]++End.
- movePawn(Src, Dest, Board) ->
- Pawn = lists:nth(Src, Board),
- TmpBoard = deletePawn(Src, Board),
- {List1,End} = lists:split(Dest, TmpBoard),
- Start = lists:droplast(List1),
- Start++[Pawn]++End.
- righMoveWhite(Src, Dest, Board) ->
- Left = lists:nth(Src+7, Board),
- Right = lists:nth(Src+9, Board),
- LeftHit = lists:nth(Src+14, Board),
- RightHit = lists:nth(Src+18, Board),
- if Src > Dest -> false;
- Src+7 == Dest, Left == 46, (Dest div 8 - Src div 8) == 1, Src < 57 -> true;
- Src+9 == Dest, Right == 46, (Dest div 8 - Src div 8) == 1, Src < 57 -> true;
- Src+14 == Dest, Left /= 46, LeftHit == 46, (Dest div 8 - Src div 8) == 2, Src < 49 -> true;
- Src+18 == Dest, Right /= 46, RightHit == 46, (Dest div 8 - Src div 8) == 2, Src < 49 -> true;
- true -> false
- end.
- righMoveBlack(Src, Dest, Board) ->
- Left = lists:nth(Src-9, Board),
- Right = lists:nth(Src-7, Board),
- LeftHit = lists:nth(Src-18, Board),
- RightHit = lists:nth(Src-14, Board),
- if Src < Dest -> false;
- Src-9 == Dest, Left == 46, (Src div 8 - Dest div 8) == 1, Src > 8 -> true;
- Src-7 == Dest, Right == 46, (Src div 8 - Dest div 8) == 1, Src > 8 -> true;
- Src-18 == Dest, Left /= 46, LeftHit == 46, (Src div 8 - Dest div 8) == 2, Src > 16 -> true;
- Src-14 == Dest, Right /= 46, RightHit == 46, (Src div 8 - Dest div 8) == 2, Src >16 -> true;
- true -> false
- end.
- moveWhite(Src, Dest, Board) ->
- RightMove = righMoveWhite(Src, Dest, Board),
- Diff = abs(Dest rem 8 - Src rem 8),
- Midway = Src + (Dest-Src) div 2,
- Pawn = lists:nth(Midway, Board),
- if RightMove == true, (Diff == 2) or (Diff == 6), Pawn == 98 -> movePawn(Src,Dest,deletePawn(Src+((Dest-Src) div 2), Board));
- RightMove == true, (Diff == 2) or (Diff == 6), Pawn == 119 -> movePawn(Src,Dest,Board);
- RightMove == true -> movePawn(Src, Dest, Board)
- end.
- moveBlack(Src, Dest, Board) ->
- RightMove = righMoveBlack(Src, Dest, Board),
- Diff = abs(Src rem 8 - Dest rem 8),
- Midway = Src - (Src-Dest) div 2,
- Pawn = lists:nth(Midway, Board),
- if RightMove == true, (Diff == 2) or (Diff == 6), Pawn == 119 -> movePawn(Src,Dest,deletePawn(Src-((Src-Dest) div 2), Board));
- RightMove == true, (Diff == 2) or (Diff == 6), Pawn == 98 -> movePawn(Src,Dest,Board);
- RightMove == true -> movePawn(Src, Dest, Board)
- end.
- endGame(Board) ->
- White = lists:member(119,Board),
- Black = lists:member(98,Board),
- if White==true -> false;
- Black==true -> false;
- true -> true
- end.
- test() ->
- moveBlack(45,31,".w.w.w.ww.w.w.w..w.w.w...............w..b.b.b.b..b.b.b.bb.b.b.b.\n").
- %deletePawn(45-((45-31) div 2),".w.w.w.ww.w.w.w..w.w.w...............w..b.b.b.b..b.b.b.bb.b.b.b.\n").
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement