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

Ограничение диапазона изменения переменной

10.06.2012, 00:15. Показов 11190. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть интервал допустим 70. Как в коде поставить чтоб он не превышал 70! только 70 не больше
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.06.2012, 00:15
Ответы с готовыми решениями:

Ограничение диапазона значений
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace...

Как избежать изменения одной переменной ссылочного типа, когда изменяется значение другой переменной
Подскажите, пожалуйста, как избежать изменения одной переменной ссылочного типа, когда изменяется значение другой переменной ссылочного...

Ограничение входящей переменной
нужно сделать так, чтоб для ввода переменных one/two/three, стояло ограничение . мне нужно чтоб выводилось когда выход за интервал, а...

7
 Аватар для Rockman
17 / 17 / 4
Регистрация: 16.09.2010
Сообщений: 128
10.06.2012, 00:47
Цитата Сообщение от xalf Посмотреть сообщение
Есть интервал допустим 70. Как в коде поставить чтоб он не превышал 70! только 70 не больше
Не совсем понятно о чем идет речь, хотелось бы более подробно. Пока по тому что известно:
C#
1
if(interval > 70) interval = 70
0
1 / 1 / 0
Регистрация: 20.05.2012
Сообщений: 204
10.06.2012, 01:03  [ТС]
Хм почему то не выходит серавно идет ускорение можете проверь вот нажмите допустим вправо и когда он сам пойдет вправо нажмите еще раз вправо он ка как бы ускорится!
Вложения
Тип файла: rar Debug.rar (25.0 Кб, 12 просмотров)
0
 Аватар для Rockman
17 / 17 / 4
Регистрация: 16.09.2010
Сообщений: 128
10.06.2012, 01:06
Цитата Сообщение от xalf Посмотреть сообщение
Хм почему то не выходит серавно идет ускорение можете проверь вот нажмите допустим вправо и когда он сам пойдет вправо нажмите еще раз вправо он ка как бы ускорится!
Возможно скорость придается до проверки, ну а вообще лучше бы код показали.
1
1 / 1 / 0
Регистрация: 20.05.2012
Сообщений: 204
10.06.2012, 01:13  [ТС]
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
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;
 
 
namespace SampleWFA
{
    public partial class Form1 : Form
    {
        char[,] Map;  //Карта // массив символов который определит положение элементов на карте но не в пиксилях а в своих у.е. 40*40 пикселей одна точка
        Bitmap bmp;   //Кодировка картинки // не а. создаем переменную типа Bitmap чтоб в ней хранить картинку грубо говоря холст на котором рисовать
        Graphics g;    //Подключения графики // а это в примитивной аллегории то чем рисовать
 
        Point pointHero;     //точка героя // да поле где хранятся координаты героя в координатах map'a
        Point pointStart;      //точка старта // да в тех же координатах
        Point pointExit;         //точка ФИНИША// да о том же
 
        Keys LastUserKey;     //Типо использования клавиш // последняя нажатая пользователем чтоб перемещался не как угорелый а через определенное время по таймеру
 
        Brush brushHero;              //Нарисовка  героя // переменная типо Brush хранить будет в себе текстуру картинки героя
        Brush brushBackground;      //Рисовать фон //...
        Brush brushWall;             //Рисовать стены
        Brush brushStart;           //Рисовать старт
        Brush brushExit;           //Рисовать выход
 
        public Form1()
        {
            InitializeComponent();
            if (Up.Interval > 70) Up.Interval = 70;
            if (Down.Interval > 70) Up.Interval = 70;
            if (Left.Interval > 70) Up.Interval = 70;
            if (Right.Interval > 70) Up.Interval = 70;
            if (timer1.Interval > 70) Up.Interval = 70;
 
            //все что дальше это начальные установки большей частью своей переопределяемые в дальнейшем
            //определены здесь чтоб не возникало ошибок компилятора мол используется без инициализации
            Map = new char[50,50];  //Создается массив тобишь размер карты 10 на 10 пикселей// не пикселей а элементов размером 40*40пикселей
            // щелкни в VS в ресурсах на картине или на файл Resource  сверху вот там они все и живут эти бедные) элементы-спрайты
            bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);   //Это не понял// а это в переменной bmp создаем картинку размером с picturebox чтоб картинка ьыла сугубо с него размером
            //кстати в глупой алегории picturebox - это рамка
            g = Graphics.FromImage(bmp);      //Это что можно было как я понял использовать формат bmp// нет. это чтоб то с помощью чего ты будешь рисовать (g) знал что рисует в объекте bmp(это лишь имя его)
 
            pointHero = new Point(0, 0);    //начальная точка героя//по умолчанию пусть 0,0 потом же все равно поставим как надо))
 
            brushHero = new TextureBrush(Image.FromFile("Герой.png"));   //Путь к героя ну и т.д// ага а вот теперь кисть определяется конкретно каждая чтоб не загружать ее каждый раз при прорисовке
            brushBackground = new TextureBrush(Image.FromFile("Фон.bmp"));// и да они кисти суть текстуры загружаемые с файла
            brushWall = new TextureBrush(Image.FromFile("Стены.png"));
            brushStart = new TextureBrush(Image.FromFile("Старт.bmp"));
            brushExit = new TextureBrush(Image.FromFile("Выход.bmp"));
        }
 
        private void стартToolStripMenuItem_Click(object sender, EventArgs e)     //Кнопка старта
        {
            bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);// а теперь конкретный размер ну и пофиг что опять то же самое
            g = Graphics.FromImage(bmp);// о том же
            g.Clear(Color.Black);// сделать холст черным ну просто как очистить на всякий случай
            pictureBox1.Image = bmp;// установим холст в рамку т.е. bmp в picturebox
 
            LoadMission();// вызываем загрузку карты из файла реализации разные могут быть
 
            LastUserKey = Keys.A;// да все равно какая неиспользуемая за стоять ничего не делать  //ВОТ    Это я вообще не понял что такое
            //дык последняя кнопка нажатая игруном может быть любой в идиале. а мы используем в игре суть стрелки нам пока другие не надо а клавиша А суть лубая лишь бы ничего не делать
            //вот что и знаяит любая не задействованная
            pointHero = pointStart;// когда загрузили карту можем установить колординаты начальные героя пусть на место старта
            timer1.Start();// запускаем таймер по каждому тику которого будет изменяться что-то на форме-экране
            Up.Stop(); Down.Stop(); Left.Stop(); Right.Stop();
        }
 
        private void стопToolStripMenuItem_Click(object sender, EventArgs e) //СТОП
        {
            timer1.Stop();
        }
 
        private void выходToolStripMenuItem_Click(object sender, EventArgs e) //ВЫХОД
        {
            Application.Exit();
        }
 
        private void Form1_KeyDown(object sender, KeyEventArgs e)  //НЕ знаю// событие для формы кнопка нажата какая-то
            //кликни в дизайнере формы на саму форму открой панель свойства и щелкни сверху на молнии там увидишь все события на которые форма реагирует
            //практически все они будут пусты за исключением KeyUp KeyDown
        {
            LastUserKey = e.KeyCode;// от параметра события е сохраним нажатую кнопку чтоб при тике таймера знать куда бежать
            if (e.KeyCode == Keys.Up)
            {
                Up.Start();
                Down.Stop();
                Left.Stop();
                Right.Stop();
            }
 
            if (e.KeyCode == Keys.Down)
            {
                Down.Start();
                Up.Stop();
                Left.Stop();
                Right.Stop();
            }
 
            if (e.KeyCode == Keys.Left)
            {
                Left.Start();
                Up.Stop();
                Down.Stop();
                Right.Stop();
            }
 
            if (e.KeyCode == Keys.Right)
            {
                Right.Start();
                Up.Stop();
                Down.Stop();
                Left.Stop();
             } 
        }
 
        private void Form1_KeyUp(object sender, KeyEventArgs e)     //НЕ знаю//  -//-
        {
            
            LastUserKey = Keys.A;// да все равно какая неиспользуемая за стоять ничего не делать// ага как отпустили кнопку т.е. UP ее в переменную установим пофиг какое знаяение лишь бы ничего не делать
               if (e.KeyCode == Keys.Up) 
      {
          Up.Start();
         Down.Stop();
          Left.Stop();
         Right.Stop();
       }
 
              if (e.KeyCode == Keys.Down) 
        {
          Down.Start();
          Up.Stop();
          Left.Stop();
          Right.Stop();
        }
           
            if (e.KeyCode == Keys.Left) 
    {
        Left.Start();
        Up.Stop();
        Down.Stop();
        Right.Stop();
    }
            
         if (e.KeyCode == Keys.Right) 
    {
        Right.Start();
        Up.Stop();
        Down.Stop();
        Left.Stop();
    } 
 
        }
 
        private void timer1_Tick(object sender, EventArgs e)   //Таймер если герой равняется таймеру то вылаит сообщение ????// а вот это главный обработчик
            //если в дизайнере выберешь Timer и откроешь его свойства то там будет Intrval в которм в милисекундах задан период через который происходит тик как в часах
            //там стоит по-моему 200
        {
            PaintMap();// вызываем метод перерисовать поле игры
            if (pointHero == pointExit)// да если герой попал в точку выхода то...
            {
                timer1.Stop();//таймер остановить чтоб не тикал и ничего более не менялось
                MessageBox.Show("Вы победили!");//вывести мессагу ура победа))
                return;//ну и закончить обработчик т.к. смысла продолжать передвигать что-то уже нет
            }
            //в противном случае
            HeroStep();//вызвать метод пересчитывающий следующее положение героя
        }        
 
        private void HeroStep()    // настройка ходьбы героя// метод где определяется следущая позиция героя
        {
            switch (LastUserKey)       // немогу понять// устя такая конструкция лучше msdn тебе я ее вряд ли объясню. суть сложный if. Ветвление происходит не по условию а по значению
            {
                case Keys.Down:   //Опиывает что делает кнопка стрелочка в низ// да значение клавиша вниз
                    if (pointHero.Y < 50 && Map[pointHero.X,pointHero.Y + 1]!='1')   //можно передвигаться на 1 пиксель и только по единичкам(1)//конечно меньше 10
                 //если высотаГероя не верхняя граница и сверху нет стены       
                    {
                        pointHero.Y++;  //НЕ знаю что это //то координату героя увеличть на 1 но не пиксель а позицию в координатах 1*1позиции - это 40*40 пикселей
                    }
                    break;
                case Keys.Left:  //Аналогично)
                    if (pointHero.X > 0 && Map[pointHero.X - 1, pointHero.Y] != '1') 
                    {
                        pointHero.X--;
                    }
                    break;
                case Keys.Right:      //Аналогично
 
                    if (pointHero.X < 50 && Map[pointHero.X + 1, pointHero.Y] != '1') 
                        {
                            pointHero.X++;
                        }                
                    break;//синтаксис так положено а в общем break прерывает или пару switch-case или цикл
                case Keys.Up:         //аналогично
                    if (pointHero.Y > 0 && Map[pointHero.X, pointHero.Y - 1] != '1') // а здесь измини >0
                    {
                        pointHero.Y--;
                    }
                    break;   //Не знаю
                 default:   //не знаю//по умолчанию бишь лубая другая // так элемент синтаксиса
                    break;  //не знаю
            }
        } 
 
        private void PaintMap()    //Обрисовка карты
        {
            //Pen myPen = new Pen(Color.Yellow, 1);
            //e.Graphics.DrawEllipse(myPen, 0, 0, 200, 220);
            Brush br = null;      //типо присваевается значение нул только хз для чего // а все для того же чтоб компилятор не мудрил моль создана переменная а не инициализирована
            for (int i = 0; i < 50; i++)
            {
                for (int j = 0; j < 50; j++)//перебираем все по строкам столбцам в позиции
                {
                    switch (Map[i,j])//опять переключатель по значению
                    {
                        case '0':    //Рисуется фон// да как в readme тебе писал
                            br = brushBackground;// в вышеупомянутый br суем уже конкретную текстуру
                            break;
                        case '1':      //РИСУЕТСЯ стена
                            br = brushWall;
                            break;
                        case '2':      //Рисуется старт
                            br = brushStart;
                            break;
                        case '3':          //РИсуется ФИНИШ
                            br = brushExit;
                            break;
                        default: 
                            br = new SolidBrush(Color.Black);     //не знаю// а это опять если не то и не друго пусть хоть что-то будет
                            break;
                    }
                    g.FillRectangle(br, i * 10, j * 10, 10, 10);    //не знаю// в нашем bmp с использованием контента g рисуем закрашеный прямоугольник кистью br и координатами i j масштабируемыми на размер элемента 40*40 ну и размер его 40*40
                }
            }
 
            g.FillRectangle(brushHero, pointHero.X * 10, pointHero.Y * 10, 10, 10);   // не знаю// тоже самое но рисуем уже героя в его координатах помни что координаты героя в элементах пизиции а в пиксели переводится масштабированием бишь умножением на размер картинки
 
            pictureBox1.Refresh();        //типо обновить пикчер бокс ток хз зачем// чтоб новая картинка появилась не дожидаясь системных инвалидов т.е. принудительно
        }
 
        private void LoadMission()      //загрузка уровня
        {
            using (StreamReader sr = new StreamReader("Map.txt"))  //это как я понял из этого тхт файла и обрисовывается вся карта.//ага
            {
                string str="";                                   //все что  тут написано я не понял :)написано я не понял//создали вспомагательные переменные str куда строку с файла кинем 
                int i=0, j=0;                                     // и i j для циклов, строка нужна чтоб не заморачиваться на символы перевод строки и конец строки
 
                while (sr.Peek() != -1)//а куда while делся// его для того чтоб читать пока не кончится файл// ну зная размер файла можно и без него в принципе но до кучи пусть так
                {
                    str = sr.ReadLine();//читаем с потока sr строку
                    for (i = 0; i < 50; i++)//разбираем строку по-элементно создаем цикл по переменной i
                    {
                        if (str[i] == '2')//дополнительные установки если там 2 то
                            pointStart = new Point(i, j);//это точка старта
                        if (str[i] == '3')//если 3 то
                            pointExit = new Point(i, j);//это точка выхода
                        Map[i, j] = str[i];// и для всех перенести все в массив Map
                    }
                    j++;//перейти к следующей строке
                }
            }
        }
 
        private void Up_Tick(object sender, EventArgs e)
        {
            Point cor = pointHero;
            if (pointHero.Y > 0 && Map[pointHero.X, pointHero.Y - 1] != '1')
            if (cor.Y == '1') Up.Stop();
            else
            {
               cor.Y--;
                pointHero = cor;
            }
            
 
            }
 
        private void Down_Tick(object sender, EventArgs e)
        {
            Point cor = pointHero;
            if (pointHero.Y < 50 && Map[pointHero.X, pointHero.Y + 1] != '1')
            if (cor.Y == '1') Down.Stop();
            else
            {
                cor.Y++;
                pointHero = cor;
            }
        }
 
        private void Left_Tick(object sender, EventArgs e)
        {
            Point cor = pointHero;
            if (pointHero.X > 0 && Map[pointHero.X - 1, pointHero.Y] != '1')
            if (cor.Y == '1') Left.Stop();
            else
            {
                cor.X--;
                pointHero = cor;
            }
        }
 
        private void Right_Tick(object sender, EventArgs e)
        {
            Point cor = pointHero; 
            if (pointHero.X < 50 && Map[pointHero.X + 1, pointHero.Y] != '1')
            if (cor.X == '1') Right.Stop();
            else
            {
                cor.X++;
                pointHero = cor;
            }
        }
        }
 
        }
