Mike Taulty's Blog
Bits and Bytes from Microsoft UK
Silverlight Puzzle
Mike Taulty's Blog

Mike's Badges

Follow on Twitter
View mike's profile on slideshare
Add to Technorati Favorites
CW Blog Awards

I built one of those "sliding" puzzle games with Silverlight (I remember that there used to be a similar but much more elaborate one with WPF for a while).

Image is below;

and links to the running sample. The main thing that I wanted to play with here was the idea of painting with a generic brush (be it Image or Video) and how powerful that is and it just worked a treat in building this.

Playing with the Alpha, I did struggle with a few things - not sure whether this is a "lack of knowledge/docs" thing or whether it's just stuff that's a bit rough-and-ready with the Alpha.

  1. I found it pretty tricky to re-use anything. For example, if I created a Brush to paint a rectangle then I'd expect to re-use that Brush to paint another rectangle but I found that throws exceptions whereas if I re-create the Brush every time then that is fine.
  2. I found it pretty tricky to create a Storyboard from code. I had quite a few goes at this and, no matter what I tried, I struggled to build a Storyboard using the object model. In the end, what I had to do was to stick a hard-coded string into my code with the XAML that I wanted in it and then call XamlReader.Load on that string to give me an object graph that's rooted by a Storyboard and then I could manipulate that Storyboard from the object model.  That is, I ended up doing something like this;

 

            string xaml =
               string.Format(
                   "<Storyboard " +
                       "xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' " +
                       "xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' " +
                       "x:Name='{0}' " +
                       "Storyboard.TargetName='{1}' Duration='0:0:1'>" +
                       "<DoubleAnimation x:Name='{2}' By='0' Storyboard.TargetProperty='(Canvas.Left)'/>" +
                       "<DoubleAnimation x:Name='{3}' By='0' Storyboard.TargetProperty='(Canvas.Top)'/>" +
                   "</Storyboard>",
                   StoryboardName,
                   RectangleName,
                   LeftAnimationName,
                   TopAnimationName);

            Storyboard sb = (Storyboard)XamlReader.Load(xaml);
 

Rather than just doing Storyboard sb = new Storyboard(); sb.Children = .......;

I'm sure there's some way around this that probably involves setting the right DependencyProperty but I did try quite a few and couldn't quite get there.

The only other thing that I struggled with was that I originally had an animation with a duration of "0:0:0.5" and what seemed to happen with that animation was that it only ran to half of its expected value. Not sure if this is something odd about timers etc. but I found that setting a value below 1s seemed to result in a peculiar animation.

The source project is here if you want to play with it.


Posted Tue, May 8 2007 10:48 AM by mtaulty

Comments

Mike Ormond's Blog wrote Silverlight Sliding Puzzle
on Wed, May 9 2007 1:15 AM
MikeT's published a sliding puzzle built with Silverlight 1.1 Alpha . He's also published the source
Christopher Steen wrote Link Listing - May 9, 2007
on Wed, May 9 2007 9:09 PM
Garage Sales and Garage-Sale Quality Code [Via: Scott Hanselman ] MooTools 1.1 Released [Via: Dion Almaer...
help.net wrote Silverlight Puzzle
on Tue, May 22 2007 2:13 PM
Mike Taulty play with silverlight and create a sliding puzzle. Cool! Read more...
(C) Mike Taulty, 2009. All rights reserved. The information in this weblog is provided "AS IS" with no warranties, and confers no rights. This weblog does not represent the thoughts, intentions, plans or strategies of my employer. It is solely my opinion. Inappropriate comments will be deleted at the authors discretion. All code samples are provided "AS IS" without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.
Powered by Community Server (Non-Commercial Edition), by Telligent Systems