Или я дурак или одно из двух, Простой вопрос по Дэлфи |
Здравствуйте, гость ( Вход | Регистрация )
Или я дурак или одно из двух, Простой вопрос по Дэлфи |
20 Apr 2012, 21:19
Сообщение
#1
|
|
Freedom Fighter Сообщений: 1 850 Спасибо сказали: 4014 раза |
Задача чуть-чуть сложнее, но это не суть... Заткнулся на кусочке где нужно шэйп раз в шаг таймера двигать на 1 вверх или вниз и на 1 влево или вправо, вроде всё должно быть просто, но не работает: постоянно движется вверх-влево... Никак не пойму в чём может быть проблема...
Код procedure TForm1.Timer1Timer(Sender: TObject);
begin randomize; if random(1)>0 then Shape1.Top:=Shape1.Top+1 else Shapes.Top:=Shapes[1].Top-1; randomize; if random(1)>0 then Shape1.Top:=Shape1.Top+1 else Shapes.Top:=Shapes[1].Top-1; end; -------------------- In this wild and woolly universe of ours, there are only three things you can count on: your brains, your bros, and your bike! |
|
|
20 Apr 2012, 21:51
(Сообщение отредактировал Guevara-chan - 20 Apr 2012, 21:51)
Сообщение
#2
|
|
•●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5934 раза |
Тебя совсем не смущает, что вариант ф-ии 'random' для целых значений выдает диапазон от 0 до аргумента - 1 ?
-------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
20 Apr 2012, 21:52
Сообщение
#3
|
|
😸🧡✊✌️ Сообщений: 16 027 Спасибо сказали: 2672 раза |
random(2) надо.
-------------------- |
|
|
20 Apr 2012, 21:58
(Сообщение отредактировал Guevara-chan - 20 Apr 2012, 22:01)
Сообщение
#4
|
|
•●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5934 раза |
">0" не надо. И еще автору кода хорошо бы проспаться, как по мне: "Shapes.Top:=Shapes[1].Top-1;" - это как-то совсем угнетающе...
-------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
20 Apr 2012, 22:08
Сообщение
#5
|
|
😸🧡✊✌️ Сообщений: 16 027 Спасибо сказали: 2672 раза |
>> ">0" не надо.
Как раз надо. Или "=0", или "=1", или "<1". Это Pascal, здесь Integer нельзя использовать вместо Boolean. -------------------- |
|
|
20 Apr 2012, 22:22
Сообщение
#6
|
|
Freedom Fighter Сообщений: 1 850 Спасибо сказали: 4014 раза |
">0" не надо. И еще автору кода хорошо бы проспаться, как по мне: "Shapes.Top:=Shapes[1].Top-1;" - это как-то совсем угнетающе... Скован в выборе способа, сказали таким макаром двигать... По поводу проспаться не помешало бы, но и сделай скидку на то, что я этим занимаюсь первый год по 1 часу раз в две недели, с толпой народа... >> ">0" не нада Как раз надо. Или "=0", или "=1", или "<1". Это Pascal, здесь Integer нельзя использовать вместо Boolean. Угу тут нтак не кати,разве только окольными путями. Так как правильното будет? -------------------- In this wild and woolly universe of ours, there are only three things you can count on: your brains, your bros, and your bike! |
|
|
20 Apr 2012, 22:45
(Сообщение отредактировал tolich - 20 Apr 2012, 22:46)
Сообщение
#7
|
|
😸🧡✊✌️ Сообщений: 16 027 Спасибо сказали: 2672 раза |
Я давно писал на Delphi и совсем не помню, можно ли там перегружать operator []. Если нельзя, то к одной и той же переменной ты обращаешься с индексом и без, я не знаю, какое обращение правильное.
-------------------- |
|
|
20 Apr 2012, 23:32
Сообщение
#8
|
|
Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз |
насколько я помню, в дельфи нельзя перегружать ничего
|
|
|
20 Apr 2012, 23:53
Сообщение
#9
|
|
пират с чёрной меткой Сообщений: 23 646 Спасибо сказали: 12922 раза |
В Делфи начиная с 2006 перегружать операторы можно. Только зачем?
Но попробуй убрать один randomize. А лучше оба из цикла. Сбрось генератор 1 раз при инициализации. -------------------- Давший быка на убой не выпросил и печень на жаркое.
|
|
|
20 Apr 2012, 23:58
Сообщение
#10
|
|
Etoprostostatus Сообщений: 8 527 Спасибо сказали: 15833 раза |
Цитата Или я дурак или одно из двух А где опрос? -------------------- Etoprostopodpis'
|
|
|
21 Apr 2012, 00:02
Сообщение
#11
|
|
Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз |
если бы ты учил матан (конкретно - пределы), то знал бы почему его нет
|
|
|
21 Apr 2012, 09:41
(Сообщение отредактировал Guevara-chan - 21 Apr 2012, 10:27)
Сообщение
#12
|
|
•●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5934 раза |
Цитата Или "=0", или "=1", или "<1". Это Pascal, здесь Integer нельзя использовать вместо Boolean. А, ну да, Вирт центрального процессора же... Тогда "=0", там хоть можно обойтись and reg, reg вместо cmp reg, imm. Байт, но приятно. Если нельзя, то к одной и той же переменной ты обращаешься с индексом и без, я не знаю, какое обращение правильное. И самое смешное, что ровно до этого автор пишет: "Shape1.Top:=Shape1.Top+1". Кстати говоря, это называется "Inc(Shape1.Top)". -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
21 Apr 2012, 11:04
Сообщение
#13
|
|
Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз |
|
|
|
21 Apr 2012, 11:39
Сообщение
#14
|
|
🐓🐓🐓🐓🐓🐓🐓 Сообщений: 1 845 Спасибо сказали: 1570 раз |
Цитата Inc(Shape1.Top) Вроде так нельзя делать, т.к. это property, реализованный через сеттеры и геттеры, а может в новых дельфях можно, я даже и не знаю. -------------------- using namespace fbx;
|
|
|
21 Apr 2012, 11:56
(Сообщение отредактировал Guevara-chan - 21 Apr 2012, 12:08)
Сообщение
#15
|
|
•●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5934 раза |
Цитата емнип, рандом выдает int16, так что как минимум 2 байта там будет. Изменяет: Цитата(http://www.delphibasics.ru/Random.php) function Random ( LimitPlusOne : Integer ) : Integer ...А Integer нынче приравнян к Int32... Цитата Вроде так нельзя делать, т.к. это property, реализованный через сеттеры и геттеры, а может в новых дельфях можно, я даже и не знаю. AFAIR эту проблемe решили вводом полновесной перегрузки: INC же оператором считается ? -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
21 Apr 2012, 12:21
Сообщение
#16
|
|
Immortal Сообщений: 1 468 Спасибо сказали: 1151 раз |
Цитата Вирт центрального процессора же Это неудачный юмор? По теме: одно из двух. Цитата Вроде так нельзя делать, т.к. это property, реализованный через сеттеры и геттеры, а может в новых дельфях можно, я даже и не знаю. Верно. И INC - предопределённая процедура. -------------------- |
|
|
21 Apr 2012, 12:40
Сообщение
#17
|
|
Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз |
Это неудачный юмор? наверно все же намек на то, что особенности синтаксиса языка каким-то макаром влияют на результирующий код. тот же inc должен работать со свойствами, имеющими сет и гет одновременно и являющимися по сути синтаксическим сахаром.
|
|
|
21 Apr 2012, 13:33
(Сообщение отредактировал Guevara-chan - 21 Apr 2012, 13:53)
Сообщение
#18
|
|
•●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5934 раза |
Цитата Это неудачный юмор? Это recordatio stultitia. Причем бессмысленной и беспощадной. Кстати, коли уж мы заговорили о булевой логике: Код Macro RandomSgn() : (1 | -Random(1)) : EndMacro ; Выдает единицу со случайным знаком. ...Так что никаких (y)if(f)’ов там, по большому счету, не нужно. Но сможет ли ОП адаптировать такой сложный код ? Цитата И INC - предопределённая процедура. Вроде местный аналог макрокоманды, если не ошибаюсь. -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
21 Apr 2012, 13:56
Сообщение
#19
|
|
Immortal Сообщений: 1 468 Спасибо сказали: 1151 раз |
Цитата Это recordatio stultitia. Причем бессмысленной и беспощадной. А если на русском? Это такой язык, который не японский, латинский и не английский. Цитата ...И никаких (y)if(f)’ов здесь, по большому счету, не нужно. Макросы? Помилуй, Хрона, начни уже читать о проектировании языков программирования, безопасной разработке программного обеспечения и доказательном программирования. Иначе всю жизнь вокруг тактов, байтов и низкоуровневых вещей ходить будешь. Код FUNCTION RandSign: INTEGER; BEGIN RESULT := 1 - 2 * Random(2); END; Цитата Вроде местный аналог макрокоманды, если не ошибаюсь. Ошибаешься. Это предопределённая процедура System.INC. Она раскрывается компилятором в коде, но это деталь реализации определённого компилятора. Цитата наверно все же намек на то, что особенности синтаксиса языка каким-то макаром влияют на результирующий код. тот же inc должен работать со свойствами, имеющими сет и гет одновременно и являющимися по сути синтаксическим сахаром. INC это предопределённая процедура, принимающая аргумент по ссылке (VAR). Свойства по ссылке передаваться не могут по понятным причинам. В конечном итоге они могут вести к функциям. -------------------- |
|
|
21 Apr 2012, 14:02
(Сообщение отредактировал Guevara-chan - 21 Apr 2012, 14:05)
Сообщение
#20
|
|
•●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5934 раза |
Цитата А если на русском? Хирт - вуй. Все по аналогии (же). Цитата Макросы ? Помилуй, Хрона, начни уже читать о проектировании языков программирования, безопасной разработке программного обеспечения и доказательном программирования. Ну, почитала: http://nemerle.org/Macros Цитата Она раскрывается компилятором в коде, но это деталь реализации определённого компилятора. Тогда, простите, может еще к System.Pi следует относиться как функции ? Цитата Свойства по ссылке передаваться не могут по понятным причинам. По ссылке, в данном случае, может быть передан адрес соотв. поля в памяти. ...Я уж не говорю, что вообще-то должны, ибо на то оно и ЯВУ. Абстракция. -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
Текстовая версия | Сейчас: 25 April 2024 - 10:34 |
Copyright by Алексей Крючков
Programming by Degtyarev Dmitry |