Суббота, 18 Января 2020, 23:12

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Форум игроделов » Программирование » Basic » FreeBasic (обсуждение freebasic)
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 , пример объяснял все строки, но об этой было написано очень кратко:
"Открываем пространство имен" . Для начинающего и ничего не знающего об этих фичах это было слишком коротко biggrin
После прочтения 2-3 страниц книги, я понял что СИ не для меня , по крайней мере пока точно было не время. Возможно я выбрал не тот учебник, но желание уже было подорвано. Даже тот же синтаксис MASM мне показался ребенком по сравнению с синтаксисом СИ
И тут посмотрел в сторону FreeBasic. Выучил его моментально за короткое время. Кстати на нем обширно и понятно было объяснено:
что такое Namespace, scope, OOP, понятие модульной технологии, работа с API, и прочее... Прошло чуть больше года и мои успехи:

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

Когда знаешь один мультипарадигменный язык, легко понять другие. Но это ни в коем случае не говорит о том, что это единственный путь. Кому-то проще сначала Pascal, а потом С++. А кому-то вообще сразу С++ или JAVA даются легко, без всяких промежуточных языков. wink
KillerbotДата: Вторник, 21 Февраля 2012, 11:05 | Сообщение # 12
участник
Сейчас нет на сайте
trew, теперь я знаю к кому за вопросами лезть happy
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)
Кстати , нашел чем удивить. Вот код из четырех строчек:
Нет, мы так до одной строки дойдем типа.
Code
Inc("Quine.pb")
Сделай тоже самое без подключаемых файлов как в моем примере и посчитаем число строк.

Quote (trew)
относилось к исходному коду компилятора, а не к рисунку
Этот тут причем? Я имел в виду что в линукс нет ресурсов и если в винде создавать окна как в вашем примере, то под линукс часть кода, отвечающую за создание окна и работу с ним, придется переписать. В этом плане PureBasic лучше, т. к. код править не придется.


Сообщение отредактировал PBPROG - Понедельник, 02 Апреля 2012, 18:29
trewДата: Понедельник, 02 Апреля 2012, 19:59 | Сообщение # 20
почетный гость
Сейчас нет на сайте
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
Форум игроделов » Программирование » Basic » FreeBasic (обсуждение freebasic)
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

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