Changeset 2635
- Timestamp:
- 2011-12-27 04:21:28 (11 years ago)
- Location:
- 2010/23/hniemi/BlockPusher/Blockpusher/Blockpusher
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
2010/23/hniemi/BlockPusher/Blockpusher/Blockpusher/Block.cs
r2632 r2635 10 10 public class Block : GameObject 11 11 { 12 12 13 private BlockType type; 13 14 private bool isGoalzone = false; -
2010/23/hniemi/BlockPusher/Blockpusher/Blockpusher/BlockLevel.cs
r2634 r2635 14 14 private Block[,] playfield; 15 15 private Blockpusher game; 16 private Dictionary<char, BlockType> charColor = new Dictionary<char, BlockType>();16 private List<Tuple<char, BlockType>> charcolors = new List<Tuple<char, BlockType>>(); 17 17 private List<Block> goals = new List<Block>(); 18 18 … … 33 33 34 34 /// <summary> 35 /// Name of the level 36 /// </summary> 37 public string Name { get; set; } 38 39 /// <summary> 35 40 /// Constructor from game 36 41 /// </summary> … … 40 45 this.game = game; 41 46 InitCharColors(); 47 } 48 49 /// <summary> 50 /// Adds blocks to game 51 /// </summary> 52 public void AddToGame() 53 { 54 game.Level.Size = new Vector(playfield.GetLength(0) * (Blockpusher.BlockSize + 1), playfield.GetLength(1) * (Blockpusher.BlockSize + 1)); 55 game.Level.CreateBorders(); 56 for (int i = 0; i < playfield.GetLength(0); i++) 57 { 58 for (int j = 0; j < playfield.GetLength(1); j++) 59 { 60 61 playfield[i, j].X = i * (Blockpusher.BlockSize + 1) + game.Level.Left + (Blockpusher.BlockSize / 2); 62 playfield[i, j].Y = -(j * (Blockpusher.BlockSize + 1) + game.Level.Bottom + (Blockpusher.BlockSize / 2)); 63 game.Add(playfield[i,j]); 64 } 65 } 42 66 } 43 67 … … 142 166 public void InitCharColors() 143 167 { 144 charColor.Add('x', BlockType.UnMovable); 145 charColor.Add('b', BlockType.Movable); 146 charColor.Add(' ', BlockType.Empty); 147 charColor.Add('m', BlockType.GoalZone); 148 charColor.Add('p', BlockType.Player); 149 charColor.Add('s', BlockType.SatisfiedGoalZone); 168 charcolors.Add(new Tuple<char, BlockType>('x', BlockType.UnMovable)); 169 charcolors.Add(new Tuple<char, BlockType>('b', BlockType.Movable)); 170 charcolors.Add(new Tuple<char, BlockType>(' ', BlockType.Empty)); 171 charcolors.Add(new Tuple<char, BlockType>('m', BlockType.GoalZone)); 172 charcolors.Add(new Tuple<char, BlockType>('p', BlockType.Player)); 173 charcolors.Add(new Tuple<char, BlockType>('s', BlockType.SatisfiedGoalZone)); 174 } 175 176 /// <summary> 177 /// Finds char matching type. 178 /// If not found, return ' ' 179 /// </summary> 180 /// <param name="type">Type you want to find</param> 181 /// <returns>Matching char</returns> 182 public char FindChar(BlockType type) 183 { 184 foreach (var item in charcolors) 185 { 186 if (item.Item2 == type) return item.Item1; 187 } 188 return ' '; 189 } 190 191 /// <summary> 192 /// Finds Blocktype matching char. 193 /// If not found, BlockType.Empty is returned. 194 /// </summary> 195 /// <param name="c">Char you want to find</param> 196 /// <returns>Matching type</returns> 197 public BlockType FindBlockType(char c) 198 { 199 foreach (var item in charcolors) 200 { 201 if (item.Item1 == c) return item.Item2; 202 } 203 return BlockType.Empty; 150 204 } 151 205 … … 160 214 161 215 playfield = new Block[playfieldWidth, playfieldHeight]; 162 game.Level.Size = new Vector(playfieldWidth * (Blockpusher.BlockSize + 1), playfieldHeight * (Blockpusher.BlockSize + 1));163 game.Level.CreateBorders();164 216 165 217 for (int i = 0; i < playfield.GetLength(0); i++) … … 171 223 block.Y = -(j * (Blockpusher.BlockSize + 1) + game.Level.Bottom + (Blockpusher.BlockSize / 2)); 172 224 173 block.Type = charColor[level[j][i]];225 block.Type = FindBlockType(level[j][i]); 174 226 if (block.Type == BlockType.Player) 175 227 { … … 181 233 goals.Add(block); 182 234 } 183 game.Add(block);184 235 playfield[i, j] = block; 185 236 } … … 207 258 208 259 /// <summary> 260 /// Returns the current state of level. 261 /// </summary> 262 /// <returns></returns> 263 public List<string> CurrentState() 264 { 265 List<string> list = new List<string>(); 266 267 for (int i = 0; i < playfield.GetLength(1); i++) 268 { 269 StringBuilder line = new StringBuilder(); 270 for (int j = 0; j < playfield.GetLength(0); j++) 271 { 272 273 line.Append(FindChar(playfield[j,i].Type)); 274 } 275 list.Add(line.ToString()); 276 } 277 278 return list; 279 } 280 281 /// <summary> 209 282 /// Changes color of players coordinates 210 283 /// </summary> -
2010/23/hniemi/BlockPusher/Blockpusher/Blockpusher/Blockpusher.cs
r2634 r2635 8 8 using System.IO; 9 9 10 /// <summary> 11 /// Blockpusher-game 12 /// </summary> 10 13 public class Blockpusher : Game 11 14 { … … 17 20 18 21 private BlockLevel currentLevel; 22 private List<BlockLevel> levels = new List<BlockLevel>(); 23 24 private bool gameSaved = false; 25 private List<string> savedLevel; 19 26 20 27 private List<String> testLevel = new List<string>(new String[] … … 33 40 { 34 41 Menu(); 35 36 37 } 38 39 public void NewGame() 40 { 41 ClearAll(); 42 currentLevel = new BlockLevel(this); 42 LoadLevels(); 43 } 44 45 /// <summary> 46 /// Starts new game 47 /// </summary> 48 public void NewGame(BlockLevel level) 49 { 50 ClearAll(); 51 currentLevel = level; 43 52 currentLevel.Victory += Victory; 44 currentLevel.CreateField(testLevel); 53 //currentLevel.CreateField(testLevel); 54 currentLevel.AddToGame(); 45 55 SetControls(); 56 } 57 58 /// <summary> 59 /// Loads levels from directory 60 /// </summary> 61 /// <param name="directory">Not in use</param> 62 public void LoadLevels(string directory=@"Data\Levels") 63 { 64 //TODO: Tee lukeminen valmiiksi 65 66 IEnumerable<string> folders = Directory.EnumerateDirectories(directory,"*"); 67 68 foreach (string s in folders) 69 { 70 //Exludes hidden folder (with . before name) 71 if (s.Length != 0 && s[s.LastIndexOf('\\')+1] != '.') 72 { 73 //MessageDisplay.Add(s); 74 LoadLevels(s); 75 } 76 } 77 78 IEnumerable<string> files = Directory.EnumerateFiles(directory, "*"); 79 foreach (string file in files) 80 { 81 BlockLevel level = new BlockLevel(this); 82 level.CreateField(ReadFile(file)); 83 84 level.Name = file.Substring(file.LastIndexOf('\\')+1, file.LastIndexOf('.') - file.LastIndexOf('\\')-1); 85 levels.Add(level); 86 } 87 } 88 89 #region Menu 90 /// <summary> 91 /// Creates startmenu for game 92 /// </summary> 93 public void Menu() 94 { 95 int labelHeighth = 50; 96 97 ClearAll(); 98 IsMouseVisible = true; 99 PhoneBackButton.Listen(ConfirmExit, "Lopeta peli"); 100 Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); 101 102 List<Tuple<string, Action>> labels = new List<Tuple<string, Action>>(); 103 if (gameSaved) labels.Add(new Tuple<string, Action>("Continue", ContinueGame)); 104 labels.Add(new Tuple<string, Action>("New game", delegate { LevelSelectionMenu(); })); 105 labels.Add(new Tuple<string, Action>("Quit?", ConfirmExit)); 106 107 for (int i = 0; i < labels.Count; i++) 108 { 109 PushButton button = new PushButton(200, labelHeighth); 110 button.Text = labels[i].Item1; 111 button.Y = -(i * labelHeighth); 112 button.Clicked += labels[i].Item2; 113 Add(button); 114 } 115 } 116 117 /// <summary> 118 /// Asks if you want to go to main menu or continue playing 119 /// </summary> 120 public void ConfirmMenu() 121 { 122 ClearControls(); 123 MultiSelectWindow w = new MultiSelectWindow("Back to menu?", new String[] { "Yes", "No!" }); 124 w.AddItemHandler(0, delegate { MakeContinuable(); Menu(); }); 125 w.AddItemHandler(1, delegate { SetControls(); w.Close(); }); 126 Add(w); 46 127 } 47 128 … … 58 139 59 140 /// <summary> 60 /// Creates startmenu for game 61 /// </summary> 62 public void Menu() 63 { 64 ClearAll(); 65 IsMouseVisible = true; 66 PhoneBackButton.Listen(ConfirmExit, "Lopeta peli"); 67 Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); 68 69 List<Tuple<Label,Handler>> labels = new List<Tuple<Label,Handler>>(); 70 labels.Add(new Tuple<Label,Handler>(new Label("New game"), NewGame)); 71 labels.Add(new Tuple<Label,Handler>(new Label("Quit"), ConfirmExit)); 72 73 for (int i = 0; i < labels.Count; i++) 74 { 75 labels[i].Item1.Y = -(i * 30); 76 Add(labels[i].Item1); 77 Mouse.Listen(MouseButton.Left, ButtonState.Pressed, labels[i].Item2, null); 78 } 79 80 } 141 /// Shows levelselection menu 142 /// </summary> 143 public void LevelSelectionMenu(int current = 0) 144 { 145 ClearAll(); 146 int buttonheight = 50; 147 148 Label topic = new Label("Levels"); 149 150 Widget buttons = new Widget(new HorizontalLayout()); 151 PushButton previous = new PushButton(150, buttonheight, "Previous"); 152 buttons.Add(previous); 153 154 PushButton play = new PushButton(150, buttonheight, "Select"); 155 buttons.Add(play); 156 157 PushButton next = new PushButton(150, buttonheight, "Next"); 158 buttons.Add(next); 159 160 Label name = new Label(levels[current].Name); 161 162 topic.Y = Screen.Top - (topic.Height/2); 163 buttons.Y = topic.Bottom - (buttons.Height / 2); 164 name.Y = buttons.Bottom - (name.Height / 2); 165 166 Add(topic); 167 Add(buttons); 168 Add(name); 169 170 levels[current].AddToGame(); 171 172 previous.Clicked += delegate { LevelSelectionMenu((current-1 + levels.Count) % levels.Count); }; 173 next.Clicked += delegate { LevelSelectionMenu((current + 1) % levels.Count); }; 174 play.Clicked += delegate { NewGame(levels[current]); }; 175 176 } 177 #endregion 178 179 /// <summary> 180 /// Continues game from current save 181 /// </summary> 182 public void ContinueGame() 183 { 184 ClearAll(); 185 currentLevel = new BlockLevel(this); 186 currentLevel.Victory += Victory; 187 188 currentLevel.CreateField(ReadFile("Data/CurrentSave.txt")); 189 SetControls(); 190 } 191 192 /// <summary> 193 /// Saves game 194 /// </summary> 195 public void MakeContinuable() 196 { 197 gameSaved = true; 198 savedLevel = currentLevel.CurrentState(); 199 200 File.WriteAllLines("Data/CurrentSave.txt", savedLevel); 201 } 202 81 203 /// <summary> 82 204 /// Reads lines from file … … 123 245 Keyboard.Listen(Key.Left, ButtonState.Pressed, MovePlayer, null, -1, 0); 124 246 Keyboard.Listen(Key.Right, ButtonState.Pressed, MovePlayer, null, 1, 0); 247 248 Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmMenu, "Lopeta peli"); 125 249 } 126 250 }
Note: See TracChangeset
for help on using the changeset viewer.