BBC BASIC
« Example program challenge »

Welcome Guest. Please Login or Register.
Jan 20th, 2018, 6:06pm


Cross-platform BBC BASIC (Win32, Linux x86, Android, Mac OS-X, Raspberry Pi)

« Previous Topic | Next Topic »
Pages: 1 2 3 4  Notify Send Topic Print
 veryhotthread  Author  Topic: Example program challenge  (Read 3249 times)
Richard Russell
Administrator
ImageImageImageImageImage


member is offline

Avatar




Homepage PM


Posts: 689
xx Re: Example program challenge
« Reply #15 on: Jan 23rd, 2017, 6:17pm »

on Jan 23rd, 2017, 2:40pm, hellomike wrote:
Main concern to have this working with BBCSDL, is the font.

The fonts currently supplied with BBCSDL are:

DejaVuSans.ttf
DejaVuSansMono.ttf
FreeMono.ttf
FreeSans.ttf
FreeSerif.ttf

I would hope that one of those would be suitable. If not, I would be prepared to include another font but obviously it would need to be 'free' and not governed by licensing conditions that I cannot meet.

You can copy the font-selection code from any of the other examples supplied with BBCSDL to ensure compatibility. There should certainly be no need to resort to a bitmap.

Richard.
User IP Logged

hellomike
Junior Member
ImageImage


member is offline

Avatar




PM

Gender: Male
Posts: 55
xx Re: Example program challenge
« Reply #16 on: Jan 24th, 2017, 08:04am »

This is where I got the font from:
https://01.org/clear-sans

It does state that it is free to use.
To mimic the original gameplay as close as possible, including the font would help.

One of the BBCSDL font supplied might serve as an alternative, so I wouldn't mind having to add code similar to
Code:
IF (INKEY(-256) == &57) GUIFONT$="Clear Sans Bold" ELSE GUIFONT$="FreeSans" 


However I can't seem to get it to work.
In SDLIDE version 0.15a, I can change the display font without a problem (Options -> Set Font...) to e.g. FreeSans,Regular,18.

But when I run the following program I get a "No such font" error.

Code:
*FONT FreeSans,18 


Mike
User IP Logged

hellomike
Junior Member
ImageImage


member is offline

Avatar




PM

Gender: Male
Posts: 55
xx Re: Example program challenge
« Reply #17 on: Jan 24th, 2017, 08:14am »

Oh wait....
Code:
      OSCLI "FONT """ + @lib$ + "DejaVuSansMono.ttf"", 18"
      PRINT "TEST"
 


OK, that works.
User IP Logged

Richard Russell
Administrator
ImageImageImageImageImage


member is offline

Avatar




Homepage PM


Posts: 689
xx Re: Example program challenge
« Reply #18 on: Jan 24th, 2017, 08:52am »

on Jan 24th, 2017, 08:04am, hellomike wrote:
But when I run the following program I get a "No such font" error.

As I've explained before, there is no standardised font repository (comparable with the Windows Fonts folder) across the range of Operating Systems supported by BBCSDL. So, unlike in Windows, BBC BASIC does not know where to 'look' for a font, if you simply specify it by name. Also, as far as I know, the other OSes do not have anything like Windows' 'font mapper' that can locate a font without you having to know its exact filename.

So in BBCSDL the *FONT command requires you to specify the full path and filename of the .ttf file, so that it knows what to look for and where to find it. To reiterate, you only need to look in any of the supplied example programs that change the font (and several do) to discover the code you need.

One day I hope that BBCSDL will have its own dedicated documentation which will cover differences of this sort, but I am absolutely determined not to write this myself! I have asked, and I will continue to ask, for other people to take on various aspects of the development of BBCSDL, and documentation is one of them. Because of my 'waning powers' I must focus my efforts on things that only I can do.

As far as the specific typeface that you mention is concerned, the zip file to which you linked (ClearSans) actually contains eight different TTF files, for various weights and italic etc. Would you say that there is a sufficient difference between that typeface and the ones that are already supplied with BBCSDL to justify the inclusion of another 2 Megabytes of files in the distribution?

I notice that ClearSans doesn't support Arabic or Hebrew alphabets. That's not necessarily serious, but I'm uneasy about adding font files to the BBCSDL distribution that aren't reasonably 'international'.

Richard.
User IP Logged

hellomike
Junior Member
ImageImage


member is offline

Avatar




PM

Gender: Male
Posts: 55
xx Re: Example program challenge
« Reply #19 on: Jan 24th, 2017, 7:06pm »

