Skocz do zawartości

Basic4GL


Ranmus

Rekomendowane odpowiedzi

  • Filar Społeczności

Temat wydzielony z Blitz3D

 

Jak obiecałem, podaje skrypt do prostego bezdzwiekowego ponga napisanego w Basic4GL. Zapoznanie się z progsem, tą wersją basica ( i w ogóle basica, bo go nie używam praktycznie), przeczytanie pobieznie manuala i napisanie calego kodu zajelo mi DWIE I PÓŁ godziny. Teraz pomyslcie ile zajmie napisanie w nim jakiegos Quake'opodobnego fpsa.

 

Kodzik:

dim przelacznik
dim licznik
dim punkty1
dim punkty2
dim py1
dim py2
dim px,py,pxe,pye,pspeed#
dim zw$

glTranslatef (0, 0, -300)

' Blok 1: Wyswietlenie glownej planszy
Start:
punkty1 = 0
punkty2 = 0
cls
resizetext(60,40)
Locate 25,12
print "RM Pong"
Locate 18,16
print "Basic4GL fast demotest"
Locate 19,20
print "Press Space to Start"
' Koniec bloku 1


' Blok 2: Miganie napisu
przelacznik = 1
licznik = 0

clearkeys()
while not scankeydown(VK_SPACE)
   if licznik < 100 then 
       licznik = licznik + 1
       sleep(1)
   else
       licznik = 0
                    
       if przelacznik = 1 then
           clearline()
       else
           Locate 19,20
           print "Press Space to Start"
       endif
   endif   
   przelacznik = -przelacznik
wend
cls
' Koniec bloku 2

' Blok3: Wlasciwa gra

Gra: 
py1 = 0
py2 = 0
px = 0
py = 0
pye = (Rnd() % 2 ) * 2 - 1
pxe = (Rnd() % 2 ) * 2 - 1
pspeed# = 3

while not scankeydown(VK_ESCAPE)


   if py > 170 then pye = -1 : pspeed# = pspeed#  endif
   if py < -170 then pye = 1 : pspeed# = pspeed#  endif

   if px > 207 and px < 220 and py1 + 40 > py and py1 - 40 < py then pxe = -1 : pspeed# = pspeed# + 1 endif
   if px > 240 then punkty2 = punkty2 + 1 : goto PokazP endif

   if px < -207 and px > -220 and py2 + 40 > py and py2 - 40 < py then pxe = 1 : pspeed# = pspeed# + 1 endif
   if px < -240 then punkty1 = punkty1 + 1 : goto PokazP endif

   py = py + pye * pspeed#
   px = px + pxe * pspeed#
   

   if scankeydown(VK_DOWN) and py1 > - 130 then
   py1 = py1 - 4
   endif

   if scankeydown(VK_UP) and py1 <  130 then
   py1 = py1 + 4
   endif

   if keydown("W") and py2 > - 130 then
   py2 = py2 - 4
   endif

   if keydown("Q") and py2 <  130 then
   py2 = py2 + 4
   endif

   glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT)

   glBegin (GL_QUADS)      
   glVertex2f (225,py1+40)
   glVertex2f (210,py1+40)
   glVertex2f (210,py1-40)
   glVertex2f (225,py1-40)
   glEnd ()

   glBegin (GL_QUADS)      
   glVertex2f (-225,py2+40)
   glVertex2f (-210,py2+40)
   glVertex2f (-210,py2-40)
   glVertex2f (-225,py2-40)
   glEnd ()
   
   glBegin (GL_QUADS)      
   glVertex2f (px+5,py+5)
   glVertex2f (px-5,py+5)
   glVertex2f (px-5,py-5)
   glVertex2f (px+5,py-5)
   glEnd ()

   SwapBuffers ()
wend


PokazP:

if punkty1 > 9 then
zw$ = "Zwyciezyl gracz 1"
goto Zwyciezca
endif

if punkty2 > 9 then
zw$ = "Zwyciezyl gracz 2"
goto Zwyciezca
endif

clearkeys()
cls
resizetext(40,20)
locate 17,8
clearline()
print punkty2 + " : " + punkty1
while not scankeydown(vk_space)
wend
goto Gra

Zwyciezca:
cls
resizetext(40,20)
locate 10,8
print zw$
while not scankeydown(vk_space)
wend
goto Start

Odnośnik do komentarza
Udostępnij na innych stronach

Ranma mogłeś odrazu napisać że to się nazywa Basic4Gl :P Szukałem i ściągnąłem Microsoft Embedded visual tools c++ / basic . 200 mb, ale powiem wam że też warty uwagi. niestety płatny, ale można się na nim nauczyć troche :P

 

Co Do Basic4Gl to właśnie ściągam, i dziwie się że zajmuje 4 mb ;D

Odnośnik do komentarza
Udostępnij na innych stronach

Lol :) O dziwo też szukam właśnie tego Basic4Gl i sprawdzam podobne rzeczy :) Ściągne, sprawdze i ide dalej w nauke C++ :P

 

Jestem tuż po testowaniu Basic4GL - i musze powiedzieć, że dobre. Nietrzeba żadnego komplikatora C++, tylko piszemy program, testujemy, poprawiamy i robimy plik Exe :) Fajne, przyda się :) Ide studiować :)

Edytowane przez Pietrus_paN
Odnośnik do komentarza
Udostępnij na innych stronach

Dokładnie ;) Też zainteresowałem się tym progsem, trzeba przyznać jest dośc niezły. Interesuje mnie tylko sprawa czcionki. Czy to da się zmienic ? :P W nie pasuje do wszytskiego owa czcionka... :P

 

Ranma - Gratuluje ponga, tylko po chwili juz nie jest mozliwe panowanie nad piłką ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Dokładnie ;) Też zainteresowałem się tym progsem, trzeba przyznać jest dośc niezły. Interesuje mnie tylko sprawa czcionki. Czy to da się zmienic ? :P W nie pasuje do wszytskiego owa czcionka... :P

 

Czcionkę w Basic4GL da się zmienić :) Basic4GL -> Select Font. :)

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Basic4GL jak na razie ma dwa poważne uchybienia. Pierwszy, to kiepska dokumentacja, samo wymienienie funkcji mnie nie satysfakcjonuje. Autor opisał tylko pewną część i to pobieżnie.

Drugie uchybienie i to chyba najważniejsze, to... brak możliwości tworzenia własnych funkcji. W sumie można to obejść symulując przeskakiwaniem w kodzie, ale prowadzi to trochę do zagmatwania. Autor planuje dodać definiowanie funkcji w kolejnych wersjach. A propos, dopiero co zauważyłem, że nie dość że mam wersję 2.2.4 (a przecież jest 2.2..5), to jeszcze, że w katalogu programs są przykłady. :-)

 

Sadam:

Programmer's Guide, taki kawałek ci wystarczy:

texture = LoadTexture ("data\charset2.png")

Font (texture)

 

A z tą szybka pilka, to wiem. Chcialem zrobic jak najszybciej tego ponga. Zreszta pspeed powinno miec na poczatku wartosc 1 a nie 3, którą ustawiłem tymczasowo by szybko sprawdzic zliczanie punktow i tak juz zostalo. :D

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki ranma :) Tym czasem studiując tutoriale, i przykłądy napisałem w olnej chwili taką małą gierkę. Nie wiem jak się nazywa ale bardzo często robią ją ludzie zaczynający swoją przygodę z pascalem. A oto kod źródłowy :P :

dim playerx, playery, scx, scy , moves

scx = rnd () % 22 + 1
scy = rnd () % 22 + 1 
playerx = 15
playery = 15
moves = 100 

TextMode (TEXT_BUFFERED)      
while true

if ScanKeyDown (VK_LEFT) and playerx > 0 then
   playerx = playerx - 1
   moves = moves - 1
endif
if ScanKeyDown (VK_RIGHT) and playerx > 0 then
   playerx = playerx + 1
   moves = moves - 1
endif
if ScanKeyDown (VK_UP) and playery > 0 then
   playery = playery - 1
   moves = moves - 1
endif
if ScanKeyDown (VK_DOWN) and playery > 0 then
   playery = playery + 1
   moves = moves - 1
endif   

if playerx = scx and playery >= scy then 
   scx = rnd () % 22 + 1  
   scy = rnd () % 22 + 1
   moves = moves + rnd () % 20 + 10
endif

   cls
   color (222, 222, 222)
   locate playerx, playery: print "0"    
   locate scx, scy: print "@" 
   locate 1,1: print "Moves : " + moves
   locate 1,2: print "Writed by Sadam"

   DrawText ()
   Sleep (75)
wend  

 

Mniej więcej chodzi o zbieranie znaku @. Mamy ograniczoną ilośc ruchów, za każdym dotknięciem " @ " dodaje nam losową liczbę ruchów. :)

 

Ale gdzie ja z tym do twojego ponga ;D

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

A rob rob, tylko jakas bardzo prosciutka na poczatek. Potem przechodz na coraz trudniejsze - praktyka czyni mistrza, piszac zawsze uczysz sie kodowac, wiedza sama wchodzi do glowi. :) Ja dalej nie moge przebolec tego ze nie mozna tworzyc funkcji, ale znalazlem juz na to zloty srodek, jak zbudowac wlasne. Pozniej wam go pokaze.

 

A propos, trzeba by zrobic test szybkosci w wyswietlaniu vertexow: GM vs Basic4GL. Ciekawe, co wygra. :)

 

ps. Kto pisze polskiego doca do basic4gl? :P

Odnośnik do komentarza
Udostępnij na innych stronach

Dim wyl 
color(50,50,50)
locate 3,3
Printr "Wylosowana liczba to " + wyl
while wyl = 0
if scankeydown(VK_up) then wyl = Rnd() % 100
color(50,50,50)
locate 3,3
Printr "Wylosowana liczba to " + wyl
endif 
wend

 

Rozwiazanie problemu by Ranma (i częściowo przeze mnie tj. pętla wykonywana jeden raz i ładny kolorek czcionki :) )

Odnośnik do komentarza
Udostępnij na innych stronach

Tak się zastanawiam dlaczego większość z was rozkłada 1 linjkę na 2 lub 3 ? Nie lepiej zastosować zamiast

locate 15, 15
Printr "Tralala" + grrrr

to :

locate 15, 15 : Printr "Tralalal" + grrrrr

?? Można przecierz dodać do takiej linijki komentarz i kod staje sie o wiele bardziej czytelny :/

Odnośnik do komentarza
Udostępnij na innych stronach

W takim razie prezentuje wersje finalna mojego (niezwykle przydatnego :] ) programu losujacego liczbe

 

Dim wyl
'Ustawia kolorek 
color(50,100,50)
'Wyglad przed petla
locate 3,3 : Printr "Wylosowana liczba to " + wyl
'petla (losuj jesli licznik wyl jest rowny 0)
while wyl = 0
'jesli nacisniejsz strzalke w gore, losuje liczbe
if scankeydown(VK_up) then wyl = Rnd() % 100
'Kolorek ponownie
color(50,100,50)
'Wyglad po wylosowaniu
locate 3,3 : Printr "Wylosowana liczba to " + wyl
'Koniec if i petli
endif 
wend

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Sadam:

Lepiej miec dluzszy kod, a nie taki, ktory ci sie w oczach zlewa. Przeciez nie mozesz caly czas czytac komentarzy, bo to strata czasu. W ogole wszedzie jest tak przyjete, ze dwa ROZNE wyraznie piszemy w nowych linijkach. Natomiast dwa te same mozna pisac w jednej, np:

DIM zmienna

DIM zmienna2

tak:

DIM zmienna,zmienna2

Odnośnik do komentarza
Udostępnij na innych stronach

Ranma@ Hmmm... No mi akurat jescze bardziej się zlewa finalna wersja tego jak przydatnego progsa :D

 

Po pierwsze : gdy pisze kod często stosuje wiele przerw, odzielając od siebie poszczególne komendy np. -

Mam częśc kodu odpowiadającą za naciskanie klawiszy. Wtedy robie dodatkowy enter i mam wszystko ąłdnie pięknie i przyjemnie ;) Co do dimów i zmiennych to chyba musze zacząć tak robić :D

 

Teraz ja mam pytanie. Mam kod odpowiadajacy za pobranie spritea, z pliku. Wszystko pięknie chodzi jednak kiedy chce zmienić ściezke dostępu na inny, nic sie niedzieje. Myślałem że to wina umiejscowienia jednej linijki odpowiadajacej za pobranie sćieżki ze zmiennej texture. Niestety nie. Po dodaniu jej za cls, zaczyna się wszystko chrzanić. Miałem w głowie jescze taki myk żeby, ściezka dostępu była zmienną spraddres . Niestety kiedy dałem kod -

spraddres = "data/ball2.gif"

Wywaliło błąd :/

 

Edit :

 

Pietrus najprosztszym sposobem jest dać

 if klocekx = kulkax and kloceky = kulkay then
...

Dany kod sprawdza czy x i y obiektu kulka i klocek są takie same. jezlei tak dajesz zamiast ... kod odpawiadający za destroy obiektu ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Hmmm... Polska scena Basica4GL? :]
Najwyraźniej :D

Język fajny, można w nim tworzyć bardzo skomplikowane i przydatne aplikacje (np. moja smile.gif ). Polecam kliknąć "Otwórz" i wejść do katalogu "Programes"
Hymmm... To pierwsze co zrobiłem. Czyt - Dyskretnie przeglądnąłem cały katalog z basiciem czy niema tam czegoś co się może przydać :D Poza tym radze wejśc na oficjalną stronę basica - www.basic4gl.net i przeczytać wszystkie kursy. Naprawde warto i nie trzeba znać ang. Wystarczy przejrzeć kod, i pomysleć jaka funckja może do czego służyć :)
Odnośnik do komentarza
Udostępnij na innych stronach

Hmm... Ktoś chętny do zaopiekowania się "sceną" :) ?

 

Ja mam to szczęście, że Ranma dał mi szereg rad w jaki sposób się języka efektywnie uczyć. Może on naprawdę wiele (chyba się nawrócę na to :) ).

 

Mam nadzieję, że nauczę się go na tyle, by móc wykorzystywać w praktyce, do tworzenia gier.

Odnośnik do komentarza
Udostępnij na innych stronach

Kaytek no ale bez przesady :D Zaraz załorzymy strone, najlepiej wortal o basicu... :P

 

Co twojego szczęścia. To w pewnym stopniu ci zazdroszcze. Tyle że ja miałęm to szczęście że widziałem 2 pliki główne gmclanu :D Ale nie o tym tu mowa. Ja osobiście jestem przyzwyczajony do tego że robie wszystko sam, i sam musze to znaleźć ... :)

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Sadam, a czemu nie, to bardzo dobra wersja Basica specjalnie dla gier i to jeszcze z obsluga OpenGL'a (ale do aplikacji polecam MediaBasic). Ewentualnie można stworzyć dodatkowy kącik na GMCLAN dla Basic4GL. Ja sam mam zamiar sie blizej jemu przyjrzec. A jesli chodzi o wskazowki, to wyjasnilem naprawde podstawy, np. co to jest pętla WHILE. Wiesz, dla kogos, kto wczesniej uzywal tylko TGF, to jest kompletna nowosc. :)

Odnośnik do komentarza
Udostępnij na innych stronach

Hehe, myslałem że przekazywałeś mu tajną i zakazaną wiedzę o sztuce basic, atu o pętlach nawijaliście :)

 

Co do kącika to bardzo dobry pomysł. Szczerze mówiąc to w chwili obecnej robie tylko w basicu. GM w jakiś sposób zszedł na 3 plan ( na 2 jest php :D ) dlatego też mógł bym zasilić owy dział ;) Choć jeżeli załorzylibyśmy stronę , i był byś tam ty, i kilka osób z tego forum to nie głupi pomysł ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...