Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2013, 17:04   #1
Радик29
Пользователь
 
Регистрация: 26.12.2012
Сообщений: 90
По умолчанию Двумерный массив-лабиринт

Здравствуйте! Помогите мне ,пожалуйста, с лабиринтом.
Почему при запуске кода у меня числа выходят за края лабиринта?
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class AStar
    {
        int[,] Map;
        int MapWidht;//ширина
        int MapHeight;//высота
        
        // Конструктор
      
        public void ReadMap()
        {
            MapWidht = 10;
            MapHeight = 10;
            Map = new int[,]{
                {1,1,1,1,1,1,1,1,1,1},           
                {1,0,0,0,0,0,0,0,0,1},
                {1,0,0,0,1,1,1,1,0,1},
                {1,1,1,0,1,1,1,1,0,1},
                {1,0,0,0,1,0,0,0,0,1},
                {1,0,1,1,1,0,1,1,1,1},           //карта
                {1,0,0,0,0,0,0,0,0,1},
                {1,1,0,1,1,1,1,0,1,1},
                {1,0,0,0,0,0,0,0,0,1},
                {1,1,1,1,1,1,1,1,1,1},
            };
        }
        
        // Отображение карты
       
        public void DrawMap()
        {
            Console.WriteLine("Отображение карты");
            for (int y = 0; y < MapHeight; y++)
            {
                Console.WriteLine("");
                for (int x = 0; x < MapWidht; x++)
                    if (Map[y, x] == 1)
                        Console.Write("+");
                    else
                        Console.Write(" ");
            }
            Console.ReadKey();
            FindWave(2, 2, 8, 8);
        }
        
        public void FindWave(int startX, int startY, int targetX, int targetY)
        {
            bool add = true;
            int[,] cMap = new int[MapHeight, MapWidht];
            int x, y, step = 0;
            for (y = 0; y < MapHeight; y++)
                for (x = 0; x < MapWidht; x++)
                {
                    if (Map[y, x] == 1)
                        cMap[y, x] = -2;//индикатор стены
                    else
                        cMap[y, x] = -1;//индикатор еще не ступали сюда
                }
            cMap[targetY, targetX] = 0;//Начинаем с финиша
            while (add == true)
            {
                add = false;
                for (y = 0; y < MapWidht; y++)
                    for (x = 0; x < MapHeight; x++)
                    {
                        if (cMap[x, y] == step)
                        {
                            
                                //Ставим значение шага+1 в соседние ячейки (если они проходимы)
                                if (y - 1 >= 0 && cMap[x, y-1] != -2 && cMap[x, y-1] == -1)
                                    cMap[x, y-1] = step + 1;
                                if (x - 1 >= 0 && cMap[x-1, y] != -2 && cMap[x-1, y] == -1)
                                    cMap[x-1, y] = step + 1;
                            
                                if (y + 1 < MapWidht && cMap[x, y+1] != -2 && cMap[x, y+1] == -1)
                                    cMap[x, y+1] = step + 1;
                                if (x + 1 < MapHeight && cMap[x+1, y] != -2 && cMap[x+1, y] == -1)
                                    cMap[x+1, y] = step + 1;
                            }
                        
                    }
                step++;
                
                add = true;
                if (cMap[startY, startX] != -1)//решение найдено
                    add = true;
                if (step > MapWidht * MapHeight)//решение не найдено
                    add = false;
            }
            //Отрисовываем карты
            for (y = 0; y < MapHeight; y++)
            {
                Console.WriteLine();
                for (x = 0; x < MapWidht; x++)
                    if (cMap[y, x] == -1)
                        Console.Write(" ");
                    else
                        if (cMap[y, x] == -2)
                            Console.Write("#");
                        else
                            if (y == startY && x == startX)
                                Console.Write("S");
                            else
                                if (y == targetY && x == targetX)
                                    Console.Write("F");
                                else
                                    if (cMap[y, x] > -1)
                                        Console.Write("{0}", cMap[y, x]);

            }
            Console.ReadKey();
        }
        public static void Main()
        {
            AStar ob1 = new AStar();
            ob1.ReadMap();
            ob1.DrawMap();
        }
    }

}
Радик29 вне форума Ответить с цитированием
Старый 03.02.2013, 17:07   #2
Радик29
Пользователь
 
Регистрация: 26.12.2012
Сообщений: 90
По умолчанию

И как сделать, чтобы числа не выходили за края лабиринта?
Спасибо заранее!
Радик29 вне форума Ответить с цитированием
Старый 03.02.2013, 18:24   #3
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Числа и лабиринт - понятия невзаимосвязанные.
Числа не могут выходить за предела лабиринта так же, как не могут и входит в лабиринт.
Переформулируйте свой вопрос как-то иначе, чтобы он обрел смысл.
s-andriano вне форума Ответить с цитированием
Старый 03.02.2013, 18:37   #4
Радик29
Пользователь
 
Регистрация: 26.12.2012
Сообщений: 90
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Числа и лабиринт - понятия невзаимосвязанные.
Числа не могут выходить за предела лабиринта так же, как не могут и входит в лабиринт.
Переформулируйте свой вопрос как-то иначе, чтобы он обрел смысл.
т.е границы лабиринта отодвигаются.
Посмотрите код пожалуйста!
Радик29 вне форума Ответить с цитированием
Старый 03.02.2013, 18:43   #5
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Не вижу смысла смотреть код до того, как будет сформулировано существо задачи.
Угадывать, что должна делать программа по ее неработоспособному экземпляру - занятие малоперспективное.
s-andriano вне форума Ответить с цитированием
Старый 03.02.2013, 21:47   #6
Радик29
Пользователь
 
Регистрация: 26.12.2012
Сообщений: 90
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Не вижу смысла смотреть код до того, как будет сформулировано существо задачи.
Угадывать, что должна делать программа по ее неработоспособному экземпляру - занятие малоперспективное.
Учи русский язык, если не понимаешь!!!!!
Радик29 вне форума Ответить с цитированием
Старый 04.02.2013, 07:30   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Немного коряво.. но вполне отражает.
Код:
string spec = "00";
//Отрисовываем карты
for (y = 0; y < MapHeight; y++)
{
    Console.WriteLine();
    for (x = 0; x < MapWidht; x++)
        if (cMap[y, x] == -1)
            Console.Write("  ");
        else
            if (cMap[y, x] == -2)
                Console.Write("##");
            else
                if (y == startY && x == startX)
                    Console.Write("SS");
                else
                    if (y == targetY && x == targetX)
                        Console.Write("FF");
                    else
                        if (cMap[y, x] > -1)
                            Console.Write("{0}", cMap[y, x].ToString(spec));
}
Также есть такой вариант с табуляцией
Код:
for (y = 0; y < MapHeight; y++)
{
    Console.WriteLine();
    for (x = 0; x < MapWidht; x++)
        if (cMap[y, x] == -1)
            Console.Write(" \t");
        else
            if (cMap[y, x] == -2)
                Console.Write("#\t");
            else
                if (y == startY && x == startX)
                    Console.Write("S\t");
                else
                    if (y == targetY && x == targetX)
                        Console.Write("F\t");
                    else
                        if (cMap[y, x] > -1)
                            Console.Write("{0}\t", cMap[y, x]);
}
phomm вне форума Ответить с цитированием
Старый 04.02.2013, 08:33   #8
Радик29
Пользователь
 
Регистрация: 26.12.2012
Сообщений: 90
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Немного коряво.. но вполне отражает.
Код:
string spec = "00";
//Отрисовываем карты
}
Спасибо вам большое!



________________
Не злоупотребляйте избыточным цитированием. Если Вы отвечаете на предыдущее сообщение, нет необходимости приводить его полностью в своем ответе. В крайнем случае выберите нужный фрагмент и процитируйте его.

Модератор

Последний раз редактировалось Serge_Bliznykov; 04.02.2013 в 09:01.
Радик29 вне форума Ответить с цитированием
Старый 04.02.2013, 09:32   #9
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Пожалуйста, всегда рад помочь способным людям. (правда странновато, что такой код _сами_ написали, а мелочную проблему - не осилили ПС угу , так и есть, http://programmersforum.ru/showthread.php?t=211804 - моего же кураторства темка)

Маленькое только примечание - на будущее старайтесь поконкретнее давать название темы, и вопрос в ней ставить пооднозначнее, скрины можно приложить и всё такое.
А то Вас s-andriano не очень понял, по-моему, он посчитал что проблема в расчётах и у вас диалога не вышло. И, конечно же, на резкие фразы не стоит переходить никогда, "вылетит - не поймаешь" , как говорят.

Последний раз редактировалось phomm; 04.02.2013 в 12:51.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерный массив. Spruti Паскаль, Turbo Pascal, PascalABC.NET 1 04.11.2012 17:31
двумерный массив ProgrammiST-_- Паскаль, Turbo Pascal, PascalABC.NET 1 28.11.2011 11:13
Одномерный массив и Двумерный массив eugene1437 Общие вопросы C/C++ 15 25.05.2011 19:17
Двумерный массив SkuLLL Помощь студентам 6 12.12.2010 16:24
Двумерный массив, одномерный массив. Branbal Помощь студентам 14 18.11.2009 12:40