Skip to content

Instantly share code, notes, and snippets.

@MhdAljuboori
Created May 20, 2012 19:01
Show Gist options
  • Save MhdAljuboori/2759152 to your computer and use it in GitHub Desktop.
Save MhdAljuboori/2759152 to your computer and use it in GitHub Desktop.
AI homework
initializeColumn(Column) :-
Column >0,
% create empty table
assert(top(Column, 1)),
Column1 is Column-1,
initializeColumn(Column1).
initializeColumn(0).
% Create Game with Row equal to row and column equal to column
createGame(Row, Column) :-
% size of table
assert(size(Row, Column)),
% initialize All column
initializeColumn(Column).
push(Column) :-
size(Row, ColumnNum),
% if column not full
(Column < ColumnNum+1, Column > 0),
(
% get Row number in column
top(Column, RowNum),
% there are space in column
RowNum < Row+1,
% add red at RowNum an column
assert(cell(red, RowNum, Column)),
% plus RowNum by one
retract(top(Column, RowNum)),
R1 is RowNum+1,
assert(top(Column, R1))
),
win(red, RowNum, Column).
winVertical(Player, Row, Column) :-
cell(Player, Row, Column), R1 is Row-1,
cell(Player, R1, Column), R2 is R1-1,
cell(Player, R2, Column), R3 is R2-1,
cell(Player, R3, Column).
winHorizontal(Player, Row, Column) :-
% X: pice already exist, Y: new pice added
% X X X Y
cell(Player, Row, Column), C1 is Column-1,
cell(Player, Row, C1), C2 is C1-1,
cell(Player, Row, C2), C3 is C2-1,
cell(Player, Row, C3), !;
% Y X X X
cell(Player, Row, Column), C1 is Column+1,
cell(Player, Row, C1), C2 is C1+1,
cell(Player, Row, C2), C3 is C2+1,
cell(Player, Row, C3), !;
% X Y X X
cell(Player, Row, Column), C1 is Column-1,
cell(Player, Row, C1), C2 is Column+1,
cell(Player, Row, C2), C3 is C2+1,
cell(Player, Row, C3), !;
% X X Y X
cell(Player, Row, Column), C1 is Column-1,
cell(Player, Row, C1), C2 is C1-1,
cell(Player, Row, C2), C3 is Column+1,
cell(Player, Row, C3), !.
winDiagonalLeftToRight(Player, Row, Column) :-
% X: pice already exist, Y: new pice added
% left side The lowest one
% Y X X X
cell(Player, Row, Column), R1 is Row+1, C1 is Column +1,
cell(Player, R1, C1), R2 is R1+1, C2 is C1 +1,
cell(Player, R2, C2), R3 is R2+1, C3 is C2 +1,
cell(Player, R3, C3), !;
% X X X Y
cell(Player, Row, Column), R1 is Row-1, C1 is Column -1,
cell(Player, R1, C1), R2 is R1-1, C2 is C1 -1,
cell(Player, R2, C2), R3 is R2-1, C3 is C2 -1,
cell(Player, R3, C3), !;
% X Y X X
cell(Player, Row, Column), R1 is Row-1, C1 is Column -1,
cell(Player, R1, C1), R2 is Row+1, C2 is Column +1,
cell(Player, R2, C2), R3 is R2+1, C3 is C2 +1,
cell(Player, R3, C3), !;
% X X Y X
cell(Player, Row, Column), R1 is Row+1, C1 is Column +1,
cell(Player, R1, C1), R2 is Row-1, C2 is Column -1,
cell(Player, R2, C2), R3 is R2-1, C3 is C2 -1,
cell(Player, R3, C3), !.
winDiagonalRightToLeft(Player, Row, Column) :-
% X: pice already exist, Y: new pice added
% left side The lowest one
% Y X X X
cell(Player, Row, Column), R1 is Row+1, C1 is Column -1,
cell(Player, R1, C1), R2 is R1+1, C2 is C1 -1,
cell(Player, R2, C2), R3 is R2+1, C3 is C2 -1,
cell(Player, R3, C3), !;
% X X X Y
cell(Player, Row, Column), R1 is Row-1, C1 is Column +1,
cell(Player, R1, C1), R2 is R1-1, C2 is C1 +1,
cell(Player, R2, C2), R3 is R2-1, C3 is C2 +1,
cell(Player, R3, C3), !;
% X Y X X
cell(Player, Row, Column), R1 is Row-1, C1 is Column +1,
cell(Player, R1, C1), R2 is Row+1, C2 is Column -1,
cell(Player, R2, C2), R3 is R2+1, C3 is C2 -1,
cell(Player, R3, C3), !;
% X X Y X
cell(Player, Row, Column), R1 is Row+1, C1 is Column -1,
cell(Player, R1, C1), R2 is Row-1, C2 is Column +1,
cell(Player, R2, C2), R3 is R2-1, C3 is C2 +1,
cell(Player, R3, C3), !.
winDiagonal(Player, Row, Column) :-
winDiagonalLeftToRight(Player, Row, Column), !;
winDiagonalRightToLeft(Player, Row, Column), !.
win(Player, Row, Column) :-
winVertical(Player, Row, Column), !;
winHorizontal(Player, Row, Column), !;
winDiagonal(Player, Row, Column), !.
show :-
size(Row, Column),
showTable(Column).
print(Column) :-
cell(Player, Row, Column),
write(Row), write(' , '), write(Column), write(' = '), write(Player).
showTable(Column) :-
print(Column);
Column > 0,
C1 is Column-1,
showTable(C1).
showTable(0).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment