|
Полезные функции Выкладываем полезные функции, чтоб не изобретать велосипед заново... |
01.01.2012, 12:36
|
#1
|
ПроЭктировщик
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений (для 71 пользователей)
|
Примеры сокращения кода :
Y = ( KeyDown(203) ) - ( KeyDown(205) )
TurnEntity entity_name,0, Y ,0
; мерцание объекта
EntityAlpha entity_name, Sin( MilliSecs() )*0.5+0.5
; прибавление и сброс на 0
if KeyHit(57) and nomer <4 Then nomer = nomer+1 Else if nomer >3 Then nomer =0
;пустой цикл: ожидает нажатие мыши или клавиатуры,завершает программу
Repeat :Until GetMouse()<>0 Or GetKey()<>0 :End
;цвет меняется синусоидально
Color 0,0 , 64 +Sin ( MilliSecs() /10)*32
пока всё...
|
(Offline)
|
|
01.01.2012, 13:09
|
#2
|
ПроЭктировщик
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений (для 71 пользователей)
|
Ответ: Примеры сокращения кода :
; клавиши управления
Select True
Case KeyDown(205 ) : x = x +1; вправо
Case KeyDown(203 ) : x = x -1; влево
Case KeyDown(208 ) : y = y +1; вниз
Case KeyDown(200 ) : y = y -1; вверх
End Select
;меняем значение переменой
A = Not A
;незабываем использовать двоеточие . пример Типы:
Type tip Field x,y,nom End Type
tip.tip = New tip : tip\x=x : tip\y=y : tip\nom=nom
For tip.tip = Each tip : Print tip\x+" "+tip\y+" "+tip\nom : Next
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
01.01.2012, 14:09
|
#3
|
Нуждающийся
Регистрация: 05.10.2011
Адрес: Россия, Южно-Сахалинск
Сообщений: 66
Написано 42 полезных сообщений (для 83 пользователей)
|
Ответ: Примеры сокращения кода :
это не сокращение кода, это называется говнокод
Сообщение от polopok
Y = ( KeyDown(203) ) - ( KeyDown(205) )
TurnEntity entity_name,0, Y ,0
|
1) скобки не нужны
2) TurnEntity относительно тяжелая, потому в данном случае надо If Y Then TurnEntity...
Сообщение от polopok
; прибавление и сброс на 0
if KeyHit(57) and nomer <4 Then nomer = nomer+1 Else if nomer >3 Then nomer =0
|
number = number + KeyHit(57)
If number >= 4 Then number = 0
а если граничное значение степень двойки, то вообще замечательно
number = (number + KeyHit(57)) And (4 - 1)
Сообщение от polopok
;пустой цикл: ожидает нажатие мыши или клавиатуры,завершает программу
Repeat :Until GetMouse()<>0 Or GetKey()<>0 :End
|
это есть в справке
Сообщение от polopok
;цвет меняется синусоидально
Color 0,0 , 64 +Sin ( MilliSecs() /10)*32
|
спасибо КЭП, без тебя мы не поняли что Sin это синус
Сообщение от polopok
; клавиши управления
Select True
Case KeyDown(205 ) : x = x +1; вправо
Case KeyDown(203 ) : x = x -1; влево
Case KeyDown(208 ) : y = y +1; вниз
Case KeyDown(200 ) : y = y -1; вверх
End Select
|
хорошо сократил, аж на две строчки больше чем с If
Сообщение от polopok
;меняем значение переменой
A = Not A
|
не меняем, а отрицаем, удобно для [1, 0] флажков, но тогда лучше так
A = 1 - A
т.к. компилятор блица тупой и умеет not только для условий, соответственно генерит избыточный код
Сообщение от polopok
;незабываем использовать двоеточие . пример Типы:
Type tip Field x,y,nom End Type
tip.tip = New tip : tip\x=x : tip\y=y : tip\nom=nom
For tip.tip = Each tip : Print tip\x+" "+tip\y+" "+tip\nom : Next
|
ну а это яркий пример говнокода, вообще не читабельно
ЗЫ
Пешы ищо ;-) А лучше не пиши, плохой пример подаешь нубам.
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо Платон Александрович за это полезное сообщение:
|
|
01.01.2012, 14:11
|
#4
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Примеры сокращения кода :
можно еще:
if KeyHit(57) Then nomer = nomer+1:nomer = nomer % 4;
на нормальных языках было бы как то так:
if(KeyHit(KEY::SPACE))nomer = ++nomer % 4;
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
|
|
01.01.2012, 16:59
|
#5
|
Бывалый
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений (для 546 пользователей)
|
Ответ: Примеры сокращения кода :
Сообщение от HolyDel
можно еще:
if KeyHit(57) Then nomer = nomer+1:nomer = nomer % 4;
на нормальных языках было бы как то так:
if(KeyHit(KEY::SPACE))nomer = ++nomer % 4;
|
nomer++ % 4
а не так разьве?)
|
(Offline)
|
|
01.01.2012, 17:27
|
#6
|
Нуждающийся
Регистрация: 05.10.2011
Адрес: Россия, Южно-Сахалинск
Сообщений: 66
Написано 42 полезных сообщений (для 83 пользователей)
|
Ответ: Примеры сокращения кода :
Сообщение от radiobutton
nomer++ % 4
а не так разьве?)
|
Нет, в постфиксной записи инкрементирование выполнится после деления по модулю, по крайней мере гарантии нет (зависит от компилятора), а в инфиксной определенно первым будет инкремент.
|
(Offline)
|
|
01.01.2012, 20:00
|
#7
|
ПроЭктировщик
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений (для 71 пользователей)
|
Ответ: Примеры сокращения кода :
приятно ,что тема "пошла" . признаться написанное мною имело цель удобства ... но несомненно есть более изящные решения и я в свою очередь благодарен всем отписавшимся в их вариантах решений.
в конечном случае выбор остаётся за пользователем.
конечно я не утверждал что мои решения Абсолютны ,дескать делай как я.
предлагаю поделиться вам уважаемые опытные программисты своими решениями ,пусть небольшими примерами ...
спасибо.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
01.01.2012, 23:22
|
#8
|
Бывалый
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений (для 546 пользователей)
|
Ответ: Примеры сокращения кода :
Сообщение от Платон Александрович
Нет, в постфиксной записи инкрементирование выполнится после деления по модулю, по крайней мере гарантии нет (зависит от компилятора), а в инфиксной определенно первым будет инкремент.
|
kogda tak
m = n++ % 4
to +1 budit vipolneno posle % 4?
esli n=3, to m = 4? (ili m = 0 ? xD)
posledniy raz s etoy temoy stalkivalsya goda 4 nazad>< poetomu ne pomnu uje
sor za tranlit
|
(Offline)
|
|
03.01.2012, 04:22
|
#9
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: Примеры сокращения кода :
Сообщение от radiobutton
kogda tak
m = n++ % 4
to +1 budit vipolneno posle % 4?
esli n=3, to m = 4? (ili m = 0 ? xD)
posledniy raz s etoy temoy stalkivalsya goda 4 nazad>< poetomu ne pomnu uje
sor za tranlit
|
Вот ты и попался! Стремительно и быстро поясни с какого тостера ты это писал?!
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
03.01.2012, 13:53
|
#10
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Примеры сокращения кода :
с постфиксным инкрементом будет от 1 до 4 гулять. с префиксом от 0 до 3. в первоисточнике было от 0 до 3, не?
|
(Offline)
|
|
03.01.2012, 13:58
|
#11
|
Бывалый
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений (для 546 пользователей)
|
Ответ: Примеры сокращения кода :
Сообщение от HolyDel
с постфиксным инкрементом будет от 1 до 4 гулять. с префиксом от 0 до 3. в первоисточнике было от 0 до 3, не?
|
Я думал наоборот.
если ++n это префиксный.
|
(Offline)
|
|
03.01.2012, 14:24
|
#12
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Примеры сокращения кода :
можно перфиксную форму разложить так:
temp1 = n+1
temp2 = temp1 % 4
n = temp2
а постфиксную:
temp1 = n % 4
n = temp1
n = n +1
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
08.01.2012, 01:21
|
#13
|
Знающий
Регистрация: 04.11.2011
Сообщений: 285
Написано 66 полезных сообщений (для 159 пользователей)
|
Ответ: Примеры сокращения кода :
Проще писать понятный отформатированный код, не?
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо reumep за это полезное сообщение:
|
|
08.01.2012, 05:56
|
#14
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Примеры сокращения кода :
Всё из первого и второго поста ужасный говнокод.
Учитывая кучу проблем с инпутом, нужно обязательно выносить клавиши инпута в отдельные переменные. И лишь при уверенном редком использовании в цикле лишь один раз клавиши, можно писать функцию доступа к данным инпута прямо в теле условий и т.п.
Например такое:
Select True
Case KeyDown(205 ) : x = x +1; вправо
Case KeyDown(203 ) : x = x -1; влево
Case KeyDown(208 ) : y = y +1; вниз
Case KeyDown(200 ) : y = y -1; вверх
End Select
|
Нужно как минимум переписать вот так:
keyRight = KeyDown(205)
keyLeft = KeyDown(203)
keyUp = KeyDown(200)
keyDown = KeyDown(208)
x = keyLeft - keyRight
y = keyUp - keyDown
Не будет проблем с инпутом, да и читать такое удобнее.
Но это лишь простой пример, даже такой не однозначен, и во многих ситуациях не корректен.
Остальные есть ещё хуже..
Я бы такое в "Полезные Функции" не постил.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
08.01.2012, 13:37
|
#15
|
Бывалый
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений (для 866 пользователей)
|
Ответ: Примеры сокращения кода :
нубско но
if keyhit(2)
a=1
end if
if not keyhit(2)
a=0
end if
можно в
if keyhit(2)
a=1
else
a=0
end if
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:44.
|