Changeset 3515 for 2012


Ignore:
Timestamp:
2012-07-03 20:04:30 (8 years ago)
Author:
dezhidki
Message:
 
Location:
2012/27/DenisZ/TheDungeonGame/TheDungeonGame/TheDungeonGame
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • 2012/27/DenisZ/TheDungeonGame/TheDungeonGame/TheDungeonGame/LevelGenerator.cs

    r3489 r3515  
    1313        private int roomAmountHor, roomAmountVert; 
    1414        private Game game; 
    15         private TestRoom[,] rooms; 
    16         private List<TestRoom> roomList = new List<TestRoom>(); 
     15        private Room[,] rooms; 
     16        private List<Room> roomList = new List<Room>(); 
    1717 
    1818        public LevelGenerator(Game game, Vector size, Vector roomamount) 
     
    2424            roomAmountVert = (int)roomamount.Y; 
    2525 
    26             rooms = new TestRoom[roomAmountHor, roomAmountVert]; 
     26            rooms = new Room[roomAmountHor, roomAmountVert]; 
    2727        } 
    2828 
    29         public void buildLevel() 
     29        public Vector CenterRoom 
    3030        { 
    31             foreach (TestRoom room in roomList) 
     31            get 
    3232            { 
    33                     room.buildLevel(); 
     33                return new Vector(roomAmountHor / 2, roomAmountVert / 2); 
     34            } 
     35        } 
     36 
     37        public void buildDungeon() 
     38        { 
     39            foreach (Room room in roomList) 
     40            { 
     41                room.buildLevel(); 
     42            } 
     43        } 
     44 
     45        public void destroyDungeon() 
     46        { 
     47            foreach (Room room in roomList) 
     48            { 
     49                room.destroyLevel(); 
    3450            } 
    3551        } 
     
    3854        { 
    3955            int roomAmount = RandomGen.NextInt(minRooms, maxRooms); 
    40             TestRoom lastRoom = null; 
     56            Room lastRoom = null; 
    4157 
    4258            for (int room = 0; room < roomAmount; room++) 
     
    5369                bool[] sideChecked = new bool[4]; 
    5470 
    55                 //  while (checkedSides < 4) 
    56                 //   { 
    57                 int dir = 2; 
    58                 /* if (sideChecked[dir]) 
    59                  { 
    60                      checkedSides++; 
    61                      continue; 
    62                  } */ 
    63                 //  if (lastRoom == null) return; 
    64                 checkedSides++; 
    65                 lastRoom = tryCreateRoom(dir, VecMath.add(lastRoom.RoomsPosOnGrid, RoomDirection.getOffsetFromDir(dir)), lastRoom); 
    66                 // } 
     71                while (checkedSides < 4) 
     72                { 
     73                    int dir = RandomGen.NextInt(4); 
     74                    if (sideChecked[dir]) 
     75                    { 
     76                        checkedSides++; 
     77                        continue; 
     78                    } 
     79                    else 
     80                    { 
     81                        checkedSides++; 
     82                        sideChecked[dir] = true; 
     83                    } 
     84 
     85                    if (tryCreateRoom(dir, VecMath.add(lastRoom.PosOnGrid, RoomDirection.getOffsetFromDir(dir)), lastRoom)) 
     86                    { 
     87                        lastRoom = currentRoom; 
     88                        break; 
     89                    } 
     90 
     91                } 
    6792 
    6893            } 
    6994        } 
    7095 
    71         private TestRoom tryCreateRoom(int dir, Vector pos, Room lastRoom) 
     96 
     97 
     98        private Room currentRoom; 
     99        private bool tryCreateRoom(int dir, Vector pos, Room lastRoom) 
    72100        { 
    73             if (getRoomFromDirection(lastRoom, dir) != null) return null; 
    74  
    75             TestRoom currentRoom = new TestRoom(game, VecMath.mul(pos, new Vector(TheDungeonGame.ROOMWIDTH, -TheDungeonGame.ROOMHEIGHT)), TheDungeonGame.roomSize, TheDungeonGame.ROOMTHICKNESS); 
    76             placeRoomAt(currentRoom, (int)pos.X, (int)pos.Y); 
    77             return currentRoom; 
     101            if (getRoomFromDirection(lastRoom, dir) != null) return false; 
     102            currentRoom = new TestRoom(game, VecMath.mul(pos, new Vector(TheDungeonGame.ROOMWIDTH, -TheDungeonGame.ROOMHEIGHT)), TheDungeonGame.roomSize, TheDungeonGame.ROOMTHICKNESS); 
     103            return placeRoomAt(currentRoom, (int)pos.X, (int)pos.Y); 
    78104        } 
    79105 
    80         public void placeRoomAt(TestRoom room, int x, int y) 
     106        public bool placeRoomAt(Room room, int x, int y) 
    81107        { 
    82             if (x > roomAmountHor || x < 0 || y > roomAmountVert || y < 0 || getRoomAt(x, y) != null) throw new Exception("Cant place Room there!"); 
    83             room.RoomsPosOnGrid = new Vector(x, y); 
     108            if (!isValidPos(x, y) || getRoomAt(x, y) != null) return false; 
     109            room.PosOnGrid = new Vector(x, y); 
    84110            rooms[x, y] = room; 
    85111            roomList.Add(room); 
     112            return true; 
    86113        } 
    87114 
    88115        public Room getRoomAt(int x, int y) 
    89116        { 
    90             if (x > roomAmountHor || x < 0 || y > roomAmountVert || y < 0) return null; 
     117            if (!isValidPos(x, y)) return null; 
    91118            return rooms[x, y]; 
    92119        } 
     
    94121        public Room getRoomFromDirection(Room source, int dir) 
    95122        { 
    96             int roomX = (int)source.RoomsPosOnGrid.X; 
    97             int roomY = (int)source.RoomsPosOnGrid.Y; 
     123            int roomX = (int)source.PosOnGrid.X; 
     124            int roomY = (int)source.PosOnGrid.Y; 
    98125 
    99             if (dir == RoomDirection.North) 
    100                 return getRoomAt(roomX, roomY - 1); 
    101             if (dir == RoomDirection.East) 
    102                 return getRoomAt(roomX + 1, roomY); 
    103             if (dir == RoomDirection.North) 
    104                 return getRoomAt(roomX, roomY + 1); 
    105             if (dir == RoomDirection.West) 
    106                 return getRoomAt(roomX - 1, roomY); 
    107  
    108             return null; 
     126            Vector roomPos = VecMath.add(source.PosOnGrid, RoomDirection.getOffsetFromDir(dir)); 
     127            return getRoomAt((int)roomPos.X, (int)roomPos.Y); 
    109128        } 
    110129 
     
    115134        } 
    116135 
    117         public Vector CenterRoom 
     136        private bool isValidPos(int x, int y) 
    118137        { 
    119             get 
    120             { 
    121                 return new Vector(roomAmountHor / 2, roomAmountVert / 2); 
    122             } 
     138            return !(x >= roomAmountHor || x < 0 || y >= roomAmountVert || y < 0); 
    123139        } 
     140 
     141 
    124142    } 
    125143} 
  • 2012/27/DenisZ/TheDungeonGame/TheDungeonGame/TheDungeonGame/Player.cs

    r3477 r3515  
    1414        public const double playerHeight = 75; 
    1515       // private PhysicsObject head; 
    16         private Vector movementVector = Vector.Zero; 
    17         private bool isMoving = false; 
     16        public Vector movementVector = Vector.Zero; 
     17        public bool isMoving = false; 
    1818        private Keyboard keyboard; 
    1919        private double speed = 200; 
    2020 
    21         public Player(Vector pos) 
     21        public Player(Game game, Vector pos) 
    2222            : base(playerWidth, playerHeight) 
    2323        { 
    24             keyboard = Game.Keyboard; 
     24            keyboard = game.Keyboard; 
    2525            CanRotate = false; 
    2626            setupKeys(); 
     
    4040        } 
    4141 
    42         public override void Update(Time time) 
     42        public void tick() 
    4343        { 
    44             if (!isMoving) 
     44            if (isMoving) 
    4545            { 
    4646                movementVector = Vector.Zero; 
     
    4848            } 
    4949 
    50             isMoving = false; 
    51             base.Update(time); 
     50            isMoving = false;   
    5251        } 
    5352 
  • 2012/27/DenisZ/TheDungeonGame/TheDungeonGame/TheDungeonGame/Room.cs

    r3489 r3515  
    1010    abstract class Room 
    1111    { 
    12         public Vector Position { get; set; } 
     12         
     13       public Vector Position; 
    1314        public double width, height, thickness; 
    1415        protected List<IPhysicsObject> roomObjects = new List<IPhysicsObject>(); 
     
    2021        protected int bWidth, bHeight; 
    2122        public Game Game { get; set; } 
    22         public Vector RoomsPosOnGrid { get; set; } 
     23        public Vector PosOnGrid { get; set; } 
    2324 
    2425        public Room(Game game, Vector pos, Vector size, double thickness) 
     
    7071            { 
    7172                obj.Destroy(); 
     73            } 
     74            foreach (IPhysicsObject obj in insideObjects) 
     75            { 
     76                if (obj != null) 
     77                    obj.Destroy(); 
    7278            } 
    7379        } 
  • 2012/27/DenisZ/TheDungeonGame/TheDungeonGame/TheDungeonGame/TheDungeonGame.cs

    r3489 r3515  
    1717    public static Vector roomSize = new Vector(ROOMWIDTH, ROOMHEIGHT); 
    1818    private Player player; 
     19    private LevelGenerator generator; 
    1920 
    2021    public override void Begin() 
     
    2425        Level.Width = ROOMWIDTH * 20; 
    2526        Level.Height = ROOMHEIGHT * 20; 
    26      //   Level.CreateBorders(); 
     27        //   Level.CreateBorders(); 
    2728        Camera.ZoomToLevel(); 
    2829 
    29         LevelGenerator generator = new LevelGenerator(this, Level.Size, new Vector(20, 20)); 
    30         generator.generateRandomLevel(5, 10); 
    31         generator.buildLevel(); 
     30        generator = new LevelGenerator(this, Level.Size, new Vector(20, 20)); 
     31        generator.generateRandomLevel(1, 10); 
     32        generator.buildDungeon(); 
    3233 
    33         player = new Player(Vector.Zero); 
     34        player = new Player(this, Vector.Zero); 
    3435        Add(player, 1); 
    3536 
    36         Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Lopeta peli");    
     37        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Lopeta peli"); 
     38        Keyboard.Listen(Key.R, ButtonState.Pressed, regenerateLevel, null); 
     39    } 
     40 
     41    private void regenerateLevel() 
     42    { 
     43        generator.destroyDungeon(); 
     44        generator = new LevelGenerator(this, Level.Size, new Vector(20, 20)); 
     45        generator.generateRandomLevel(1, 10); 
     46        generator.buildDungeon(); 
    3747    } 
    3848 
    3949    protected override void Update(Time time) 
    4050    { 
    41         player.Update(time); 
    42         base.Update(time); 
     51        try  // Tapa pakottaa Updatea toimimaan LevelGeneratorin kanssa 
     52        { 
     53            base.Update(time); 
     54        } 
     55        catch (FormatException) // Kaatuu tähän melkein kokoajan kun yrittää luoda tasoa. Mun koodi liian "likainen", tai hidas? 
     56        { 
     57            return; // Skipataan "virheelisiä" tickea ja huijataan peliä niin kuin pahat merimiehet (dirty pirates, Arr) 
     58        } 
     59 
     60        player.tick(); 
    4361    } 
    4462} 
  • 2012/27/DenisZ/TheDungeonGame/TheDungeonGame/TheDungeonGame/TheDungeonGame.csproj

    r3477 r3515  
    1919    <ApplicationIcon>Game.ico</ApplicationIcon> 
    2020    <Thumbnail>GameThumbnail.png</Thumbnail> 
     21    <IsWebBootstrapper>false</IsWebBootstrapper> 
     22    <ReferencePath>$(registry:HKEY_LOCAL_MACHINE\Software\Jypeli@Install_Dir)\lib\x86</ReferencePath> 
    2123    <PublishUrl>publish\</PublishUrl> 
    2224    <Install>true</Install> 
     
    3133    <ApplicationRevision>0</ApplicationRevision> 
    3234    <ApplicationVersion>1.0.0.%2a</ApplicationVersion> 
    33     <IsWebBootstrapper>false</IsWebBootstrapper> 
    3435    <UseApplicationTrust>false</UseApplicationTrust> 
    3536    <BootstrapperEnabled>true</BootstrapperEnabled> 
    36     <ReferencePath>$(registry:HKEY_LOCAL_MACHINE\Software\Jypeli@Install_Dir)\lib\x86</ReferencePath> 
    3737  </PropertyGroup> 
    3838  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> 
     
    6262  </PropertyGroup> 
    6363  <ItemGroup> 
    64     <Reference Include="Jypeli"> 
     64    <Reference Include="Jypeli4, Version=4.2.1.0, Culture=neutral, processorArchitecture=x86"> 
     65      <SpecificVersion>False</SpecificVersion> 
     66      <HintPath>F:\Program Files\Jypeli\lib\x86\Jypeli4.dll</HintPath> 
    6567    </Reference> 
    6668    <Reference Include="Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86"> 
Note: See TracChangeset for help on using the changeset viewer.