I'm a long-time lurker here, and I'm pretty involved with a few other Java forums. A lot of what you guys discuss is a bit over my head, but I learn a ton just admiring your work (the featured games forum has stolen entire days of my life).

I do a lot of "just messing around" programming on my own, and I've thrown a few programs up on a site here. It doesn't always work in Internet Explorer (those rectangles with pictures in them are supposed to look/act like buttons), as I'm still painfully new to the web side of things.

My latest addition is admittedly a clone of the "unscramble the letters" type games, but I think it's pretty playable.

If the buttons on that site don't work for you, here are some direct links:AppletWeb StartJar

I know this game isn't going to change the world or make me famous, but I'd still love any feedback on it (or any of my other programs), especially on the web side of things. It's taken me a while to get to this from the "single applet on a gray background" awfulness, so I'd love any pointers if anybody has the time.

Thanks again. I'm looking forward to hearing what the real experts have to say.

Time for words: It worked, I played/did good, I wish it told me what words I didn't guess after the game ended.

From site:The Briny Depths:I love the look of the game so much, I think I might make a game inspired from it.The game is hard! I wish I had more control arrow keys over sub instead of mouse or it started off a little easier and got harder. (after practice I got better, but still is really hard! This isn't a bad thing though, I like hard games, just wanted to let you know, sometimes when people play/program a game a lot, they get too good at it for their own good and difficult can get skewed.

Tree Generator:Once again, I love itthough I think this would be even cooler if I could customize things some manual variables as well as randomi.e. number of branches, height of "initial branching" some other scalars for hanging branches/length/leaves/etc...

Fireworks:Nice, the one thing I would personally change is offer a "scalar/time" so that instead of(or as well as) the burn time/fade is have the pixel/particle "shrink" if you can. So if its a 10x10 pixel, have it shrink to 1x1 pixel as it fades/disappear. This would only be a "feature" in addition to everything you already have though, not a replacement, because sometimes you want the fixed size.

Also perhaps an "auto" mode, so that it shoots fireworks randomly so you can watch a "firework" show using some seed value.

Wind:This thing is creepy at first I was watching it and so confused as it was moving randomly or following my mouse.I am fascinated with this thing, I wouldnt know if I would call it wind, but its very interesting and its effects/variances of settings. I think i like the all green, non recovering lines the best. Though sometimes it behaves VERY strange, nothing is "broken" but this thing is really neat/weird.

Little bird,although it felt like a really long download, its pretty neat. But your cloud generating algorithm can destroy resources.(even on a fast computer)If I fly near stop, it generates a TON of clouds, almost to the point where there is no blue sky, and it lags the system badWhereas if if I fly super fast. it barely generates any. I didn't look at the source, but perhaps a scaling amount of clouds based upon FPS. So that if FPS starts dropping, have it produces slightly fewer number of clouds. Id also love if there was some blending in the clouds between shapes instead of just transparency.I think it would be a really fun experiment to try and make a couple A.I. birds that fly around, itd require only the most basic of AI as no obstacles in the way. Maybe even make one of them occasionally follow you, then fly away randomly.

I just read/looked, EW uncompressed wav. no wonder it was such a huge file! 39 meg wav file and a 2kb game such a crazy mix you know.

Just quickly scanning through the code. One thing I noticed was that in your cloud generation, you have a lot of Java Math functions in the cloudX and cloudY generation. such as Math.toRadians I personally wouldn't use that function for this scenario. just like I wouldn't use the built in function for PI but declare PI yourself as a final static constant 3.14 or whatever because its unneeded accuracy/precision for a simple cloud position/rotation.

I am no expert on java performance but the other thing in the cloud generation that could add unneeded resources is that you declare a new Point everytime, could you not just make a point and redefine its x,y and stick it in there instead of making a new Point2D each time?

Alternatively, I believe it'd be neat(maybe easy?)(and without 3rd party libs) if you set it up so that the audio simply streams from your site instead of having to download the whole thing first. (sorry for long post on little birds, but I like it a lot lot already. and I feel like it has soo much potential to be even better.

Seriously, thanks for taking the time. Up to this point my audience has mostly been myself and a few friends who aren't really interested in nerdy things like programming or little games, so it's great to get a real opinion.

Time for words: It worked, I played/did good, I wish it told me what words I didn't guess after the game ended.

"It worked" is pretty much exactly what I was going for. I thought about showing the words missed, but I wasn't quite sure when that should happen- so in the end I got lazy and left the feature out entirely, but there probably is a better way to display it, maybe for a couple seconds between rounds.

From site:The Briny Depths:I love the look of the game so much, I think I might make a game inspired from it.The game is hard! I wish I had more control arrow keys over sub instead of mouse or it started off a little easier and got harder. (after practice I got better, but still is really hard! This isn't a bad thing though, I like hard games, just wanted to let you know, sometimes when people play/program a game a lot, they get too good at it for their own good and difficult can get skewed.

I'm taking that as a big compliment, especially because that was one of the first games I made for the site. I didn't spend too much time tweaking the level generation algorithm, so it's really basic- and can be impossible to beat. One of my goals is to build up a library of programs that can be used as starting points for novice programmers to play with and improve, so I actually purposely stop myself from doing too much tweaking, leaving that for version 2.0. But those are all really awesome suggestions.

Tree Generator:Once again, I love itthough I think this would be even cooler if I could customize things some manual variables as well as randomi.e. number of branches, height of "initial branching" some other scalars for hanging branches/length/leaves/etc...

Thanks again. The customization is actually one thing I played with, a little too much actually. I always ended up hating the results and starting over, eventually settling on the version you saw. I had trouble finding a balance between giving customization options and guaranteeing that the things looked mostly tree-like, but I might revisit that at some time in the future.

Fireworks:Nice, the one thing I would personally change is offer a "scalar/time" so that instead of(or as well as) the burn time/fade is have the pixel/particle "shrink" if you can. So if its a 10x10 pixel, have it shrink to 1x1 pixel as it fades/disappear. This would only be a "feature" in addition to everything you already have though, not a replacement, because sometimes you want the fixed size.

Also perhaps an "auto" mode, so that it shoots fireworks randomly so you can watch a "firework" show using some seed value.

Those are good ideas. Hmm, maybe I'll throw together version 2.0 in time for the fourth of July.

Wind:This thing is creepy at first I was watching it and so confused as it was moving randomly or following my mouse.I am fascinated with this thing, I wouldnt know if I would call it wind, but its very interesting and its effects/variances of settings. I think i like the all green, non recovering lines the best. Though sometimes it behaves VERY strange, nothing is "broken" but this thing is really neat/weird.

Hahaha I like that. My initial plan was to eventually combine the tree generator and the wind program into one larger program, but I have not gotten around to it.

Little bird,although it felt like a really long download, its pretty neat. But your cloud generating algorithm can destroy resources.(even on a fast computer)If I fly near stop, it generates a TON of clouds, almost to the point where there is no blue sky, and it lags the system badWhereas if if I fly super fast. it barely generates any. I didn't look at the source, but perhaps a scaling amount of clouds based upon FPS. So that if FPS starts dropping, have it produces slightly fewer number of clouds. Id also love if there was some blending in the clouds between shapes instead of just transparency.I think it would be a really fun experiment to try and make a couple A.I. birds that fly around, itd require only the most basic of AI as no obstacles in the way. Maybe even make one of them occasionally follow you, then fly away randomly.

I just read/looked, EW uncompressed wav. no wonder it was such a huge file! 39 meg wav file and a 2kb game such a crazy mix you know.

I love love love your idea of the AI birds. And yeah, I'm guilty of the uncompressed wav (I didn't know how to play an mp3 without a third party library, and the compressed wav sounded awful, this was my first attempt at playing sounds in Java) and the oftentimes horrible framerate. I've been wanting to take another look at everything, but I keep getting sidetracked by new ideas instead.

Just quickly scanning through the code. One thing I noticed was that in your cloud generation, you have a lot of Java Math functions in the cloudX and cloudY generation. such as Math.toRadians I personally wouldn't use that function for this scenario. just like I wouldn't use the built in function for PI but declare PI yourself as a final static constant 3.14 or whatever because its unneeded accuracy/precision for a simple cloud position/rotation.

I am no expert on java performance but the other thing in the cloud generation that could add unneeded resources is that you declare a new Point everytime, could you not just make a point and redefine its x,y and stick it in there instead of making a new Point2D each time?

Those are all solid ideas. I admittedly almost never focus on optimization, and it really shows in the Little Bird program. I think I'm going to make a point of updating and improving these programs, now that I've got a few that seem worth it. If only my brain would stop coming up with new ideas, I could focus on refining the old ones!

Alternatively, I believe it'd be neat(maybe easy?)(and without 3rd party libs) if you set it up so that the audio simply streams from your site instead of having to download the whole thing first. (sorry for long post on little birds, but I like it a lot lot already. and I feel like it has soo much potential to be even better.

I never thought of that. That would probably work really well for at least the applet version. I have to figure out how to actually play sounds the correct way though.

If you ever need someone else for audience, because I myself only really have a couple friends and my parents to demo stuff too. I would be glad to take a look or poke at things, before they are ready to show the world, even tiny small test things I enjoy. Are you ever on gmail chat or aim or something?-----

I like your idea about leaving room for tweaking. I am actually in the process of building a novice programmer website with a ton of samples/source/examples etc... and I may incorporate some minor "homework assignments to the samples of things for people to try and add-----

I always get sidetracked by new ideas as well, its unfortunate that I have a bunch of 90% completed things ----

As I have often seen said, there really is no need to optimize if your program works, and it works fine for most systems.

If you ever need someone else for audience, because I myself only really have a couple friends and my parents to demo stuff too. I would be glad to take a look or poke at things, before they are ready to show the world, even tiny small test things I enjoy. Are you ever on gmail chat or aim or something?-----

I like your idea about leaving room for tweaking. I am actually in the process of building a novice programmer website with a ton of samples/source/examples etc... and I may incorporate some minor "homework assignments to the samples of things for people to try and add-----

I always get sidetracked by new ideas as well, its unfortunate that I have a bunch of 90% completed things ----

As I have often seen said, there really is no need to optimize if your program works, and it works fine for most systems.

Thanks. The best way to reach me is via email- kevinaworkman at gmail dot com. How is your website coming along? I'd like to check it out sometime. From other forums, I know that people are definitely interested in that kind of thing. I usually point them towards Project Euler, but people get bored with math, plus they want samples to work from.

One of my goals starting this collection was to get out of the habit of coming up with an idea, becoming really excited, getting halfway to finishing it, then having another idea about something I should add, starting that before the first thing was finished, getting another idea, etc. It takes some patience to make sure the "boring" stuff is completely laid down before even thinking about adding anything extra, but I think it's an important habit to get into. That's why most of my games and programs are the bare minimum- they invite you (or at least me) to think about what could be added- and they're complete enough that it shouldn't be too hard to do. That's the theory anyway.

Premature optimization is evil. But I might take it a step too far by not optimizing at all, even when things should obviously be improved.

I used a dictionary file. The loading at the beginning is populating a List of all the words in that dictionary file. Then for each set of letters (generated randomly), I iterate over that entire List, checking to see whether each word can be made by the set of letters for that round. If so, I add it to a List of valid words (the whole process only takes a couple seconds, but I do it on another thread so the next round is ready as soon as new letters are requested- you'll notice some backup if you request a set of new letters immediately after requesting a new set of letters, as it has to wait for the thread to finish). Then when the player types a word, I check whether it's in the List of valid words.

That's almost definitely not the most efficient way to go about it, but it seems to work fine and is WAY better than my original approach- this program was born by me idly writing a recursive algorithm that created a list of all possible words, given a list of input characters. That simply breaks with longer strings of characters (which my program doesn't use, but theoretically could). This is interesting to me, because it's a case of a dumb algorithm succeeding where a "smart" one fails.

I could also improve the initial loading time by taking out any words that are greater than six letters long, but I wanted to leave them in, in case somebody (or a future me) wants to allow longer letter Strings (imagine having 12 letters to work from instead of 6).

Sorry, that's probably way more than you wanted to know, but I'm just excited to see other people look at my stuff! Thanks again for your time.

Yeah I thought you would have a dictionary file. I tried to make a similar game before but I could never find any dictionary files online at all

Whaaat, really? My problem was that I found too many dictionary files online! It took me a little while to narrow my options down to a good dictionary file- a lot of them are missing words, or contain nonsense or technical words. Most linux machines have a dictionary file on them, but they seem to contain a lot of nonsense also (in my limited experience, anyway).

I googled things like "spellcheck dictionary word list file" or "anagram checker word list file" and got some promising results. Also, the dictionary file I used is available in the source, it's just a plain text file.

Could it be easier and faster check dictionary with some O log(n) algrorithm and permutations.With only six letters there can be only about 1000 different combinations of letters. Then it should be really fast to check if combination is at dictionary.

Could it be easier and faster check dictionary with some O log(n) algrorithm and permutations.With only six letters there can be only about 1000 different combinations of letters. Then it should be really fast to check if combination is at dictionary.

Yeah, you're right. But the check is pretty much unnoticeable as is, and I left it that way so it's easy to expand on later.

My first stab at this (the recursive algorithm) built up every combination of letters (720 words out of 6 letters if all the letters are different, which is much smaller than the number of words in the dictionary) and checked each against the dictionary. I think that's basically what you're saying to do. That might be the way to go (especially after optimization) for six letters, but as the number of letters increases, the number of word combination skyrockets to the point that it's actually faster to work backwards- check each word in the dictionary against the letters, not each word the letters can form against the dictionary. 12 distinct letters can form 479,001,600 words, which is WAY more than the words in the dictionary, and tended to be unresponsive or cause a StackOverFlowException. And since I can see somebody (maybe me) increasing the letter count limit in the future, that's why I stuck with the "dumb" algorithm.

I ran the Web Start version on my MacBook and it worked great. Thanks for providing a .jnlp version and other formats too to make it as easy as possible for people to run your game.

It's pretty hard and at first I didn't read the instructions closely enough and I spent a whole bunch of time trying to guess the full 6-letter word!

Thanks for sharing! Two thumbs up.

ps I tried a few other apps. Cool stuff. The Briny Depths webstart link is incorrect.

Awesome, thanks a lot. And thanks for the great catch of the typo- should be fixed now.

I'm still playing with the different options for making a game/program available. I've seen arguments for always using full installers, but I personally prefer the stand-alone applets and web starts for less threatening-looking quick access, and downloadable jars for offline access. I'm still learning though.

Whew, that was a rush! It took me a few games to figure out the most efficient thing (sometimes) is to just chuck it and go on to the next batch of letters. I'm not sure if I can type fast enough to justify spending any time with 3-letter words unless there is an obvious "family" of similar ones. Also, to figure out I didn't have to use the mouse. THAT'S when my score started to take off.

I found having the letters taken away as you type them a bit annoying. I would prefer having the board stay stable so I could keep searching/thinking while I type. Maybe because I'm used to that in Boggle. How about the letter half-tones or changes color when you use it?

OK. On that last game, I started to get a little wrung out after about 20 minutes or so, like it was going to keep going on forever unless I just got tired and slacked off. Biggest drag was an increasing tendency to typos. Not sure what to recommend though. Score was something like 1400's I think. I was tempted to quit but I did lose legitimately, eventually. Maybe the "fine" for quitting a rack should be tied to the number of unfound words? Maybe a "bonus" for getting all the words (in a length category, and for all the words). Might need to check the tuning to make sure the "grab the big ones and move one quickly" strategy isn't an easy way to "beat it".

Do you have a high score implementation planned? Then I'd have the goal of beating my last or climbing to the top of the heap.

When I scrolled the window, there was a problem with stuff being left on the screen, and obscuring the "play again" button.

Thanks so much for checking it out. I think you've played the game longer than I have! Your tweaks do sound like awesome ideas.

I was thinking of adding a high score list to this game, or games in the future, but honestly, I have no idea how to go about doing it. I'm a newbie with some (a lot of) this stuff, and that's one aspect that I simply don't know enough about yet. I'd love to read over any tutorials on how to get a feature like that working though.

Yuck, I just opened up the site in internet explorer, and.. yikes. It's ridiculous how different everything looks in IE compared to Firefox. The top navigation bar isn't the correct width, the buttons are sized differently, the favicon is nowhere to be seen, the height of your applet seems a bit too short, and stuff is colored wrong or has borders it shouldn't. So I'm not really surprised to see something else go wrong. I just have no idea what I'm doing on the web development side of things though. Maybe I'll find somebody who knows more html/css magic who can explain what's going on to me.

Most of the time I really wonder what words can be made. You should give them after the game over (I will learn new words ).

Yeah, that's a good suggestion. I think if I get around to improving it, I'll add that, along with the other suggestions I received. Maybe pretty up the display a little bit, too.

It's a little tricky (for me, anyway) to tweak a game like this- I played with the rules a bit until I could play for a few minutes before getting a game over, but philfrei can keep going for over twenty minutes! I thought it was almost a little too hard, but I also should cater to others who are better at this kind of game than I am. Maybe I should make it so it gets harder as time goes by. Hmm..

I've got a ton of really great feedback which I'm definitely going to try to work into the next version. But I already have a new game I'm itching to write, so maybe by the time I can rework this, I'll have figured out how to do a high scores board!

It does look better, and behaves better, with FireFox. High score of mine: almost 6000. Does that mean I played for almost 100 minutes straight? Jeez. Compulsive. I was trying to break 200 seconds in the bank and printscreen that, but I couldn't seem to get beyond around 150 in the bank without starting to lose time looking for missed words.

This often happens with games, that there are certain strategies that do really well that weren't anticipated. So, you are doing the right thing to post the game and let people play it and see if any such strategies are exposed. I would say, adding enticements to linger (get all the words or get all of a letter-length group) are okay in terms of counteracting this, but someone could just ignore those enticements and proceed with the strategy. So, some scaling to the penalty for quick abandonment? (For example, any unused letters "carry over"? That would be tough!)

Also, I am wondering about your letter picking strategy. I can tell you have been careful to make sure there is at least one vowel. But perhaps the other letters can reflect usage more? There is a famous sequence, something like E,T,A,I,O,S... that is the frequency of letters in English, well known to cipher buffs. One could bias the chance of letters appearing to that. A cheap and easy way to figure odds on letter appearance is to count tiles in a Scrabble set (or Boggle) and set the weights accordingly. Getting an unwieldy set of letters like QVJJEBL -- not at all uncommon. And no U guaranteed for the Q? There's only a few good u-less words, like QAT (a lifesaver in Bananagrams).

The words missed would be nice to know sometimes, though I would want the mechanism to not cost "anything" in terms of timing. Perhaps a key could store the missed words? You might be detered since this requires looking up every possible word, but the cost of that is probably less than you think. A tree search based on letter position is fine, going depth first, because if the beginning letters don't match, that cuts the branch. I've done some of this for a "word" version of Hexara.

Quite fun! I hope you decide to try polishing/finishing, as it is a nice twist on a great theme. Oh, there are a couple games, like at Yahoo or Pogo (WordTwist or something) I can't recall. It might be good to survey them to see if you've duplicated something. If I remember correctly, though, most are the sort of thing where you are given a time limit--how many can you find in 180 seconds, for example. Not like yours where you can earn time.

It does look better, and behaves better, with FireFox. High score of mine: almost 6000. Does that mean I played for almost 100 minutes straight? Jeez. Compulsive. I was trying to break 200 seconds in the bank and printscreen that, but I couldn't seem to get beyond around 150 in the bank without starting to lose time looking for missed words.

Wow, that is completely awesome. I won't get too sentimental here, but knowing that I created a little game that a stranger enjoyed enough to play for that long is a bit of a "moment" for me, haha. Thanks again for taking the time to play around in different browsers and everything.

And yeah, one thing I'm getting from this is that a high scores feature is pretty much a requirement for a game like this. Argh, I wish I could find an easy "this is how you get a basic high score board going", because I honestly have no idea how to even start. I've only done Swing and Java2D stuff. Maybe if I can't find something on google I'll post another topic asking for pointers.

This often happens with games, that there are certain strategies that do really well that weren't anticipated. So, you are doing the right thing to post the game and let people play it and see if any such strategies are exposed. I would say, adding enticements to linger (get all the words or get all of a letter-length group) are okay in terms of counteracting this, but someone could just ignore those enticements and proceed with the strategy. So, some scaling to the penalty for quick abandonment? (For example, any unused letters "carry over"? That would be tough!)

That sort-of was the strategy I was trying to encourage, I just didn't expect anybody would be THAT good at it! I get frustrated with games that force you to find the longest word before moving onto the next round, even if you have all of the other words. This was a little bit like my answer to that frustration, but I'll definitely rework the balance before version two point oh.

Having letters carry over to the next round might make it easier, since you don't have to get the longest word. Having more letters means you can form more words. I actually thought of having different numbers of letters, maybe even a bonus round that had 12 letters or something ridiculous, just to add a little something that the other games like this don't have. Maybe I could use that as an incentive- if you get all of the words in a length group, one of the letters carries over, or something like that.

Also, I am wondering about your letter picking strategy. I can tell you have been careful to make sure there is at least one vowel. But perhaps the other letters can reflect usage more? There is a famous sequence, something like E,T,A,I,O,S... that is the frequency of letters in English, well known to cipher buffs. One could bias the chance of letters appearing to that. A cheap and easy way to figure odds on letter appearance is to count tiles in a Scrabble set (or Boggle) and set the weights accordingly. Getting an unwieldy set of letters like QVJJEBL -- not at all uncommon. And no U guaranteed for the Q? There's only a few good u-less words, like QAT (a lifesaver in Bananagrams).

To be quite honest, my letter picking algorithm is really dumb. The only thing it does is make sure that the list of words that can be formed from that letter string contains more than 10 words. If it doesn't, it generates a new random list of letters. I'd probably pay closer attention to that in the next version.

The words missed would be nice to know sometimes, though I would want the mechanism to not cost "anything" in terms of timing. Perhaps a key could store the missed words? You might be detered since this requires looking up every possible word, but the cost of that is probably less than you think. A tree search based on letter position is fine, going depth first, because if the beginning letters don't match, that cuts the branch. I've done some of this for a "word" version of Hexara.

I actually already have a list of the missed words- I calculate all of the possible words before the beginning of the round, and it only takes a couple seconds (with any optimization, I could even trim that down, but I don't really see the point because it's happening behind the scenes). That's the list I use to determine whether a word is valid or not- it wouldn't be hard to display them between rounds for a few seconds.

Quite fun! I hope you decide to try polishing/finishing, as it is a nice twist on a great theme. Oh, there are a couple games, like at Yahoo or Pogo (WordTwist or something) I can't recall. It might be good to survey them to see if you've duplicated something. If I remember correctly, though, most are the sort of thing where you are given a time limit--how many can you find in 180 seconds, for example. Not like yours where you can earn time.

It's so awesome to hear somebody enjoyed something I made! I was expecting mostly replies like "that's ugly, get out of here", so this is an amazing surprise. Thank you thank you thank you!

I think I'll come back to this game, once I pound out the game that's been stuck in my head- then I'll figure out how to implement a high score board, and come back to this.

Thanks for the link. I've actually done some socket programming (way back in high school), and I can probably wrestle with the programming side of it. I guess my ignorance is mostly with the logistics- how do I even get a server set up? I can get a simple server and client running on a single computer, but the vastness of the internet scares me. Should I use a home computer that's always running, or should I use my site's host (hostgator)? Either way, what goes into setting it up? Or am I going about this the wrong way- should I look into using a database of some kind? Eek!

I know the answers to these questions are "try it and see what happens", so I suppose that's my next step.

The Internet isn't so vast as you might think. It's just a bunch of computers/routers connected to each other and a crapload of bytes running around like crazy You just need to open a port of your server on your router and computer and that's it. You can use your IP address to connect to the server from anywhere. Of course you do need a dedicated 24/7/365 online computer so if you have a spare, it's good enough.Databases are used for data storage and organization, such as high scores, user data, etc...

I currently have a spare laptop running 2 servers which are powering my games