cCompetition.cpp
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:5k
源码类别:

游戏

开发平台:

Visual C++

  1. // RACE X
  2. //
  3. // Written by Mauricio Teichmann Ritter
  4. //
  5. // Copyright (C) 2002, Brazil. All rights reserved.
  6. // 
  7. //
  8. #include "stdafx.h"
  9. #include "cCompetition.h"
  10. //////////////////////////////////////////////////////////////////////
  11. // Construction/Destruction
  12. //////////////////////////////////////////////////////////////////////
  13. int comparepoints(const void* p1, const void* p2)
  14. {
  15. PLAYER_DATA *pData1, *pData2;
  16. pData1 = (PLAYER_DATA*) p1;
  17. pData2 = (PLAYER_DATA*)p2;
  18. if(pData1->m_iPoints < pData2->m_iPoints)
  19. return 1;
  20. if(pData1->m_iPoints > pData2->m_iPoints)
  21. return -1;
  22. return 0;
  23. }
  24. cCompetition::cCompetition()
  25. {
  26. m_iNumPlayers = 0;
  27. m_iNextRace = 0;
  28. }
  29. cCompetition::~cCompetition()
  30. {
  31. }
  32. void cCompetition::SetCompetitionMode(BOOL bActivate)
  33. {
  34. m_bCompetitionActive = bActivate;
  35. }
  36. BOOL cCompetition::GetCompetitionMode()
  37. {
  38. return m_bCompetitionActive;
  39. }
  40. void cCompetition::Reset()
  41. {
  42. m_iNumPlayers = 0;
  43. m_iNextRace = 0;
  44. }
  45. void cCompetition::AddPlayer(string sPlayerName, UINT iCarColor, int iControlType, BYTE bID, int iDPNID)
  46. {
  47. m_pPlayerData[m_iNumPlayers].m_sPlayerName = sPlayerName;
  48. m_pPlayerData[m_iNumPlayers].m_iPoints = 0;
  49. m_pPlayerData[m_iNumPlayers].m_iCarColor = iCarColor;
  50. m_pPlayerData[m_iNumPlayers].m_iControlType = iControlType;
  51. m_pPlayerData[m_iNumPlayers].m_bId = bID;
  52. m_pPlayerData[m_iNumPlayers].m_dpnid = iDPNID;
  53. m_pPlayerData[m_iNumPlayers].m_bPlayerIsReady = FALSE;
  54. m_iNumPlayers++;
  55. }
  56. /*string cCompetition::GetPlayerNameByColor(UINT iColor)
  57. {
  58. for(int i=0;i<m_iNumPlayers;i++)
  59. {
  60. if(m_pPlayerData[i].m_iCarColor == iColor)
  61. return m_pPlayerData[i].m_sPlayerName;
  62. }
  63. return "";
  64. }
  65. string cCompetition::GetPlayerNameByPosition(int iPosition)
  66. {
  67. if(iPosition >= m_iNumPlayers)
  68. return "";
  69. return m_pPlayerData[iPosition].m_sPlayerName;
  70. }*/
  71. UINT cCompetition::GetColor(UINT iPosition)
  72. {
  73. if(iPosition >= m_iNumPlayers)
  74. return 0;
  75. return m_pPlayerData[iPosition].m_iCarColor;
  76. }
  77. string cCompetition::GetNextRace()
  78. {
  79. switch(m_iNextRace)
  80. {
  81. case 0:
  82. return "Track01.rxt";
  83. break;
  84. case 1:
  85. return "Track02.rxt";
  86. break;
  87. case 2:
  88. return "Track03.rxt";
  89. break;
  90. case 3:
  91. return "Track04.rxt";
  92. break;
  93. case 4:
  94. return "Track05.rxt";
  95. break;
  96. case 5:
  97. return "Track06.rxt";
  98. break;
  99. case 6:
  100. return "Track07.rxt";
  101. break;
  102. case 7:
  103. return "Track08.rxt";
  104. break;
  105. case 8:
  106. return "Track09.rxt";
  107. break;
  108. }
  109. return "";
  110. }
  111. void cCompetition::NextRace()
  112. {
  113. m_iNextRace++;
  114. }
  115. int cCompetition::GetPlayerPointsByPosition(int iPosition)
  116. {
  117. if(iPosition >= m_iNumPlayers)
  118. return 0;
  119. return m_pPlayerData[iPosition].m_iPoints;
  120. }
  121. int cCompetition::GetNumberOfCars()
  122. {
  123. return m_iNumPlayers;
  124. }
  125. void cCompetition::AddPointToPlayer(BYTE bID,int iPoints)
  126. {
  127. for(int i=0;i<m_iNumPlayers;i++)
  128. {
  129. if(m_pPlayerData[i].m_bId == bID)
  130. {
  131. m_pPlayerData[i].m_iPoints+=iPoints;
  132. qsort(m_pPlayerData, 4, sizeof(PLAYER_DATA), comparepoints);
  133. return;
  134. }
  135. }
  136. }
  137. int cCompetition::GetControlType(int iPosition)
  138. {
  139. if(iPosition >= m_iNumPlayers)
  140. return 0;
  141. return m_pPlayerData[iPosition].m_iControlType;
  142. }
  143. BOOL cCompetition::DPNIDExists(int iID)
  144. {
  145. for(int i=0;i<m_iNumPlayers;i++)
  146. {
  147. if(m_pPlayerData[i].m_dpnid == iID)
  148. {
  149. return TRUE;
  150. }
  151. }
  152. return FALSE;
  153. }
  154. void cCompetition::SetPlayerColor(BYTE idPlayer, UINT iColor)
  155. {
  156. for(int i=0;i<m_iNumPlayers;i++)
  157. {
  158. if(m_pPlayerData[i].m_bId  == idPlayer)
  159. {
  160. m_pPlayerData[i].m_iCarColor = iColor;
  161. return;
  162. }
  163. }
  164. }
  165. void cCompetition::SetPlayerName(BYTE idPlayer, char *sName)
  166. {
  167. for(int i=0;i<m_iNumPlayers;i++)
  168. {
  169. if(m_pPlayerData[i].m_bId  == idPlayer)
  170. {
  171. m_pPlayerData[i].m_sPlayerName = sName;
  172. return;
  173. }
  174. }
  175. }
  176. DWORD cCompetition::GetPlayerColor(BYTE idPlayer)
  177. {
  178. for(int i=0;i<m_iNumPlayers;i++)
  179. {
  180. if(m_pPlayerData[i].m_bId  == idPlayer)
  181. {
  182. return m_pPlayerData[i].m_iCarColor;
  183. }
  184. }
  185. return 0;
  186. }
  187. string cCompetition::GetPlayerName(BYTE idPlayer)
  188. {
  189. for(int i=0;i<m_iNumPlayers;i++)
  190. {
  191. if(m_pPlayerData[i].m_bId  == idPlayer)
  192. {
  193. return m_pPlayerData[i].m_sPlayerName;
  194. }
  195. }
  196. return "";
  197. }
  198. int cCompetition::GetPlayerDPNID(BYTE idPlayer)
  199. {
  200. for(int i=0;i<m_iNumPlayers;i++)
  201. {
  202. if(m_pPlayerData[i].m_bId  == idPlayer)
  203. {
  204. return m_pPlayerData[i].m_dpnid;
  205. }
  206. }
  207. return 0;
  208. //return m_pPlayerData[iIndex].m_bId;
  209. }
  210. BYTE cCompetition::GetPlayerID(int iIndex)
  211. {
  212. return m_pPlayerData[iIndex].m_bId;
  213. }
  214. BYTE cCompetition::GetPlayerIDbyDPNID(int iDPNID)
  215. {
  216. for(int i=0;i<m_iNumPlayers;i++)
  217. {
  218. if(m_pPlayerData[i].m_dpnid  == iDPNID)
  219. {
  220. return m_pPlayerData[i].m_bId;
  221. }
  222. }
  223. return 0;
  224. }
  225. void cCompetition::SetReadyState(BYTE bPlayerId, BOOL bReady)
  226. {
  227. for(int i=0;i<m_iNumPlayers;i++)
  228. {
  229. if(m_pPlayerData[i].m_bId  == bPlayerId)
  230. {
  231. m_pPlayerData[i].m_bPlayerIsReady = bReady;
  232. }
  233. }
  234. }
  235. void cCompetition::ResetReadyState()
  236. {
  237. for(int i=0;i<m_iNumPlayers;i++)
  238. {
  239. m_pPlayerData[i].m_bPlayerIsReady = FALSE;
  240. }
  241. }
  242. BOOL cCompetition::AllPlayersReady()
  243. {
  244. for(int i=0;i<m_iNumPlayers;i++)
  245. {
  246. if(m_pPlayerData[i].m_bPlayerIsReady == FALSE)
  247. {
  248. return FALSE;
  249. }
  250. }
  251. return TRUE;
  252. }