public void move() { //到边界,不可以向前走了。 if ((pos.Y <= MyHelp.StartPos.Y && _dir == 0) || (pos.Y >= MyHelp.StartPos.Y + 240 && _dir == 1) || (pos.X <= MyHelp.StartPos.X && _dir == 2) || (pos.X >= MyHelp.StartPos.X + 320 && _dir == 3)) { _dir |= 0x10; return; } //正常移动。 if (MyHelp.isInPatten(pos)) { if (!canMove()) { _dir |= 0x10; return; } } if ((_dir & 0x10) != 0) { return; } pos.X += MyHelp.moveLen[_dir * 2] * _speed; pos.Y += MyHelp.moveLen[_dir * 2 + 1] * _speed; //是否到整Patten上,停步 if (MyHelp.isInPatten(pos)) { OurGame.map[MyHelp.Vector2ToPos(pos) - MyHelp.posLen[_dir]].canMove &= 0x7f; _dir |= 0x10; } }
public void createLei() { if (haveLei >= maxLei) { return; } int pos; int i; pos = MyHelp.Vector2ToPos(this.pos, 20); for (i = 0; i < MyHelp.maxLei; ++i) { if (OurGame.lei[i].Active != 0 && pos == OurGame.lei[i].Pos) { return; } } for (i = 0; i < MyHelp.maxLei; ++i) { if (OurGame.lei[i].Active == 0) { OurGame.lei[i].CreateLei(this); ++haveLei; break; } } }
private void checkPerson(int mappos) { if (OurGame.Master.deadDelay == 0 && OurGame.Master.Active != 0 && MyHelp.Vector2ToPos(OurGame.Master.pos, 20) == mappos) { OurGame.Master.speed = 2; OurGame.Master.deadDelay = 200; if (OurGame.Master.Active >= 0x10) { OurGame.Master.Active = 1; } else { OurGame.Master.Active = 2; --OurGame.Life.number; } } for (int i = 0; i < MyHelp.maxEnemy; ++i) { if (OurGame.Enemy[i].Active != 0 && OurGame.Enemy[i].deadDelay == 0 && MyHelp.Vector2ToPos(OurGame.Enemy[i].pos, 20) == mappos) { OurGame.Enemy[i].speed = 2; OurGame.Enemy[i].deadDelay = 200; if (OurGame.Enemy[i].Active >= 0x10) { OurGame.Enemy[i].Active = 1; } else { OurGame.Enemy[i].Active = 2; } } } }
private void updataMap() { switch (boxAndTree) { case 0: break; case 1: boxAndTreePos.X += MyHelp.moveLen[(_dir & 0xf) * 2] * 5; boxAndTreePos.Y += MyHelp.moveLen[(_dir & 0xf) * 2 + 1] * 5; if (MyHelp.isInPatten(boxAndTreePos)) { boxAndTree = 0; int nowpos = MyHelp.Vector2ToPos(boxAndTreePos); OurGame.map[nowpos].mapData = backData; OurGame.map[nowpos].canMove &= 0xBF; //去掉箱子标志 } break; case 0x10: if (MyHelp.isInPatten(pos)) { int nowpos = MyHelp.Vector2ToPos(boxAndTreePos); OurGame.map[nowpos].mapData = backData; boxAndTree = 0; } break; default: if (mapDelay == 0) { mapDelay = 2; ++boxAndTree; if ((boxAndTree & 1) != 0) { ++boxAndTreePos.X; } else { --boxAndTreePos.X; } if (boxAndTree >= 4) { boxAndTree = 0x10; } } else { --mapDelay; } break; } }
private bool canCreateLei() { int i, length, nextpos; for (i = 0; i < 4; ++i) { length = dirLen(i); if (leiLen >= length && OurGame.map[MyHelp.Vector2ToPos(pos) + MyHelp.posLen[i] * length].mapData < 0x40) { break; } } if (i >= 4 && MyHelp.Random(50) > 20) { return(false); } for (i = 0; i < 4; ++i) { nextpos = MyHelp.Vector2ToPos(pos); if (MyHelp.isInBound(ref nextpos, i)) { if (dirLen(i) != 0) { if (i == 0 || i == 1) { if (dirLen(nextpos, 2) != 0 || dirLen(nextpos, 3) != 0) { return(true); } } else { if (dirLen(nextpos, 1) != 0 || dirLen(nextpos, 0) != 0) { return(true); } } } } } for (i = 0; i < 4; ++i) { if (dirLen(i) > leiLen) { return(true); } } return(false); }
private byte dirLen(int dir) { byte len = 0; bool flag = true; int nextPos = MyHelp.Vector2ToPos(pos); while (true) { if (MyHelp.isInBound(ref nextPos, dir)) { if (OurGame.map[nextPos].mapData == 0 || (OurGame.map[nextPos].mapData & 0xf0) == 0x30) { ++len; } else if (flag && (OurGame.map[nextPos].mapData & 0xf0) == 0x10) { if (MyHelp.isInBound(ref nextPos, dir)) { if (OurGame.map[nextPos].mapData == 0) { ++len; flag = false; } else { break; } } else { break; } } else { break; } } else { break; } } return(len); }
public void Draw() { bool flag; flag = (boxAndTree == 1 && _dir == 0); if (!flag) { if (Active >= 0x10) { MyHelp.foreSpriteBatch.Draw(MyHelp.wuguiSprite, pos, guiRect, Color.White, 0, MyHelp.personCenter, 1, SpriteEffects.None, 0); } MyHelp.foreSpriteBatch.Draw(_personTexture, pos, rect, Color.White, 0, MyHelp.personCenter, 1, SpriteEffects.None, 0); if (Active == 3) { MyHelp.foreSpriteBatch.Draw(MyHelp.baoSprite, pos, baoRect, Color.White, 0, MyHelp.baoCenter, 1, SpriteEffects.None, 0); } } hasDraw = 0xFF; switch (boxAndTree) { case 0: break; case 1: MyHelp.foreSpriteBatch.Draw(MyHelp.mapSprite, boxAndTreePos, boxRect, Color.White, 0, MyHelp.mapDataCenter, 1, SpriteEffects.None, 0); break; default: MyHelp.foreSpriteBatch.Draw(MyHelp.mapSprite, boxAndTreePos, boxRect, Color.White, 0, MyHelp.mapDataCenter, 1, SpriteEffects.None, 0); break; } if (flag) { if (Active >= 0x10) { MyHelp.foreSpriteBatch.Draw(MyHelp.wuguiSprite, pos, guiRect, Color.White, 0, MyHelp.personCenter, 1, SpriteEffects.None, 0); } MyHelp.foreSpriteBatch.Draw(_personTexture, pos, rect, Color.White, 0, MyHelp.personCenter, 1, SpriteEffects.None, 0); if (Active == 3) { MyHelp.foreSpriteBatch.Draw(MyHelp.baoSprite, pos, baoRect, Color.White, 0, MyHelp.baoCenter, 1, SpriteEffects.None, 0); } } OurGame.map[MyHelp.Vector2ToPos(pos)].canMove |= 0x80; }
public void CreateLei(Person father) { for (int i = 0; i < 4; ++i) { _dir[i] = 0; } parent = father; _len = father.leiLen; _frame = 0; Active = 1; _delay = 0; _mapPos = (Byte)MyHelp.Vector2ToPos(father.pos, 20); OurGame.map[_mapPos].leiActive = true; OurGame.map[_mapPos].leiDir = 0; OurGame.map[_mapPos].leiID = 0; OurGame.map[_mapPos].leiFrame = 0; OurGame.map[_mapPos].canMove |= 0x20; OurGame._drop = true; }
private void checkSafe() { int i, j, k, len; int nextPos; moveDir.canMove = 0; moveDir.count = 0; for (i = 0; i < 4; ++i) { moveDir.dirLen[i] = dirLen(i); } for (i = 0; i < 4; ++i) { nextPos = MyHelp.Vector2ToPos(pos); if (MyHelp.isInBound(ref nextPos, i)) { for (k = 0; k < MyHelp.maxLei; ++k) { if (OurGame.lei[k].Active != 0) { if (MyHelp.isInLine(nextPos, OurGame.lei[k].Pos, OurGame.lei[k].Len)) { break; } } } //安全的地方,不会被炸 if (k >= MyHelp.maxLei) { if (moveDir.dirLen[i] != 0) { moveDir.canMove |= (byte)(1 << i); ++moveDir.count; } } } } if (moveDir.count == 0) { nextPos = MyHelp.Vector2ToPos(pos); for (k = 0; k < MyHelp.maxLei; ++k) { if (OurGame.lei[k].Active != 0) { if (MyHelp.isInLine(nextPos, OurGame.lei[k].Pos, OurGame.lei[k].Len)) { break; } } } if (k >= MyHelp.maxLei) { return; } } j = 0; if (moveDir.count == 0) { len = 0; for (i = 0; i < 4; ++i) { if (moveDir.dirLen[i] > len) { len = moveDir.dirLen[i]; j = i; } else if (moveDir.dirLen[i] == len) { nextPos = MyHelp.Vector2ToPos(pos); if (MyHelp.isInBound(ref nextPos, i)) { if (i < 2) { if ((dirLen(nextPos, 2) != 0) || (dirLen(nextPos, 3) != 0)) { j = i; } } else { if ((dirLen(nextPos, 0) != 0) || (dirLen(nextPos, 1) != 0)) { j = i; } } } } } if (len != 0) { for (k = 0; k < MyHelp.maxLei; ++k) { nextPos = MyHelp.Vector2ToPos(pos); if (OurGame.lei[k].Active != 0) { len = OurGame.lei[k].Len; if (nextPos == OurGame.lei[k].Pos) { break; } if (MyHelp.isInBound(ref nextPos, j)) { if (MyHelp.isInLine(nextPos, OurGame.lei[k].Pos, len)) { if (MyHelp.isSafe(nextPos, OurGame.lei[k].Pos, len, j)) { return; } } } } if (k >= MyHelp.maxLei) { return; } } moveDir.canMove |= (byte)(1 << j); ++moveDir.count; } } }