Ignore:
Timestamp:
2011-12-27 04:21:28 (11 years ago)
Author:
hniemi
Message:

Jonkinlainen toimiva protytyyppi kenttävalinnasta.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 2010/23/hniemi/BlockPusher/Blockpusher/Blockpusher/Blockpusher.cs

    r2634 r2635  
    88using System.IO; 
    99 
     10/// <summary> 
     11/// Blockpusher-game 
     12/// </summary> 
    1013public class Blockpusher : Game 
    1114{ 
     
    1720 
    1821    private BlockLevel currentLevel; 
     22    private List<BlockLevel> levels = new List<BlockLevel>(); 
     23 
     24    private bool gameSaved = false; 
     25    private List<string> savedLevel; 
    1926 
    2027    private List<String> testLevel = new List<string>(new String[] 
     
    3340    { 
    3441        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; 
    4352        currentLevel.Victory += Victory; 
    44         currentLevel.CreateField(testLevel); 
     53        //currentLevel.CreateField(testLevel); 
     54        currentLevel.AddToGame(); 
    4555        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); 
    46127    } 
    47128 
     
    58139 
    59140    /// <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 
    81203    /// <summary> 
    82204    /// Reads lines from file 
     
    123245        Keyboard.Listen(Key.Left, ButtonState.Pressed, MovePlayer, null, -1, 0); 
    124246        Keyboard.Listen(Key.Right, ButtonState.Pressed, MovePlayer, null, 1, 0); 
     247 
     248        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmMenu, "Lopeta peli"); 
    125249    } 
    126250} 
Note: See TracChangeset for help on using the changeset viewer.