This is part of an ELC Tech Network

iPhone Game Programming Tutorial – Part 1

This is the first in a multipart series where I will be teaching you to create an iPhone game from the ground up.  As many of you know, OpenGL and Quartz have quite a steep learning curve.  This tutorial will simplify the development process and not use either one of those technologies.  For our graphics, we will simply use UIImageViews.  

In this tutorial series, I will teach you about every aspect of developing an iPhone game.  The game will include graphics, sounds, game mechanics, and even some simple computer AI. 

The game we will be creating is called iTennis.  It is essentially Pong with a tennis theme.  It will follow all of the same rules and mechanics of Pong.  I chose this as a first game tutorial as iTennis does not require any special animation.  If there is significant interest, I will move on to a more complex game in a later series. Here is a screenshot of the game we will be making:

 

screenshot_011

Let’s get started… Here are the images you will need for the project. (I know my Photoshop skillz are weak, so be easy on me).  Click the link below to download the zipped images.
   

Advertisement

 

iTennis_Images.zip

 

Open up XCode and create a View Based Application. Name this application iTennis.

 

screenshot_01
After you unzip all of the images, drag them into the project Resources folder.  After you have done this, the resources folder should look like this.
screenshot_02
Now we are ready to start coding.  We need to first establish our IBOutlet connections so that we can interact with our images in code.  We will also add some of the game variables that we will be using in this tutorial.  Open up iTennisViewController.h and add the following code:
screenshot_05
As you can see, we have quite a few IBOutlets.  This is because there are many objects we need to interact with.  For now, ignore the ballVelocity and gameState variables.  Now, we are ready to build our interface.  Double click on the file iTennishViewController.xib to open it up inside of Interface Builder.  Here is a video of me setting up the interface.
Now that you have made the connections, close Interface Builder and return to XCode.  We need to set up some constants.  You can hardcode these values in somewhere, but making them constants makes them easier to change when you are tweaking the mechanics of your game. Open up iTennisViewController.m and add the following code.
screenshot_06
Let me explain the purpose of the constants.  The first 2 are game states.  We use these to determine what is to be shown on screen.  Is the game paused, is it running, is it at the title screen?  We will add more states later on in the game.  The next 2 variables are speeds for the ball to travel.  Since the game is 2D, the ball can have an X and Y speed to make up its velocity vector.  The next line synthesizes the variables we will use to create their getter and setter methods automatically.
Now let’s write the viewDidLoad method. Add the following code:
screenshot_07
First, we are setting our game state to a paused game state.  This is so the game doesn’t start right away when the view loads.  Next, we create a vector for the ball’s velocity.  Adjust the constants that we defined earlier for a faster or slower ball speed.  Finally, we create an NSTimer instance.  The first parameter is the timestep.  We have set the time step to 0.05 seconds.  Adjusting this will change the speed of the entire game. Next we set the target.  This is telling the timer where the callback is located.  The callback is the next parameter.  Basically, we are telling the timer to call self.gameLoop every 0.05 seconds.  We don’t need to worry about the userInfo param.  The last parameter just tells the timer to repeat.
Now that we have initialized our game, let’s create the game loop.  Add the following method:
screenshot_08
First, we are checking to see if the game is in a running state (we don’t want to move the ball in a paused state).  If the game is not running, we will show the tapToBegin label.  This is just the label defined earlier that tells the user to tap the screen to begin.
If the game is running, we start by moving the ball according to its velocity vector.  The next few lines do some bounds checking.  If the ball hits the side of the screen, we want to reverse its velocity so that it “bounces”.  Without this code, the ball would fly off the screen.
The last bit of code we will need to write is the touchesBegan method.  We will use this method to start the game when the game is in a paused state.  Add the following code:
screenshot_09
What this does is first checks to see if we are in a paused state.  If so, we hide the tapToBegin label and set the game in a running state.  This will get the game running.  Eventually, we will write the code to control the player paddle in this function.
Finally, being good iPhone developers, we need to clean up the resources that we allocated.  Add the following code to the dealloc method.
screenshot_10
That concludes part 1 of our game development tutorial series.  If you have any questions or comments, feel free to leave them in the comments section of this post.  You can download the source code here. Happy iCoding!
This entry was posted in iPhone Game Programming, iPhone Programming Tutorials. Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

204 Comments

  1. ash
    Posted October 27, 2009 at 8:46 am | Permalink

    im having trouble with the labels connection, when i drag down toward the file owner it only come up with View, and that it there is no player score or computers score, i dont know why this has happened, it works with the images but it wont work with the labels and even the texts

    please get back to me a soon as possible

    • Tom
      Posted April 9, 2010 at 7:34 pm | Permalink

      In response to ash’s question, i had the same problem but by saving the iTennisViewController.h file when you’ve added the code, then entering Interface Builder it works just fine.

    • Posted June 7, 2010 at 11:27 am | Permalink

      Tom’s answer may have worked, but are you dragging from the label to the file’s owner, or the file’s owner to the label? The only way it works it to drag the file owner’s outlet to the label.

      • Posted June 7, 2010 at 11:29 am | Permalink

        Also, try right clicking on the file owner and dragging to the label.

  2. Remi
    Posted November 7, 2009 at 11:25 am | Permalink

    Thanks very helpful !

  3. Tommy Myers
    Posted November 21, 2009 at 3:59 am | Permalink

    Hi,

    how can i modify the app to play against your friends through bluetooth?

    Tommy

    • David
      Posted April 24, 2010 at 11:03 am | Permalink

      1. this is supposed to be for a tutorial- he/she has gone to the trouble of making it for you- how much more can you ask for???
      2. bluetoothing is incredibly hard

  4. Aussie96
    Posted November 26, 2009 at 4:29 am | Permalink

    Hey guys,

    Im having trouble Connecting “New Referencing Outlet” and “File’s Owner”, which is displayed in the video. This is needed to connect the racquets, scores and ball. Obviously this is one of the most vital parts in this application, though I cant do it.

    All help will be greatly appreciated!

    • Posted June 7, 2010 at 11:31 am | Permalink

      Try right clicking on the file owner. If you did the stuff in the iTennisViewController.h, then you should be able to see them there.

      • Posted June 7, 2010 at 11:32 am | Permalink

        don’t use the New Referencing Outlet

  5. Simon88
    Posted December 6, 2009 at 6:27 pm | Permalink

    In answer to a lot of the problems with

    *** Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘-[UIViewController _loadViewFromNibNamed:bundle:] loaded the “iTennisViewController” nib but the view outlet was not set.’

    The chances are you followed the tutorial but havn’t set the view connection itself.
    If you look through your connections, all your major objects should be connected, but i found with mine that I was missing the “view” connection at the bottom. You want to drag this one to the “view” box in your iTennisViewController.xib window.

    Once this is connected, save, and rebuild and run your project!

  6. Nick
    Posted January 14, 2010 at 3:27 pm | Permalink

    Hey Brandon,

    You da’ man!.. Amazing walk-through Xcode.. As a first time app developer I was pretty intimidated..(still kind of am actually), but this tutorial definitely opened my eyes… Props! and I could help notice the inconsiderate moron that tried to sell your exact game to apple..lol.. hope you have him on his knees begging for mercy.

    N.

  7. Andy
    Posted January 30, 2010 at 8:44 am | Permalink

    Great writeup!

    Question, I’m trying to change the game from portrait to landscape, I’ve already rotated my images and switched interface builder to landscape, but what do I need to alter in the code? P.S. when I simulate it, it is in portrait with the court squeezed into landscape. Thanks!

    • cooldaddybeck
      Posted March 13, 2010 at 2:25 pm | Permalink

      Andy, for adjusting from portrait to landscape (to be used in your tennisViewController.m and SplashViewController.m files):

      // Override to allow orientations other than the default portrait orientation.
      - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
      // Return YES for supported orientations
      return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
      }

    • Posted June 7, 2010 at 11:33 am | Permalink

      press control, and then a side arrow key in the simulator. That rotates it.

  8. Chimpy
    Posted February 5, 2010 at 3:17 pm | Permalink

    Hi Brandon,

    how would you limit the width that the paddles could move ?
    so the ball could squeeze between the paddle and the side of the screen ?

    thanks

    Chimpy

  9. Posted February 15, 2010 at 2:14 pm | Permalink

    Greta site man! Keep the tutorials coming!

  10. Posted February 18, 2010 at 6:13 pm | Permalink

    Hello,
    I am new to xcode and c programming and iphone programming. I have sucessfully “built” this tutorial but it says that it “failed to launch simulated application: iPhone Simulator failed to install the application.” I have it set to iPhone Simulator 3.1 and have tried 3.0 as well.

  11. Chris
    Posted February 28, 2010 at 8:01 pm | Permalink

    @Brandon quicktime movie wont play to show the setting up of the UI!

  12. Salim
    Posted March 1, 2010 at 11:00 pm | Permalink

    Hii,
    Can u please send me the whole code on my E-mail address that i can study n learn more thing.

  13. Salim
    Posted March 2, 2010 at 1:07 am | Permalink

    Hi Narender,

    I will Try to do this And its working. can you please send me the racquet_yellow code….
    on my email add please.

  14. Sylvain
    Posted March 23, 2010 at 8:09 am | Permalink

    Hello,

    Why do we call :

    self.gameState = kGameStatePaused;
    ballVelocity = CGPointMake(kBallSpeedX,kBallSpeedY);

    et not : (missing “self”)

    self.gameState = kGameStatePaused;
    self.ballVelocity = CGPointMake(kBallSpeedX,kBallSpeedY);

    then here (missing self)

    if(gameState == kGameStatePaused) {…
    end not

    if(self.gameState == kGameStatePaused) {….

    Thank you.

  15. J. Cohen
    Posted April 1, 2010 at 8:18 am | Permalink

    I completed this first tutorial. The program builds and loads into the iPhone simulator without problem. It briefly shows the load screen, then displays the tennis court which I built according to the video. However, nothing happens when I click to continue! I might be wrong, but it would seem that, based on my understanding of the code, that it should start the ball moving.

    Should it?

    Or do I have to do step 2 before anything actually happens?

    I’m reluctant to continue before I know that I have completed these steps properly. Thanks!

    • J. Cohen
      Posted April 1, 2010 at 2:29 pm | Permalink

      Well it was a – instead of an = that was making it fail… works now :)

    • Doug Stafford
      Posted April 13, 2010 at 2:39 pm | Permalink

      Great tutorial.

      I have finished part 1, but the tennis ball is not moving?

      Any ideas?

      Thanks

  16. Matt
    Posted April 2, 2010 at 12:29 pm | Permalink

    I have the problem where only my tennis court shows up. Anyone know what I’ve done wrong? Thanks in advance for any tips!

  17. Posted April 11, 2010 at 9:05 pm | Permalink

    Hey Brandon, great tutorial, very helpful and easy to understand. I have an idea for an iPhone game, sports training related. I know you probably get this a lot, lol, but I do not want to go into too much detail on a blog, but if you could take a moment and check out my website, listed above, you will see the type of training I do, it may give you a hint as to what I am looking to develop. Please feel free to email me at my email address listed above and I can go into more detail.

    Thanks
    Rick

  18. macmandev
    Posted April 16, 2010 at 8:07 pm | Permalink

    i downloaded the source code but the points don’t count up and the racquet wont move?
    thanks

  19. darius
    Posted April 18, 2010 at 2:28 pm | Permalink

    Hey, I finally got all the coding to be working and debugged!

    But now when I build and run it, all the simulator shows me is the court pic. I’ve tried messing around in the interface builder but nothing seems to let me see any other object.

    Is there some sort of arrangement order that I need to setup?
    If anyone could help that would be awesome!

    Thank you.

  20. Posted April 20, 2010 at 11:09 pm | Permalink

    Hey Guys,

    I’d like to start off by saying AWESOME tutorial(s) I’ve been finding out more things I can do via the apple developer program now.

    One problem though:
    I’m attempting to reproduce a game like this with a few more complications but am running into an interface error. The code appears to be correct (producing no errors according to Xcode 3.2.2. When the app starts up in simulator, it loads the default.png image without a problem and then the splash.png image. At first there were some fading errors but I managed to fix those when I upgraded Xcode from 3.1.3 to 3.2.2. In any case it still fades the splash screen to a solid white display. I’ve attempted to find help via apple’s technical support, ect. and have no success. Has ANYONE here ever had this problem and if so how did you find a solution?

  21. Posted April 20, 2010 at 11:10 pm | Permalink

    Hey Guys,

    I’d like to start off by saying AWESOME tutorial(s) I’ve been finding out more things I can do via the apple developer program now.

    One problem though:
    I’m attempting to reproduce a game like this with a few more complications but am running into an interface error. The code appears to be correct (producing no errors according to Xcode 3.2.2. When the app starts up in simulator, it loads the default.png image without a problem and then the splash.png image. At first there were some fading errors but I managed to fix those when I upgraded Xcode from 3.1.3 to 3.2.2. In any case it still fades the splash screen to a solid white display. I’ve attempted to find help via apple’s technical support, ect. and have no success. Has ANYONE here ever had this problem and if so how did you find a solution?

    If you have an answer you can contact me via my business site at CrawfordWorks.ca
    Thank you in advanced !

  22. Mark
    Posted May 5, 2010 at 9:25 am | Permalink

    Hi. I’m trying to add the court.png file to the imageview– the first step of the video. however, when I try to click the dropdown menu to get court.png, none of my pictures are there.

    It’s like my iTennisViewController.xib isn’t linked to the resource images that I imported. Is there some sort of linking step that I’m missing? I can’t type it manually either because I just get a giant blue question mark.

    Thanks!

    • Posted July 27, 2010 at 4:15 pm | Permalink

      Have you tried saving everything, including your xCode files?

  23. Posted May 31, 2010 at 9:40 pm | Permalink

    This is great, you are the best of the best :) thanks alot

  24. Chris
    Posted June 1, 2010 at 4:01 pm | Permalink

    Anybody else having problems with the video part of the tutiorial (building the interface) buffering? I cant seem to view the movie due to it only buffering a few seconds.

    Are there any other ways to view the movie?

    Just starting this tutorial and would be a real shame to not be able to continue.

    Please reply, Thanks.

  25. Michele
    Posted June 1, 2010 at 4:07 pm | Permalink

    @Simon88
    Thanks a lot for your tip! You save my night :)

    @author
    very very well work
    grazie anche dall’Italia

  26. Chris
    Posted June 1, 2010 at 4:18 pm | Permalink

    Never mind. My Quicktime is playing up on my mac so loaded it up on my PC instead and hey presto its worked.

    This doesnt make PC’s better than Macs in anyway though lol.

  27. Noe
    Posted June 17, 2010 at 1:29 pm | Permalink

    Hi I write the code perfectly but i hate this error:
    Code Sign error: The identity ‘iPhone Developer’ doesn’t match any valid certificate/private key pair in the default keychain

    Is it real that i need to get the paid version?
    or i can correct that?

  28. CJ
    Posted June 24, 2010 at 11:32 am | Permalink

    Followed the tutorial and all I see is the court.png no ball or racquets. I’ve seen others with the same problem and they said they fixed it but how did they do it?

  29. Anonymous
    Posted June 27, 2010 at 5:38 am | Permalink

    Just to let everybody who is having the problem when they link to the File’s Owner, you must select the object e.g the racquet, then drag the line across.

  30. Anonymous
    Posted June 27, 2010 at 6:38 am | Permalink

    Hi

    Easy to understand tutorial, well done!

    However, when I do build and go, I get 18 errors, I deleted most of the stuff where the errors were coming from but I think they were the most important bits, but I wanted to try build and go again, but I got one error saying:

    Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1

    Any ideas what I might be doing wrong?

    J.F

    • Camel
      Posted July 1, 2010 at 1:55 pm | Permalink

      @those where only the court shows up.

      I had the same problem and solved it like this.

      Open the interface builder. In the window with 3 icons (File’s owner, First Responder, View), click on the View icon.
      Go to the View Connections tab and make a new connection to the File’s Owner.

  31. Camel
    Posted July 1, 2010 at 1:57 pm | Permalink

    @those where only the court shows up.

    I had the same problem and solved it like this.

    Open the interface builder. In the window with 3 icons (File’s owner, First Responder, View), click on the View icon.
    Go to the View Connections tab and make a new connection to the File’s Owner.

  32. ashok yagnik
    Posted July 5, 2010 at 12:43 pm | Permalink

    hi
    suddenly i am facing problems with my iphons games that is wheneevr i click on the game icon for a second it opens a game but automatically it gets close so please help me with it

  33. Posted July 22, 2010 at 1:57 am | Permalink

    So nice tutorial , I can run this game on iphone simulator successfully. Thank you very much

  34. Xander PK
    Posted July 23, 2010 at 2:20 am | Permalink

    hey where’s the part 2 of the tutorial ???
    X-(

    PS. part 1 was really great! :D

  35. Giovanni Di Russo
    Posted July 30, 2010 at 5:25 pm | Permalink

    Hi, great tutorial! I want to know one thing for future reference, though: what (if any) is the difference between UIImage and UIImageView? I know this is a simple question, but I would greatly appreciate an answer.

    • andy
      Posted August 31, 2010 at 2:49 pm | Permalink

      your a douche

      • joe
        Posted August 31, 2010 at 2:50 pm | Permalink

        andy thats not nice

  36. Gio
    Posted July 31, 2010 at 11:49 am | Permalink

    Sorry to double post, but there is a problem with mine:
    when I run it, the ball moves even though it is paused and clicking the screen on the simulator does not get rid of the label. Any help would be very appreciated.

  37. andy
    Posted August 31, 2010 at 2:48 pm | Permalink

    how do you put this on the iphone/itouch

  38. joe
    Posted August 31, 2010 at 2:53 pm | Permalink

    cool andy that is so cool it smells like chocolate and limes at the same time

33 Trackbacks

  1. [...] iPhone Game Programming Tutorial – Part 1 | iCodeBlog [...]

  2. [...] 33. iPhone game programming [...]

  3. [...] tutorial has three parts, the first part deals with the creation of different folders within the main project folder.  The second part [...]

  4. [...] iPhone Game Programming Tutorial: This multipart tutorial offers a way to learn OpenGL and Quartz for iPhone development. [iCode] [...]

  5. [...] of Brandon’s most popular articles is the “iPhone Game Programming Tutorial” in which he gives step-by-step instructions on how to build an iPhone game called iTennis (a [...]

  6. [...] ripoff of code provided by the iCodeBlog, a site known for its free iPhone coding tutorials. The original tutorial, written by Brandon Trebitowski, was apparently compiled and submitted by Peter Sheen of [...]

  7. [...] ripoff of code provided by the iCodeBlog, a site known for its free iPhone coding tutorials. The original tutorial, written by Brandon Trebitowski, was apparently compiled and submitted by Peter Sheen of [...]

  8. [...] ripoff of code provided by the iCodeBlog, a site known for its free iPhone coding tutorials. The original tutorial, written by Brandon Trebitowski, was apparently compiled and submitted by Peter Sheen of [...]

  9. [...] ripoff of code provided by the iCodeBlog, a site known for its free iPhone coding tutorials. The original tutorial, written by Brandon Trebitowski, was apparently compiled and submitted by Peter Sheen of [...]

  10. By iWyre on July 9, 2009 at 8:06 pm

    [...] ripoff of code provided by the iCodeBlog, a site known for its free iPhone coding tutorials. The original tutorial, written by Brandon Trebitowski, was apparently compiled and submitted by Peter Sheen of [...]

  11. [...] ripoff of code provided by the iCodeBlog, a site known for its free iPhone coding tutorials. The original tutorial, written by Brandon Trebitowski, was apparently compiled and submitted by Peter Sheen of [...]

  12. [...] ripoff of code provided by the iCodeBlog, a site known for its free iPhone coding tutorials. The original tutorial, written by Brandon Trebitowski, was apparently compiled and submitted by Peter Sheen of [...]

  13. [...] Yeah, that’s right: stolen code. The code came from a tutorial site called iCodeBlog, and the tutorial containing this code was written by Brandon Trebitowski. A company on the App Store called [...]

  14. [...] ripoff of code provided by the iCodeBlog, a site known for its free iPhone coding tutorials. The original tutorial, written by Brandon Trebitowski, was apparently compiled and submitted by Peter Sheen of [...]

  15. [...] Devs”. La versione originale inglese del tutorial è disponibile a questo indirizzo: “iPhone Game Programming Tutorial, Part 1 – iCodBlog“. I meriti quindi relativamente alla versione inglese, sono del legittimo [...]

  16. [...] iPhone Game Programming Tutorial – Part 1 [...]

  17. By iPhone/iPod touch游戏开发 | SHUGUO on September 2, 2009 at 2:52 am

    [...] iTennis这个教程还不错,虽然没用上什么华丽复杂的功能,但是一步一步跟着做下去,对于怎么做出一个iPhone游戏还是很有帮助的。这也是我除了Hello World之外第一个自己尝试的iPhone App了。虽然Object-C的挺多语句还不很习惯,也有一些不理解的地方,但确实感受到了,开发iPhone的项目门槛并不高。这也给自己树立了信心,有机会好好学习和开发iPhone软件。如果有时间,我也自己写一个关于自己开发软件的教程。 [...]

  18. By Look Familiar? | Iphone Study Blog on September 4, 2009 at 6:03 pm

    [...] might recognize this “game” from a tutorial that I wrote about writing an iPhone game (link).  One thing to note here is the company name is BlaBlaIncTech (not iCodeBlog) meaning I did not [...]

  19. [...] Part one explains basic use of xCode and Interface Builder. He also demonstrated some basic game design framework. Part two talks about user interactions. Part three discusses about putting a Splash screen to an applicaiton. [...]

  20. By Some Great Resources! | My First iPhone Application on October 20, 2009 at 9:25 pm

    [...] iPhone Game Programming Tutorial: This multipart tutorial offers a way to learn OpenGL and Quartz for iPhone development. [iCode] [...]

  21. [...] iPhone Game Programming Tutorial: Part 1 Here’s a complete tutorial for creating a Pong-like iPhone game. [...]

  22. [...] iPhone Game Programming Tutorial: Part 1 Here’s a complete tutorial for creating a Pong-like iPhone game. [...]

  23. By My first iphone game! « Learning techie on January 21, 2010 at 5:11 pm

    [...] I named this application “Galactic Pong” but in essence it is just a edited version of “iTennis” but the author of that tutorial. You can access that tutorial here. [...]

  24. By CasdraBlog » Blog Archive » links for 2010-01-29 on January 29, 2010 at 5:03 am

    [...] iPhone Game Programming Tutorial – Part 1 | iCodeBlog (tags: iphone programming) [...]

  25. [...] up XCode and create a View Based Application. Name this application iTennis. After you unzip all of the images, drag them into the project [...]

  26. [...] iPhone Game Programming Tutorial: Part 1 Here’s a complete tutorial for creating a Pong-like iPhone game. [...]

  27. [...] iPhone Game Programming – Part one of a 4-part series on creating your first iPhone Game. Create a simple pong style game and learn about collision detection, sounds, AI and user interaction in the process. [...]

  28. [...] iPhone Game Programming Tutorial – Part 1 | iCodeBlog [...]

  29. [...] If you’ve never developed using Xcode before it can seem overwhelming since there is a lot available. Personally, as a web developer, I prefer a leaner coding environment; but I quickly realized that a lot of the tools given are indispensable. A lot of great fundamentals can be at the Apple Developer Center, but if you’re like me and just want to jump into something to play around, there are simple tutorials available online. I chose to build a game. [...]

  30. [...] iPhone Game Programming Tutorial: This multipart tutorial offers a way to learn OpenGL and Quartz for iPhone development. [iCode] [...]

  31. [...] iTennis iPhone Game Tutorial – Lesson 01 [...]

  32. [...] trawled the Web looking for tutorials and came across a few interesting ones. One was a simple iTennis game written in Cocoa Touch by Brandon Treb, but it didn’t follow the MVC design pattern. So, [...]

  33. [...] iPhone gaming programming (parte 1). Ottimo tutorial suddiviso in 4 parti sulla creazione di un videogioco per iPhone. Un semplice Pong style che ci consente di apprendere di più sulla collisione di oggetti, Ai, processi di interazione degli utenti (parte 2), creazione di splash page (parte 3) e gestione dei suoni (parte 4). Una panoramica generale su tutto ciò che c’è da sapere sullo sviluppo di game per iPhone. Se volete sviluppare videogame per iphone, questo tutorial è assolutamente indispensabile. [...]

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">