KMath.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:3k
源码类别:

模拟服务器

开发平台:

C/C++

  1. #ifndef KMathH
  2. #define KMathH
  3. #include <math.h>
  4. #include "GameDataDef.h"
  5. int g_InitMath();
  6. int g_UnInitMath();
  7. void g_InitSeries();
  8. #ifdef __linux
  9. #define __cdecl
  10. #endif
  11. //---------------------------------------------------------------------------
  12. // 正弦表 (将浮点数 *1024 整型化)
  13. extern int *g_nSin;
  14. // 余弦表 (将浮点数 *1024 整型化)
  15. extern int *g_nCos;
  16. // 正弦余弦的查表函数代码缓冲区
  17. extern unsigned char *g_InternalDirSinCosCode;
  18. typedef int __cdecl g_InternalDirSinCosFunction(int pSinCosTable[], int nDir, int nMaxDir);
  19. inline int g_DirSin(int nDir, int nMaxDir)
  20. {
  21.     return (*(g_InternalDirSinCosFunction *)(&(g_InternalDirSinCosCode[0])))(g_nSin, nDir, nMaxDir);
  22. }
  23. inline int g_DirCos(int nDir, int nMaxDir)
  24. {
  25.     return (*(g_InternalDirSinCosFunction *)(&(g_InternalDirSinCosCode[0])))(g_nCos, nDir, nMaxDir);
  26. }
  27. //---------------------------------------------------------------------------
  28. // 五行相生相克
  29. extern int g_nAccrueSeries[series_num];
  30. extern int g_nConquerSeries[series_num];
  31. // 五行相生相克函数代码缓冲区
  32. extern unsigned char *g_InternalIsAccrueConquerCode;
  33. typedef int __cdecl g_InternalIsAccrueConquerFunction(int pAccrueConquerTable[], int nSrcSeries, int nDesSeries);
  34. inline int g_IsAccrue(int nSrcSeries, int nDesSeries)
  35. {
  36.     return (*(g_InternalIsAccrueConquerFunction *)(&(g_InternalIsAccrueConquerCode[0])))(g_nAccrueSeries, nSrcSeries, nDesSeries);
  37. }
  38. inline int g_IsConquer(int nSrcSeries, int nDesSeries)
  39. {
  40.     return (*(g_InternalIsAccrueConquerFunction *)(&(g_InternalIsAccrueConquerCode[0])))(g_nConquerSeries, nSrcSeries, nDesSeries);
  41. }
  42. //---------------------------------------------------------------------------
  43. inline int g_GetDistance(int nX1, int nY1, int nX2, int nY2)
  44. {
  45. return (int)sqrt((nX1 - nX2) * (nX1 - nX2) + (nY1 - nY2) * (nY1 - nY2));
  46. }
  47. inline int g_GetDirIndex(int nX1, int nY1, int nX2, int nY2)
  48. {
  49. int nRet = -1;
  50. if (nX1 == nX2 && nY1 == nY2)
  51. return -1;
  52. // int nDistance = g_GetDistance(nX1, nY1 * 2, nX2, nY2 * 2);
  53. int nDistance = g_GetDistance(nX1, nY1, nX2, nY2);
  54. if (nDistance == 0 ) return -1;
  55. // int nYLength = (nY2 - nY1) * 2;
  56. int nYLength = nY2 - nY1;
  57. int nSin = (nYLength << 10) / nDistance; // 放大1024倍
  58. for (int i = 0; i < 32; i++) // 顺时针方向 从270度到90度,sin值递减
  59. {
  60. if (nSin > g_nSin[i])
  61. break;
  62. nRet = i;
  63. }
  64. if ((nX2 - nX1) > 0)
  65. {
  66. nRet = 63 - nRet;
  67. }
  68. return nRet;
  69. }
  70. inline int g_Dir2DirIndex(int nDir, int nMaxDir)
  71. {
  72. int nRet = -1;
  73. if (nMaxDir <= 0)
  74. return nRet;
  75. nRet = (nDir << 6) / nMaxDir;
  76. return nRet;
  77. }
  78. inline int g_DirIndex2Dir(int nDir, int nMaxDir)
  79. {
  80. int nRet = -1;
  81. if (nMaxDir <= 0)
  82. return nRet;
  83. nRet = (nMaxDir * nDir) >> 6; // (nMaxDir / 64) * nDir
  84. return nRet;
  85. }
  86. inline BOOL g_RandPercent(int nPercent)
  87. {
  88. return ((int)g_Random(100) < nPercent);
  89. /* int i = g_Random(100);
  90. if (i >= nPercent)
  91. return FALSE;
  92. else
  93. return TRUE;*/
  94. }
  95. #endif //KMathH