Click here to Skip to main content
15,867,835 members
Articles / Desktop Programming / WPF
Article

Middle East Map Game with C# in WPF

Rate me:
Please Sign up or sign in to vote.
4.84/5 (19 votes)
3 Dec 2008CPOL 93.1K   3.6K   55   24
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:

XML
<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:

XML
<!-- 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#:

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:

C#
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)


Written By
Iran (Islamic Republic of) Iran (Islamic Republic of)
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
Generalmer30 Pin
farsizadeh31-Jul-14 18:46
farsizadeh31-Jul-14 18:46 
GeneralRe: mer30 Pin
Mohammad Dayyan1-Aug-14 17:41
Mohammad Dayyan1-Aug-14 17:41 
QuestionRegarding MouseEnter/MouseLeave etc. Pin
Member 95414275-Nov-12 10:01
Member 95414275-Nov-12 10:01 
Hi mate! Love your application! Helps out my progress!

I was wondering where you set your value for "country_MouseLeftButtonDown" etc? I can't find it!

I am doing a Risk game as project with some class mates and I need that hover effect + I want to be able to set colours when someone takes over a country. Assume that it's possible to set Fill="player_color" or something like that?
QuestionGood Job helpful for Kids Pin
Charles Shob17-Oct-12 19:56
professionalCharles Shob17-Oct-12 19:56 
AnswerRe: Good Job helpful for Kids Pin
Mohammad Dayyan17-Oct-12 20:19
Mohammad Dayyan17-Oct-12 20:19 
GeneralRe: Good Job helpful for Kids Pin
Charles Shob17-Oct-12 20:36
professionalCharles Shob17-Oct-12 20:36 
GeneralRe: Good Job helpful for Kids Pin
Mohammad Dayyan17-Oct-12 22:19
Mohammad Dayyan17-Oct-12 22:19 
GeneralMy vote of 5 Pin
Saed Leghaee15-Apr-12 22:50
Saed Leghaee15-Apr-12 22:50 
GeneralGulf not Golf :) Pin
Amir_Saniyan5-Nov-10 9:37
Amir_Saniyan5-Nov-10 9:37 
GeneralI have problem Pin
AhmedHassanyFarrag9-May-09 4:05
AhmedHassanyFarrag9-May-09 4:05 
GeneralRe: I have problem Pin
Mohammad Dayyan9-May-09 5:36
Mohammad Dayyan9-May-09 5:36 
GeneralVB version Pin
mbaocha4-May-09 16:19
mbaocha4-May-09 16:19 
GeneralFYI: this requires .NET 3.5 SP1 Pin
Joe Woodbury4-Feb-09 6:03
professionalJoe Woodbury4-Feb-09 6:03 
GeneralRe: FYI: this requires .NET 3.5 SP1 Pin
Mohammad Dayyan8-Feb-09 9:06
Mohammad Dayyan8-Feb-09 9:06 
GeneralError [modified] Pin
mohsen.karami24-Jan-09 0:30
mohsen.karami24-Jan-09 0:30 
GeneralRe: Error Pin
Mohammad Dayyan24-Jan-09 4:35
Mohammad Dayyan24-Jan-09 4:35 
GeneralRe: Error Pin
mohsen.karami2-Feb-09 1:39
mohsen.karami2-Feb-09 1:39 
GeneralRe: Error Pin
Mohammad Dayyan8-Feb-09 9:11
Mohammad Dayyan8-Feb-09 9:11 
GeneralNicely done Pin
KenBeckett10-Dec-08 15:52
KenBeckett10-Dec-08 15:52 
GeneralRe: Nicely done Pin
Mohammad Dayyan10-Dec-08 19:31
Mohammad Dayyan10-Dec-08 19:31 
GeneralRe: Nicely done Pin
TobiasP16-Dec-08 1:28
TobiasP16-Dec-08 1:28 
GeneralRe: Nicely done Pin
Mohammad Dayyan16-Dec-08 1:45
Mohammad Dayyan16-Dec-08 1:45 
GeneralAwesome Pin
Mahdi Khodadadi Fard3-Dec-08 8:31
Mahdi Khodadadi Fard3-Dec-08 8:31 
GeneralRe: Awesome Pin
Mohammad Dayyan3-Dec-08 8:41
Mohammad Dayyan3-Dec-08 8:41 

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

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