File: offset.cc

package info (click to toggle)
libosl 0.5.0-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 273,976 kB
  • sloc: cpp: 129,625; ansic: 7,145; ruby: 1,290; makefile: 558; perl: 413; sh: 35
file content (76 lines) | stat: -rw-r--r-- 1,936 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/* offset.cc
 */
#include "osl/offset.h"
#include "osl/boardTable.h"
#include <iostream>

#define OFFSET_INDEX(dx,dy) ((dx*BOARD_HEIGHT + dy) - OFFSET_MIN)

osl::Offset::Offset(Player player, Direction direction)
{
  *this = Board_Table.getOffset(player, direction);
}

/** 
 * Offsetから一般に dxは求まらないので,
 * ここでの入力は12近傍のみとする
 */
int osl::Offset::dx() const
{
  switch (index())
  {
  case OFFSET_INDEX(-1,-2): return -1;
  case OFFSET_INDEX(1,-2): return 1;
  case OFFSET_INDEX(-1,-1): return -1;
  case OFFSET_INDEX(0,-1): return 0;
  case OFFSET_INDEX(1,-1): return 1;
  case OFFSET_INDEX(-1,0): return -1;
  case OFFSET_INDEX(1,0): return 1;
  case OFFSET_INDEX(-1,1): return -1;
  case OFFSET_INDEX(0,1): return 0;
  case OFFSET_INDEX(1,1): return 1;
  case OFFSET_INDEX(-1,2): return -1;
  case OFFSET_INDEX(1,2): return 1;
  default: 
    std::cerr << index() << " " << ZERO().index() << "\n";
    assert(0);
  }
  return 0;
}

/** 
 * Offsetから一般に dyは求まらないので,
 * ここでの入力は12近傍のみとする
 */
int osl::Offset::dy() const
{
  switch (index())
  {
  case OFFSET_INDEX(-1,-2): return -2;
  case OFFSET_INDEX(1,-2): return -2;
  case OFFSET_INDEX(-1,-1): return -1;
  case OFFSET_INDEX(0,-1): return -1;
  case OFFSET_INDEX(1,-1): return -1;
  case OFFSET_INDEX(-1,0): return 0;
  case OFFSET_INDEX(1,0): return 0;
  case OFFSET_INDEX(-1,1): return 1;
  case OFFSET_INDEX(0,1): return 1;
  case OFFSET_INDEX(1,1): return 1;
  case OFFSET_INDEX(-1,2): return 2;
  case OFFSET_INDEX(1,2): return 2;
  default: assert(0);
  }
  return 0;
}

#ifndef MINIMAL
std::ostream& osl::operator<<(std::ostream& os, Offset offset)
{
  return os << "offset(" << offset.intValue() << ')';
}
#endif
/* ------------------------------------------------------------------------- */
// ;;; Local Variables:
// ;;; mode:c++
// ;;; c-basic-offset:2
// ;;; End: