public Block(Texture2D text, Vector2 pos, Block p, int l) : base(text,pos) { Apos = pos; parent = p; loc = l; Bound = new Rectangle((int)Position.X, (int)Position.Y, 30, 30); // width 30 }
public bool willCollide(Block obj2, int direction, int speed) { Rectangle obj1Rectangle = new Rectangle((int)position.X, (int)position.Y, width, height); switch (direction) { case 1: obj1Rectangle.Y -= speed; break; //up case 2: obj1Rectangle.Y += speed; break; //down case 3: obj1Rectangle.X -= speed; break; //left case 4: obj1Rectangle.X += speed; break; //right } Rectangle obj2Rectangle = new Rectangle((int)obj2.position.X, (int)obj2.position.Y, obj2.width, obj2.height); return obj1Rectangle.Intersects(obj2Rectangle); }
public void setBlock(Block b) { block = b; isBlock = true; }
public void SetParent(Block p) { parent = p; }
public void SetChild(Block c) { child = c; }
/// <summary> /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// </summary> protected override void Initialize() { graphics.PreferredBackBufferWidth = 1200; graphics.PreferredBackBufferHeight = 600; graphics.ApplyChanges(); //Begin Initialization Code music = Content.Load<Song>("music"); MediaPlayer.Play(music); blocks = new List<Block>(); spikes = new List<Block>(); enemies = new List<Enemy>(); player1 = new Player(); player2 = new Player(); playerMoveSpeed = 8; door = new Block(); //End Initialization Code base.Initialize(); loadLevel(CURRENTLEVEL); gameMenu.Initialize(); }
public void generateField() { Vector2 pos = new Vector2(); pos.X = 450; pos.Y = 180; Block b = new Block(blocktext, pos, null, 0); b.SetParent(b); blocks.Add(b); for (int i = 1; i < this.cells.Count; i++) { bool setNewRoot = false; Vector2 newpos = new Vector2(); Cell C = new Cell(); int k = this.blocks.Count - 1; Block pre = this.blocks.ToArray()[k]; // Random generation of board blocks! // Variables: bool BuildBlock = false; int loc = rand.Next(1, 4); // Loop bool NotFound = true; while (NotFound) { if (setNewRoot) k = rand.Next(0, this.blocks.Count); pre = this.blocks.ToArray()[k]; loc = rand.Next(1, 5); // Check Direction to be Built switch (loc) { case 1: newpos.X = pre.Apos.X - 30; newpos.Y = pre.Apos.Y; break; case 2: newpos.X = pre.Apos.X; newpos.Y = pre.Apos.Y - 30; break; case 3: newpos.X = pre.Apos.X + 30; newpos.Y = pre.Apos.Y; break; case 4: newpos.X = pre.Apos.X; newpos.Y = pre.Apos.Y + 30; break; default: break; } if (newpos.X < mainFrame.Width && newpos.Y < mainFrame.Height && newpos.X >= 0 && newpos.Y >= 0) { foreach (Cell c in this.cells) { if (c.X == newpos.X && c.Y == newpos.Y) { C = c; C.visited = true; int freeNeighbors = 0; // check for neighbors if (!isBlockNeighbor((int)newpos.X + 30, (int)newpos.Y)) //if(!isVisitedNeighbor((int)newpos.X + 30, (int)newpos.Y)) freeNeighbors++; if (!isBlockNeighbor((int)newpos.X, (int)newpos.Y + 30)) //if(!isVisitedNeighbor((int)newpos.X, (int)newpos.Y + 30)) freeNeighbors++; if (!isBlockNeighbor((int)newpos.X - 30, (int)newpos.Y)) //if(!isVisitedNeighbor((int)newpos.X - 30, (int)newpos.Y)) freeNeighbors++; if (!isBlockNeighbor((int)newpos.X, (int)newpos.Y - 30)) //if (!isVisitedNeighbor((int)newpos.X, (int)newpos.Y - 30)) freeNeighbors++; if (freeNeighbors >= 3) { NotFound = false; BuildBlock = true; } if (freeNeighbors < 3) setNewRoot = true; } } } if (blocks.Count > 3000) return; } if (BuildBlock) { Block newBlock = new Block(blocktext, newpos, pre, loc); newBlock.cell = C; C.setBlock(newBlock); this.blocks.Add(newBlock); pre.SetChild(newBlock); //System.Console.WriteLine(C.id); } } }