offset.cc
Go to the documentation of this file.
00001 /* offset.cc
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 // ;;; Local Variables:
00074 // ;;; mode:c++
00075 // ;;; c-basic-offset:2
00076 // ;;; End:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines