Click here to Skip to main content
15,886,685 members
Articles / Mobile Apps

Bubble.NET Game

Rate me:
Please Sign up or sign in to vote.
4.51/5 (44 votes)
14 Jun 2004CPOL11 min read 257K   3.2K   82  
A Puzzle Bobble (aka Bust-A-Move) clone for Pocket PC using the .NET compact framework
  • bobble_bin.zip
  • bobble_src.zip
    • AngleHelper.cs
    • AssemblyInfo.cs
    • BobbleNet.csdproj
    • BobbleNet.csdproj.user
    • BobbleNet.sln
    • Bubble.cs
    • BubbleGame.cs
    • BubbleImages.cs
    • BubbleSprite.cs
    • CodeProject.lvl
    • frmMain.cs
    • frmMain.resx
    • frmMenu.cs
    • frmMenu.resx
    • GameBoard.cs
    • GraphicsHelper.cs
    • GXInput.cs
    • Images
      • Background.png
      • bubble-black.png
      • bubble-blue.png
      • bubble-green.png
      • bubble-magenta.png
      • bubble-orange.png
      • bubble-red.png
      • bubble-white.png
      • bubble-yellow.png
      • Ceiling.png
      • Launcher
        • Launcher0000.png
        • Launcher0001.png
        • Launcher0002.png
        • Launcher0003.png
        • Launcher0004.png
        • Launcher0005.png
        • Launcher0006.png
        • Launcher0007.png
        • Launcher0008.png
        • Launcher0009.png
        • Launcher0010.png
        • Launcher0011.png
        • Launcher0012.png
        • Launcher0013.png
        • Launcher0014.png
        • Launcher0015.png
        • Launcher0016.png
        • Launcher0017.png
        • Launcher0018.png
        • Launcher0019.png
        • Launcher0020.png
        • Launcher0021.png
        • Launcher0022.png
        • Launcher0023.png
        • Launcher0024.png
        • Launcher0025.png
        • Launcher0026.png
        • Launcher0027.png
        • Launcher0028.png
        • Launcher0029.png
        • Launcher0030.png
        • Launcher0031.png
        • Launcher0032.png
        • Launcher0033.png
        • Launcher0034.png
        • Launcher0035.png
        • Launcher0036.png
        • Launcher0037.png
        • Launcher0038.png
        • Launcher0039.png
        • Launcher0040.png
        • Launcher0041.png
        • Launcher0042.png
        • Launcher0043.png
        • Launcher0044.png
        • Launcher0045.png
        • Launcher0046.png
        • Launcher0047.png
        • Launcher0048.png
        • Launcher0049.png
        • Launcher0050.png
        • Launcher0051.png
        • Launcher0052.png
        • Launcher0053.png
        • Launcher0054.png
        • Launcher0055.png
        • Launcher0056.png
        • Launcher0057.png
        • Launcher0058.png
        • Launcher0059.png
        • Launcher0060.png
        • Launcher0061.png
        • Launcher0062.png
        • Launcher0063.png
        • Launcher0064.png
        • Launcher0065.png
        • Launcher0066.png
        • Launcher0067.png
        • Launcher0068.png
        • Launcher0069.png
        • Launcher0070.png
        • Launcher0071.png
        • Launcher0072.png
        • Launcher0073.png
        • Launcher0074.png
        • Launcher0075.png
        • Launcher0076.png
        • Launcher0077.png
        • Launcher0078.png
        • Launcher0079.png
        • Launcher0080.png
    • LauncherImages.cs
    • MovingSprites.cs
    • ReadMe.txt
using System;
using System.Drawing;

namespace BobbleNet
{
	
	public class BubbleSprite
	{

		// Maximum speed of the player Sprite.
		private const double MAX_SPEED=10d;

		double xpos, ypos;		// X & Y position on screen
		double xmove, ymove;	// relative X & Y move of the sprite for each step
		
		private BubbleKind kind;			// kind of bubble (red, green, blue, and so on ...)

		private Bitmap bubbleBitmap;		// Bitmap for the bubble

		// For an arbitrary positionned sprite
		public BubbleSprite(int XPos, int Ypos, double XMove, double YMove, BubbleKind Kind)
		{
			this.kind = Kind;
			this.bubbleBitmap = BubbleImages.GetImage(Kind);

			this.xpos = XPos;
			this.ypos = Ypos;
			this.xmove = XMove;
			this.ymove = YMove;
		}

		// For a player sprite : autoposition the sprite (uses the static 'CurrentPlayerBubble' of the GameBoard class)
		public BubbleSprite(double Angle, BubbleKind Kind)
		{
			this.kind = Kind;
			this.bubbleBitmap = BubbleImages.GetImage(Kind);

			this.xpos = GameBoard.CurrentPlayerBubble.BubbleRectangle.X;
			this.ypos = GameBoard.CurrentPlayerBubble.BubbleRectangle.Y;

			AngleHelper AH = AngleHelper.DeltaXYFromAngle(MAX_SPEED,Angle);

			this.xmove = AH.X;
			this.ymove = AH.Y;
			
		}

		public Point PositionOnGrid
		{
			get 
			{
				int gridx, gridy;

				gridy = (int)((this.ypos - GameBoard.Y_POS_OFFSET + (bubbleBitmap.Height/2)) / (bubbleBitmap.Height*GameBoard.ROW_DIST));
				gridx = (int)((this.xpos - GameBoard.X_POS_OFFSET + (bubbleBitmap.Width/2) - ((bubbleBitmap.Width/2)*(gridy%2)))/ bubbleBitmap.Width) ;

				if (gridy<0)
					gridy=0;

				if (gridy>GameBoard.GRID_Y_SIZE -1)
					gridy = GameBoard.GRID_Y_SIZE-1;

				if (gridx<0)
					gridx=0;

				if (gridx>GameBoard.GRID_X_SIZE-1)
					gridx = GameBoard.GRID_X_SIZE-1;

				if (gridy%2==1 && gridx==GameBoard.GRID_X_SIZE-1)
					gridx--;

				return new Point(gridx, gridy);
			}
		}

		public BubbleKind Kind
		{
			get { return this.kind; }
		}

		public Bitmap BubbleBitmap
		{
			get { return this.bubbleBitmap; }
		}

		public Rectangle BubbleRectangle
		{
			get { return new Rectangle((int)this.xpos , (int)this.ypos, this.bubbleBitmap.Width, this.bubbleBitmap.Height); }
		}

		public void Move()
		{
			this.Move(false);
		}

		public void Move(bool BackMove)
		{
			if (BackMove==false)
			{
				this.xpos+=this.xmove;
				this.ypos-=this.ymove;
			}
			else
			{
				this.xpos-=this.xmove;
				this.ypos+=this.ymove;
			}

			// Left rebound
			if (this.xpos < GameBoard.LeftMostBubble.BubbleRectangle.X)
			{
				this.xpos = GameBoard.LeftMostBubble.BubbleRectangle.X+(GameBoard.LeftMostBubble.BubbleRectangle.X-this.xpos);
				this.xmove = -this.xmove;
			}

			// Right rebound
			if (this.xpos > GameBoard.RightMostBubble.BubbleRectangle.X)
			{
				this.xpos = GameBoard.RightMostBubble.BubbleRectangle.X+(GameBoard.RightMostBubble.BubbleRectangle.X-this.xpos);
				this.xmove = -this.xmove;
			}
		}

		public Point BubbleCenter
		{
			get
			{
				int w,h;
				Rectangle BR = this.BubbleRectangle;
				w= (int)(BR.Left+BR.Width/2);
				h= (int)(BR.Top+BR.Height/2);
				return new Point(w,h);
			}
		}
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Instructor / Trainer
France France
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions