Click here to Skip to main content
Click here to Skip to main content

Middle East Map Game with C# in WPF

, 3 Dec 2008 CPOL
Rate this:
Please Sign up or sign in to vote.
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, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Mohammad Dayyan

Iran (Islamic Republic Of) Iran (Islamic Republic Of)
No Biography provided

Comments and Discussions

 
Generalmer30 Pinmemberfarsizadeh31-Jul-14 19:46 
GeneralRe: mer30 PinmemberMohammad Dayyan1-Aug-14 18:41 
QuestionRegarding MouseEnter/MouseLeave etc. PinmemberMember 95414275-Nov-12 11:01 
QuestionGood Job helpful for Kids Pinmemberchowdary200517-Oct-12 20:56 
AnswerRe: Good Job helpful for Kids PinmemberMohammad Dayyan17-Oct-12 21:19 
GeneralRe: Good Job helpful for Kids Pinmemberchowdary200517-Oct-12 21:36 
GeneralRe: Good Job helpful for Kids PinmemberMohammad Dayyan17-Oct-12 23:19 
GeneralMy vote of 5 PinmemberSaed Leghaee15-Apr-12 23:50 
GeneralGulf not Golf :) PinmemberAmir_Saniyan5-Nov-10 10:37 
GeneralI have problem PinmemberAhmedHassanyFarrag9-May-09 5:05 
GeneralRe: I have problem PinmemberMohammad Dayyan9-May-09 6:36 
GeneralVB version Pinmembermbaocha4-May-09 17:19 
GeneralFYI: this requires .NET 3.5 SP1 PinmemberJoe Woodbury4-Feb-09 7:03 
GeneralRe: FYI: this requires .NET 3.5 SP1 PinmemberMohammad Dayyan8-Feb-09 10:06 
GeneralError [modified] Pinmembermohsen.karami24-Jan-09 1:30 
GeneralRe: Error PinmemberMohammad Dayyan24-Jan-09 5:35 
GeneralRe: Error Pinmembermohsen.karami2-Feb-09 2:39 
GeneralRe: Error PinmemberMohammad Dayyan8-Feb-09 10:11 
GeneralNicely done PinmemberKenBeckett10-Dec-08 16:52 
GeneralRe: Nicely done PinmemberMohammad Dayyan10-Dec-08 20:31 
GeneralRe: Nicely done PinmemberTobiasP16-Dec-08 2:28 
GeneralRe: Nicely done PinmemberMohammad Dayyan16-Dec-08 2:45 
GeneralAwesome PinmemberMahdi Khodadadi Fard3-Dec-08 9:31 
GeneralRe: Awesome PinmemberMohammad Dayyan3-Dec-08 9:41 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.1411023.1 | Last Updated 3 Dec 2008
Article Copyright 2008 by Mohammad Dayyan
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid