I created a simple program that searches through Starcraft's maps directory tree and shows a list of all the maps that are searches by Starcraft's maps directory.
I'm not going to lie, I play a lot of Blizzard Entertainment's Starcraft. My friend and I usually like to change things up a lot by choosing a random map to play on before every game. This was getting annoying (and a little unfair. What can I say, I like some maps better than others). So, I quickly made a simple program that would search through Starcraft's maps directory tree and show a list of all the maps that are currently on the computer, then randomly choose one. The following code was used to find the maps://THIS FUNCTION WILL GET RID OF THE ROOT DIRECTORY PATHstring parseRootPath(string path){return path.Remove(0, rootSCPath.Length);}//THIS IS A RECURSIVE FUNCTION THAT WILL DISPLAY FILESvoid getMapNames(string curDirPath){string[] subDirs = Directory.GetDirectories(curDirPath);foreach( string dir in subDirs )getMapNames(dir);string[] fileNames = Directory.GetFiles(curDirPath, "*.sc*");foreach( string name in fileNames ){//UPDATE THE LIST OF MAPSlbMaps.BeginUpdate();lbMaps.Items.Add( parseRootPath(name) );lbMaps.EndUpdate();}}A recursive function was used in this process. If the file was a subdirectory, getMapNames() would call itself using the subdirectory as a parameter. Very simple. The main feature of my program was to choose a random map. This was a simple function to do so:public void btnChooseClick(Object sender, EventArgs e){//MAKE SURE THE LIST OF MAPS ISN'T EMPTY!if ( lbMaps.Items.Count != 0 )//SET A RANDOM MAP AS "SELECTED"lbMaps.SetSelected( rand.Next(0, lbMaps.Items.Count), true );elseMessageBox.Show("No maps in list. Populate the list.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);}I also added a couple of features that would allow me to view the map and run starcraft directly from my program. To do this, I just used a Process to run a command. In the view map, this command was to just run a command with the filepath and filename of the selected map. Since Mapeditor.exe was the default program to open SC maps with, the maps were opened with it. The code is://OPEN THE MAP UP IN THE MAP EDITOR TO VIEW ITpublic void btnViewMapClick(Object sender, EventArgs e){if ( lbMaps.SelectedItem != null ){System.Diagnostics.Process proc = new System.Diagnostics.Process();proc.EnableRaisingEvents = false;proc.StartInfo.FileName = rootSCPath + lbMaps.SelectedItem.ToString();proc.Start();}elseMessageBox.Show("No map selected. Please choose a map.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);}And for the running of Starcraft.exe, we just make a process that runs starcraft.exe://RUN STARCRAFT.EXEpublic void btnRunSCClick(Object sender, EventArgs e){System.Diagnostics.Process proc = new System.Diagnostics.Process();proc.EnableRaisingEvents = false;proc.StartInfo.FileName = rootSCPath + \\starcraft.exe;proc.Start();}Lots of little bits of code that could be helpful to you. This is (sadly) one of my most useful programs that I have made. But, as I was once told, Keep It Simple Stupid.
LINQ Quick Reference with C#