PageRenderTime 27ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/examples/Snake/posn.d

http://github.com/wilkie/djehuty
D | 65 lines | 53 code | 12 blank | 0 comment | 11 complexity | 4291334a327bd3cbd8df417e2ee0cffb MD5 | raw file
  1. enum Dir : int {
  2. Up = -1,
  3. Down = +1,
  4. Left = -2,
  5. Right = +2,
  6. }
  7. class Posn {
  8. this(int x_n, int y_n) {
  9. x = x_n;
  10. y = y_n;
  11. }
  12. Posn dup() {
  13. return new Posn(_x, _y);
  14. }
  15. static void SetBounds(uint max_x_n, uint max_y_n) {
  16. _max_x = max_x_n;
  17. _max_y = max_y_n;
  18. }
  19. void x(int x_n) {
  20. if (x_n < 0) {
  21. _x = _max_x;
  22. } else if (x_n > _max_x) {
  23. _x = 0;
  24. } else {
  25. _x = x_n;
  26. }
  27. }
  28. uint x() {
  29. return _x;
  30. }
  31. void y(int y_n) {
  32. if (y_n < 0) {
  33. _y = _max_y;
  34. } else if (y_n > _max_y) {
  35. _y = 0;
  36. } else {
  37. _y = y_n;
  38. }
  39. }
  40. uint y() {
  41. return _y;
  42. }
  43. void moveTo(Posn p) {
  44. x = p.x;
  45. y = p.y;
  46. }
  47. int opEquals(Posn p) {
  48. return cast(int)(x == p.x && y == p.y);
  49. }
  50. private:
  51. static uint _max_x, _max_y;
  52. uint _x, _y;
  53. }