My first (publicly available) app for Haiku

I’m happy to announce that I have uploaded my first Haiku app to GitHub.

It is a game called ShakeIt, inspired by the board game Boggle™. The game can be played with either German or English dictionaries and letter sets. The English dictionary file is still very limited, so I guess it’s only really playable in German at the moment.

Anyway, it can be downloaded from here:

Probably not the most useful and long awaited app but a lot of fun nonetheless if you like Boggle.
Feedback, criticism, ideas for improvement, rotten tomatoes, etc. very much welcome :wink:

9 Likes

Indeed the english dictionaruy is very limited.

shade (not in dictionary)
sheet (not in dictionary)
seat (not in dictionary)
rute (not in dictionary)
dash (1)
sage (1)
heat (not in dictionary)
head (1)

It wouled be nice to add a simple way to add words to the dictionary.

The dictionary files are sqlite3 databases with only one table that contains the words. I wrote a simple commandline tool called addict to bulk add words from a text file. Maybe I should add it to the repo under tools or something like that. There is also a program called SQLiteBrowser available under Haiku.

The dictionary files are located under /boot/home/config/settings/ShakeIt/languages and have the .dict extension.

Initially I wanted to check the words against an online dictionary, but didn’t find anything suitable. Then I looked on the internet for useable word lists. I ended up putting together the dictionaries by myself, starting with German, which is my native language.

1 Like

Hi,

One could use aspell/myspell/hunspell dictionaries: http://wordlist.aspell.net/dicts/
I’m not sure how we have these packaged in Haiku at the moment, or if you should package them with the app.

1 Like

Thanks Pulkomandy, I’ll have a look at these. Using already finished dictionaries would make things a lot easier :wink:
There are some caveats that come with it, for example german umlauts like “ü” are written as “ue” in the game. But I guess I can deal with that in the code.

I just realized that I didn’t upload the newest dictionary files with the code yesterday. So the English dictionary was even more limited than I thought (at a mere 388 words). I’ve uploaded the newest dictionaries, so the English one has now 1394 words. :slight_smile: Still not very much, but here you go.

If you want to update it you just have to do a “git pull origin master” and copy the file …/data/languages/english/english.dict to ~/config/settings/ShakeIt/languages/english/

Following @PulkoMandy’s advice, I have replaced both the english and german dictionaries with content exported from the aspell dictionaries.

I’ve decided against using the aspell library/dictionaries directly (although they are available on Haiku and work very well) because it gives me more flexibility in transforming the words for the game (e.g. german umlaut ä becomes ae).

The new dictionaries are already uploaded to github, see my reply to @bbjimmy above for instructions on how to update them. This should make ShakeIt a lot more fun, especially in English.

1 Like

But ae is not ä, so if your game is about finding the right word it could create plenty false results, as the Germans have umlaut keys on their keyboard and they will type their words as is.
So I would allow ä and ae too as right solution ( and every other ümlaüt permutation too).

1 Like

Well, ShakeIt is modeled pretty closely after the Boggle game. https://en.wikipedia.org/wiki/Boggle

And in the german version there are no umlaut letters available. Everybody who is an avid Boggle player (like myself) is used to that, so I keep it that way :wink:
But it might be a good idea to include a little help file with some instructions and a link to the wikipedia page.

Besides that, it is standard procedure in german to write umlauts as ae, oe, etc. if you have no umlaut characters available.

Likewise in French, one would play such games (Boggle, but also Scrabble, crosswords, etc) completely ignoring all accents (so e, é, è, ê, ë are considered the same letter in this specific case). Each language has its specific rules and usage for this.

Would be fine to have a hpkg of your game.

The dictionary is still not useful. I have a distionary file, plain text, in my noose program, http://fatelk.com/repo/packages/noose-1.2.0-2-x86_gcc2.hpkg that would be much better.

Builds ok, but why not move the data files to $dataDir, this could be easily imported in a recipe then?
Don’t think the data should be “writable”?

Agreed that the dictionary isn’t really helpful atm :slight_smile: on my last reply, “languages” should go into $dataDir, settings in the $settingsDir … Other than that, nice app! :slight_smile:

1 Like

Yes, I’m definitely planning to do a recipe for it. I’ve been wanting to learn how to make recipes for quite some time now, so why not start with my own app.
I’ll need some help from the community, but I don’t worry about that :wink:

Yeah, that sounds good. :+1: You’re right, the data dir doesn’t have to be writable.

How would that be referred to in the C++ code? From what I’ve found I guess it would be B_USER_SETTINGS_DIRECTORY for $settingsDir and B_USER_DATA_DIRECTORY for $dataDir (or should it be B_SYSTEM_DATA_DIRECTORY?)

Thank you :slight_smile:

You do have that newest version from the github repo, right? The one derived from aspell? I’ve noticed in the German version that there’s quite a lot of rubbish in the dictionary that comes from GNU aspell. Didn’t do much testing with the English one but I expect the quality to be the same.
I’ll have a look at the dictionary file from your program. It’s only for English I suppose?

With a quick glimpse at the source I see you are using fDataDirectory for that, maybe you could split that up by using fDataDirectory for $dataDir and something like fSettingsDirectory for $settingsDir (check some finddir uses at haikuports for it), or maybe use some variables one could push to make (from the Makefile)? (Sorry not a developer so don’t know the insides for that :slight_smile:

1 Like

Thanks @Begasus for trying to explain. Maybe one of the C++ developers can chime in here:

I guess I’ll need to use find_directory() from FindDirectory.h, but the question is which directory_which constant to use for the directories corresponding to the $dataDir and $settingsDir variables in a haikuporter recipe. Like I said above my guess would be B_USER_SETTINGS_DIRECTORY for $settingsDir and B_USER_DATA_DIRECTORY for $dataDir. Is that correct?