Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > Полезные функции

Полезные функции Выкладываем полезные функции, чтоб не изобретать велосипед заново...

Ответ
 
Опции темы
Старый 01.01.2012, 12:36   #1
polopok
ПроЭктировщик
 
Регистрация: 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
polopok
ПроЭктировщик
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ABTOMAT (03.01.2012)
Старый 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 пользователя(ей) сказали Спасибо Платон Александрович за это полезное сообщение:
Alex__Noc (15.06.2012), L-ee-X (07.03.2012), LLI.T.A.L.K.E.R. (01.01.2012), pepel (05.08.2012), Reks888 (01.01.2012)
Старый 01.01.2012, 14:11   #4
HolyDel
 
Регистрация: 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 за это полезное сообщение:
LLI.T.A.L.K.E.R. (01.01.2012), moka (08.01.2012)
Старый 01.01.2012, 16:59   #5
radiobutton
Бывалый
 
Регистрация: 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
polopok
ПроЭктировщик
 
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений
(для 71 пользователей)
Ответ: Примеры сокращения кода :

приятно ,что тема "пошла" . признаться написанное мною имело цель удобства ... но несомненно есть более изящные решения и я в свою очередь благодарен всем отписавшимся в их вариантах решений.
в конечном случае выбор остаётся за пользователем.
конечно я не утверждал что мои решения Абсолютны ,дескать делай как я.
предлагаю поделиться вам уважаемые опытные программисты своими решениями ,пусть небольшими примерами ...
спасибо.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
LLI.T.A.L.K.E.R. (01.01.2012)
Старый 01.01.2012, 23:22   #8
radiobutton
Бывалый
 
Регистрация: 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
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: Примеры сокращения кода :

Сообщение от 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 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
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Примеры сокращения кода :

с постфиксным инкрементом будет от 1 до 4 гулять. с префиксом от 0 до 3. в первоисточнике было от 0 до 3, не?
(Offline)
 
Ответить с цитированием
Старый 03.01.2012, 13:58   #11
radiobutton
Бывалый
 
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений
(для 546 пользователей)
Ответ: Примеры сокращения кода :

Сообщение от HolyDel Посмотреть сообщение
с постфиксным инкрементом будет от 1 до 4 гулять. с префиксом от 0 до 3. в первоисточнике было от 0 до 3, не?
Я думал наоборот.
если ++n это префиксный.
(Offline)
 
Ответить с цитированием
Старый 03.01.2012, 14:24   #12
HolyDel
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (08.01.2012)
Старый 08.01.2012, 01:21   #13
reumep
Знающий
 
Аватар для reumep
 
Регистрация: 04.11.2011
Сообщений: 285
Написано 66 полезных сообщений
(для 159 пользователей)
Ответ: Примеры сокращения кода :

Проще писать понятный отформатированный код, не?
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо reumep за это полезное сообщение:
ffinder (13.04.2012), Mr_F_ (08.01.2012)
Старый 08.01.2012, 05:56   #14
moka
.
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mr_F_ (08.01.2012)
Старый 08.01.2012, 13:37   #15
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 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)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 14:46.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com