Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
cheese2000
0 / 0 / 0
Регистрация: 13.04.2019
Сообщений: 11
1

Вынести в отдельный метод часть из мейна

22.04.2019, 23:09. Просмотров 320. Ответов 7

Задача заключается в том, что нужно проверку ввода(строчки 29-44,61-77) сделать отдельным методом. Помогите, пожалуйста)

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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace TreasureHunters
{
    class Program
    {
        static void Main(string[] args)
        {
 
            //Работа с пользователем
            Console.WriteLine("Hi there!");
            Console.WriteLine("Welcome to 'Treasure hunters'!");
            bool flag1 = true;
            bool flag2 = true;
            while (flag1)
            {
 
                flag2 = true;
                while (flag2)
                {
                    Console.ResetColor();
                    Console.WriteLine("Enter the size of gaming area:");
                    Console.WriteLine("Size = ");
 
                    //Проверка ввода
                    string console = Console.ReadLine();
 
                    if (!int.TryParse(console, out int x))
                    {
                        Console.WriteLine("You have to input an integer!");
                        //flag2 = false;
                        break;
                    }
                    else if (x > 35 || x < 3)
                    {
                        Console.WriteLine("Game area must be < 36 & > 2");
                        Console.WriteLine(" ");
                        break;
                    }
                    Console.Clear();
 
                    Console.WriteLine("TREASURE HUNTERS");
                    string[,] arr2d = new string[x, x];
 
                    PrintField(arr2d, x);
 
                    MovementsAndSpawn(arr2d, x);
 
                    Console.WriteLine("If you want to play again enter 0");
                    Console.WriteLine("If you want to exit again enter 1");
 
                    bool flag = true;
 
                    while (flag)
                    {
 
                        string rep = Console.ReadLine();
                        if (!int.TryParse(rep, out int PlayAgain))
                        {
                            Console.WriteLine("You have to input an integer!");
                            flag = false;
                        }
                        if (PlayAgain == 0)
                        {
 
                            flag = false;
                        }
 
                        if (PlayAgain == 1)
                            flag = false;
                        else
                        {
                            Console.WriteLine("You have to enter 0 or 1!");
 
                        }
                    }
                }
                
            }
        }
 
        //Генерация игрового поля
        public static void PrintField(string[,] arr, int x)
        {
            for (int i = 0; i < x; i++)
            {
                for (int j = 0; j < x; j++)
                {
                    arr[i, j] = " * ";
                    Console.Write(arr[i, j]);
                }
                Console.WriteLine(" ");
            }
        }
 
        //Передвижение персонажа и спавн клада
        static void MovementsAndSpawn(string[,] arr, int x1)
        {
            Console.CursorVisible = false;
            ConsoleKeyInfo k;
 
            // Координаты игрока
            int playerX = 1;
            int playerY = x1;
 
            char playerChar = 'I';
            Console.ForegroundColor = ConsoleColor.DarkRed;
 
            int t = 1;
            int[] arr2 = new int[x1];
            for (int i = 0; i < x1; i++)
            {
                arr2[i] = t;
                t += 3;
            }
 
            // Координаты клада
            int flagX = arr2[new Random().Next(0, x1)];
            int flagY = new Random().Next(1, x1);
 
            Console.ForegroundColor = ConsoleColor.DarkYellow;
            Console.SetCursorPosition(flagX, flagY);
            //Console.Write("Х");
 
            do
            {
 
                Console.SetCursorPosition(playerX, playerY);
                Console.ForegroundColor = ConsoleColor.DarkRed;
                Console.Write(playerChar);
 
                k = Console.ReadKey(true);
                if (k.Key == ConsoleKey.UpArrow && playerY > 1)
                {
                    playerY--;
                    Console.ForegroundColor = ConsoleColor.DarkRed;
                    Console.SetCursorPosition(playerX, playerY + 1);
                    Console.Write("*");
 
                }
                else if (k.Key == ConsoleKey.DownArrow && playerY < x1)
                {
                    playerY++;
                    Console.ForegroundColor = ConsoleColor.DarkRed;
                    Console.SetCursorPosition(playerX, playerY - 1);
                    Console.Write("*");
                }
                else if (k.Key == ConsoleKey.LeftArrow && playerX > 3)
                {
                    playerX = playerX - 3;
                    Console.ForegroundColor = ConsoleColor.DarkRed;
                    Console.SetCursorPosition(playerX + 3, playerY);
                    Console.Write("*");
                }
                else if (k.Key == ConsoleKey.RightArrow && playerX < x1 * 3 - 2)
                {
                    playerX = playerX + 3;
                    Console.ForegroundColor = ConsoleColor.DarkRed;
                    Console.SetCursorPosition(playerX - 3, playerY);
                    Console.Write("*");
                }
 
                //Проверка на победу
                if (playerX == flagX && playerY == flagY)
                {
                    Console.Clear();
                    Console.ForegroundColor = ConsoleColor.DarkYellow;
                    Console.WriteLine("YOU WIN!");
                    break;
                }
 
                else
                {
                    Console.SetCursorPosition(0, x1 + 1);
                    Console.ForegroundColor = ConsoleColor.DarkYellow;
                    Distance(flagX, flagY , playerX, playerY);
                }
            } while (true);
            Console.CursorVisible = true;
        }
        //Расстояние от игрока до клада
        static double Distance(int flagX ,int flagY , int playerX , int playerY )
        {
            double distance = Math.Sqrt(Math.Pow((flagX - playerX), 2) + Math.Pow((flagY - playerY), 2));
            Console.WriteLine("Distance to the treasure = " + (distance - distance % 0.01));
            return distance;
        }
    }
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2019, 23:09
Ответы с готовыми решениями:

Вынести в отдельный метод работу с токеном Vk
Приветствую всех. Изучаю C# 4 день и решил написать программу под vk Все хорошо , есть...

Вынести метод из класса MainForm в отдельный класс
Доброго времени суток! У меня в основном классе MainForm, имеется метод private void...

Калькулятор. Вынести из основного метода Main ввод данных пользователем в отдельный метод
Каким образом можно реализовать данный калькулятор на сложение/вычитание через блок if-else? И как...

Можно ли вынести класс в отдельный файл
Можно ли вынести класс в отдельный файл? А потом его подключить, а то у меня получается жуткая...

Как вынести в отдельный класс блок try . catch
Проблема следующая: на сервере есть много сервисов. Моя задача - перехватывать и обрабатывать...

7
bloomder
121 / 83 / 40
Регистрация: 08.01.2013
Сообщений: 376
Завершенные тесты: 1
23.04.2019, 10:20 2
Как то так:
Кликните здесь для просмотра всего текста

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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace TestConsole
{
    class Program
    {
        static string console;
        static bool flag;
        static bool flag1 = true;
        static bool flag2 = true;
        static int x = 0;
        static string rep;
        static void Main(string[] args)
        {
 
            //Работа с пользователем
            Console.WriteLine("Hi there!");
            Console.WriteLine("Welcome to 'Treasure hunters'!");
            
            while (flag1)
            {
 
                flag2 = true;
                while (flag2)
                {
                    Console.ResetColor();
                    Console.WriteLine("Enter the size of gaming area:");
                    Console.WriteLine("Size = ");
 
                    //Проверка ввода
                    console = Console.ReadLine();
 
                    Method_One();
 
                    Console.Clear();
 
                    Console.WriteLine("TREASURE HUNTERS");
                    string[,] arr2d = new string[x, x];
 
                    PrintField(arr2d, x);
 
                    MovementsAndSpawn(arr2d, x);
 
                    Console.WriteLine("If you want to play again enter 0");
                    Console.WriteLine("If you want to exit again enter 1");
 
                    flag = true;
 
                    while (flag)
                    {
                        rep = Console.ReadLine();
                        Method_Two();
                    }
                }
 
            }
        }
 
        private static void Method_Two()
        {
            if (!int.TryParse(rep, out int PlayAgain))
            {
                Console.WriteLine("You have to input an integer!");
                flag = false;
            }
            if (PlayAgain == 0)
            {
                flag = false;
            }
 
            if (PlayAgain == 1) { flag = false; }
            else
            {
                Console.WriteLine("You have to enter 0 or 1!");
            }
        }
 
        private static void Method_One()
        {
            if (!int.TryParse(console, out x))
            {
                Console.WriteLine("You have to input an integer!");
                flag2 = false;
            }
            else if (x > 35 || x < 3)
            {
                Console.WriteLine("Game area must be < 36 & > 2");
                Console.WriteLine(" ");
                flag2 = false;
            }
        }
 
        //Генерация игрового поля
        public static void PrintField(string[,] arr, int x)
        {
            for (int i = 0; i < x; i++)
            {
                for (int j = 0; j < x; j++)
                {
                    arr[i, j] = " * ";
                    Console.Write(arr[i, j]);
                }
                Console.WriteLine(" ");
            }
        }
 
        //Передвижение персонажа и спавн клада
        static void MovementsAndSpawn(string[,] arr, int x1)
        {
            Console.CursorVisible = false;
            ConsoleKeyInfo k;
 
            // Координаты игрока
            int playerX = 1;
            int playerY = x1;
 
            char playerChar = 'I';
            Console.ForegroundColor = ConsoleColor.DarkRed;
 
            int t = 1;
            int[] arr2 = new int[x1];
            for (int i = 0; i < x1; i++)
            {
                arr2[i] = t;
                t += 3;
            }
 
            // Координаты клада
            int flagX = arr2[new Random().Next(0, x1)];
            int flagY = new Random().Next(1, x1);
 
            Console.ForegroundColor = ConsoleColor.DarkYellow;
            Console.SetCursorPosition(flagX, flagY);
            //Console.Write("Х");
 
            do
            {
 
                Console.SetCursorPosition(playerX, playerY);
                Console.ForegroundColor = ConsoleColor.DarkRed;
                Console.Write(playerChar);
 
                k = Console.ReadKey(true);
                if (k.Key == ConsoleKey.UpArrow && playerY > 1)
                {
                    playerY--;
                    Console.ForegroundColor = ConsoleColor.DarkRed;
                    Console.SetCursorPosition(playerX, playerY + 1);
                    Console.Write("*");
 
                }
                else if (k.Key == ConsoleKey.DownArrow && playerY < x1)
                {
                    playerY++;
                    Console.ForegroundColor = ConsoleColor.DarkRed;
                    Console.SetCursorPosition(playerX, playerY - 1);
                    Console.Write("*");
                }
                else if (k.Key == ConsoleKey.LeftArrow && playerX > 3)
                {
                    playerX = playerX - 3;
                    Console.ForegroundColor = ConsoleColor.DarkRed;
                    Console.SetCursorPosition(playerX + 3, playerY);
                    Console.Write("*");
                }
                else if (k.Key == ConsoleKey.RightArrow && playerX < x1 * 3 - 2)
                {
                    playerX = playerX + 3;
                    Console.ForegroundColor = ConsoleColor.DarkRed;
                    Console.SetCursorPosition(playerX - 3, playerY);
                    Console.Write("*");
                }
 
                //Проверка на победу
                if (playerX == flagX && playerY == flagY)
                {
                    Console.Clear();
                    Console.ForegroundColor = ConsoleColor.DarkYellow;
                    Console.WriteLine("YOU WIN!");
                    break;
                }
 
                else
                {
                    Console.SetCursorPosition(0, x1 + 1);
                    Console.ForegroundColor = ConsoleColor.DarkYellow;
                    Distance(flagX, flagY, playerX, playerY);
                }
            } while (true);
            Console.CursorVisible = true;
        }
        //Расстояние от игрока до клада
        static double Distance(int flagX, int flagY, int playerX, int playerY)
        {
            double distance = Math.Sqrt(Math.Pow((flagX - playerX), 2) + Math.Pow((flagY - playerY), 2));
            Console.WriteLine("Distance to the treasure = " + (distance - distance % 0.01));
            return distance;
        }
    }
}
0
cheese2000
0 / 0 / 0
Регистрация: 13.04.2019
Сообщений: 11
23.04.2019, 22:31  [ТС] 3
В таком варианте возникает ошибка System.IndexOutOfRangeException: "Индекс находился вне границ массива."
на 133 строке
0
bloomder
121 / 83 / 40
Регистрация: 08.01.2013
Сообщений: 376
Завершенные тесты: 1
23.04.2019, 22:40 4
Цитата Сообщение от cheese2000 Посмотреть сообщение
В таком варианте возникает ошибка System.IndexOutOfRangeException: "Индекс находился вне границ массива."
на 133 строке
И правильно, так как в массиве идет отсчет с 0, а не с 1. Поправьте код на этот:
C#
1
int flagX = arr2[new Random().Next(0, x1-1)];
Добавлено через 1 минуту
C#
1
2
3
int [] mass = new int[3];
//mass[3]  Не существует
// Есть: mass[0], mass[1], mass[2] - в итоге 3
0
23.04.2019, 22:40
cheese2000
0 / 0 / 0
Регистрация: 13.04.2019
Сообщений: 11
23.04.2019, 22:50  [ТС] 5
Вы, наверное, не так поняли. Ошибка возникает при вводе некорректных данных(букв,отсутсвии ввода)
0
bloomder
121 / 83 / 40
Регистрация: 08.01.2013
Сообщений: 376
Завершенные тесты: 1
23.04.2019, 22:57 6
C#
1
int flagX = arr2[new Random().Next(0, x1-1)];
И мне кажется Random нужно создать экземпляр, в этом месте всегда будет одно и то же число. При запуске программы.
Вот код отдельный демонстрирующий это:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
 
namespace Random_Con
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(new Random().Next(0, 10));
            }
            Console.ReadKey();
        }
    }
}


Добавлено через 6 минут
Цитата Сообщение от cheese2000 Посмотреть сообщение
Ошибка возникает при вводе некорректных данных(букв,отсутсвии ввода)
Оборачивайте в блок try catch и метками возвращайте в нужный участок кода если неправильно. Посмотрите как тут сделано
1
cheese2000
0 / 0 / 0
Регистрация: 13.04.2019
Сообщений: 11
23.04.2019, 23:31  [ТС] 7
try catch помог. Спасибо)
0
bloomder
121 / 83 / 40
Регистрация: 08.01.2013
Сообщений: 376
Завершенные тесты: 1
23.04.2019, 23:38 8
Поправьте еще это:
C#
1
2
3
Random rand=new Random(); // Вынесите в тело класса.
int flagX = arr2[rand.Next(0, x1-1)];// Тут в большинстве случаев будут разные числа.
int flagX = arr2[new Random().Next(0, x1-1)];// А в этом коде всегда будет одно и то же число при запуске программы
0
23.04.2019, 23:38
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2019, 23:38

Можно ли вынести xml-комментарии в отдельный файл
Хочу писать xml-комментарии к своему коду, не только потому что можно потом документацию...

Вынести функцию в отдельный файл. Настроить связь
Есть небольшой код. using System; namespace Game_3._1 { class Program { ...

Как вынести класс в отдельный файл сочетаниями клавиш
Подскажите, в vs как вынести класс в отдельный файл сочетанием клавиш?


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru