table.cpp
上传用户:hbrsgg1
上传日期:2014-05-08
资源大小:2826k
文件大小:2k
源码类别:

其他智力游戏

开发平台:

C/C++

  1. /*++
  2. Copyright (c) 2004-2005  AFE(Active-Free-Elegance)
  3. Module Name:
  4.     table.cpp
  5. Abstract:
  6.  the table class:
  7. 1. the table envirement configuration
  8. 2. set and clear the food(good ones and bad ones)
  9. 3. call the snake instance to move
  10. Author:
  11.     Weijian Luo (Arthur Luo)   15-Jun-2005
  12. E-mail: skybluehacker@yahoo.com.cn
  13. Revision History:      1.0
  14. --*/
  15. #include "table.h"
  16. CTable::CTable()
  17. {
  18. m_width=m_height=0;
  19. m_foodNumber=m_blockNumber=0;
  20. m_board=NULL;
  21. }
  22. CTable::~CTable()
  23. {
  24. if(m_board != NULL)
  25. {
  26. SAFE_DELETE_ARRAY(m_board);
  27. }
  28. }
  29. //
  30. //// 初始化桌子
  31. //
  32. void CTable::InitialTable(int w,int h)
  33. {//初始化Table
  34. int i,j;
  35. //重新设置桌子的高度与宽度
  36. m_width=w;
  37. m_height=h;
  38. //其他成员变量的清空性质初始化
  39. m_snake.Initial();
  40. if(m_board != NULL)
  41. {
  42. SAFE_DELETE_ARRAY(m_board);
  43. }
  44. //根据高度和宽度创建一个新的桌子
  45. m_board=new int*[m_height];
  46. for(i=0;i<h;i++)
  47. {
  48. m_board[i]=new int[m_width];
  49. for(j=0;j<w;j++)
  50. m_board[i][j]=0;
  51. }
  52. //将桌子四周设置为墙
  53. //将顶部跟底部的边缘设置为障碍物墙的状态
  54. for(i=0;i<h;i++)
  55. {
  56. m_board[i][0]=TB_STATE_SBLOCK;
  57. m_board[i][m_width-1]=TB_STATE_SBLOCK;
  58. }
  59. //将左部和右部的边缘设置为障碍物墙的状态
  60. for(i=0;i<w;i++)
  61. {
  62. m_board[0][i]=TB_STATE_SBLOCK;
  63. m_board[m_height-1][i]=TB_STATE_SBLOCK;
  64. }
  65. }
  66. //
  67. //// 在某个位置放置毒果
  68. //
  69. bool CTable::AddBlock(int x,int y)
  70. {
  71. if( (x>=0)&&(x<m_width)&&
  72. (y>=0)&&(y<m_height)&&
  73. (m_board[y][x]==TB_STATE_OK) ) 
  74. {
  75. m_board[y][x]=TB_STATE_BLOCK;
  76. ++m_blockNumber;
  77. return true;
  78. }
  79. else
  80. {
  81. return false;
  82. }
  83. }
  84. //
  85. //// 在某个位置放置水果
  86. //
  87. bool CTable::AddFood(int x,int y)
  88. {
  89. if( (x>=0)&&(x<m_width)&&
  90. (y>=0)&&(y<m_height)&&
  91. (m_board[y][x]==TB_STATE_OK) ) 
  92. {
  93. m_board[y][x]=TB_STATE_FOOD;
  94. ++m_foodNumber;
  95. return true;
  96. }
  97. else
  98. {
  99. return false;
  100. }
  101. }
  102. //
  103. //// 清楚某个位置的果实
  104. //
  105. bool CTable::ClearFood(int x,int y)
  106. {
  107. m_board[y][x]=TB_STATE_OK;
  108. return true;
  109. }
  110. //
  111. //// 获取蛇对象
  112. //
  113. CSnake* CTable::GetSnake(void)
  114. {
  115. return &m_snake;
  116. }
  117. //
  118. //// 取桌子对象
  119. //
  120. int** CTable::GetBoard(void)
  121. {
  122. return m_board;
  123. }
  124. //
  125. //// 取桌子某个位置数据
  126. //
  127. int CTable::GetData(int x,int y)
  128. {
  129. return m_board[y][x];
  130. }
  131. //
  132. //// 蛇的移动
  133. //
  134. void CTable::SnakeMove(void)
  135. {
  136. m_snake.Move();
  137. }
  138. //
  139. //// 改变蛇的方向 
  140. //
  141. bool CTable::ChangeSnakeDirect(MoveState d)
  142. {
  143. m_snake.ChangeDirect(d);
  144. return true;
  145. }