FreeBasic
| |
T_888 | Дата: Среда, 22 Декабря 2010, 19:43 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Это место для тех кто программирует на FB или хочет знать о нём больше. FreeBasic - это язык программирования, который предоставляет очень широкий спектр возможностей. Отсюда и название. Скачать язык и компилятор можно на http://freebasic.net. Также прошу выкладывать ссылки на игры, написанные на нем, в этой теме. Здесь можно обсуждать ФБ и делиться впечатлениями.
do think loop while hp>0
|
|
| |
uniti | Дата: Суббота, 01 Января 2011, 01:59 | Сообщение # 2 |
частый гость
Сейчас нет на сайте
| Мне наибольшие понравились FreeBasic и С Добавлено (01.01.2011, 01:59) --------------------------------------------- А у кого то есть учебники ???
понимания приходит с практикой, а с практикой приходит опыт
|
|
| |
PBPROG | Дата: Суббота, 01 Января 2011, 17:24 | Сообщение # 3 |
постоянный участник
Сейчас нет на сайте
| Quote (T_888) FreeBasic - это язык программирования, который предоставляет очень широкий спектр возможностей. А можно примеры, демонстрирующие эти возможности? PS. GUI вроде тока через API (ресурсы не всчет, там все равно API обработчик событий) создается или я ошибаюсь? И вроде как вообще нету отладчика, а это не есть гуд!
Сообщение отредактировал PBPROG - Суббота, 01 Января 2011, 17:25 |
|
| |
Riketta | Дата: Суббота, 01 Января 2011, 17:52 | Сообщение # 4 |
Strategist
Сейчас нет на сайте
| Норм язык. Поколупал. Понравился. Вы его сильно не критикуйте. Вы на версию смотрели? Это же только тестовые беты.)
Fougerite - Rust Server OpenSource API TerraDev - Terraria OpenSource Hack
|
|
| |
IIIypuk | Дата: Четверг, 03 Февраля 2011, 02:13 | Сообщение # 5 |
-- ArchLinux Fan --
Сейчас нет на сайте
| Фигня какае-то. Я лучше на VB6 программировать дальше буду.
Одинокий юзер
|
|
| |
trew | Дата: Суббота, 18 Февраля 2012, 11:55 | Сообщение # 6 |
почетный гость
Сейчас нет на сайте
| 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 |
|
| |
ilya7834 | Дата: Суббота, 18 Февраля 2012, 14:24 | Сообщение # 7 |
Работаю на Irrlicht Engine
Сейчас нет на сайте
| хм... Интересно. А как у этого языка с оптимизацией? Например можно ли сделать небольшую 3д игру без напряга компа?
На синем небе Попробуй-ка разглядеть Синюю звезду
|
|
| |
trew | Дата: Суббота, 18 Февраля 2012, 15:53 | Сообщение # 8 |
почетный гость
Сейчас нет на сайте
| 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 есть свой создатель карт, шрифтов,и др. инструменты для разработчиков игр.
|
|
| |
Killerbot | Дата: Суббота, 18 Февраля 2012, 20:43 | Сообщение # 9 |
участник
Сейчас нет на сайте
| Посмотрел я на этот язык программирования. Понравился. Буду использовать для закрепления навыков программирования, да и с этого языка легко перейти на C.
|
|
| |
ilya7834 | Дата: Суббота, 18 Февраля 2012, 22:27 | Сообщение # 10 |
Работаю на Irrlicht Engine
Сейчас нет на сайте
| Начал изучать. Довольно интересный ЯП. Четвертый скрин снизу до боли знаком. Старина Ирр. Quote (Killerbot) да и с этого языка легко перейти на C. Да не скажи. С Си (каламбур) у него общего мало.
На синем небе Попробуй-ка разглядеть Синюю звезду
|
|
| |
trew | Дата: Воскресенье, 19 Февраля 2012, 09:34 | Сообщение # 11 |
почетный гость
Сейчас нет на сайте
| Quote (ilya7834) Да не скажи. С Си (каламбур) у него общего мало.
До знакомства с FreeBasic , я писал на PureBasic и примерно через год, спросил себя:
"Ну, и чему ты научился?" Кроме встроенных общеупотребляемых функций пурика, да десятка API - ничему! PureBasic мне показался обособленным языком (или пусть простят меня пуриковцы - языком для ленивых). Понял что надо искать другой путь. Решил пробовать другие языки. Скачал MASM32 и создал несколько простых прог (кстати классный пакет), но неустанно меня тянуло к простым операциям сложения, присваивания и прочим вещам высокоуровневых языков. Далее пытался изучить СИ, скачал какую-то книгу и с первым же примером из книги получил затык. Там был простой пример из 5-6 строчек, но в первых строчках стояло using namespace std , пример объяснял все строки, но об этой было написано очень кратко: "Открываем пространство имен" . Для начинающего и ничего не знающего об этих фичах это было слишком коротко После прочтения 2-3 страниц книги, я понял что СИ не для меня , по крайней мере пока точно было не время. Возможно я выбрал не тот учебник, но желание уже было подорвано. Даже тот же синтаксис MASM мне показался ребенком по сравнению с синтаксисом СИ И тут посмотрел в сторону FreeBasic. Выучил его моментально за короткое время. Кстати на нем обширно и понятно было объяснено: что такое Namespace, scope, OOP, понятие модульной технологии, работа с API, и прочее... Прошло чуть больше года и мои успехи:
1) Создал библиотеку GUI (если интересно, забейте в поисковике window9) 2) Понимаю (не в полной мере конечно) синтаксис других языков (СИ, Delphi), кстати игру крестики-нолики, я практически без труда переписал с С++. А игру Lines с Delphi.
Когда знаешь один мультипарадигменный язык, легко понять другие. Но это ни в коем случае не говорит о том, что это единственный путь. Кому-то проще сначала Pascal, а потом С++. А кому-то вообще сразу С++ или JAVA даются легко, без всяких промежуточных языков.
|
|
| |
Killerbot | Дата: Вторник, 21 Февраля 2012, 11:05 | Сообщение # 12 |
участник
Сейчас нет на сайте
| trew, теперь я знаю к кому за вопросами лезть
|
|
| |
trew | Дата: Вторник, 21 Февраля 2012, 12:40 | Сообщение # 13 |
почетный гость
Сейчас нет на сайте
| Quote (Killerbot) trew, теперь я знаю к кому за вопросами лезть
Вот уж что что, а мастера из себя строить я не хотел (тем более что это не так). Однако что знаю, никогда не жмусь, подсказываю. Я не думаю, что часто буду сюда заходить, так что если что-то специфичное по FreeBasic - добро пожаловать на русские форумы по FreeBasic. На них я захожу ежедневно, да и не по разу.
|
|
| |
Amarok | Дата: Пятница, 30 Марта 2012, 20:12 | Сообщение # 14 |
уже был
Сейчас нет на сайте
| Хочу посоветовать всем хорошую ide для разработки на FreeBasic - это FBEdit.
Загрузить FBEdit можно со страницы официального сайта языка FreeBasic здесь.
|
|
| |
PBPROG | Дата: Суббота, 31 Марта 2012, 12:51 | Сообщение # 15 |
постоянный участник
Сейчас нет на сайте
| Quote (trew) FreeBasic умеет: Это все фигня и без всего перечисленного легко обойтись. Лучше скажи как у FB с переносимостью кода на другие платформы? Если код на API операционки, то код придется ох как сильно править!
Quote (trew) Вся эта муть по поводу 1000 встроенных функций пурика, ничто иное как реклама. Я писал на пурике и со 100% точностью могу сказать: без знаний API или GTK ничего путного на этих функциях не напишешь! Есть большая разница будет ли в коде все на API или на 1000 срок будет десяток API. Функции PB по крайней мере нормально документированы и их использовать проще чем API операционки.
Quote (trew) Вопрос по отладчикам прозвучал: Можно использовать 3 отладчика: популярный GDB, FbDebugger (написан на Freebasic), встроенный в среду FbEdit . Чет я не заметил в FbEdit даже намека на отладчик. Вообще, дай линки на описание этих антижуков.
Quote (trew) 1) Создал библиотеку GUI (если интересно, забейте в поисковике window9) haav?
Quote (trew) "Ну, и чему ты научился?" Кроме встроенных общеупотребляемых функций пурика, да десятка API - ничему! PureBasic мне показался обособленным языком (или пусть простят меня пуриковцы - языком для ленивых). Вообще странный подход! Кто запрещал писать на API раз это так нравится? Хочешь учить API - учи и пиши на нем. Никто и никого не заставляет использовать встроенные функции.
|
|
| |
trew | Дата: Понедельник, 02 Апреля 2012, 08:52 | Сообщение # 16 |
почетный гость
Сейчас нет на сайте
| 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 |
|
| |
PBPROG | Дата: Понедельник, 02 Апреля 2012, 12:39 | Сообщение # 17 |
постоянный участник
Сейчас нет на сайте
| Quote (trew) Где-то с год назад мне понадобилось получить тип переменной после его объявления. А можно узнать зачем? Я еще понимаю, для чего нужно определения размера переменной или структуры\массива, но зачем в текстовом виде нужен тип переменной? Не вижу практического применения.
Quote (trew) Да признаю , встроенный в FbEDit отладчик У меня в FbEDit нет пункта Debug.
Quote (trew) Я не знаю как ты используешь отладчик, но мне он нужен исключительно в одном случае: При невозможности найти маловыявляемую ошибку А мне он нужен всегда, для пошагового выполнения программы, для просмотра что в переменных\массивах\структурах\списках и т. д. Иногда приходится смотреть что в регистрах процессора и в стеке. Так же очень помогает профилер если нужно оптимизировать программу (найти участок, код которого чаще всего выполняется и оптимизировать его) и помогает при поиске ошибок зацикливания. Представь, перед тобой программа из множества тысяч строк и в какой-то момент времени прога где-то виснет, хз где. С помощью профилера легко определить участок где повисла прога, ведь он будет чаще всего выполнятся. А представь сколько времени пришлось бы потратить при ручном поиске? Purifier тоже помогает в отладке если нужно найти ошибки записи/чтения за пределами области переменных, массивов и др. объектов.
Quote (trew) А это визуальная часть среды FbEdit: Ога, окно создается в ресурсах. Вообще отличная переносимость на др. платформы отличные от винды! И что же мешает нарисовать интерфейс в FbEdit и использовать RC файл в том же PureBasic?
Quote (trew) И чтобы данный пост не был исключительно препиранием, прикладываю еще один пример интересной программы под названием Quine с помощью ASM вставок А что без асма нельзя это сделать? На PureBasiс это легко реализуется без асма. Code OpenConsole() WriteConsoleData(?start, ?ends-?start) Input() End
DataSection start: IncludeBinary "Quine.pb" ends: EndDataSection
|
|
| |
trew | Дата: Понедельник, 02 Апреля 2012, 14:05 | Сообщение # 18 |
почетный гость
Сейчас нет на сайте
| Я по порядку отвечу сейчас на твои вопросы, после будь добр ответь на мои, а не тупо съезжать с темы:
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 |
|
| |
PBPROG | Дата: Понедельник, 02 Апреля 2012, 18:27 | Сообщение # 19 |
постоянный участник
Сейчас нет на сайте
| Quote (trew) 1) Ну допустим функции (не все) кроссплатформенны и что это дает или дало лично тебе? Позволило перенести на Linux несколько проектов, изначально создаваемых для Windows. Притом что перенос был не очень сложный. Пришлось убрать около 10 вызовов WinAPI, примерно на 2000 строк кода.
Quote (trew) 2) Можешь привести пример своих кроссплатформенных программ? Я не писал что создаю кроссплатформенные приложения, но иногда нужно что-то перенести с Windows на Linux или обратно.
Quote (trew) Кстати , нашел чем удивить. Вот код из четырех строчек: Нет, мы так до одной строки дойдем типа. Сделай тоже самое без подключаемых файлов как в моем примере и посчитаем число строк.
Quote (trew) относилось к исходному коду компилятора, а не к рисунку Этот тут причем? Я имел в виду что в линукс нет ресурсов и если в винде создавать окна как в вашем примере, то под линукс часть кода, отвечающую за создание окна и работу с ним, придется переписать. В этом плане PureBasic лучше, т. к. код править не придется.
Сообщение отредактировал PBPROG - Понедельник, 02 Апреля 2012, 18:29 |
|
| |
trew | Дата: Понедельник, 02 Апреля 2012, 19:59 | Сообщение # 20 |
почетный гость
Сейчас нет на сайте
| Quote Позволило перенести на Linux несколько проектов, изначально создаваемых для Windows. Притом что перенос был не очень сложный. Пришлось убрать около 10 вызовов WinAPI, примерно на 2000 строк кода.
Quote Я не писал что создаю кроссплатформенные приложения, но иногда нужно что-то перенести с Windows на Linux или обратно.
Бла,бла,бла. Все ясно, вопросов больше лично к тебе не имею.
---------------------------------------------------------------------------------------------
В языке Qbasic , для тех кто его помнит, был такой оператор: PLAY для воспроизведения звука. Конечно сейчас средств для воспроизведения музыки вагон и маленькая тележка, но вдруг у кого ностальгия проснется
Предлагаю архив от автора 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
|
|
| |
|