0
 Аватар для Rockman
17 / 17 / 4
Регистрация: 16.09.2010
Сообщений: 128
10.06.2012, 01:18
C#
1
2
3
4
5
            if (Up.Interval > 70) Up.Interval = 70;
            if (Down.Interval > 70) Up.Interval = 70;
            if (Left.Interval > 70) Up.Interval = 70;
            if (Right.Interval > 70) Up.Interval = 70;
            if (timer1.Interval > 70) Up.Interval = 70;
Каждую проверку вставляйте в код соответствующего таймера. Только меняйте интервал не только у таймера Up а у того, что проверяете.
0
1 / 1 / 0
Регистрация: 20.05.2012
Сообщений: 204
10.06.2012, 12:00  [ТС]
вот сделал так для каждого
C#
1
2
3
4
5
6
7
8
9
10
11
        private void Right_Tick(object sender, EventArgs e)
        {
            Point cor = pointHero;
            if (Right.Interval > 70) Right.Interval = 70;
            if (pointHero.X < 50 && Map[pointHero.X + 1, pointHero.Y] != '1')
            if (cor.X == '1') Right.Stop();
            else
            {
                cor.X++;
                pointHero = cor;
            }
но почемуто не работает

Добавлено через 10 часов 33 минуты
Есть идеи?
0
 Аватар для Rockman
17 / 17 / 4
Регистрация: 16.09.2010
Сообщений: 128
10.06.2012, 12:07
Да, дело тут совсем не в интервале, а в том, что условие выполняется у вас несколько раз, в момент первого нажатия и второго. Можно убрать автоматическое движение, оставьте движение пока не отпустишь кнопку. Или же используйте флаги, которые будут проверять, что объект в данный момент движется и нужды запускать таймер еще раз нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.06.2012, 12:07
Помогаю со студенческими работами здесь

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

Ограничение диапазона вводимых символов в DataGridView
Снова поднимаю эту тему. Постоянно добивают всякие косяки. Суть - есть датагрид, в него можно пихать все что угодно, но мне нужно...

Ограничение диапазона вводимых чисел
Здравствуйте. У меня возникла проблема с ограничением длины вводимого числа. По условию задачи, мне нужно сделать калькулятор на...

Ограничение диапазона данных, доступных для просмотра
Здравствуйте. Есть книга Эксель, в которой два листа. Из первого данные в виде таблицы копируются во второй. Причем диапазон таблицы во...

Ограничение для величины на два диапазона в поиске решения
Ребята, добрый день! Подскажите по возможности быстрее, как реализовать ограничение для величины в поиске решения, чтобы она принимала...


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

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