Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Conlib.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <time.h>
- typedef struct {
- int* pPole;
- } Pole;
- void readnumber(int* pMaxX, int* pMaxY, int* pBarrierCount) {
- MaxXY(pMaxX, pMaxY); //conlib . get maxx?
- //*pMaxX=10; *pMaxY=10;
- int per;
- printf("Input Barriers percent = ");
- scanf("%d",&per);
- int PoleSize = (*pMaxX) * (*pMaxY);
- *pBarrierCount = PoleSize * per /100;
- }
- int raandom(int min, int max) {
- double nn = ((double)rand()/RAND_MAX)*(max-min);
- return ((int)nn + min);
- }
- void readPole(Pole *m1,int MaxX, int MaxY) {
- m1->pPole=malloc(sizeof(int) * (MaxX * MaxY));
- }
- int curindex(int x, int y, int MaxX)
- {
- return (y*MaxX + x); //ф-я пр-я двум.координат в индекс
- }
- void CreatePoleBorders(Pole ma, int MaxX, int MaxY)
- {
- int x, y;
- y = 0;
- for(x=0;x<MaxX;x++) {
- ma.pPole[curindex(x, y, MaxX)] = 1;
- }
- y = MaxY-1;
- for(x= 0;x<MaxX;x++) {
- ma.pPole[curindex(x, y, MaxX)] = 1;
- }
- x = 0;
- for(y=0;y<MaxY;y++)
- ma.pPole[curindex(x, y, MaxX)] = 2;
- x = MaxX-1;
- for(y= 0; y < MaxY; y++)
- ma.pPole[curindex(x, y, MaxX)] = 2;
- }
- void FillPole(Pole m,int MaxX,int MaxY,int BarrierCount) {
- int x, y;
- int i = 0;
- for (y = 0; y < MaxY; y++) {
- for (x = 0; x < MaxX; x++) {
- m.pPole[curindex(x, y, MaxX)] = 0;
- }
- //заполнили все поле пробелами
- CreatePoleBorders(m, MaxX, MaxY); // сделали барьеры по периметру
- for (i = 0; i < BarrierCount; i++) {
- x = raandom(1, MaxX - 1);
- y = raandom(1, MaxY - 1);
- m.pPole[curindex(x, y, MaxX)] = 3; //генерим кирпичики
- }
- }
- }
- void printPole(Pole ma,int MaxX,int MaxY) {
- int x, y;
- GotoXY(0, 0);
- for(y=0;y<MaxY; y++)
- {
- for(x=0;x<MaxX;x++)
- switch(ma.pPole[curindex(x, y, MaxX)])
- {
- case 1: printf("-"); break;
- case 2: printf("|"); break;
- case 3: printf("*"); break;
- default: printf(" ");break;
- }
- printf("\n");
- }
- }
- void Play(Pole ma, int CurX, int CurY, int MaxX, int MaxY) {
- GotoXY(CurX, CurY);
- printf("X");
- int key;
- int bExit=0;
- while(!bExit)
- {
- while(!KeyPressed());
- key = GetKey();
- GotoXY(CurX, CurY);
- printf(" ");
- if (key == KEY_ESC) bExit = 1;
- if (key == KEY_UP) CurY--;
- if (key == KEY_DOWN) CurY++;
- if (key == KEY_LEFT) CurX--;
- if (key == KEY_RIGHT) CurX++;
- GotoXY(CurX, CurY);
- printf("X");
- }
- }
- void CheckAccuracy(Pole ma) {
- }
- int main() {
- Pole m1;
- int MaxX, MaxY;
- int PlayerX, PlayerY;
- int BarrierCount;
- readnumber(&MaxX, &MaxY, &BarrierCount); // знаем размеры поля, сколько кирпичей надо поставить
- readPole(&m1, MaxX,MaxY);// создали дин. массив
- FillPole(m1, MaxX, MaxY, BarrierCount); //есть поле с барьерами и кирпичами
- printPole(m1, MaxX, MaxY); // draw all it
- PlayerX = MaxX/2;
- PlayerY = MaxY/2;
- //add условие что если не пустой лабиринт то переместимся куданибудь
- /* Алгоритм контроля проходимости по правым поворотам:
- Наиболее наглядный способ контроля проходимости лабиринта – обход
- по правой стороне. Если в результате вы придете обратно к входу – выход
- недоступен. Если придете к выходу – значит доступен.
- */
- Play(m1, PlayerX, PlayerY, MaxX, MaxY);
- /* Алгоритм контроля проходимости по заполнению лабиринта:
- Помечаем место входа в лабиринт флажком. Далее пробегаем по всему
- лабиринту и ставим в окрестности каждого флажка еще флажки. Данную
- процедуру повторяем до тех пор, пока пробежав по всему лабиринту, не
- поставим ни одного нового флажка. После этого проверяем, стоит ли фла-
- жок на позиции выхода из лабиринта. Если стоит, значит лабиринт проходим*/
- //- Контроль невозможности наступить на препятствия и выйти за границу
- //- 2 типа препятствий: съедобные яблоки и стена (процент задает пользователь)
- //- Сохранение/восстановление карты и состояния игры
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement