Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Middle East Map Game with C# in WPF

0.00/5 (No votes)
3 Dec 2008 10  
A simple game with C# and Expression Blend 2 and Visual Studio 2008 SP1.

MiddleEastGame.gif

Introduction

This is a simple game in WPF that gives you some information about working with XAML and C#. I also use a little LINQ for reading the XML files.

Background

There are some Flash games like this project here, I actually got the idea from there.

Using the code

First, I created Middle East's map. For that, I used a Pen of Expression Blend 2 EBpen.jpg. I put the original map image in the back of my layout space, and then I drew the lines according to the country borders with the Pen. At last, I had a Path code in XAML like this:

<Path Fill="#FF3DAB0F" Stretch="Fill" Stroke="#FF000000" 
    HorizontalAlignment="Right" Margin="0,39.687,0,192.468" 
    x:Name="Iran" Width="243.538" 
    Data="M151.72299,176.838 L154.42299,177.93799 151.82297,180.43799 
        149.823,181.53798 146.62303, ..." />

After creating the map, I created four Storyboards for my game:

<!-- When Mouse enters the bound of a country -->
<Storyboard x:Key="StoryboardMouseEnter">...</storyboard>
<!-- When Mouse leaves the bound of a country -->
<Storyboard x:Key="StoryboardMouseLeave">...</storyboard>
<!-- When the program should shows a new question -->
<Storyboard x:Key="StoryboardInfo1">...</storyboard><!-- fade out -->
<Storyboard x:Key="StoryboardInfo2">...</storyboard><!-- fade in -->

OK, now I have tocontrol them (Storyboards) with C#:

void country_MouseEnter(object sender, MouseEventArgs e)
{
    try
    {
        Path senderPath = (Path)sender;
        changeColorValue(senderPath.Name);
        StoryboardMouseEnter.Begin();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Exception", MessageBoxButton.OK);
    }
}

void country_MouseLeave(object sender, MouseEventArgs e)
{
    try
    {
        StoryboardMouseLeave.Begin();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Exception", MessageBoxButton.OK);
    }
}

//I've created a XML file and wrote country information in it (XMLcountriesInfo.XML)
//In this method I've used LINQ for reading information from XML file
void updateCountryInfo(string countryName)
{
    try
    {
        var countryNode = from c in xmlFile.Descendants(countryName)
        select c;
        var Area = (from q in countryNode.Descendants("Area")
                    select q).First().Value;
        var Population = (from q in countryNode.Descendants("Population")
                        select q).First().Value;
        var Capital = (from q in countryNode.Descendants("Capital")
                    select q).First().Value;
        var OfficialLanguage = (from q in countryNode.Descendants("OfficialLanguage")
                        select q).First().Value;
        var flagName = (from q in countryNode.Descendants("flagName")
                    select q).First().Value;
        //////////////////////////////////////////////
        this.NameOfCountry.Text = countryName;
        this.Flag.Source = new 
                BitmapImage(new Uri("Flags\\" + flagName, UriKind.Relative));
        this.area.Text = Area + " KM2";
        this.population.Text = Population;
        this.capital.Text = Capital;
        this.languages.Text = OfficialLanguage;
    }
    catch { }
}

After that, I check whether the user answers the question correctly or not:

void changeColorValue(string countryName)
{
    try
    {
        /////////////////////////////////
        //changing color of target path
        Color newColor = (Color)ColorConverter.ConvertFromString(this.enterColorString);
        ColorAnimationUsingKeyFrames colorAnimationUsingKeyFrames 
            = (from c in StoryboardMouseEnter.Children
              where (Storyboard.GetTargetName(c) == countryName) 
              select c).First() as ColorAnimationUsingKeyFrames;
        colorAnimationUsingKeyFrames.KeyFrames[0].Value = newColor;
        ////////////////////////////////////////////// 
        //changing color of others path except target
        Color grayColor = (Color)ColorConverter.ConvertFromString(this.leaveColorString);
        var othersColorAnimationUsingKeyFrames = from c in StoryboardMouseEnter.Children
        where (Storyboard.GetTargetName(c) != countryName)
        select c;
        foreach (ColorAnimationUsingKeyFrames tmp in othersColorAnimationUsingKeyFrames)
        tmp.KeyFrames[0].Value = grayColor;
    }
    catch (Exception ex)
    {
            MessageBox.Show(ex.Message, "Exception", MessageBoxButton.OK);
    }
}


void changeQuestion()
{
    try
    {
        string[] countries = new string[] { "Iran", "Turkey", 
            "Iraq", "Kuwait", "Bahrain", "Oman", 
            "Qatar", "SaudiArabia", "UAE", 
            "Yemen", "Israel", "Jordan", 
            "Lebanon", "Syria", "Egypt", 
            "Palestine" };
        Random rand = new Random(DateTime.Now.Second.GetHashCode());
        this.answer = countries[rand.Next(0, countries.Count() - 1)];
        StoryboardInfo1.Begin();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Exception", MessageBoxButton.OK);
    }
}

void StoryboardInfo1_Completed(object sender, EventArgs e)
{
    try
    {
        updateCountryInfo(this.answer);
        StoryboardInfo2.Begin();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Exception", MessageBoxButton.OK);
    }
}

History

  • 03 December, 2008: First post.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here