Advertisement
Guest User

Untitled

a guest
May 21st, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.05 KB | None | 0 0
  1. #include "Conlib.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5. #include <time.h>
  6.  
  7. typedef struct {
  8. int* pPole;
  9. } Pole;
  10. void readnumber(int* pMaxX, int* pMaxY, int* pBarrierCount) {
  11. MaxXY(pMaxX, pMaxY); //conlib . get maxx?
  12. //*pMaxX=10; *pMaxY=10;
  13. int per;
  14. printf("Input Barriers percent = ");
  15. scanf("%d",&per);
  16. int PoleSize = (*pMaxX) * (*pMaxY);
  17. *pBarrierCount = PoleSize * per /100;
  18. }
  19. int raandom(int min, int max) {
  20. double nn = ((double)rand()/RAND_MAX)*(max-min);
  21. return ((int)nn + min);
  22. }
  23. void readPole(Pole *m1,int MaxX, int MaxY) {
  24. m1->pPole=malloc(sizeof(int) * (MaxX * MaxY));
  25. }
  26. int curindex(int x, int y, int MaxX)
  27. {
  28. return (y*MaxX + x); //ф-я пр-я двум.координат в индекс
  29. }
  30. void CreatePoleBorders(Pole ma, int MaxX, int MaxY)
  31. {
  32. int x, y;
  33. y = 0;
  34. for(x=0;x<MaxX;x++) {
  35. ma.pPole[curindex(x, y, MaxX)] = 1;
  36. }
  37. y = MaxY-1;
  38. for(x= 0;x<MaxX;x++) {
  39. ma.pPole[curindex(x, y, MaxX)] = 1;
  40. }
  41. x = 0;
  42. for(y=0;y<MaxY;y++)
  43. ma.pPole[curindex(x, y, MaxX)] = 2;
  44. x = MaxX-1;
  45. for(y= 0; y < MaxY; y++)
  46. ma.pPole[curindex(x, y, MaxX)] = 2;
  47. }
  48. void FillPole(Pole m,int MaxX,int MaxY,int BarrierCount) {
  49. int x, y;
  50. int i = 0;
  51. for (y = 0; y < MaxY; y++) {
  52. for (x = 0; x < MaxX; x++) {
  53. m.pPole[curindex(x, y, MaxX)] = 0;
  54. }
  55. //заполнили все поле пробелами
  56. CreatePoleBorders(m, MaxX, MaxY); // сделали барьеры по периметру
  57. for (i = 0; i < BarrierCount; i++) {
  58. x = raandom(1, MaxX - 1);
  59. y = raandom(1, MaxY - 1);
  60. m.pPole[curindex(x, y, MaxX)] = 3; //генерим кирпичики
  61. }
  62. }
  63. }
  64. void printPole(Pole ma,int MaxX,int MaxY) {
  65. int x, y;
  66. GotoXY(0, 0);
  67. for(y=0;y<MaxY; y++)
  68. {
  69. for(x=0;x<MaxX;x++)
  70. switch(ma.pPole[curindex(x, y, MaxX)])
  71. {
  72. case 1: printf("-"); break;
  73. case 2: printf("|"); break;
  74. case 3: printf("*"); break;
  75. default: printf(" ");break;
  76. }
  77. printf("\n");
  78. }
  79. }
  80. void Play(Pole ma, int CurX, int CurY, int MaxX, int MaxY) {
  81. GotoXY(CurX, CurY);
  82. printf("X");
  83. int key;
  84. int bExit=0;
  85. while(!bExit)
  86. {
  87. while(!KeyPressed());
  88. key = GetKey();
  89. GotoXY(CurX, CurY);
  90. printf(" ");
  91. if (key == KEY_ESC) bExit = 1;
  92. if (key == KEY_UP) CurY--;
  93. if (key == KEY_DOWN) CurY++;
  94. if (key == KEY_LEFT) CurX--;
  95. if (key == KEY_RIGHT) CurX++;
  96. GotoXY(CurX, CurY);
  97. printf("X");
  98. }
  99. }
  100. void CheckAccuracy(Pole ma) {
  101.  
  102. }
  103. int main() {
  104. Pole m1;
  105. int MaxX, MaxY;
  106. int PlayerX, PlayerY;
  107. int BarrierCount;
  108. readnumber(&MaxX, &MaxY, &BarrierCount); // знаем размеры поля, сколько кирпичей надо поставить
  109. readPole(&m1, MaxX,MaxY);// создали дин. массив
  110. FillPole(m1, MaxX, MaxY, BarrierCount); //есть поле с барьерами и кирпичами
  111. printPole(m1, MaxX, MaxY); // draw all it
  112. PlayerX = MaxX/2;
  113. PlayerY = MaxY/2;
  114. //add условие что если не пустой лабиринт то переместимся куданибудь
  115. /* Алгоритм контроля проходимости по правым поворотам:
  116. Наиболее наглядный способ контроля проходимости лабиринта – обход
  117. по правой стороне. Если в результате вы придете обратно к входу – выход
  118. недоступен. Если придете к выходу – значит доступен.
  119. */
  120.  
  121. Play(m1, PlayerX, PlayerY, MaxX, MaxY);
  122. /* Алгоритм контроля проходимости по заполнению лабиринта:
  123. Помечаем место входа в лабиринт флажком. Далее пробегаем по всему
  124. лабиринту и ставим в окрестности каждого флажка еще флажки. Данную
  125. процедуру повторяем до тех пор, пока пробежав по всему лабиринту, не
  126. поставим ни одного нового флажка. После этого проверяем, стоит ли фла-
  127. жок на позиции выхода из лабиринта. Если стоит, значит лабиринт проходим*/
  128. //- Контроль невозможности наступить на препятствия и выйти за границу
  129. //- 2 типа препятствий: съедобные яблоки и стена (процент задает пользователь)
  130. //- Сохранение/восстановление карты и состояния игры
  131. return 0;
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement