Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 09.03.2012
Сообщений: 45
1

Как сделать перемещение лабиринта за пределы области консоли

07.06.2012, 14:24. Показов 2169. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
К примеру символ был в центре консоли и при нажатии стрелочек что бы лабиринт сдвигался вверх, вниз, влево или вправо. Чтоб лабиринт был больше области консоли. Как это реализовать? Помогите пожалуйста! Заранее спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.06.2012, 14:24
Ответы с готовыми решениями:

Как отследить перемещение мыши с нажатой кнопкой за пределы PictureBox?
Всем здравствуйте. Есть отмасштабированное в логических координатах графическое окно с белым...

Как сделать так, чтобы круг не мог выходить за стенки лабиринта?
Помогите плиз) Например, я нарисовал круг (который может двигаться с помощью клавиш). Потом я...

Как сделать перемещение нескольких файлов с заменой? И как это сделать проще?
Как сделать перемещение нескольких файлов с заменой? Например я ввожу в текстбокс название файлов,...

Лабиринт. Нужна идея: Как сделать поле лабиринта рандомным, но с одним верным путем
Начал писать код для игры в лабиринт, но не могу придумать, как будет работать рандом. То что...

12
0 / 0 / 0
Регистрация: 09.03.2012
Сообщений: 45
08.06.2012, 18:46  [ТС] 2
Хотя бы подскажите возможно ли реализовать это и каким образом(
0
660 / 530 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
08.06.2012, 23:10 3
Конечно это возможно. Напишите свой класс поля, а консоль используйте только для прорисовки. А вообще размер консоли можно изменять, можно сделать и fullscreen.
1
0 / 0 / 0
Регистрация: 09.03.2012
Сообщений: 45
09.06.2012, 02:54  [ТС] 4
Цитата Сообщение от Дмитрий3241 Посмотреть сообщение
Конечно это возможно. Напишите свой класс поля, а консоль используйте только для прорисовки. А вообще размер консоли можно изменять, можно сделать и fullscreen.
Не могли бы скинуть ссылку на msdn документацию хотя бы приблизительно от чего оттолкнуться, а fullscreen console искал и не нашёл, лишь задать размер консоли под размер разрешения монитора. Я просто новичок в C# и только месяц на C#.
0
660 / 530 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
09.06.2012, 03:32 5
Цитата Сообщение от rc2f6 Посмотреть сообщение
Не могли бы скинуть ссылку на msdn документацию хотя бы приблизительно от чего оттолкнуться, а fullscreen console искал и не нашёл, лишь задать размер консоли под размер разрешения монитора.
А разве fullscreen не то же самое.
А насчет msdn то прочитай книгу, например "Шилдг Г.Полный справочник по С#".
1
0 / 0 / 0
Регистрация: 09.03.2012
Сообщений: 45
09.06.2012, 10:55  [ТС] 6
Цитата Сообщение от Дмитрий3241 Посмотреть сообщение
А разве fullscreen не то же самое.
А насчет msdn то прочитай книгу, например "Шилдг Г.Полный справочник по С#".
её и читаю, спасибо что уделили время.

Добавлено через 2 минуты
Надеюсь что кто ни будь ответит по внятней на мой вопрос. А то я сам могу также всем помогать "Иди читай книгу"))) Отличная помощь)))
0
660 / 530 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
09.06.2012, 11:06 7
Видите ли, тут работы не на 15 минут, а все что выходит за рамки 15 минут просто лень.
1
Эксперт Java
4093 / 3827 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
09.06.2012, 11:16 8
Покажите код, как вы храните данные лабиринта.

PS. Только не надо копировать весь код или выкладывать проект, пожалуйста.
0
0 / 0 / 0
Регистрация: 09.03.2012
Сообщений: 45
09.06.2012, 11:54  [ТС] 9
У меня пока что такой лабиринт маленький, сейчас пишу редактор лабиринта чтоб создавать лабиринт с помощью курсорных кнопок и результат записывать в массив.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
using System;
using sc = System.Console;
using st = System.Text;
using scc = System.ConsoleColor;
 
namespace Test
{
    public class Map
    {
        public int m00, m01;
 
        Color color = new Color();
        CursorPosition cursorposition = new CursorPosition();
 
        public string[,] mapar = new string[6, 11];
 
        char door001 = st.Encoding.GetEncoding(437).GetChars(new byte[] { 205 })[0];
        char door002 = st.Encoding.GetEncoding(437).GetChars(new byte[] { 186 })[0];
        char door003 = st.Encoding.GetEncoding(437).GetChars(new byte[] { 215 })[0];
        char player001 = st.Encoding.GetEncoding(437).GetChars(new byte[] { 1 })[0];
 
        public string box000, box100, box001, door011, door012, door013, player011;
 
        public Map()
        {
            box000 = " ";
            box100 = "[";
            box001 = "]";
            door011 = ((char)door001).ToString();
            door012 = ((char)door002).ToString();
            door013 = ((char)door003).ToString();
            player011 = ((char)player001).ToString();
 
            for (m00 = 0; m00 < 5; ++m00)
            {
                for (m01 = 0; m01 < 11; ++m01)
                {
                    if ((m00 & 1) == 0) mapar[m00, 0] = box100;
                    if (((m01 % 2) == 0) & (m01 <= 10) & ((m01 & 1) == 0)) mapar[m00, m01] = box001;
                    if ((m01 & 1) == 1) mapar[m00, m01] = box000;
                    if ((m01 % 4) == 0) if (m01 <= 8) if ((m01 & 0) == 0) mapar[m00, m01] = box100;
                    if ((m00 & 1) == 1) mapar[m00, m01] = box000;
                }
            }
 
            mapar[0, 3] = mapar[4, 3] = mapar[4, 7] = door011;
            mapar[1, 5] = mapar[3, 1] = mapar[3, 5] = mapar[3, 9] = door012;
            mapar[1, 9] = door013;
        }
 
        public void MapCreate()
        {
            for (m00 = 0; m00 < 5; ++m00)
            {
                for (m01 = 0; m01 < 11; ++m01)
                {
                    if (((m00 == 0) & (m01 == 0)) | (m00 == 0) & m01 ==2) sc.ForegroundColor = scc.DarkGreen;
                    if (mapar[m00, m01] == player011) sc.ForegroundColor = scc.Green;
                    sc.Write(mapar[m00, m01]);
                    if (m01 > 0) sc.ForegroundColor = scc.Black;
                    if (m01 == 10)
                    {
                        sc.Write("\n ");
                    }
                }
            }
        }
    }
}
Просто я усваиваю материал на собственных примерах и понимания его легче когда свой пример создаёшь. Просто порой некоторые части собственного примера выходят за рамки прочитанного а листая книгу многое не понимаешь так как не дошёл до этого а предыдущий материал ещё не закрепил чтоб двигаться дальше.
0
101 / 101 / 12
Регистрация: 21.11.2011
Сообщений: 169
09.06.2012, 12:05 10
Цитата Сообщение от rc2f6 Посмотреть сообщение
Чтоб лабиринт был больше области консоли. Как это реализовать?
Console.MoveBufferArea
И дорисовывать то,что вошло в облать видимости.
1
0 / 0 / 0
Регистрация: 09.03.2012
Сообщений: 45
09.06.2012, 12:45  [ТС] 11
Цитата Сообщение от hiddentool Посмотреть сообщение
Console.MoveBufferArea
И дорисовывать то,что вошло в облать видимости.
нашёл пример того что мне нужно но нет исходников

http://www.textmodegames.com/download/snipes.html
0
101 / 101 / 12
Регистрация: 21.11.2011
Сообщений: 169
09.06.2012, 19:53 12
Лучший ответ Сообщение было отмечено как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
namespace ConsoleApplication6
{
    class Program
    {
        const int BOARD_X = 10, BOARD_Y = 5;
        const int x_size = 20, y_size = 20, x_view = 10, y_view = 10;
 
        static void Main(string[] args)
        {
 
            var rdn = new Random(2);
            var xs = new char[y_size, x_size];
            for (int yi = 0; yi < y_size; yi++)
                for (int xi = 0; xi < x_size; xi++)
                    xs[yi, xi] = ((yi == 0) || (yi == y_size - 1) || (xi == 0) || (xi == x_size - 1)
                        || rdn.NextDouble() < 0.05) ? '#' : ' ';
 
            Console.SetCursorPosition(9, BOARD_Y - 1);
            Console.Write("+----------+");
            for (int yi = 0; yi < y_view; yi++)
            {
                Console.SetCursorPosition(9, BOARD_Y + yi);
                Console.Write("|");
                for (int xi = 0; xi < x_view; xi++) Console.Write(xs[yi, xi]);
                Console.Write("|");
            }
            Console.SetCursorPosition(9, BOARD_Y + y_view);
            Console.Write("+----------+");
 
            int x = 0, y = 0;
            bool cont = true;
 
            while (cont)
                switch (Console.ReadKey(true).KeyChar)
                {
                    case 'a': if (x > 0) outcol(x_view, y_view, xs, --x, y, 0, 1); break;
                    case 'd': if (x < x_size - x_view) outcol(x_view, y_view, xs, ++x, y, x_view - 1, 0); break;
                    case 'w': if (y > 0) outrow(x_view, y_view, xs, x, --y, 0, 1); break;
                    case 's': if (y < y_size - y_view) outrow(x_view, y_view, xs, x, ++y, y_view - 1, 0); break;
                    case 'q': cont = false; break;
                    default: break;
                };
        }
 
        private static void outcol(int x_view, int y_view, char[,] xs, int x, int y, int dx, int shift)
        {
            Console.MoveBufferArea(1 - shift + BOARD_X, 0 + BOARD_Y, x_view - 1, y_view, shift + BOARD_X, 0 + BOARD_Y);
            for (int yi = 0; yi < y_view; yi++)
            {
                Console.SetCursorPosition(BOARD_X + dx, BOARD_Y + yi);
                Console.Write(xs[x + dx, yi + y]);
            }
        }
        private static void outrow(int x_view, int y_view, char[,] xs, int x, int y, int dy, int shift)
        {
            Console.MoveBufferArea(0 + BOARD_X, 1 - shift + BOARD_Y, x_view, y_view - 1, 0 + BOARD_X, shift + BOARD_Y);
            for (int xi = 0; xi < x_view; xi++)
            {
                Console.SetCursorPosition(BOARD_X + xi, BOARD_Y + dy);
                Console.Write(xs[x + xi, dy + y]);
            }
        }
 
    }
}
3
0 / 0 / 0
Регистрация: 09.03.2012
Сообщений: 45
11.06.2012, 11:58  [ТС] 13
Спасибо огромное) Это то что нужно)
0
11.06.2012, 11:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.06.2012, 11:58
Помогаю со студенческими работами здесь

Перемещение курсора за пределы таблицы
Доброго дня всем! Есть шаблон вордовского документа, в нем 1 табличка. Суть в чем: Делаю выборку по...

Пределы области рисования
Подскажите, пожалуйста, при рисовании графических объектов (окружность, например) как лучше...

Мышь не выходила за пределы области
Привет всем, у меня есть вопрос, как не выходить за пределы области, к примеру у нас есть картинка...

Выход графического примитива за пределы области рисования
Доброго времени суток. Может кто нибудь помочь с разбором поставленной задачи. Реализовать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru