Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 52

Нарисовать в консоли танк

22.02.2013, 11:49. Показов 5440. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста

Описать три класса:
1) класс Танк - танк может вращать башню, двигаться на одну клетку в сторону башни, стрелять; не может выходить за край, наезжать на перпятствия.
2) класс Поле - поле 20*20 - из символов
3) класс Препятствия - можно нарисовать препятствия, проверить на наличие препятствий
Двигается танк нажатием каких-либо клавиш, стреляет аналогично

как-то так
сама до конца в задании не разобралась, а реализовывать как..
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.02.2013, 11:49
Ответы с готовыми решениями:

Нарисовать стреляющий танк
Добрый день, моет вопрос не особо по теме. Есть задание по реализации стреляющего танка в С#. За пример взята игра "world of...

Нарисовать фигуры в консоли
1)Нарисовать пирамиду из n строк,которые вводятся с клавиатуры. ...

Нарисовать рамку в консоли
Нам задали задачу, нарисовать рамку с помощью вот этих символов как их вывести на экран? Подскажите плиз static void DrawFrame(int x,...

7
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 8
22.02.2013, 17:59
Цитата Сообщение от Nastenkin Посмотреть сообщение
Здравствуйте, помогите пожалуйста

Описать три класса:
1) класс Танк - танк может вращать башню, двигаться на одну клетку в сторону башни, стрелять; не может выходить за край, наезжать на перпятствия.
2) класс Поле - поле 20*20 - из символов
3) класс Препятствия - можно нарисовать препятствия, проверить на наличие препятствий
Двигается танк нажатием каких-либо клавиш, стреляет аналогично

как-то так
сама до конца в задании не разобралась, а реализовывать как..
Хто это вам такой ужас задал?
0
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 52
22.02.2013, 18:08  [ТС]
Преподаватель
0
 Аватар для ITL
284 / 255 / 73
Регистрация: 17.07.2012
Сообщений: 618
22.02.2013, 18:21
Цитата Сообщение от l1nux Посмотреть сообщение
Хто это вам такой ужас задал
Почему ужас, вполне нормальная задача.
Нарисовали - поменяли координаты - очистили экран - цикл повторяется.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
22.02.2013, 22:15
Бред жеж, на форме и то меньше геморроя (там хотя бы не все поле очищать нужно). Если человек настолько новичок - не надо таких задач, если не новичок - пусть на форме делает...
0
 Аватар для Димон_
136 / 104 / 9
Регистрация: 30.01.2011
Сообщений: 699
22.02.2013, 23:09
Да уж..не простое задание.
Навалял чуток кода, может даст идеи.
Как реализовать нормальное управление я не понял.
Кликните здесь для просмотра всего текста

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
Повороты.
enum Direction
    {
        Right,
        Up, 
        Down,
        Left
    }
 
class Tank
    {
       public int oX = 2, oY = 2;
      public  Direction direction;
 
        bool shoot = false;
 
        public Tank(int oX, int oY, Direction direction)
        {
            this.oX = oX;
            this.oY = oY;
            this.direction = direction;
        }
        public void Draw()
        {
            
            Console.SetCursorPosition(oX-1, oY-1);
            switch (direction)
            {
                case Direction.Up:
                    Console.Write(" ☺ ");
                    Console.CursorTop++;
                    Console.CursorLeft-=3;
                    Console.Write("☺☺☺");
                    Console.CursorTop++;
                    Console.CursorLeft -= 3;
                    Console.Write("☺ ☺");                
                    break;
                case Direction.Right:
                    Console.Write("☺☺ ");              
                    Console.CursorTop++;
                    Console.CursorLeft-=3;
                    Console.Write(" ☺☺");                     
                    Console.CursorTop++;
                    Console.CursorLeft-=3;
                    Console.Write("☺☺ ");
                    break;
                case Direction.Down:
                    Console.Write("☺ ☺");                   
                    Console.CursorTop++;
                    Console.CursorLeft-=3;
                    Console.Write("☺☺☺");
                    Console.CursorTop++;
                    Console.CursorLeft-=3;
                    Console.Write(" ☺ ");
                    break;
                case Direction.Left:
                    Console.Write(" ☺☺");                   
                    Console.CursorTop++;
                    Console.CursorLeft-=3;
                    Console.Write("☺☺ ");                   
                    Console.CursorTop++;
                    Console.CursorLeft-=3;
                    Console.Write(" ☺☺");
                    break;
            }
            if (shoot)
            {
                shoot = !shoot;
                Shoot();
            }
        }
        public void Update()
        {
            char key = Console.ReadLine()[0];
            switch (key)
            {
                case 'd': //Повернуть вправо
                    direction = Direction.Right;
                    break;
                case 'w'://Повернуть вверх
                    direction = Direction.Up;
                    break;
                case 's'://Повернуть вниз
                    direction = Direction.Down;
                    break;
                case 'a'://Повернуть влево
                    direction = Direction.Left;
                    break;
                case 'q'://выстрелить
                    shoot = true;
                    break;
                case 'e'://Двинутся в направлении башни
                    switch (direction)
                    {
                        case Direction.Down:
                            oY++;
                            break;
                        case Direction.Left:
                            oX--;
                            break;
                        case Direction.Right:
                            oX++;
                            break;
                        case Direction.Up:
                            oY--;
                            break;
                    }
                    break;
            }
        }
            
 
        void Shoot() // это работает крайне не правильно, да и не сильно нужна пока что. (лучше не смотреть) 
        {
            switch (direction)
            {
                case Direction.Up:                  
                    for (int i = 0; i < 10; i++)
                    {
                        System.Threading.Thread.Sleep(350);
                        if (oY - i >= 0)
                        {
                            Console.SetCursorPosition(oX, oY - i);
                            Console.Write("▲");
                        }
                    }
                    break;
                case Direction.Right:
                    for (int i = 0; i < 10; i++)
                    {
                        System.Threading.Thread.Sleep(350);
                        if (oX + i <= 80)
                        {
                            Console.SetCursorPosition(oX + i, oY);
                            Console.Write("►");
                        }
                    }
                    break;
                case Direction.Down:
                    for (int i = 0; i < 10; i++)
                    {
                        System.Threading.Thread.Sleep(350);
                        if (oY + i <= 80)
                        {
                            Console.SetCursorPosition(oX, oY + i);
                            Console.Write("▼");
                        }
                    }
                    break;
                case Direction.Left:
                    for (int i = 0; i < 10; i++)
                    {
                        System.Threading.Thread.Sleep(350);
                        if (oX - i >= 0)
                        {
                            Console.SetCursorPosition(oX - i, oY);
                            Console.Write("◄");
                        }
                    }
                    break;
            }
        }
    }


Использую так
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
      Tank tanchik = new Tank(5, 5, Direction.Up);
            while (true)
            {
                Console.Clear();
                tanchik.Update();
                tanchik.Draw();
                Console.SetCursorPosition(0, 0);
           //     Console.WriteLine(tanchik.oX + ":" + tanchik.oY + "|"+tanchik.direction);
                Console.WriteLine("Press any key");
                Console.ReadKey();
 
            }


Вроде выглядит ужасно, но работает. А вообще надо бы нормально продумать, как все это реализовать...скорее всего надо делать обертку на классом танк и классом препятствие, и через неё управлять выстрелами в препятствия..
P.S. Добавить ограничения сюда не сложно, просто лень)
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
22.02.2013, 23:25
Димон_, совсем у вас все плолхо: нужно разнести логику нажатий, реагирования танка и вывода на экран на 3 разных класса, а вы все в 1 засунули. Управление - ReadKey(true)
0
 Аватар для Димон_
136 / 104 / 9
Регистрация: 30.01.2011
Сообщений: 699
22.02.2013, 23:33
Psilon,
Цитата Сообщение от Nastenkin Посмотреть сообщение
класс Танк - танк может вращать башню, двигаться на одну клетку в сторону башни, стрелять; не может выходить за край, наезжать на перпятствия.
По моему он только это и реализует. Только нету выезда за край и препятствий. На первое - лень, на второе отдельный класс сначала нужен.

Добавлено через 1 минуту
Psilon, Вывод обычно пихается в Draw класса, как собственно и update. По крайней мере так было на XNA, в различных примерах. Да и удобно это.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.02.2013, 23:33
Помогаю со студенческими работами здесь

Как нарисовать график в консоли?
Как вывести в консоль прямую, функцией которой будет, например, &quot;y = x + 2&quot;? то есть, грубо говоря, нарисовать линию.

Как нарисовать таблицу в консоли?
Объясните, как расчертить таблицу по данному коду? class Program { static void Main(string args) { //Информация о задаче ...

Не получается нарисовать рамку в консоли
Добрый день! Мучаюсь, капаюсь и не получается нарисовать такую рамку в консоли, вот задние: Вот код который успел нарыть, для...

Как нарисовать таблицу в консоли
Как делается таблица в С#?

Графика в консоли - нарисовать треугольник из звездочек
помогите написать зеркальное отражение этой программы. никак не получается. то есть так: ********** _********* __******** ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru