Go to the documentation of this file.00001
00002
00003 #include "osl/offset.h"
00004 #include "osl/boardTable.h"
00005 #include <iostream>
00006
00007 #define OFFSET_INDEX(dx,dy) ((dx*BOARD_HEIGHT + dy) - OFFSET_MIN)
00008
00009 osl::Offset::Offset(Player player, Direction direction)
00010 {
00011 *this = Board_Table.getOffset(player, direction);
00012 }
00013
00018 int osl::Offset::dx() const
00019 {
00020 switch (index())
00021 {
00022 case OFFSET_INDEX(-1,-2): return -1;
00023 case OFFSET_INDEX(1,-2): return 1;
00024 case OFFSET_INDEX(-1,-1): return -1;
00025 case OFFSET_INDEX(0,-1): return 0;
00026 case OFFSET_INDEX(1,-1): return 1;
00027 case OFFSET_INDEX(-1,0): return -1;
00028 case OFFSET_INDEX(1,0): return 1;
00029 case OFFSET_INDEX(-1,1): return -1;
00030 case OFFSET_INDEX(0,1): return 0;
00031 case OFFSET_INDEX(1,1): return 1;
00032 case OFFSET_INDEX(-1,2): return -1;
00033 case OFFSET_INDEX(1,2): return 1;
00034 default:
00035 std::cerr << index() << " " << ZERO().index() << "\n";
00036 assert(0);
00037 }
00038 return 0;
00039 }
00040
00045 int osl::Offset::dy() const
00046 {
00047 switch (index())
00048 {
00049 case OFFSET_INDEX(-1,-2): return -2;
00050 case OFFSET_INDEX(1,-2): return -2;
00051 case OFFSET_INDEX(-1,-1): return -1;
00052 case OFFSET_INDEX(0,-1): return -1;
00053 case OFFSET_INDEX(1,-1): return -1;
00054 case OFFSET_INDEX(-1,0): return 0;
00055 case OFFSET_INDEX(1,0): return 0;
00056 case OFFSET_INDEX(-1,1): return 1;
00057 case OFFSET_INDEX(0,1): return 1;
00058 case OFFSET_INDEX(1,1): return 1;
00059 case OFFSET_INDEX(-1,2): return 2;
00060 case OFFSET_INDEX(1,2): return 2;
00061 default: assert(0);
00062 }
00063 return 0;
00064 }
00065
00066 #ifndef MINIMAL
00067 std::ostream& osl::operator<<(std::ostream& os, Offset offset)
00068 {
00069 return os << "offset(" << offset.intValue() << ')';
00070 }
00071 #endif
00072
00073
00074
00075
00076