Since I have hardly any experience coding in BBCSDL, I indeed didn't know that the *FONT command required that.

By no means should you include the font just for the sake of this game.

As I mentioned before, using ClearSans just makes the game looks like a more exact clone than without. I added the "ClearSans-Bold.ttf" font to @lib$ myself, which size is 264K, not 2MB.

"2048" also works using the FreeSans.ttf supplied font. In that case, I will have to make slight changes to certain values in order for the characters to align correctly.

To the Dropbox cloud I uploaded a new beta. Apart from internal modifications, with the corrected *FONT statement it now works in BBCSDL and I have added the score to be displayed.

https://www.dropbox.com/s/p8hfsq13m6vkn4w/2048beta.bbc?dl=0

I hope you find it useful.

Mike

PS. I think, maybe I should add some kind of start screen mentioning its goal and how to play it.
User IP Logged

Richard Russell
Administrator
ImageImageImageImageImage


member is offline

Avatar




Homepage PM


Posts: 689
xx Re: Example program challenge
« Reply #20 on: Jan 24th, 2017, 7:32pm »

on Jan 24th, 2017, 7:06pm, hellomike wrote:
I added the "ClearSans-Bold.ttf" font to @lib$ myself, which size is 264K, not 2MB.

If you just want the bold variant, yes, but if it was to be decided that the ClearSans typeface has some advantage over the existing supplied set, justifying its inclusion, I would expect to provide the full set.

Quote:
In that case, I will have to make slight changes to certain values in order for the characters to align correctly.

So long as you don't mind doing that I'll assume that's the way we'll proceed.

Quote:
I uploaded a new beta.

Thanks. The only obvious current issue is that it seems to require a keyboard (at least, if it can be driven using a mouse or touchscreen it isn't obvious how). As stated in the original requirements spec the program must "Be usable with a small touch screen, such as may be found on an Android phone or tablet".

But with that change it looks very promising.

Quote:
I think, maybe I should add some kind of start screen mentioning its goal and how to play it.

That would be nice, but a lower priority than the mouse/touch interface and there's only a week left!

Richard.
User IP Logged

Richard Russell
Administrator
ImageImageImageImageImage


member is offline

Avatar




Homepage PM


Posts: 689
xx Re: Example program challenge
« Reply #21 on: Jan 25th, 2017, 10:29am »

on Jan 24th, 2017, 7:32pm, Richard Russell wrote:
The only obvious current issue is that it seems to require a keyboard

So I could do some testing on Android devices I used this code as a quick hack:

Code:
              Direction = INKEY(1) - 135 : REM Or "Direction = RND(4)" to simulate
              MOUSE X%, Y%, B%
              IF B% THEN
                X% -= WW/2 : Y% -= WH/2
                CASE TRUE OF
                  WHEN X%<Y% AND Y%<-X% Direction = 1
                  WHEN X%>Y% AND Y%>-X% Direction = 2
                  WHEN X%>Y% AND Y%<-X% Direction = 3
                  WHEN X%<Y% AND Y%>-X% Direction = 4
                ENDCASE
              ENDIF 

Polling the mouse like that isn't ideal, because you can miss very short clicks, but it does the job and is easier than using ON MOUSE.

Richard.
User IP Logged

hellomike
Junior Member
ImageImage


member is offline

Avatar




PM

Gender: Male
Posts: 55
xx Re: Example program challenge
« Reply #22 on: Jan 25th, 2017, 12:16pm »

Wow, yes, that's fine.
Indeed it now also works using the mouse although it is rather sensitive.

Adding this line of code before the ENDIF seems to solve that.

Code:
              ...
              REPEAT MOUSE X%, Y%, B% : UNTIL B% = 0
            ENDIF 


Would this hack also trap swiping on an Android phone or tablet?
I have no idea or means of testing that.

Mike
User IP Logged

Richard Russell
Administrator
ImageImageImageImageImage


member is offline

Avatar




Homepage PM


Posts: 689
xx Re: Example program challenge
« Reply #23 on: Jan 25th, 2017, 1:03pm »

on Jan 25th, 2017, 12:16pm, hellomike wrote:
Adding this line of code before the ENDIF seems to solve that.

OK, but it's really adding a hack on top of a hack! It would be better to use ON MOUSE, which detects the click/tap event rather than polling the state. This solves both the failure to detect a short click and the over-sensitivity to a long click.

Quote:
Would this hack also trap swiping on an Android phone or tablet?

I did wonder whether a 'swipe' would be more acceptable than a 'tap'; how do other versions work in that regard? If so, please feel free to make the necessary changes. As far as is possible, considering the short timescale, I would like the program to work in an 'optimum' fashion.

I see from the Wikipedia page that the original author is happy for people to create their own versions so long as they "add new, creative modifications to the game". Ending up with an inferior version is neither in the spirit of that desire, nor good for the reputation of BBC BASIC!

Quote:
I have no idea or means of testing that.

You certainly have the means: swiping with a finger is no different from swiping with the mouse! If you really have no idea, can I suggest that calculating the direction and distance from where the mouse button is pressed to where it is released ought to give you the information you need.

The only touchscreen actions which you cannot test with a mouse are 'multi-touch' gestures such as a pinch or a two-fingered drag: obviously a mouse cannot be in two positions at once! But I doubt that you would be wanting to use such gestures in the 2048 program.

Richard.
User IP Logged

Richard Russell
Administrator
ImageImageImageImageImage


member is offline

Avatar




Homepage PM


Posts: 689
xx Re: Example program challenge
« Reply #24 on: Jan 25th, 2017, 2:11pm »

on Jan 25th, 2017, 1:03pm, Richard Russell wrote:
I did wonder whether a 'swipe' would be more acceptable than a 'tap'

I've now modified it for swiping using the method I described, and I think it is better.

Richard.
User IP Logged

hellomike
Junior Member
ImageImage


member is offline

Avatar




PM

Gender: Male
Posts: 55
xx Re: Example program challenge
« Reply #25 on: Jan 25th, 2017, 8:56pm »

Since the game involves moving all tiles to either the far right, bottom, top or left, it feels more natural to swipe those tiles rather than tapping. Most (if not all) clones available from Google Play use swiping.

Quote:
calculating the direction and distance from where the mouse button is pressed to where it is released ought to give you the information you need.

I was already thinking in those terms but was not aware that coding that for the mouse would work as swiping on a Tablet so I have no working code yet.

Eventually I would make it work, having enough experience with BBC BASIC but I'm certainly not as knowledgable and fast as you are.

Quote:
Ending up with an inferior version is neither in the spirit of that desire, nor good for the reputation of BBC BASIC!

Indeed, my version is just a program having the same gameplay and, by using the same colours, dimensions and font, visually mimics the original. It doesn't have any extra's compared to the original.

Are you still interested in including my program with the next release of BBCSDL?

Regards,

Mike
User IP Logged

Richard Russell
Administrator
ImageImageImageImageImage


member is offline

Avatar




Homepage PM


Posts: 689
xx Re: Example program challenge
« Reply #26 on: Jan 26th, 2017, 12:13am »

on Jan 25th, 2017, 8:56pm, hellomike wrote:
I was already thinking in those terms but was not aware that coding that for the mouse would work as swiping on a Tablet so I have no working code yet.

As I said in my later post I have 'swiping' working nicely here; I assumed there was little point listing the code if you don't have a touchscreen to try it on. It does mean that operation with a mouse is not as straightforward as it was (swiping isn't a 'natural' action with a mouse) but the keyboard is probably a better choice anyway on a machine that has one.

Basically all I'm waiting for now is a 'final' (non-beta) version that you are happy with. Things which I am aware of that need fixing are (1) The positioning of the text when the FreeSans font is used and (2) This code in FNScanbuttons which does not work on Android:

Code:
          color = TINT(x, y)
        UNTIL color = &656E77 OR color = &F2F6F9 

You cannot use TINT like this if the display hardware does not support a 24-bit RGB888 display. Mobile devices almost invariably use a 16-bit RGB565 display.

Once you have let me have a 'final' version I will merge my code with yours. I'll then upload the program so you can check that you're happy with my additions and (hopefully) give me your approval for its inclusion.

You are evidently not an enthusiast for the LOCAL statement, since there's not a single one in the program! How would you react if I proposed adding LOCAL statements in order to make the program more compliant with 'good practice'? Doing so ought not to make any difference to the game logic.

Quote:
Are you still interested in including my program with the next release of BBCSDL?

Absolutely, indeed I thought it was decided. Are you having second thoughts?

Richard.
« Last Edit: Jan 26th, 2017, 01:15am by Richard Russell » User IP Logged

hellomike
Junior Member
ImageImage


member is offline

Avatar




PM

Gender: Male
Posts: 55
xx Re: Example program challenge
« Reply #27 on: Jan 26th, 2017, 10:17am »

No, I still want to proceed. Probably I misunderstood your statement about this version not improving on the original and so being inferior.

Quote:
I assumed there was little point listing the code if you don't have a touchscreen to try it on.

Well, I do have a few years old Samsung tablet running on Android 4.0.4, ARMv7. Can I somehow load BBCSDL on to it?

I will get rid of TINT() and fix the character alignment.
Be assured that I use LOCAL as much as possible in all of my programming but since my "2048" was started as a Rosetta Code source, I omitted it there to make the source small in size. I will now also add it to this project.

Instead of putting the code to the main program I advise you to put the user input code (scanning for keyboard and mouse and swiping) in a separate function and change
Code:
Direction = INKEY(1) - 135 
into something like Code:
Direction = FNGetdirection 


Expect the final version to be released before the weekend.

Mike
User IP Logged

Richard Russell
Administrator
ImageImageImageImageImage


member is offline

Avatar




Homepage PM


Posts: 689
xx Re: Example program challenge
« Reply #28 on: Jan 26th, 2017, 11:29am »

on Jan 26th, 2017, 10:17am, hellomike wrote:
Probably I misunderstood your statement about this version not improving on the original and so being inferior.

What I meant was that I don't expect the final BBC version to be inferior! I've got the 'animation' code working really nicely, if a bit slowly (using RECTANGLE FILL ... TO as discussed) and will merge that with your 'final' version. With that enhancement, even if we can't argue that it's better than the original it's highly comparable.

Given plenty of time it would be nice to have an introductory page with instructions, and a high-score table saved to file, but those are luxuries that aren't directly related to game play.

Quote:
Be assured that I use LOCAL as much as possible... I omitted it there to make the source small in size.

Oh I see. Is there a size limit at Rosetta Code or was it just a 'cosmetic' thing?

Quote:
I advise you to put the user input code (scanning for keyboard and mouse and swiping) in a separate function

Good idea. I'm not as inclined as I should be to do that; it's laziness really:

Code:
      DEF FNGetDirection
      LOCAL buttons%, direction%, X%, Y%, oldx%, oldy%
      REPEAT
        direction% = INKEY(1) - 135
        MOUSE X%, Y%, buttons%
        oldx% = X% : oldy% = Y%
        WHILE buttons%
          MOUSE X%, Y%, buttons%
        ENDWHILE
        X% -= oldx% : Y% -= oldy%
        IF (X%^2 + Y%^2) > 10000 THEN
          CASE TRUE OF
            WHEN X%<Y% AND Y%<-X% direction% = 1
            WHEN X%>Y% AND Y%>-X% direction% = 2
            WHEN X%>Y% AND Y%<-X% direction% = 3
            WHEN X%<Y% AND Y%>-X% direction% = 4
          ENDCASE
        ENDIF
      UNTIL direction% > 0 AND direction% < 5
      = direction% 

Richard.
User IP Logged

hellomike
Junior Member
ImageImage


member is offline

Avatar




PM

Gender: Male
Posts: 55
xx Re: Example program challenge
« Reply #29 on: Jan 26th, 2017, 7:55pm »

I promised a final version before the weekend. As I still have 24 hours I decided for beta#3. laugh

Many improvements:
  • Correct font alignment
  • Support for the ClearSans-Bold.ttf font, if present
  • All variables have appropriate type like integer, byte
  • All variables have correct upper/lower case depending on its use
  • All variables that are not global are LOCAL
  • FNScanButtons() works much better now without using TINT()
  • High-score field added and value saved to user file on exit

Quote:
Is there a size limit at Rosetta Code or was it just a 'cosmetic' thing?

No size limit but more an effort on my side to present a compact (though still readable) source in an attempt to tease the authors of the other sources for the same task, showing that it can be done better and more compact with BBC BASIC. wink

So Richard, feel free to comment on the updated source and then we can agree on the final version tomorrow.

https://www.dropbox.com/s/p8hfsq13m6vkn4w/2048beta.bbc?dl=0

Regards,

Mike
User IP Logged

Pages: 1 2 3 4  Notify Send Topic Print
« Previous Topic | Next Topic »

Donate $6.99 for 50,000 Ad-Free Pageviews!


This forum powered for FREE by Conforums ©
Sign up for your own Free Message Board today!
Terms of Service | Privacy Policy | Conforums Support | Parental Controls