亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? env.cs

?? 手機軟件開發..手機軟件開發..手機軟件開發..手機軟件開發..
?? CS
?? 第 1 頁 / 共 2 頁
字號:
using System;
using System.Drawing;
using System.Collections.Generic;

namespace Skyiv.Ben.PushBox.Common
{
  /// <summary>
  /// 工作環境
  /// </summary>
  sealed class Env : IDisposable
  {
    DataFile db;       // 數據文件
    ConfigFile cfg;    // 配置文件
    string errorMsg;   // 錯誤信息
    string debugMsg;   // 調試信息
    bool isReplay;     // 是否正在回放
    Action active;     // 模式: 正常 新建 編輯 刪除
    byte pen;          // 設計時的筆
    Bitmap img;        // 圖形單元, 橫向被均勻分為八份
    Stack<Step> stack; // 歷史路線, 用于后退功能
    Size clientSize;   // 工作區域尺寸(以像素為單位)
    Size boxSize;      // 圖形元素尺寸(以像素為單位)
    Point toPixel;     // 將要到達的位置(以像素為單位)
    Point worker;      // 當前工人位置(以單元格為單位)
    int pushSteps;     // 推動著箱子走的步數
    int levelOem;      // 原來的關數,僅用于“菜單 -> 數據 -> 設計 -> 新建”放棄后恢復現場

    public string ErrorMsg { get { return errorMsg; } }
    public string DebugMsg { get { return debugMsg; } }
    public string[] Groups { get { return cfg.Groups; } }
    public int Group { get { return cfg.Group; } set { cfg.Group = value; } }
    public int Level { get { return cfg.Levels[Group]; } set { cfg.Levels[Group] = value; } }
    public int LeveLOem { get { return levelOem; } }
    public int MaxLevel { get { return db.MaxLevel; } }
    public string Steps { get { return cfg.Steps; } }
    public Size LevelSize { get { return db.LevelSize; } }
    public Size ClientSize { set { clientSize = value; } }
    public Point ToPixel { set { toPixel = value; } }
    public int MaxLevelSize { get { return cfg.MaxLevelSize; } set { cfg.MaxLevelSize = value; } }
    public int StepDelay { get { return cfg.StepDelay; } set { cfg.StepDelay = value; } }
    public int ReplayDelay { get { return cfg.ReplayDelay; } set { cfg.ReplayDelay = value; } }
    public Action Active { get { return active; } set { active = value; } }
    public byte Pen { get { return pen; } set { pen = value; } }
    public bool HasError { get { return !string.IsNullOrEmpty(errorMsg); } }
    public bool HasWorker { get { return db.HasWorker; } }
    public bool CanUndo { get { return stack.Count != 0; } }
    public bool CanReplay { get { return db.IsFinished && !CanUndo; } }
    public bool IsSave { get { return cfg.IsSave; } set { cfg.IsSave = value; } }
    public bool IsFinish { get { return db.Tasks == db.Boths; } }
    public bool IsReplay { get { return isReplay; } set { isReplay = value; } }
    public bool IsDesign { get { return active != Action.None; } }

    public Env()
    {
      stack = new Stack<Step>();
      cfg = new ConfigFile();
      db = new DataFile();
      Init();
    }

    /// <summary>
    /// 狀態欄信息
    /// </summary>
    public string StatusMessage
    {
      get
      {
        return HasError ? "請點擊“菜單 -> 幫助 -> 錯誤信息”" : string.Format(
          "{0} {1}/{2} {3} {4} {5} [{6}] {7}",
          (active == Action.Create) ? '+' : (active == Action.Edit) ? '=' : isReplay ? "|/-\\"[stack.Count % 4] : '>',
          Level + 1, MaxLevel, Pub.ToString(LevelSize),
          IsDesign ? string.Format("{0}={1}", db.Boxs, db.Slots) : string.Format("{0}/{1}", db.Boths, db.Tasks),
          IsDesign ? Block.GetPenName(pen) : string.Format("{0}({1})", stack.Count, pushSteps),
          IsDesign ? (active == Action.Create ? "新建" : "編輯") : db.IsFinished ? 
          string.Format("{0}({1})", db.MovedSteps, db.PushedSteps) : string.Empty,
          db.GroupName);
      }
    }

    public void Dispose()
    {
      db.Dispose();
    }

    public void Init()
    {
      active = Action.None;
      pen = Block.Land;
      stack.Clear();
      SetExceptionMessage(null);
    }

    void SetExceptionMessage(Exception ex)
    {
      errorMsg = Pub.GetMessage(ex, false);
      debugMsg = Pub.GetMessage(ex, true);
    }

    /// <summary>
    /// 計算當使用標準箱子尺寸時主窗體客戶區的尺寸
    /// </summary>
    /// <param name="statusBarHeight">狀態條的高度</param>
    /// <returns>客戶區的尺寸</returns>
    public Size GetClientSize(int statusBarHeight)
    {
      int width = (Properties.Resources.PushBox24.Width / 8) * LevelSize.Width;
      int height = Properties.Resources.PushBox24.Height * LevelSize.Height + statusBarHeight;
      if (width < 240) width = 240;
      if (height < 48) height = 48;
      if (width > 1008) width = 1008;
      if (height > 672) height = 672;
      return new Size(width, height);
    }

    /// <summary>
    /// 根據客戶區尺寸,計算箱子的尺寸,并相應設定要顯示的圖形單元
    /// </summary>
    public void SetBoxInfo()
    {
      if (HasError) return;
      if (LevelSize.IsEmpty) return;
      int rX = clientSize.Width / LevelSize.Width;
      int rY = clientSize.Height / LevelSize.Height;
      int r = Math.Min(rX, rY);
      if (r >= 24) img = Properties.Resources.PushBox24;
      else if (r >= 20) img = Properties.Resources.PushBox20;
      else if (r >= 16) img = Properties.Resources.PushBox16;
      else img = Properties.Resources.PushBox12;
      boxSize = new Size(img.Height, img.Width / 8);
    }

    /// <summary>
    /// 裝入配置文件
    /// </summary>
    public void LoadConfig()
    {
      if (HasError) return;
      try
      {
        cfg.LoadConfig();
      }
      catch (Exception ex)
      {
        SetExceptionMessage(ex);
      }
    }

    /// <summary>
    /// 保存組信息到配置文件
    /// </summary>
    /// <param name="groups">組信息</param>
    public void SaveConfig(string[] groups)
    {
      if (HasError) return;
      try
      {
        cfg.SaveConfig(groups);
      }
      catch (Exception ex)
      {
        SetExceptionMessage(ex);
      }
    }

    /// <summary>
    /// 保存當前選項及當前走法到配置文件
    /// </summary>
    public void SaveConfig()
    {
      if (HasError) return;
      try
      {
        cfg.SaveConfig(stack.ToArray());
      }
      catch (Exception ex)
      {
        SetExceptionMessage(ex);
      }
    }

    /// <summary>
    /// 裝入當前組信息
    /// </summary>
    public void LoadGroup()
    {
      if (HasError) return;
      try
      {
        db.LoadGroup(Groups[Group]);
      }
      catch (Exception ex)
      {
        SetExceptionMessage(ex);
      }
    }

    /// <summary>
    /// 裝入當前關信息
    /// </summary>
    public void LoadLevel()
    {
      active = Action.None;
      if (HasError) return;
      try
      {
        db.LoadLevel(Level);
        worker = db.Worker;
        stack.Clear();
        pushSteps = 0;
        isReplay = false;
      }
      catch (Exception ex)
      {
        SetExceptionMessage(ex);
      }
    }

    /// <summary>
    /// 新建一關
    /// </summary>
    /// <param name="isCopy">是否復制當前關</param>
    /// <param name="size">新建關的尺寸</param>
    public void NewLevel(bool isCopy, Size size)
    {
      if (HasError) return;
      try
      {
        levelOem = Level;
        Level = MaxLevel;
        db.NewLevel(isCopy, size);
      }
      catch (Exception ex)
      {
        SetExceptionMessage(ex);
      }
    }

    /// <summary>
    /// 給出通關步驟
    /// </summary>
    /// <returns>通關步驟</returns>
    public string GetSteps()
    {
      string steps = "";
      if (!HasError)
      {
        try
        {
          steps = db.GetSteps(Level);
        }
        catch (Exception ex)
        {
          SetExceptionMessage(ex);
        }
      }
      return steps;
    }

    /// <summary>
    /// 記錄通關步驟
    /// </summary>
    public void Record()
    {
      if (HasError) return;
      try
      {
        db.SaveLevel(Level, stack.ToArray(), pushSteps);
      }
      catch (Exception ex)
      {
        SetExceptionMessage(ex);
      }
    }

    /// <summary>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品在线视频观看| 青青青伊人色综合久久| 中文字幕一区二区在线观看| 中日韩免费视频中文字幕| 亚洲欧美激情插| 亚洲成人免费在线| 中文字幕日本乱码精品影院| 欧美在线你懂的| 69堂精品视频| 国产日韩欧美a| 精品国产电影一区二区 | 国产黄色成人av| av中文字幕不卡| 日韩一区二区麻豆国产| 视频一区二区国产| 欧美成人精品高清在线播放 | 国产精品123区| 91蜜桃在线观看| 日韩亚洲欧美中文三级| 中文字幕国产一区二区| 三级在线观看一区二区| 成人午夜看片网址| 欧美电影在哪看比较好| 国产午夜精品福利| 天堂av在线一区| 成人免费视频国产在线观看| 在线综合+亚洲+欧美中文字幕| 亚洲国产精品精华液ab| 蜜臀av性久久久久av蜜臀妖精 | 亚洲少妇30p| 国产又粗又猛又爽又黄91精品| 91国内精品野花午夜精品| 精品国精品国产尤物美女| 亚洲无人区一区| 成人涩涩免费视频| 欧美成人精品1314www| 亚洲最快最全在线视频| 成人中文字幕在线| 欧美成人三级在线| 午夜电影一区二区| 91蝌蚪porny成人天涯| 国产亚洲综合在线| 久久66热re国产| 欧美视频一区二区| 国产精品福利一区二区三区| 久久99久久久久久久久久久| 欧美日韩国产免费一区二区| 亚洲色图在线播放| 国产白丝网站精品污在线入口| 7799精品视频| 亚洲国产一区二区在线播放| 91网站黄www| 亚洲四区在线观看| 成人精品在线视频观看| 国产欧美一区二区三区鸳鸯浴| 日韩va欧美va亚洲va久久| 欧美va亚洲va国产综合| 日韩激情视频在线观看| 欧美在线短视频| 一区二区不卡在线播放 | 亚洲男同性视频| 国产91丝袜在线播放| 久久精品在这里| 国产精品主播直播| 久久久午夜精品理论片中文字幕| 免费在线视频一区| 日韩三级视频在线观看| 日韩vs国产vs欧美| 日韩一区二区三区视频| 蜜桃视频一区二区| 欧美一级理论性理论a| 日韩不卡一区二区三区| 欧美电影在哪看比较好| 午夜久久福利影院| 欧美一区二区三区播放老司机| 日韩国产欧美三级| 欧美一区二区三区免费大片| 午夜欧美视频在线观看 | 日本欧美一区二区在线观看| 欧美一区二区三区影视| 免费黄网站欧美| 亚洲精品一区二区三区99| 狠狠色综合播放一区二区| 久久伊人蜜桃av一区二区| 极品美女销魂一区二区三区免费| 日韩欧美激情四射| 极品少妇xxxx精品少妇| 国产欧美一区二区精品仙草咪| 国产高清亚洲一区| 国产精品网曝门| 91在线高清观看| 性做久久久久久免费观看 | 日韩成人精品在线| 亚洲精品在线免费观看视频| 国产一区二区成人久久免费影院| 国产欧美日韩亚州综合| 成人av网站在线观看免费| 亚洲视频图片小说| 91精品国产乱码久久蜜臀| 精品夜夜嗨av一区二区三区| 国产精品全国免费观看高清| 色猫猫国产区一区二在线视频| 亚洲18色成人| 欧美精品一区视频| 成人午夜大片免费观看| 亚洲欧美国产77777| 欧美一区二区三区免费大片| 国产成人日日夜夜| 亚洲一级二级三级在线免费观看| 日韩一区二区免费在线电影| 成人午夜私人影院| 亚洲在线视频网站| 欧美精品一区二区三区蜜桃| 99re视频精品| 日韩二区三区四区| 国产精品高潮呻吟久久| 91精品国产综合久久香蕉麻豆| 国产一区二区h| 一区二区免费在线播放| 精品日韩一区二区三区 | 亚洲激情av在线| 欧美变态凌虐bdsm| 91色综合久久久久婷婷| 日本欧美久久久久免费播放网| 日本一区二区三区dvd视频在线| 色老汉av一区二区三区| 国产精品系列在线播放| 亚洲午夜电影在线观看| 成人性生交大合| 欧美综合天天夜夜久久| 国产精品综合久久| 亚洲h动漫在线| 国产精品美女www爽爽爽| 欧美一级在线视频| 91蜜桃网址入口| 狠狠色丁香久久婷婷综| 亚洲国产成人精品视频| 欧美国产亚洲另类动漫| 日韩欧美资源站| 色哟哟在线观看一区二区三区| 免费人成精品欧美精品| 亚洲一区二区偷拍精品| 中文字幕欧美激情| 欧美mv日韩mv国产| 欧美日韩免费在线视频| 成人综合在线视频| 久久国产成人午夜av影院| 亚洲制服丝袜av| 国产精品乱码久久久久久| 精品久久久久久亚洲综合网 | 亚洲一区二区三区小说| 亚洲国产精品ⅴa在线观看| 337p亚洲精品色噜噜狠狠| 99久久精品国产一区二区三区 | 久久嫩草精品久久久久| 欧美久久免费观看| 色狠狠桃花综合| 成人黄色小视频在线观看| 久久69国产一区二区蜜臀| 同产精品九九九| 一区二区三区国产精华| 中文字幕第一区综合| 精品久久一区二区三区| 69久久夜色精品国产69蝌蚪网| 欧美综合色免费| 色综合色综合色综合色综合色综合 | 日韩欧美国产一区在线观看| 欧美日韩精品福利| 色噜噜狠狠成人中文综合| 91丝袜高跟美女视频| 大桥未久av一区二区三区中文| 国产一区二区三区| 激情综合色综合久久综合| 日本不卡一区二区| 亚洲成av人片一区二区三区| 一区二区三区美女视频| 洋洋av久久久久久久一区| 亚洲精品自拍动漫在线| 亚洲免费观看高清完整版在线观看| 亚洲国产精华液网站w| 中文字幕av一区 二区| 久久久精品人体av艺术| 精品国产一区二区亚洲人成毛片| 日韩免费看网站| 日韩一区二区精品葵司在线| 欧美群妇大交群的观看方式| 欧美日韩卡一卡二| 欧美日韩国产综合一区二区| 欧美亚洲丝袜传媒另类| 欧美日韩精品系列| 6080亚洲精品一区二区| 91精品啪在线观看国产60岁| 欧美一区二区三区思思人| 555www色欧美视频| 91精品国产美女浴室洗澡无遮挡| 欧美不卡一二三| 国产日韩影视精品| 亚洲欧美影音先锋| 亚洲一区精品在线| 日本va欧美va瓶|