Вторник, 16 Апреля 2024, 14:15

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 5 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
Форум игроделов » Записи участника » trew [98]
Результаты поиска
trewДата: Четверг, 12 Апреля 2012, 14:14 | Сообщение # 81 | Тема: FreeBasic
почетный гость
Сейчас нет на сайте
Quote
Ошибаетесь. К тому спору я отношения не имею.


Возможно, но боязнь дать ссылки на свои многотысячные проги, которые ты якобы переносил на другие платформы, говорит о том, что ты боишься , потому что я сразу пойму кто хозяин . И уж потом эта фраза не прокатит: "Ошибаетесь. К тому спору я отношения не имею."

Quote
Нет, как товарищ trew, который проигнорировал мой предыдущий пост и пытается перевести тему в другое русло.


И на что там дать ответ? На это:

Quote
Ктож ему мешал учить WinAPI?


Так я отвечал уже вроде, но ладно повторю:
Quote

Костыли в пуре типа этого:

Code
PtInRect_(@re, pt\x | (pt\y<<32)

Когда в нормальных языках указывается так как записано в справочнике по API. На Freebasic:

PtInRect(@R,P)

А да этого вообще у этой функции с какого-то перепугу на пуре было три параметра (справочники по API пурю не указ!):


Достаточно понятно?

Quote
Совместим с допотопным QuickBASIC, поэтому волочит за собой все древние "фишки", которые давно устарели и только затрудняют программирование. К примеру меня раздражает объявление переменных через Dim, да еще и с полным именем типа. И спрашивается, зачем Then после If? Опять атавизм первых версий бейсика? Это скока букаф надо с клавы ввести?


Я всегда думал, что совместимость с другими языками это достоинство. Раз ты думаешь по другому, тут я не буду спорить.

Насчет IF-ENDIF , возможно тут ты прав. Хотя мне иногда удобно записать так:

Code
If a=5 then beep


У в ПУРЕ только так:

Code
if a=5
beep
endif


Так что тут двояко я бы сказал. Кстати современный Small Basic от мелкософта тоже выбрал связку IF-THEN-ENDIF . Или ты и их обвинишь в аватавизме? Кстати если брать в расчет твои понимания программирования, то твой ПУР со своим легендарным примером из пустого, никому не нужного окна по кол-ву строчек отдыхает по сравнению со Small Basic Там все это дело записывается в одну строчку:

Code
Turtle.Show()


Кстати при таком коде еще и черепашка по середине будет! Однако все понимают что Small Basic - это перевалочный пункт (язык для обучения), и никому и в голову не придет тролить по сети и доказывать что это проффесиональный язык программирования. Про Freebasic я тоже говорю такое же , цитата из моей статьи:

Quote
Синтаксис языка удобочитаем, прост , легок для изучения. И все же его отличия от С подобных языков не такие пространственные, а уж с Visual Basic и подавно намечается больше сходства, чем различия. Изучив FreeBasic, вы осознаете алгоритмы принятых стандартов программирования, и легко сможете впоследствии перейти на С++ и другие, заслуженные временем языки, если в том окажется надобность.


ССЫЛЬ

А оператор DIM используется в FREEBASIC, POWERBASIC, VISUALBASIC как минимум. И от тебя первого слышу жалобу biggrin

Quote
Есть версии только для DOS (нахрена эта древность нам нада?)


Не говори за всех! Ты наверно просто не в курсе, что до сих пор продаются нетбуки с системой FREEDOS , а на FREEDOS Freebasic работает нормально. Ведь это мы с тобой живем в стране, в которой можем позволить купить или своровать винду. Есть страны, в которых люди покупают слабенькие компы с операционной системой FREEDOS .

Quote
Нет нормальной среды разработки. К примеру FbEdit, нет многих нужных фишек, типа подсказок к функциям, выделения цветом функций, окна автозавершения и многого, многого другого.


Вранье от начала до конца!

Quote
Лично у меня не получается ввести русский текст в редактор кода, это нормально?


Может тебе сначала нужно научиться переключать раскладку?
trewДата: Среда, 11 Апреля 2012, 22:49 | Сообщение # 82 | Тема: FreeBasic
почетный гость
Сейчас нет на сайте
Quote
Первый случай меряния БЭЙСИКАМИ


Если интересно, вот здесь есть подобное. Там, как и здесь меня больше всего повеселило:

Quote (jangle)
....нет ООП


Quote (HAWK)
Тоже неправы. Есть ООП. Вот пример:

Interface Inter_Face
MSG(Message.s)
EndInterface

Structure OBJ
VTable.l
Function.l[SizeOf(Inter_Face)/4]
EndStructure

Procedure Message(*t.Inter_Face, Message.s)
MessageRequester("", Message.s)
EndProcedure

Procedure Constructor()
*OBJ.OBJ = AllocateMemory(SizeOf(OBJ))
*OBJ\VTable = *OBJ+OffsetOf(OBJ\Function)
*OBJ\Function[0] = @Message()
ProcedureReturn *OBJ
EndProcedure

Procedure Destructor(*OBJ.OBJ)
FreeMemory(*OBJ.OBJ)
EndProcedure

*MyOBJ.Inter_Face = Constructor()
*MyOBJ\MSG("Hallo, dies ist ein Testtext")
Destructor(*MyOBJ)


Только здесь PBPROG хоть свой изврат не назвал OOP biggrin

HAWK там расчитывал, что никто это проверять не будет и оказался прав (на дурака влетел, как говорят).

Для тех кто не понимает о чем речь:

Конструктор (Constructor), как и деструктор (Destructor) должен вызываться автоматически при создании и уничтожении объекта, а здесь один вызывается вначале и присваивается указателю, другой в конце (в общем та же процедура). biggrin Более того, класс это нечто закрытое, для всего, кроме объекта, через который вызывается. Они для того и нужны, чтобы защитить данные. Но в данном примере это суперкласс! Его метод Message можно вызывать как хочешь, хоть через объект, хоть напрямую, передав параметры biggrin Спрашивается зачем нужен такой класс? Правильно чтобы блефануть перед остальными, проверять ведь врядли кто будет, ну а проверят, заболтает или поведет в сторону, прямо как здесь товарисч PBPROG. Они очень схожи по манерам (скорее всего одна личность), так что можно в какой-то степени считать данную тему лишь продолжением предыдущей biggrin

Вообще на Луркоморье было в какой-то степени правдиво сказано как о языке, так и о прихожанах с русского форума ПУРА, но фаны поначалу правили, а потом поняли, что как не правь все равно шила в мешке не утаишь, решили просто удалить (луркоморье ведь подобно википедии):

Вот цитатка (конечно я выбрал самое нужное crazy ):

Quote
PureBASIC (пур, пурик, ПБ) — надстройка над фасмом, своеобразный язык программирования подчеркнуто среднего уровня, ведущий свои корни с AmigaOS. Меметичен, в первую очередь, активным форсом на быдлопроектах вроде ответов@mail.ru и гуглответов. Задайте там вопрос вроде: "мне 14 лет, я страдаю аутизмом и приступами паники, меня бьют в музыкальной школе и у меня не хватает денег на WoW, поэтому я хочу написать свой; с чего начать?" - и обязательно получите ссылку от агентов ZOG, удачно использующих тягу растущего организма к непонятному. Таким макаром уже набралось порядочное комьюнити детей, решающих бесполезные задачи бесполезным инструментом. Семантически, бейсиком не является - часть Basic в названии лишь намекает на некоторое сходство синтаксисов. Впрочем, взамен есть возможность конители с указателями, так что можно невозбранно использовать родные низкоабстрактные сервисы операционных систем и прочие конительные штучки. Проприетарен и весьма платен, но в этой стране как обычно.

Компилятор почти никогда не делает то, о чем его не просят. Даже поддержку плагинов для нестандартных форматов данных надо впиливать вручную.
Нет ООП. И не будет. Никогда. Создатели PB являются ярыми противниками этой концепции, так как она противоречит здравому смыслу ассемблерщика.
Местами идущее вразрез с логикой стремление к чистоте синтаксиса.
Язык не поддерживает тип Any, и даже из встроенных библиотек эта полу-ООП’шная ересь потихоньку выкорчевывается, ибо не сурово.
Нету перегрузки процедур.
Нет поддержки пространств имен\модулей.
Не поддерживает инкрементальной компиляции.
Не поддерживается определение макрокоманды из другой макрокоманды.
Из-за особенностей реализации With…EndWith не работает в макросах.
Нет возможности узнать тип переменной после ее определения. Изменить, впрочем, тоже нельзя . Рождённое однажды живо до смерти.
Якобы насаждаемая идеология «делай, что хочешь» частенько пресекается параноидальным отладчиком.
Передачу параметра по указателю надо оформлять вручную (или через макросы).
Определенные проблемы с совместимостью версий, из-за которых с недавних пор выпилена доставлявшая документация по внутренностям библиотек.
Без сторонних средств (TailByte, к примеру) нельзя делать статические библиотеки.
Фимозность организации некоторых библиотек: так, Movie под Вендой зачем-то использует DirectShow, в результате чего оно совершенно непригодно для работы с MP3.
Нельзя определить факт неиспользования подсистемы. SubSystem("") всегда равно #False.
Перечисления не поддерживают степенной шаг.
Поддерживаются только С- и Std- конвенции вызова.
Операторы бинарной логики не применимы к числам с плавающей точкой, причем компилятор в этом отношении особенно упорен и стоит до конца.
Через одно место поддержка определения статического импорта (проще сидеть на прототипах).
trewДата: Среда, 11 Апреля 2012, 10:19 | Сообщение # 83 | Тема: Анимация "салют" (FreeBasic)
почетный гость
Сейчас нет на сайте
Анимация "салют" (FreeBasic)


Данный код был написан на QuickBASIC автором Andrew L. Ayers. Он нормально компилировался и так , достаточно было при компиляции указать соответсвующий ключик, но для тех кто только начинает знакомиться с FreeBasic, решил подправить , чтобы пример нормально запускался на последней версии.



Code

'**********************************************
' Description : Explosions - VGA mode 13 special effect
' Written by : Andrew L. Ayers
' Date : 10/22/96
'
' The name says it all!
'
' You may use this routine in any manner you like, as long
' as you give credit in an appropriate manner. Have phun!
'
Screen 13

Dim As Short x(50), y(50), xv(50), yv(50), ox(50), oy(50)
Dim As Short dir1,vel,tx,ty,c,done

Do
  Cls
  For t As Integer = 0 To 50
   x(t) = 0
   y(t) = 0
   dir1 = Rnd * 6.28: vel = Int(Rnd * 5) + 1
   xv(t) = Sin(dir1) * vel
   yv(t) = Cos(dir1) * vel
  Next
  '
  tx = Int(Rnd * 320)
  ty = Int(Rnd * 200)
  c = 31: done = 0

  Locate 1, 6: Print "Explosions by Andrew L. Ayers"
  Locate 23, 8: Print "Press any key to exit demo"

  Do
   For t As Integer = 0 To 50
    Line (ox(t) + tx, oy(t) + ty)-(x(t) + tx, y(t) + ty), 0
    ox(t) = x(t): oy(t) = y(t)

    x(t) = x(t) + xv(t)
    y(t) = y(t) + yv(t)

    Line -(x(t) + tx, y(t) + ty), Int(Rnd*15)
   Next
   c = c - 1: If c < 16 Then done = 1
   If Inkey <> "" Then done = 2
   Sleep 25
  Loop Until done
Loop Until done = 2
trewДата: Вторник, 10 Апреля 2012, 14:23 | Сообщение # 84 | Тема: FreeBasic
почетный гость
Сейчас нет на сайте
Quote
Про модификацию второй строки я указал или нет?


Может тут не понял, что ты пытался сказать... Объясню еще раз задачу:

Надо вывести в консоль (в случае с purebasic можно в окно DEBUG) листинг своего собственного кода. Запусти мой пример, и поймешь что все выводится, до последней закорючки. В твоем случае код выводится не полностью. Задача понятна? И заметь не я начал по поводу кол-ва строк кода создания проги QUINE. А теперь , когда ты понял, что с задачей (сделать код из меньшего кол-ва строчек или хотя бы столько же) в принципе не справиться средствами пурика, начинаешь базар в сторону тянуть.

Quote
Да и зачем зависимости? Если есть PureBasic с нормальной кроссплатформенной библиотекой, для работы прог на котором, зависимости не нужны.


Это мы уже поняли, или так и будешь как попугай повторять? Да ты меня убедил! Пиши на пурике, для тебя в ближайшем будующем разглядеть что-то другое нет возможности, да тебе и нужно. Надеюсь по поводу спора мы решили, если напишешь код QUINE или сможешь переписать на пур примеры, которые я тебе показывал выше: добро пожаловать! Будет интересно посмотреть.


Сообщение отредактировал trew - Вторник, 10 Апреля 2012, 15:22
trewДата: Вторник, 10 Апреля 2012, 13:51 | Сообщение # 85 | Тема: FreeBasic
почетный гость
Сейчас нет на сайте
Тот код, который указал я:

Code
#Define P(X)?X:?"P("#X ")":sleep    
    P("#Define P(X)?X:?""P(""#X "")"":sleep")


Тот код, который указываешь ты:

Code
#Define P(X)?X:?"P("#X ")":sleep     
     P("#""P(""#X "")"":sleep")


Только слепой не заметит, что ты просто провоцируешь.

Quote
Пурик видно и дня не учил, раз не знаешь о том, что нужно использовать не Delay(), а Input().


Глупость какая-то! Какая разница чем я торможу прогу для просмотра инфы в консоли? Кстати в большинстве примеров, они выполняют именно ту задачу, какая поставлена: ПАУЗА (2 секунды)->ВЫХОД

Quote
Думаешь что под винду целесообразно писать используя GTK? Ну-ну.


А как же такие проги как GIMP ? Ничего, никто не жалуется. Да считаю целесообразным, да и красивее GTK виджеты, чем контролы винды.

trewДата: Вторник, 10 Апреля 2012, 12:08 | Сообщение # 86 | Тема: FreeBasic
почетный гость
Сейчас нет на сайте
Quote
x.s="Debug x":Debug x


И че ты тут вывел? Нужно , чтобы отображалась вся строка, понимаешь вся!
Состоит код из:

x.s="Debug x":Debug x

Должно точно также и вывестись

А не только Debug x

Ты бы хоть для начала почитал что такое QUINE . Вопрос остается в силе, кстати ты сам меряться хотел выше tongue

Quote
А в FreeBasic нет такой библиотеки и перенос будет связанно с изрядной правкой кода.


Ничего не нужно править, используя GTK.
Разработчики FreeBasic лучше будут заниматься усовершенствованием языка, а не тупо клепать обертки API, от которых ты так тащишься

Вообще фанов пурика невозможно убедить, правду пишут, что они похожи на сектантов.
Хочется сказать тебе PBPROG, что программирование только тогда приносит удовольствие,
когда твой код выглядит красивым и при этом ты не замечаешь что уже написал не одну тыщу строк.
Более того ощущение от того что ты сам написал, а не использовал готовые библиотеки еще больше подогревает.
Разработчики языков включают в свои детища различные вкусности, для того чтобы сделать код еще более красивым,
а написание удобным!

Не удержался , несколько примеров:

Преобразование чисел в строки в FB можно так:

Code
? 1 & "00"
sleep


Можно так:

Code
? Str(1) + "00"
sleep


У PB только так:

Code
OpenConsole()
Print(Str(1) + "00")
Delay(1000)
CloseConsole()


Вызов функций и процедур в FB можно как со скобками так и без:

Code
Function a() As String
  Return "FreeBasic"
End Function

? a
Sleep


В PB только со скобками, при том понятие процедур и функций слито в одно (то есть процедура всегда что-то возвращает)):

Code
Procedure.s a()
    ProcedureReturn "PureBasic"   
EndProcedure

OpenConsole()
Print(a())
Delay(1000)
CloseConsole()


У FB 15 встроенных типов данных (Byte , UByte , Short , UShort , Integer , UInteger , Long , Ulong , LongInt , ULongInt , Single , Double , String , ZString , WString)
Это не только упрощает понимание кода, но они действительно нужны, например:

Простая нитривиальная задача получить беззнаковое число из знакового

Code
Dim i As Long = &hffff0000
Dim i2 As ULong = i
? i,i2
Sleep


Результат: -65536 4294901760

У PB 13 типов данных (Byte,Ascii,Character,Word,Unicode,Character,Long,Integer,Integer,Float,Quad,Double,String)

Чтобы прошлый пример воспроизвести на PB , нужен изврат, типа этого:

Code
i.i = $ffff0000
i2.q = i & $ffffffff  ; объявить тип QUAD 8 байтовый и обработать оператором AND - супермегафича (такое впечатление что на ограниченном ASM пишешь)!
OpenConsole()
Print(Str(i) + " " + Str(i2)) ; разница вывода в консоль очевидна по отношению к FB  
Delay(2000)
CloseConsole()


Теперь пример, какой на пуре без процедур вообще не сляпать:

Code
Dim As integer i = 1000
For i As Integer = 1 To 10
   ? i
Next
? i
Sleep


Объявление и заполнение массивов на FB :

Code
Dim As integer i(4) = {5,20,31,4,5}
For a As Integer = 0 To 4
  ? i(a)
Next
Sleep


Объявление и заполнение массивов на PB:

Code
Dim i.l(4)

OpenConsole()
For a = 0 To 4
    Read.l i(a)
Next
For a = 0 To 4
    PrintN( Str(i(a)))
Next  
Delay(2000)
CloseConsole()

DataSection  
   Data.l 5, 20, 31, 4, 5
EndDataSection


Или заполнять массивы вручную, типа:

Code
i(0) = 5
i(1) = 20
...


что при большом кол-ве заполнения ячеек приведет к полному одурению.

Кстати на нормальных языках СИ, Delphi делается примерно так же как на FB. И даже у ASM инициализация массивов делается проще чем у пура

Code
...

i dd 23,15,44,66,9

...


Кроме того массивы в FB могут иметь нижнюю границу, отличную от нуля:

Code
Dim as Byte M(5 to 10)


У PB всегда нижняя граница нуль.

Заполнение структур на FB

Code
Type AA
   As Integer x
   As Byte b
   As String*10 s
End Type

Dim a As AA = Type(3,5,"Freebasic")'заполнение структуры
? a.x,a.b,a.s 'вывод в консоль
Sleep


Как видно, достаточно удобно, особенно при заполнении объемных структур.
Можно вообще начальными значениями инициализировать в FB:

Quote
Type AA
As Integer x=3
As Byte b=5
As String s="Freebasic"
End Type

Dim a As AA
? a.x,a.b,a.s
Sleep


У пура можно только вручную, вызывая каждое поле структуры(примитив, что скажешь):

Quote
Structure MY
a.l
b.b
s.s
EndStructure

a.MY
a\a=10
a\b=5
a\s="Purebasic"

OpenConsole()
PrintN( Str(a\a) + " " + Str(a\b) + " " + a\s)
Delay(2000)
CloseConsole()


Доступ к полю через слеш нечто!

Пространства имен на FB:

Code
Namespace MyName
     Sub Print()
         ? "this procedure"
     End Sub
     Dim a As Integer
End Namespace

MyName.Print
Sleep


На PB такого нет и врядли будет!

Области видимости SCOPE

Code
Dim a As Integer=55
Scope  
   Dim a As String="Hello"
   ? a
End Scope
? a
Sleep


И такого на PB такого нет и врядли будет!

Блок Select Case

Code
Dim A As Ubyte =15
Select Case A
     Case Is <5
         Print "A<5"
     Case Is >=15
         Print "A>=15"
     Case Else
         Print "Not found" 'Не найдено
End Select
Sleep


Заметили Case is очень удобная фишка! На PB только прямое равенство:

Code
Select a
   Case 1
   Case 6
EndSelect


Теперь о графике. Буду объективным. Встроенных 3D функций в FB нет, в PB есть и можно создать что-то на них, и даже на оф.сайте видел какую-то бродилку.
Я в 3D полный нуб, так что о качестве функций и возможностях судить не могу. Но если верить заявлению участника ant0N с этого сайта, впечатления неважные:

http://gcup.ru/forum/64-21343-1

Что касается 2D , то тут у FB сделано намного проще. Пример вывода простого круга:

Code
Screen 14 'подключаем экран
Circle (160, 120), 100, 15 'Рисуем простой круг
sleep


Вот самый простой пример на PB , уж вроде проще никак, хотя могу ошибаться:

Code
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0  
   MessageRequester("Error","Can't open DirectX",0)  
   End  
EndIf  
If OpenWindow(0, 0, 0, 640, 480, apptitle.s,  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)  
EndIf  
If OpenWindowedScreen(WindowID(0),0,0,640, 480,0,0,0)  
   Repeat  
     FlipBuffers():ClearScreen(RGB(0,0,0))  
     If StartDrawing(ScreenOutput())  
       Circle(100,100,100,$ffffff)
       StopDrawing()  
     EndIf  
   Until WaitWindowEvent() = #PB_Event_CloseWindow  
EndIf


Вот правда пример с помощью оберток GDI из библиотеки 2dDrawing.
Однако игроделами, GDI никогда не используется для анимированных игр из-за низкой производительности:

Code
If OpenWindow(0, 0, 0, 200, 200, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
     If StartDrawing(WindowOutput(0))
       Circle(100, 100, 100, $ffffff)
     StopDrawing()  
     EndIf
     Repeat
       Event = WaitWindowEvent()
     Until Event = #PB_Event_CloseWindow
EndIf


Вот на FB простая анимация движения круга:

Code
Screen 14  
Dim x As Integer = -50
Do
Cls
Circle (x, 120), 100, 15
If x>400 Then x=-50
x+=1
Sleep(20)
Loop Until MultiKey(1)'Esc


Ограченная работа с макросами у PB вообще удивляет, если учесть что PB транслятор в FASM (который славится макросами)

Quote
Поищи по нету проги. Их там навалом.


Опять-двадцать пять. Я написанной на пуре не нашел ни одной кроссплатформенной и 64 битного приложения тоже нет.
Тебе что трудно дать ссылки на свои проги? Я же не прошу исходников. cool
trewДата: Вторник, 10 Апреля 2012, 00:39 | Сообщение # 87 | Тема: FreeBasic
почетный гость
Сейчас нет на сайте
Quote
Про интерфейсы что-то слышал?
Или такой вариант видел?


Конечно видел, таким извратом не захочешь пользоваться, уж лучше процедурный стиль.
Это написали чтобы лишний показать У НАС ЕСТЬ! А чего есть, часто не понимают biggrin

Вот пример класса с Private и Public функциями, сможешь изобразить такое своими прототипами? И это я простенький пример, но думаю ты и с ним порядком засядешь.

Code
Type testing
   Public:
   number As Integer
   Declare Sub Setnome(ByRef newnome As String)
   Declare Function Getnome()As String
   Private:
   nome As String '<- приватная переменная, доступ можно получить только функциями из класса
   Declare Function GetH() As String '<- приватная функция
End Type

Sub testing.setnome( ByRef newnome As String )
   this.nome = newnome
End Sub

Function testing.Getnome()As String
   Return GetH()
End Function

Function testing.GetH()As String
   Return nome
End Function

Dim As testing myVariable
myVariable.setNome("FreeBasic")
? myVariable.GetNome()
Sleep


Но если справишься вот по серьезнее (способ получить адреса статических приватных процедур):

Code
Type Object

    Enum handlertype
   ht_default
   ht_A
   ht_B
    End Enum

    Declare Constructor( ByVal ht As handlertype = ht_default)

    Declare Sub handler()

Private:
    Declare Static Sub handler_default( ByRef obj As Object )
    Declare Static Sub handler_A( ByRef obj As Object )
    Declare Static Sub handler_B( ByRef obj As Object )
    handler_func As Sub( ByRef obj As Object )

End Type

Constructor Object( ByVal ht As handlertype )
    Select Case ht
    Case ht_A
   handler_func = @Object.handler_A
    Case ht_B
   handler_func = @Object.handler_B
    Case Else
   handler_func = @Object.handler_default
    End Select
End Constructor

Sub Object.handler()
    handler_func(This)
End Sub

Sub Object.handler_default( ByRef obj As Object )
    Print "Handling using default method"
End Sub

Sub Object.handler_A( ByRef obj As Object )
    Print "Handling using method A"
End Sub

Sub Object.handler_B( ByRef obj As Object )
    Print "Handling using method B"
End Sub

Dim objects(1 To 4) As Object => _
    { _
   Object.handlertype.ht_B, _
   Object.handlertype.ht_default, _
   Object.handlertype.ht_A _
    }

For i As Integer = 1 To 4
    Print i,
    objects(i).handler()
Next i
sleep


А вообще ты собирался меряться кол-вом строк по программе QUINE ?

Code

#Define P(X)?X:?"P("#X ")":sleep   
   P("#Define P(X)?X:?""P(""#X "")"":sleep")


Здесь 2 строчки, пойдешь на рекорд?

Quote
Использование имеющихся функций здорово экономит время по сравнению с разработкой проги полностью на WinAPI.


Для свистелок и перделок да, для всего остального ни в коем разе

Quote
Видимо с пуриком ты работал пару дней от силы не больше. Иначе такого не написал бы.


Вот ЗДЕСЬ не считая четырех все проги написаны мною на пуре. Ты сможешь написать такое за пару дней? Да они небольшие, может неприглядные и малонужные, но от тебя вообще вижу только треп.

Ссылки давай в студию где ты пользуешь суперфичами: кроссплатформенность, 64х битные приложения, юникод проги, которые я не смогу написать на Freebasic.

Я перечисляя достоинства FreeBasic, все кроме перегрузки операторов использую. А от твоих суперфич какая польза если ими никто не пользуется?
Это как светящий фонарик в яркий солнечный день:

Светит , не мешает, но и нафиг не нужен biggrin


Сообщение отредактировал trew - Вторник, 10 Апреля 2012, 00:42
trewДата: Понедельник, 09 Апреля 2012, 21:25 | Сообщение # 88 | Тема: FreeBasic
почетный гость
Сейчас нет на сайте
Quote
А вот еще один маразм, нельзя в структурах использовать строковые переменные.


Ты уже начинаешь врать! АБЫ как да?
Кому интересно, тот дочитает до конца. DiG. GeRR в последнем сообщении объяснил что к чему.
А вообще ты хоть на другие языки посматривал? Видел как выделяются строковые переменные в структурах в СИ?
Если в Freebasic структуриванные переменные выделяются динамически с помощью ALLOCATE , то нужно использовать строки с определенной длиной.
Если же специальным оператором NEW , то длина не важна.

А так в твоем примере, никто не мешает выделять строки и в Freebasic

Quote
type Mytype
s as String
end type

dim S As Mytype
print len(s.s)
sleep


Quote
И нужно заметить что в структурах можно размещать не только строки, но и статические и динамические массивы, связанные списки, другие структуры и т. д.


Это все можно размещать в структурах Freebasic + функции , перечисления. А в пурике это нельзя, и врядли когда будет можно.

Да что там говорить , на уровне языка у пуря не сделаны обычные переносы строк в коде.

Костыли в пуре типа этого:

Code
PtInRect_(@re, pt\x | (pt\y<<32)


Когда в нормальных языках указывается так как записано в справочнике по API. На Freebasic:

PtInRect(@R,P)

А да этого вообще у этой функции с какого-то перепугу на пуре было три параметра (справочники по API пурю не указ!):

Code
PtInRect_(re , pt\x , pt\y)


Ко всему этому:

Постоянная задница с совместимостью версий, при том на нормальных языках это только в одном направлении, на пуре в обоих. И это уже легенда. Никто никогда не примет пур как настоящий коммерческий язык уже хотя бы по этому. Это все у фанатиков пурика заоблачные надежды.

Quote
Не зря же придумали разные библиотеки типа MFC и другие.


Конечно не зря и в Freebasic обильно юзают разные библиотеки. Более того, постоянно пишутся заголовки под новые библиотеки.
Только тебя то вроде как вообще не должно волновать, ты не дал ссылки ни на одно свое произведение, одна болтовня!

Кстати я и не спорю, в языке FreeBasic есть баги (в каком языке их нет), но писать на нем приятнее и удобнее чем на пуре. Для тебя может и доставляет удовольствие собирать пазлы из 2 половинок, а мне это просто скучно! Какой интерес писать проги из всего готового? Взять хотя бы готовую пуриковскую либу MOVIE , ну напишешь ты быдлокодерский проект простенького видеоплеера за пару часов и что? Твоих успехов там 10% за гуишную обетку в духе win95. А если что-то посерьезнее, то преимущества пуря заканчиваются сразу. Да и не научишься на пуре ничему. Все навыки что там приобретешь, окажутся бесполезными, если наконец откроешь глаза и захочешь писать на СИ или DELPHI .


Сообщение отредактировал trew - Понедельник, 09 Апреля 2012, 22:26
trewДата: Воскресенье, 08 Апреля 2012, 11:21 | Сообщение # 89 | Тема: FreeBasic
почетный гость
Сейчас нет на сайте
Quote
Мне вот интересно, он сейчас ООП или нет?


Если имеется ввиду такое как у JAVA , то конечно нет. У Freebasic своеобразные классы, пока без наследования. С выходом новой версии будет наследование. Пока все тестируется, пишется документация, обновляются заголовки для новых версий библиотек и пр.

Вот ЗДЕСЬ список изменений всех версий.

Вообще БЕТУ 0.24 можно уже попробовать:

для Windows

для Linux

Единственно в ней не включены многие заголовки и библиотеки. Ее сделали для отлова багов с наследованием.

Это вы задавали вопросы на форуме freebasic ? Я посмотрел, вы ведь кодили на паскале. Я смотрю вы интересовались и PB и FB. Как оно смотреть в сторону бейсиков после паскаля? Ведь привычка программировать в строгом стиле врядли уйдет. Все равно потянет на привычный синтаксис. Я например не хочу уходить пока с бейсика как минимум из-за привычки регистроНЕзависимости и своеобразной свободы в стиле программирования.
Надо пишу в OOP стиле, надо в процедурном.
trewДата: Суббота, 07 Апреля 2012, 00:04 | Сообщение # 90 | Тема: Программирование
почетный гость
Сейчас нет на сайте
Quote (counter)
Согласен с Serg1971, DarkBasicPro и для меня хороший язык,долго искал с чего бы начать,и в С++ пробовал, а потом нашел его,вот уже полтора года на нем пишу Так что действительно языки нельзя делить на лучший и худший ( BASS, )


Неужели наконец автор DarkBasic добился успехов?
В свое время я ушел с DarkBasic на GLBASIC из-за кол-ва багов.
trewДата: Пятница, 06 Апреля 2012, 23:17 | Сообщение # 91 | Тема: FireFly Visual Designer for FreeBASIC
почетный гость
Сейчас нет на сайте
FireFly Visual Designer for FreeBASIC




Это один из тех продуктов, которые действительно стоит попробовать. Конечно до сред от компании Borland далеко, но все таки работать в ней удобно(если конечно не поленишься разобраться biggrin ). Вообще среда была написана на языке PowerBasic и для PowerBasic изначально. Однако автор проявил некоторое уважение к языку FreeBasic. Возможно именно поэтому (или в том числе) данная визуальная среда может использоваться бесплатно для языка FreeBasic. Но для пишущих на PowerBasic использование обойдется в копеечку. Автор постоянно появляется на оф.сайте Freebasic и выполняет поддержку для тех, у кого возникают трудности.

Кое что от автора:

Quote
FireFly Visual Designer представляет собой среду быстрой разработки приложений на языке программирования FreeBASIC. FireFly ускоряет развитие ваших 32-битных программ. Скорость сопоставима со скоростью разработки программ на Visual Basic.

Каждое приложение созданное в FireFly полностью автономное и не требует никаких DLL и пр.

Есть возможность использовать функции из 200 имеющихся для кнопок , деревьев , списков, этикеток , табконтролов прогрессбаров и пр. С помощью их вы можете писать небольшие приложения без знания Win32 API.


Скачать среду можно с оф.сайта разработчика
trewДата: Понедельник, 02 Апреля 2012, 19:59 | Сообщение # 92 | Тема: FreeBasic
почетный гость
Сейчас нет на сайте
Quote
Позволило перенести на Linux несколько проектов, изначально создаваемых для Windows. Притом что перенос был не очень сложный.
Пришлось убрать около 10 вызовов WinAPI, примерно на 2000 строк кода.


Quote
Я не писал что создаю кроссплатформенные приложения, но иногда нужно что-то перенести с Windows на Linux или обратно.


Бла,бла,бла. biggrin Все ясно, вопросов больше лично к тебе не имею.

---------------------------------------------------------------------------------------------

В языке Qbasic , для тех кто его помнит, был такой оператор: PLAY для воспроизведения звука. Конечно сейчас средств для воспроизведения музыки вагон и маленькая тележка, но вдруг у кого ностальгия проснется smile

Предлагаю архив от автора yetifoot с заголовками и примерами. Будет работать под Windows, Linux, DOS

Скачать

Добавлено (02.04.2012, 19:59)
---------------------------------------------
Вот еще одно решение Quine. Взял из того же топика, только чуть подправил, чтобы затормозить вывод инфы в консоли

Code

#Define P(X)?X:?"P("#X ")":sleep
P("#Define P(X)?X:?""P(""#X ""):sleep""")


А это вывод инфы только уже без всяких включений и пр. лабуды:

Code

dim as integer i
dim as string q=chr(34),c(2)={chr(44)+chr(95),chr(125)},Array(11)={_
"dim as integer i",_
"dim as string q=chr(34),c(2)={chr(44)+chr(95),chr(125)},Array(11)={_",_
"for i=0 to 1",_
"    print Array(i)",_
"next i",_
"for i=0 to 10",_
"   print q+Array(i)+q+c(iif(i=10,1,0))",_
"next i",_
"for i=2 to 10",_
"   print Array(i)",_
"next i:sleep"}
for i=0 to 1
     print Array(i)
next i
for i=0 to 10
     print q+Array(i)+q+c(iif(i=10,1,0))
next i
for i=2 to 10
     print Array(i)
next i:sleep
trewДата: Понедельник, 02 Апреля 2012, 14:05 | Сообщение # 93 | Тема: FreeBasic
почетный гость
Сейчас нет на сайте
Я по порядку отвечу сейчас на твои вопросы, после будь добр ответь на мои, а не тупо съезжать с темы:

Quote
А можно узнать зачем?


Делал инструмент для FbEdit, который отображает информацию наподобие debug в ПБ. Что поделаешь, я тогда еще был под впечатлением ПБ.

То есть в редакторе FbEdit мог записать:

Code
Debug "Hello"
Debug 100
Debug 5.9999


И это выводилось в мое созданное окошко. Перегрузку функций я использовал не раз в своих программах. Если ты не понимаешь этих вкусностей, что я могу сказать...

Но результат все таки на лицо:

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

Quote
У меня в FbEDit нет пункта Debug.


Дебаггер подключается в плагинах

Quote
А мне он нужен всегда, для пошагового выполнения программы, для просмотра что в переменных\массивах\структурах\списках и т. д. Иногда приходится смотреть что в регистрах процессора и в стеке.


Все это можно делать даже встроенным отладчиком FbEdit

Quote
Так же очень помогает профилер если нужно оптимизировать программу (найти участок, код которого чаще всего выполняется и оптимизировать его) и помогает при поиске ошибок зацикливания. Представь, перед тобой программа из множества тысяч строк и в какой-то момент времени прога где-то виснет, хз где. С помощью профилера легко определить участок где повисла прога, ведь он будет чаще всего выполнятся. А представь сколько времени пришлось бы потратить при ручном поиске?
Purifier тоже помогает в отладке если нужно найти ошибки записи/чтения за пределами области переменных, массивов и др. объектов.


Профилер есть в поставке Freebasic, но пока у меня не было нужды в его использовании. Если программа работает медленно, автор всегда приблизительно знает проблемные места, если пишет свои программы без использования чужого кода. Я не представляю как ты пишешь. Я объясню как пишу я:

Создал определенный участок кода в функции или в классе - по возможности протестировал. Не приступаю к следующему участку кода, пока не уверен в этом. Если проверить не представляется возможным, уже знаю, что это место потенциально может представлять проблему. Но такие места (которые нельзя сразу протестировать) как правило редки, потому как любой прогер планирует создание своей программы таким образом , чтобы ее всегда можно было протестировать.

Quote
А что без асма нельзя это сделать?
На PureBasiс это легко реализуется без асма.


Все можно и даже первым кодом в теме про QUINE новичек на оф. сайте создал как раз на FreeBasic. Но мне понравился этот код.
Кстати , нашел чем удивить. Вот код из четырех строчек:

Code

#Include "window9.bi"
IncludeBinary("Quine.bas",pp)
? PeekS(@pp(0))
Sleep


Quote
И что же мешает нарисовать интерфейс в FbEdit и использовать RC файл в том же PureBasic?


Я и не писал, что такого невозможно.

Quote
Ога, окно создается в ресурсах. Вообще отличная переносимость на др. платформы отличные от винды!


Выражение:

Quote
Вот тебе еще одно красивое кроссплатформенное решение.


относилось к исходному коду компилятора, а не к рисунку , где изображен проект с ресурсами

Теперь ответь на мои:

1) Ну допустим функции (не все) кроссплатформенны и что это дает или дало лично тебе?

2) Можешь привести пример своих кроссплатформенных программ?

Ну и чтобы от поста была хоть какая-то польза , кроссплатформенный пример анимации фракталов, выполненный D.J.Peters:

Code

' you can change it
Const scr_width  As Integer = 320 '320 640 800 ...
Const scr_height As Integer = 240 '200 480 600 ...
Const fullscreen As Integer =   1 ' 0/1
Const max_itera  As Integer = 128 '64 - 256

' please don't change
Const w_last     As Integer = scr_width  - 1

Const h_last     As Integer = scr_height - 1

Const q4         As Integer = 4

Const steps      As Double  = 20

Dim As Integer anim,itera,cfade,frames,fps,help
Dim As Double two,r,rstep,i,istep,ioffset,roffset
Dim As Double r_max,r_min,i_max,i_min,rdiff,idiff,zoom
Dim As Double roffsetsoll,ioffsetsoll,zoomsoll
Dim As Double roffsetdiff,ioffsetdiff,zoomdiff
Dim As Double roffsetstep,ioffsetstep,zoomstep
Dim As Integer x2y2,col1,col2,flag,t1,t2
Dim As Integer xm,ym,l,a,x,y,work_page,visible_page = 1

Dim As Byte Ptr video_page
Dim As String k
Dim As Single rc,gc,bc,w

rdiff=3.4*scr_width/scr_height
idiff=3.4

two  =2.0

zoom =1

anim =1

cfade=1

help =1

If fullscreen Then

         Screenres scr_width,scr_height,,,1
         Setmouse 0,0,0

Else

         Screenres scr_width,scr_height
End If

For l=1 To 255

         rc=Sin(w)*0.5+0.5

         gc=Cos(w*1.25)*0.5+0.5

         bc=Sin(w*1.5)*0.5+0.5

         Palette l,rc*255,gc*255,bc*255

         w=w+0.1

Next

t1=Timer

'open "waypoints.txt" for append as #2
While a<>27 '[esq]=end

rstep=rdiff*zoom/scr_width
istep=idiff*zoom/scr_height
r_min=roffset-(rdiff*zoom*0.5)
i_min=ioffset-(idiff*zoom*0.5)

video_page=ScreenPtr

Screenlock

Asm mov edi,[video_page]
i=i_min
For y=0 To h_last
r=r_min
For x=0 To w_last
Asm
         Xor ecx,ecx
         fld qword Ptr [r]
         fld qword Ptr [i]
         fldz
         fldz
         fld qword Ptr [two]
         fldz
         fldz                'y,x,2,y2,x2,i,r
         asm_iterastep:
         fld st(2)           '2,y,x,2,y2,x2,i,r
         fmul st(0),st(1)    '2*y
         fmul st(0),st(2)    '2*y*x
         fadd st(0),st(6)    '2*y*x+i
         fxch st(1)          'y,2*y*x*i,x,2,y2,x2,i,r
         fstp st(0)          'y,x,2,y2,x2,i,r

         fld st(4)           'x2    ,y,x,2,y2,x2,i,r
         fsub st(0),st(4)    'x2y2  ,y,x,2,y2,x2,i,r
         fadd st(0),st(7)    'x2y2r ,y,x,2,y2,x2,i,r
         fxch st(2)          'x,y,x2y2r,2,x2,i,r
         fstp st(0)          'y,x,2,y2,x2,i,r

         fld st(1)           'x,y,x,2,y2,x2,i,r
         fmul st(0)          'xx,y,x,2,y2,x2,i,r
         fxch st(5)          'x2,y,x,2,y2,xx,i,r
         fstp st(0)          'y,x,2,y2,x2,i,r

         fld st(0)           'y  ,y,x,2,y2,x2,i,r
         fmul st(0)          'y*y,y,x,2,y2,x2,i,r
         fxch st(4)          '
         fstp st(0)          'y,x,2,y2,x2,i,r

         inc ecx
         cmp ecx,max_itera
         jge asm_nomandel

         fld st(3)             'y2,y,x,2,y2,x2,i,r
         fadd st(0),st(5)
         fistp dword Ptr [x2y2]'y,x,2,y2,x2,i,r
         mov eax,dword Ptr [x2y2]
         cmp eax,q4 'then goto ismandel
         jg asm_ismandel
         jmp asm_iterastep

         asm_nomandel:
         Xor cx,cx
         asm_ismandel:
         'Shl cl,1
         mov Byte Ptr [edi],cl

         asm_xstep:
         inc edi

         fstp st(0)  'x,2,y2,x2,i,r
         fstp st(0)  '2,y2,x2,i,r
         fstp st(0)  'y2,x2,i,r
         fstp st(0)  'x2,i,r
         fstp st(0)  'i,r
         fstp st(0)  'r
         fadd qword Ptr [rstep]
         fstp qword Ptr [r] 'fpu stack empty
End Asm
Next

Asm

         fld  qword Ptr [istep]
         fadd qword Ptr [i]
         fstp qword Ptr [i] 'fpu stack empty
End Asm

Next

If anim=0 Then

         Line (scr_width\2-5,scr_height\2  )-Step(10,0),255

         Line (scr_width\2  ,scr_height\2-5)-Step(0,10),255

End If

If help Then

         Locate 1,1:Color 0,0

         Draw String (0, 0),"[h]           on/off helpscreen"
         Draw String (0,10),"[c]           on/off colorfade"
         Draw String (0,20),"[a]           on/off animation"
         Draw String (0,30),"[+][-]        zoom in/out"
         Draw String (0,40),"[left][right] move left/right"
         Draw String (0,50),"[up]  [down]  move up  /down"
         If fps Then

             Draw String (0,70),"frames per second:" & fps
         End If

End If

Screenunlock

frames+=1

If frames>=50 Then

         t2=Timer

         If (t2-t1)>=3.0 Then

             fps=frames/(t2-t1)
             If fullscreen=0 Then
                 Windowtitle "FPS=" & fps
             End If

             t1=t2:frames=0

         End If
End If

k=Inkey:l=Len(k)
If l Then

         a=Asc(Mid(k,l,1))
         Select Case a
             '     Case 13  ' [return] save curent waypoint
             '        print #2,"data ";roffset;",";ioffset;",";zoom
             Case 97  ' [a] togle animation on/off
                 anim=anim Xor 1

             Case 99  ' [c] togle colorfade on/off
                 cfade=cfade Xor 1
             Case 104 ' [h] togle help instruction on/off
                 help=help Xor 1

                 ' cursor move [left][rigth][up][down]
             Case 72

                 ioffset-=istep*2

             Case 80

                 ioffset+=istep*2

             Case 75

                 roffset-=rstep*2

             Case 77

                 roffset+=rstep*2

                 ' [+][-] zomm in/out
             Case 45 'zoom out
                 zoom+=rstep*8

             Case 43 'zoom in
                 zoom-=rstep*8

         End Select

End If

If anim Then

         If flag=0 Then

             Read roffsetsoll,ioffsetsoll,zoomsoll
             If roffsetsoll=-1.0 And ioffsetsoll=-1.0 And zoomsoll=-1.0 Then

                 Restore
                 Read roffsetsoll,ioffsetsoll,zoomsoll
             End If

             roffsetdiff=(roffset-roffsetsoll)/100.0

             ioffsetdiff=(ioffset-ioffsetsoll)/100.0

             zoomdiff=(zoom-zoomsoll)/100.0

             flag=100
         End If

         roffset-=roffsetdiff
         ioffset-=ioffsetdiff
         zoom-=zoomdiff
         flag-=1

End If

If cfade Then

         Palette Get 1,col1
         For l=1 To 254

             Palette Get l+1,col2
             Palette l,col2
         Next

         Palette 255,col1
End If

Wend

' close waypoint file
'close #2

End

Data -1.429768163191177, 0, 0.05827402421943742

Data -1.429916265921348, 0, 2.547174155824884e-06

Data -1.447242800619238,-0.02075477953116167, 0.01853105315282292

Data -1.448491719244281,-0.01683185615982145, 0.000218250277751366

Data -1.448494962416383,-0.01685102895821514, 1.271832197158205e-05

Data -1.448540366825824,-0.01684899402669969, 1.271832197158205e-05

Data -1.448540211341738,-0.01684882329907699, 1.049950669433006e-07

Data -1.448540221908983,-0.01684881859373112, 6.686868933306398e-09

Data -1.448540221650768,-0.01684881825349504, 6.075644447976854e-10

Data -1.448540221693981,-0.01684881825349504, 8.876504632190959e-11

Data -1.448540222056144,-0.01684881831740589, 8.876504632190959e-11

Data -1.448540222056144,-0.01684881831740589, 0.0048015208111237

Data -1.447315834249308,-0.006093411700488804, 0.0048015208111237

Data -1.447575410718678,-0.006302817927879772, 0.0004362629737311815

Data -1.447546060932151,-0.006275194599384553, 0.0001150972020634162

Data -1.447549946836704,-0.006278851921316968, 1.142913103880331e-05

Data -1.447549953773961,-0.006278904154782063, 2.720492973799422e-08

Data -1.447549953773961,-0.006278904154782063, 0.0959551631790438

Data -1.847203208414673,-0.006278904154782063, 0.0959551631790438

Data -1.860985543961812, 5.730536102542537e-05, 0.02472605136870849

Data -1.861382365188764, 0.0001280447521777783, 7.575700083603683e-07

Data -1.861382300909908, 0.000128060841636056, 6.787177454139503e-10

Data -1.861382300909908, 0.000128060841636056, 1.80301591945143

Data  0.1309502900839218, 1.298299522846665, 1.80301591945143

Data -0.1984145909714904, 1.100352449330687, 0.001352409399890011

Data -0.1987733287401083, 1.100407573501614, 8.613151707517529e-05

Data -0.1987927587686087, 1.100406817836918, 1.88916174031882e-06

Data -0.1987926341447898, 1.100406706717228, 7.716645119686126e-08

Data -0.1987926374785418, 1.100406704868181, 2.620466114794424e-10

Data -0.1987926374785418, 1.100406704868181, 0.002943719650420304

Data -0.2065493387573994, 1.106765139313087, 0.002943719650420304

Data -0.206697724315536, 1.106402031123765, 0.0003491424897332628

Data -0.2067125121193846, 1.106368035391356, 1.193999868780553e-05

Data -0.2067148243436442, 1.106365903599446, 9.856968272467161e-08

Data -0.2067148338391115, 1.106365912536355, 1.396392244558323e-08

Data -0.2067148338391115, 1.106365912816002, 6.570202991474562e-10

Data -0.2067148338855405, 1.106365912816002, 4.997933986013956e-11

Data -0.2067148338502975, 1.106365912809265, 4.565903560075121e-12

Data -0.2067148338219658, 1.106365912799768, 4.565903560075121e-12

Data -0.2067148338219658, 1.106365912799768, 1.329455317510298e-07

Data -0.2067143705067878, 1.106365997884909, 1.329455317510298e-07

Data -0.2067143793444081, 1.10636599573528, 3.1423647016843e-11

Data -0.2067143793495975, 1.106365995736637, 3.391748679138347e-12

Data -0.2067143793494169, 1.106365995736712, 2.360785268886536e-13

Data -0.2067143793494169, 1.106365995736712, 8.62035957278071e-08

Data -0.2067139910022188, 1.106366050907014, 8.12035957278071e-08

Data -0.0, 1.106366050907014, 10.0

Data -0.2067139910022188, 0.0, 20.0

Data  0.0, 0.0, 1.0

Data -1.0,-1.0,-1.0




Сообщение отредактировал trew - Понедельник, 02 Апреля 2012, 17:10
trewДата: Понедельник, 02 Апреля 2012, 08:52 | Сообщение # 94 | Тема: FreeBasic
почетный гость
Сейчас нет на сайте
Quote
Это все фигня и без всего перечисленного легко обойтись.


Дааа? Все нормальные и качественные языки имеют это в своем наличии, но тебе это лишнее как же, как же...

Где-то с год назад мне понадобилось получить тип переменной после его объявления. С помощью перегрузки функций это достигает так:

Code
Sub one OverLoad(a As Integer)
    ? "integer parameters"
End Sub

Sub one(a As String)
    ? "String parameters"
End Sub

Sub one (a As Byte)
    ? "Byte parameters"
End Sub

Dim a As Byte
Dim b As Integer
Dim c As String

one(a)
one(c)
one(b)
Sleep


Может поделишься опытом и покажешь как ты легко сделаешь это на ПБ?

О других вкусностях мне в лом писать. Раз ты так ответил, то ты просто представления не имеешь о чем пишешь.
Нравится писать с помощью примитивного синтаксиса ПБ, да еще и платить за него 79 евро , никто не мешает.
Один из бывших Пбкодеров (SofTie) тоже всем пытался доказать подобно тебе какой пурик прекрасный язык, пока не понял обратного.

Quote
Лучше скажи как у FB с переносимостью кода на другие платформы? Если код на API операционки, то код придется ох как сильно править!


Где не увидишь упоминание о Пб, везде о кроссплатформенности пишут как о главной заслуге. Ну допустим функции (не все) кроссплатформенны и что это дает или дало лично тебе? Можешь привести пример своих кроссплатформенных программ? По крайней мере я ничего путного кроссплатформенного на пюрике не видел. На FreeBasic видел далеко не одно красивое кроссплатформенное творение. Не веришь? Вот ЗДЕСЬ можно найти лишь малую часть, того что я успел выложить
Сам я написал лишь две небольшие кроссплатформенные программы на FreeBasic и то я не писал их таковыми, просто использовал встроенные функции FreeBasic: Simple Online Radio , Circles. Их можно найти по ссылке выше.

Quote
Чет я не заметил в FbEdit даже намека на отладчик.




Да признаю , встроенный в FbEDit отладчик уступает встроенному в среду ПБ, но о GDB и FbDebbuger такого сказать нельзя.
Я не знаю как ты используешь отладчик, но мне он нужен исключительно в одном случае:

При невозможности найти маловыявляемую ошибку

Остальные ошибки либо сообщаются при компиляции, либо видны невооруженным глазом.

А это визуальная часть среды FbEdit:



Кстати большая часть кода среды FbEdit и плагинов к ней, написана на FreeBasic. Впрочем исходные коды компилятора Freebasic написаны на нем же! Вот тебе еще одно красивое кроссплатформенное решение.

Quote
Вообще, дай линки на описание


Забей в яндексе три буквы GDB -> википедия

Одна из сделанных для него GUI оболочек (GDB Insight) используется для FreeBasic

Для FbDebugger описания нет. Однако этот отладчик по настоящему качественная программа и хелп к ней. (Кстати хелпник я переводил и перевод доступен)

И чтобы данный пост не был исключительно препиранием, прикладываю еще один пример интересной программы под названием Quine с помощью ASM вставок от автора TJF:

Code

DIM AS ZSTRING PTR code
DIM AS UINTEGER code_len
ASM .section .data
ASM __code__start = .
ASM .incbin "Quine.bas"
ASM __code__len = . - __code__start
ASM .section .text
ASM mov dword PTR [code], offset __code__start
ASM mov dword PTR [code_len], offset __code__len
?LEFT(*code, code_len)
sleep


Если коротко о программе: Она умеет печатать собственный листинг кода. Кому интересно больше о назначении и прочем, могут найти инфу в википедии.


Сообщение отредактировал trew - Понедельник, 02 Апреля 2012, 08:53
trewДата: Вторник, 21 Февраля 2012, 12:40 | Сообщение # 95 | Тема: FreeBasic
почетный гость
Сейчас нет на сайте
Quote (Killerbot)
trew, теперь я знаю к кому за вопросами лезть


Вот уж что что, а мастера из себя строить я не хотел (тем более что это не так). Однако что знаю, никогда не жмусь, подсказываю. Я не думаю, что часто буду сюда заходить, так что если что-то специфичное по FreeBasic - добро пожаловать на русские форумы по FreeBasic. На них я захожу ежедневно, да и не по разу.
trewДата: Воскресенье, 19 Февраля 2012, 09:34 | Сообщение # 96 | Тема: FreeBasic
почетный гость
Сейчас нет на сайте
Quote (ilya7834)
Да не скажи. С Си (каламбур) у него общего мало.


До знакомства с FreeBasic , я писал на PureBasic и примерно через год, спросил себя:

"Ну, и чему ты научился?" Кроме встроенных общеупотребляемых функций пурика, да десятка API - ничему! PureBasic мне показался обособленным языком (или пусть простят меня пуриковцы - языком для ленивых). Понял что надо искать другой путь. Решил пробовать другие языки. Скачал MASM32 и создал несколько простых прог (кстати классный пакет), но неустанно меня тянуло к простым операциям сложения, присваивания и прочим вещам высокоуровневых языков. Далее пытался изучить СИ, скачал какую-то книгу и с первым же примером из книги получил затык. Там был простой пример из 5-6 строчек, но в первых строчках стояло using namespace std , пример объяснял все строки, но об этой было написано очень кратко:
"Открываем пространство имен" . Для начинающего и ничего не знающего об этих фичах это было слишком коротко biggrin
После прочтения 2-3 страниц книги, я понял что СИ не для меня , по крайней мере пока точно было не время. Возможно я выбрал не тот учебник, но желание уже было подорвано. Даже тот же синтаксис MASM мне показался ребенком по сравнению с синтаксисом СИ
И тут посмотрел в сторону FreeBasic. Выучил его моментально за короткое время. Кстати на нем обширно и понятно было объяснено:
что такое Namespace, scope, OOP, понятие модульной технологии, работа с API, и прочее... Прошло чуть больше года и мои успехи:

1) Создал библиотеку GUI (если интересно, забейте в поисковике window9)
2) Понимаю (не в полной мере конечно) синтаксис других языков (СИ, Delphi), кстати игру крестики-нолики, я практически без труда переписал с С++. А игру Lines с Delphi.

Когда знаешь один мультипарадигменный язык, легко понять другие. Но это ни в коем случае не говорит о том, что это единственный путь. Кому-то проще сначала Pascal, а потом С++. А кому-то вообще сразу С++ или JAVA даются легко, без всяких промежуточных языков. wink
trewДата: Суббота, 18 Февраля 2012, 15:53 | Сообщение # 97 | Тема: FreeBasic
почетный гость
Сейчас нет на сайте
Quote (ilya7834)
хм... Интересно. А как у этого языка с оптимизацией? Например можно ли сделать небольшую 3д игру без напряга компа?


К языку давно уже прикручен N3xtD (примеры есть), MiniB3d (есть специальная ветка на оф. форуме). Есть так же Clady3D-удобная обертка для знаменитого Irrlicht Wrapper (тоже примеров хватит для понимания). Обратите внимание на использование OpenGL (как родные команды) . Некоторые умудряются встроенную GFXLIB использовать для 3D графики. Вот пример движения точек , похоже на 3D ?

Code

Const SC_WIDTH  As Integer = 640

Const SC_HEIGHT As Integer = 480

Const NB_P      As Integer = 50000

Const RAY       As Integer = 2^23-1

Screenres SC_WIDTH,SC_HEIGHT, 24, 1, 1

Dim X(NB_P) As Integer

Dim Y(NB_P) As Integer

Dim Z(NB_P) As Integer

Dim As Integer xs, ys, i, xprim, yprim, zprim

'Place the points on a sphere using spherical coords
Randomize

For i=0 To NB_P-1

     Const PI As Double = 3.1415927

     Dim As Double teta
     teta = 2*PI*rnd(1)
     Dim As Double phi
     phi = PI*rnd(1)-.5*PI
     X(i) = Cos(teta)*cos(phi)*RAY*2

     Y(i) = Sin(phi)*RAY*.5

     Z(i) = Sin(teta)*cos(phi)*RAY*1

Next i

While Inkey = ""
     'Rotate points. Feel free to use this trick but please mention my name :
     'A.Dewavrin (dewavrin@yahoo.com), apr 2006
     For i=0 To NB_P-1

         xprim = X(i) - Z(i) Shr 7

         zprim = X(i) Shr 7 + Z(i)
         X(i) = xprim
         Z(i) = zprim
         xprim = X(i) - Y(i) Shr 8

         yprim = X(i) Shr 8 + Y(i)
         X(i) = xprim
         Y(i) = yprim
     Next i

     Screensync

     Screenlock

     Cls

     'Draw UFO
     For i=0 To NB_P-1

         xs = X(i) Shr 15 + SC_WIDTH/3

         ys = Y(i) Shr 15 + SC_HEIGHT/3

         If Z(i)>0 Then                  'visible points only
             Dim iCol As Integer

             iCol = Z(i) And &hFF0000    'the closer, the lighter
             Pset (xs, ys), iCol
         Endif
     Next i

     Color Rgb(0,0,192)
     Print " tHE ReD U.F.O."
     Color Rgb(0,0,128)
     Print NB_P; " points rotated without a multiply, a cos or a sine !"
     Locate 59, 12

     Color Rgb(0,0,60)
     Print " A.Dewavrin (dewavrin@yahoo.com), apr 2006"

     Screenunlock

Wend


Вот что примерно должно быть , хотя вживую посмотреть анимацию лучше:



Вот скриншот игры арканоид (с открытыми кодами):



Для звука прикручены FMOD, DUMB, BASS, а так же написанная на самом FreeBasic FBSound (под Linux и Windows). Для работы с изображениями BMP есть встроенные команды, но так же прикручены FbPNG ( есть примеры) , JPEG4FB (написанная на Freebasic с примерами).
Вообще все зависит от Вас. Если четко ответ на ваш вопрос: можно, хотя примеров 3D игр мало. Но 2D игры создавать на FreeBasic не сложнее чем на GLBasic или DarkBasic. Скажу честно, если бы я был построителем 3D игр, то не выбрал бы ни один Basic. Только СИ !.

Добавлено (18.02.2012, 15:53)
---------------------------------------------
Вот скриншоты из примеров Glade3D:











Пример, скриншот которого первым указан, состоит из 100 строчек и позволяет гулять по замку. У Glade3d есть свой создатель карт, шрифтов,и др. инструменты для разработчиков игр.

trewДата: Суббота, 18 Февраля 2012, 11:55 | Сообщение # 98 | Тема: FreeBasic
почетный гость
Сейчас нет на сайте
PBPROG, Ты задал вопрос, на который конечно знаешь ответ, только прикидываешься...

Ну что же я отвечу за топикстартера:

FreeBasic умеет:

1)перегрузка операторов
2)перегрузка функций
3)развитая макроструктура (можно объявлять, удалять макросы, условная компиляция)
4)каждый блок-отдельная область видимости переменных
5)можно создавать свои области видимости(scope)
6)поименованные области (namespace)
7)модульное программирование
8)объявление переменных по указателю в функции (byval,byref)
9)OOP (в версии 0.24 , которая выйдет весной 2012, наследование объектов)
10)активные свойства

Может что-то пропустил, но это есть в FreeBasic. PBPROG! Это есть в твоем любимом языке purebasic? Вопрос риторический.. Ответ НЕТ!
У FreeBasic простая работа с консолью и графикой:

Простейшие коды

выводит сообщение:

Code

? "Hello world!"
sleep


Строит подобие домика:

Code

Screen 13
Draw "B M160,20 C2 F50 D70 L100 U70 E50 BD10 P1,2"
sleep


У FreeBasic несколько библиотек для создания GUI (а так же есть и визуальные конструкторы для построения интерфейса)
Вся эта муть по поводу 1000 встроенных функций пурика, ничто иное как реклама. Я писал на пурике и со 100% точностью могу сказать:
без знаний API или GTK ничего путного на этих функциях не напишешь!

Вопрос по отладчикам прозвучал: Можно использовать 3 отладчика: популярный GDB, FbDebugger (написан на Freebasic), встроенный в среду FbEdit .

В FreeBasic удобная компиляция:

Обычное компилирование по умолчанию: fbc file.bas

Для компилирования консольного приложения: fbc -s console file.bas

Для компилирования оконного (Gui) приложения: fbc -gui file.bas

Компилирование динамической библиотеки: fbc -s gui -dll -export file.bas

Для компилирования статической бииблиотеки: fbc -lib file1.bas

А как там на пурике(его средствами) создавать статическую библиотеку? (ответ: непросто, ой как непросто!)

Quote
А у кого то есть учебники ???


Забиваете в любом поисковике, есть учебники

Quote
Фигня какае-то. Я лучше на VB6 программировать дальше буду.


Ни кто не мешает. Я тоже не впечатлен VB6

И наконец FreeBasic абсолютно бесплатен. И дает возможность создавать любые проекты, в том числе с использованием компилятора Freebasic. Примеры подобных программ: HIASM, Multimediya builder (использует компилятор от Delphi). На Freebasic и его родиче Quick Basic написана куча игр, и есть соответствующие сайты, доказывающие это!

Добавлено (18.02.2012, 10:00)
---------------------------------------------
Анимация горящих колец:

Code

dim as integer c,i,n,r,x,p(255)
dim as ubyte ptr a,b
dim as double t,d

' flame palette
for i = 0 to 63                     
          p(i) = int(i/4) + int(i/4) shl 8 + int(i/4) shl 16  ' smoke
          p(i+64) = 16+int(3*i/4) + (16+int(i/4)) shl 8 + 16 shl 16
          p(i+128) = 63 + (32+int(i/2)) shl 8 + 16 shl 16
          p(i+192) = 63 + 63 shl 8 + (16+int(3*i/4)) shl 16
next

Screen 13
palette using p(0)
a = imagecreate(320,200)
b = imagecreate(320,200)

circle a,(92,90),40,1
circle a,(160,90),40,1
circle a,(228,90),40,1
circle a,(126,140),40,1
Circle a,(194,140),40,1

t = timer : d = t
while inkey$ = ""
          for i = 4+320*50 to 4+320*180
              if a[i] = 1 then
                  b[i] = rnd*200+56
              end if
          next

          x = 10*320+54
          for r = 0 to 170
              for i = x to x+250
                  c = ((b[i-1]+b[i]+b[i+1] + b[i-320])/4)
                  if c>2 then c = c - 3 else c = 0 end if
                  b[i-320] = c
              next
              x = x+320       
          next
          put (0,0),b,pset
          n += 1
          while timer - t < 0.02 : wend       ' 50 fps
          t = timer
wend

locate 2,2 : color 255
print int(n/(timer-d)+0.5); " fps"
sleep


Примерно вот что получается:



Легко работать с OpenGL (есть огромное множество учебных примеров)

Code

#include "fbgfx.bi"
#include "GL/gl.bi"
#include "GL/glu.bi"

dim rtri as single, rquad as single

screen 18, 32, , FB.GFX_OPENGL or FB.GFX_MULTISAMPLE

glViewport 0, 0, 640, 480
glMatrixMode GL_PROJECTION
glLoadIdentity
gluPerspective 45.0, 640.0/480.0, 0.1, 100.0
glMatrixMode GL_MODELVIEW
glLoadIdentity

glShadeModel GL_SMOOTH
glClearColor 0.0, 0.0, 0.0, 1.0
glClearDepth 1.0
glEnable GL_DEPTH_TEST
glDepthFunc GL_LEQUAL
glHint GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST

do
       glClear GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT
       glLoadIdentity
       glTranslatef -1.5, 0.0, -6.0
       glRotatef rtri, 0, 1, 0
       glBegin GL_TRIANGLES
       glColor3f 1.0, 0.0, 0.0
       glVertex3f 0.0, 1.0, 0.0
       glColor3f 0.0, 1.0, 0.0
       glVertex3f -1.0, -1.0, 0.0
       glColor3f 0.0, 0.0, 1.0
       glVertex3f 1.0, -1.0, 0.0
       glEnd

       glLoadIdentity
       glTranslatef 1.5, 0.0, -6.0
       glColor3f 0.5, 0.5, 1.0
       glRotatef rquad, 1, 0, 0
       glBegin GL_QUADS
       glVertex3f -1.0, 1.0, 0.0
       glVertex3f 1.0, 1.0, 0.0
       glVertex3f 1.0, -1.0, 0.0
       glVertex3f -1.0, -1.0, 0.0
       glEnd
       rtri += 0.2
       rquad += 0.15
       flip
loop while inkey = ""




Добавлено (18.02.2012, 10:05)
---------------------------------------------
Пример ASM вставок (подобие incbin):

Code

#ifndef __incany_bi__
#define __incany_bi__

#macro incany(strFile,lpAny)
       asm
       .section .text
       jmp .end_##lpAny
       .section .data
       .align 16
       .start_##lpAny:
       .incbin ##strFile
       .section .text
       .align 16
       .end_##lpAny:
       lea eax, .start_##lpAny
       mov dword ptr [lpAny], eax
       end asm
#endmacro
#endif ' __incany_bi__

declare function PlayMemory alias "sndPlaySoundA" (byval as any ptr, byval flag as uinteger=4) as integer
#inclib "winmm"

dim lpWave as any ptr
incany("c:/windows/media/tada.wav",lpWave)
PlayMemory(lpWave)      


Добавлено (18.02.2012, 11:55)
---------------------------------------------
Еще один пример падающего снега (написал за 15 минут, не шибко напрягаясь, и не задумываясь об оптимизации кода) :

Code

Screen 13,,2
ScreenSet 1

Type P
   As Single x,y
End Type

Dim As P snowM(100)

For i As Integer=1 To 100
   snowM(i).x=Rnd*320
   snowM(i).y=Rnd*200
Next

Do
   Cls
   For i As Integer=1 To 100
    PSet(snowM(i).x,snowM(i).y),15
    If snowM(i).x>=320 Then
     snowM(i).x=0
    Else
     snowM(i).x+=1
    EndIf
    If snowM(i).y>=200 Then
     snowM(i).y=0
    Else
     snowM(i).y+=1
    EndIf
   Next
   Sleep(5)
   PCopy
Loop Until MultiKey(1)'Esc для выхода

Вот что примерно вышло:


А это пример физики падающего ядра от Дениса Попова (кстати на его сайте (ссылки запрещены, при желании найдете), можно найти великолепный и простой по реализации пример программы-чата):

Code

#Include "fbgfx.bi"
Using fb
ScreenRes 640,480,32,2
Screenset 1
Dim t As Double 'Время
Dim x As Double 'X ядра
Dim y As Double 'Y ядра
Dim f As Double 'Радиана для пушки
Dim f1 As Double 'Радиана для ядра
Dim g As Double=9.81 'Ускорение свободного падения
Dim a As Double=60 'Угол поворота пушки
Dim speed As Double=80 'Начальная скорость
Do
   t+=.05
   x = speed*t*Cos(f1)' Определение координаты X
   y = speed*t*SIN(f1)-(g*t^2)/2' Определение координаты Y
   f=a*3.14/180
   Cls
   Draw String (5,10),"Speed: " & speed
   Draw String (5,30),"Keys: UP(speed+),Down(speed-),Right(gradus+),Left(gradus-),space(Pli!),esc(exit)"
   Line (320,480)-(100*.5*Cos(f)+320,480-100*.5*SIN(f)-(g*.5^2)/2) ' Рисуем дуло
   Line (310,470)-(330,480),200,bf 'Рисуем платформу пушки
   Circle (x+320,480-y),5 'Рисуем ядро
   If MultiKey(FB.SC_LEFT)  And a<180 And a>0 Then a+=.5 'Дуло влево
   If MultiKey(FB.SC_RIGHT) And a<180 And a>0 Then a-=.5 'Дуло вправо
   If MultiKey(FB.SC_UP) And speed<200 Then speed+=1 'Увеличим начальную скорость
   If MultiKey(FB.SC_DOWN) And speed>0 Then speed-=1 'Уменьшим начальную скорость
   If MultiKey(FB.SC_SPACE) Then x=800:y=0:t=0:f1=f 'стреляем
   If MultiKey(FB.SC_ESCAPE) Then Exit Do  'выход
   PCopy
   Sleep 5
Loop


Вот что примерно вышло:



Сообщение отредактировал trew - Суббота, 18 Февраля 2012, 12:00
Форум игроделов » Записи участника » trew [98]
  • Страница 5 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг