1.) Update Checking.
2.) Score/Record keeping.
3.) Submitting score online.


Update Checking:
Currently, my program connects to a URL and checks if a new version is available. If one is, it simply opens up a dialog saying a new version is out and to go download it...
Is there a way to have it automatically open the path to the newest version in the users browser? Or if it's not too confusing, have it auto download the latest update?


Score/Record keeping:
I can make it save high scores during the single gaming session, but once the game exits and the user opens it back up, all the scores start at 0 again... I'm thinking the easiest way to do this is to have the highest score write to a .txt before exiting and on next run, retrieve the highest score from that .txt file again, that way it's never lost.
My concern with this, is someone cheating and just editing the value in the .txt file and bragging that they finished the game in 3 seconds. Is there a better way to do this?


Submitting scores online:
I know how to retrieve text from a URL, but how can you write to a URL if you don't have write permissions? I know a lot of websites have a "Submit" button which obvious takes in what people fill in and saves it. How can I take that same idea to log players high scores to my website?

Any ideas?

Update Checking:
Currently, my program connects to a URL and checks if a new version is available. If one is, it simply opens up a dialog saying a new version is out and to go download it...
Is there a way to have it automatically open the path to the newest version in the users browser? Or if it's not too confusing, have it auto download the latest update?

Web Start would certainly handle that. As for your program downloading the update itself, sure, you could download a new version as a stream from a socket. If you want it to auto-update though, the updater will have to run as a separate JVM process since you can't replace your jar file while you are running it.

Score/Record keeping:
I can make it save high scores during the single gaming session, but once the game exits and the user opens it back up, all the scores start at 0 again... I'm thinking the easiest way to do this is to have the highest score write to a .txt before exiting and on next run, retrieve the highest score from that .txt file again, that way it's never lost.
My concern with this, is someone cheating and just editing the value in the .txt file and bragging that they finished the game in 3 seconds. Is there a better way to do this?

You could write the file as binary instead of txt, but really if someone wants to fiddle with it they will. You could encrypt it, but do you really care that much?

Submitting scores online:
I know how to retrieve text from a URL, but how can you write to a URL if you don't have write permissions? I know a lot of websites have a "Submit" button which obvious takes in what people fill in and saves it. How can I take that same idea to log players high scores to my website?

Well, you will probably need to put a script up (php, perl, python, whatever your host allows) to accept and store the scores.

Thanks Ezzaral.. Awesome advice like always :)

I was hoping for an easier way to do the updater...
I ended up finding the following source code which opens the default browser and specified URL.... Since I already have it set up to check if a new version is available, I can have it point to the main webpage instead so they can download it manually... works perfect.. :)

Here it is if anyone else is interested:

public void openURL(String url) { 
    String osName = System.getProperty("os.name"); 
    try { 
	if (osName.startsWith("Mac OS")) {
	    Class fileMgr = Class.forName("com.apple.eio.FileManager"); 
	    Method openURL = fileMgr.getDeclaredMethod("openURL", new Class[] {String.class});
	    openURL.invoke(null, new Object[] {url});
	}
	else if (osName.startsWith("Windows")) 
	    Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url);
	else { 
	    //assume Unix or Linux 
	    String[] browsers = { "firefox", "opera", "konqueror", "epiphany", "mozilla", "netscape" }; 
	    String browser = null;
	    for (int count = 0; count < browsers.length && browser == null; count++) 
	        if (Runtime.getRuntime().exec( new String[] {"which", browsers[count]}).waitFor() == 0)
		browser = browsers[count]; 
		if (browser == null) 
		    throw new Exception("Could not find web browser"); 
		else Runtime.getRuntime().exec(new String[] {browser, url});
	} 
    } 
    catch (Exception e) {
	JOptionPane.showMessageDialog(null, errMsg + ":\n" + e.getLocalizedMessage()); 
    }
}
This article has been dead for over six months. Start a new discussion instead.