IPB

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Reply to this topicStart new topic
> Или я дурак или одно из двух, Простой вопрос по Дэлфи
Throutle
сообщение 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!
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 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
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
tolich
сообщение 20 Apr 2012, 21:52
Сообщение #3

😸🧡✊✌️
Сообщений: 16 027
Спасибо сказали: 2672 раза




random(2) надо.


--------------------
Я слежу за тобой!
* tolic.narod.ru

Lu...pa...gamhi...dho?
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 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
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
tolich
сообщение 20 Apr 2012, 22:08
Сообщение #5

😸🧡✊✌️
Сообщений: 16 027
Спасибо сказали: 2672 раза




>> ">0" не надо.
Как раз надо. Или "=0", или "=1", или "<1". Это Pascal, здесь Integer нельзя использовать вместо Boolean.


--------------------
Я слежу за тобой!
* tolic.narod.ru

Lu...pa...gamhi...dho?
Go to the top of the pageAdd Nick
 
+Quote Post
Throutle
сообщение 20 Apr 2012, 22:22
Сообщение #6

Freedom Fighter
Сообщений: 1 850
Спасибо сказали: 4014 раза




Цитата(Guevara-chan @ 20 Apr 2012, 22:58) *
">0" не надо. И еще автору кода хорошо бы проспаться, как по мне: "Shapes.Top:=Shapes[1].Top-1;" - это как-то совсем угнетающе...


Скован в выборе способа, сказали таким макаром двигать...
По поводу проспаться не помешало бы, но и сделай скидку на то, что я этим занимаюсь первый год по 1 часу раз в две недели, с толпой народа...

Цитата(tolich @ 20 Apr 2012, 23:08) *
>> ">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!
Go to the top of the pageAdd Nick
 
+Quote Post
tolich
сообщение 20 Apr 2012, 22:45 (Сообщение отредактировал tolich - 20 Apr 2012, 22:46)
Сообщение #7

😸🧡✊✌️
Сообщений: 16 027
Спасибо сказали: 2672 раза




Я давно писал на Delphi и совсем не помню, можно ли там перегружать operator []. Если нельзя, то к одной и той же переменной ты обращаешься с индексом и без, я не знаю, какое обращение правильное.


--------------------
Я слежу за тобой!
* tolic.narod.ru

Lu...pa...gamhi...dho?
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 20 Apr 2012, 23:32
Сообщение #8

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




насколько я помню, в дельфи нельзя перегружать ничего
Go to the top of the pageAdd Nick
 
+Quote Post
hippocamus
сообщение 20 Apr 2012, 23:53
Сообщение #9

пират с чёрной меткой
Сообщений: 23 646
Спасибо сказали: 12923 раза




В Делфи начиная с 2006 перегружать операторы можно. Только зачем?
Но попробуй убрать один randomize. А лучше оба из цикла. Сбрось генератор 1 раз при инициализации.


--------------------
Давший быка на убой не выпросил и печень на жаркое.
Go to the top of the pageAdd Nick
 
+Quote Post
Etoprostoya
сообщение 20 Apr 2012, 23:58
Сообщение #10

Etoprostostatus
Сообщений: 8 527
Спасибо сказали: 15833 раза




Цитата
Или я дурак или одно из двух

А где опрос?


--------------------
Etoprostopodpis'


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 21 Apr 2012, 00:02
Сообщение #11

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




если бы ты учил матан (конкретно - пределы), то знал бы почему его нет smile.gif
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 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. Байт, но приятно.

Цитата(tolich @ 21 Apr 2012, 00:45) *
Если нельзя, то к одной и той же переменной ты обращаешься с индексом и без, я не знаю, какое обращение правильное.

И самое смешное, что ровно до этого автор пишет: "Shape1.Top:=Shape1.Top+1". Кстати говоря, это называется "Inc(Shape1.Top)".


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 21 Apr 2012, 11:04
Сообщение #13

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




Цитата(Guevara-chan @ 21 Apr 2012, 09:41) *
Байт, но приятно.
это уже от оптимизации зависит. емнип, рандом выдает int16, так что как минимум 2 байта там будет.
Go to the top of the pageAdd Nick
 
+Quote Post
FBX
сообщение 21 Apr 2012, 11:39
Сообщение #14

🐓🐓🐓🐓🐓🐓🐓
Сообщений: 1 845
Спасибо сказали: 1570 раз




Цитата
Inc(Shape1.Top)

Вроде так нельзя делать, т.к. это property, реализованный через сеттеры и геттеры, а может в новых дельфях можно, я даже и не знаю.


--------------------
using namespace fbx;


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 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
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Berserker
сообщение 21 Apr 2012, 12:21
Сообщение #16

Immortal
Сообщений: 1 468
Спасибо сказали: 1151 раз




Цитата
Вирт центрального процессора же

Это неудачный юмор?

По теме: одно из двух.

Цитата
Вроде так нельзя делать, т.к. это property, реализованный через сеттеры и геттеры, а может в новых дельфях можно, я даже и не знаю.

Верно. И INC - предопределённая процедура.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 21 Apr 2012, 12:40
Сообщение #17

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




Цитата(Berserker @ 21 Apr 2012, 12:21) *
Это неудачный юмор?
наверно все же намек на то, что особенности синтаксиса языка каким-то макаром влияют на результирующий код. тот же inc должен работать со свойствами, имеющими сет и гет одновременно и являющимися по сути синтаксическим сахаром.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 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
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Berserker
сообщение 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). Свойства по ссылке передаваться не могут по понятным причинам. В конечном итоге они могут вести к функциям.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 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
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 25 April 2024 - 18:29
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика