首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

排雷-C#窗体

2012-09-07 
扫雷-----C#窗体using Systemusing System.Collections.Genericusing System.Textusing System.Drawing

扫雷-----C#窗体

 using System;using System.Collections.Generic;using System.Text;using System.Drawing;using System.Windows;using System.Windows.Forms;namespace winmine{    public class Map    {        public static int Time = 0;        public static bool GameOver = false;        public static bool IsSuccess = false;        public static int UserMineCount = 0;        public static int Width = 17 * 10;        public static int Height = 17 * 10;        public static int BlockWidth = 16;        public static int MineNumber = 10;        public static int RowCount = 9;        public static int ColumnCount = 9;        public static int MainMarked = 0;        public static int BlockOpen = 0;        public static List<BlockData> BlockDataList = new List<BlockData>();        static Map()        {            Init();        }        public static void Init()        {            GameOver = false;            Time = 0;            Height = RowCount * BlockWidth;            Width = ColumnCount * BlockWidth;        }        static void OpenUnit(BlockData bd)        {            if (!bd.IsMine)            {                if (bd.State == BlockState.Open || bd.State == BlockState.UserMine)                {                    return;                }                bd.State = BlockState.Open;                BlockGraphics.DrawBlock(bd);                BlockOpen++;                if (bd.MineCount == 0)                {                    foreach (BlockData bd1 in bd.BlockList)                    {                        OpenUnit(bd1);                    }                }            }         }        public static void Showall()        {            foreach (BlockData bd in Map.BlockDataList)            {                if (bd.State == BlockState.Closed)                {                    bd.State = BlockState.Open;                }             }        }        public static void DrawBlocks()        {            if (!Map.GameOver)                foreach (BlockData bd in Map.BlockDataList)                {                    BlockGraphics.DrawBlock(bd);                }            else            {                foreach (BlockData bd in Map.BlockDataList)                {                    if (!bd.IsMine && bd.State == BlockState.UserMine)                    {                        BlockGraphics.DrawBlock(bd.x, bd.y, BlockGraphics.MineBlastMap);                    }                    else if (bd.IsMine)                    {                        BlockGraphics.DrawBlock(bd.x, bd.y, BlockGraphics.MineMap);                    }                    else                    {                        BlockGraphics.DrawBlock(bd);                    }                }            }        }        public static bool IsSuccessful()        {            if (Map.UserMineCount == 0)            {                int i = 0;                for (i = 0; i < Map.BlockDataList.Count; i++)                {                    if (!Map.BlockDataList[i].IsMine && Map.BlockDataList[i].State == BlockState.UserMine)                    {                        break;                    }                 }                if (i < Map.BlockDataList.Count)                {                    return false;                }                else                {                    return true;                }            }            else            {                return false;            }        }        public static void SingleClick(int x, int y)        {            BlockData bd = GetBlock(x, y);            if (GameOver)            {                return;            }            if (bd != null && bd.IsMine)            {                 GameOver = true;                Showall();                DrawBlocks();            }            else            {                OpenUnit(bd);            }            if (IsSuccessful())            {                Map.IsSuccess = true;             }        }        public static BlockData GetBlock(int x, int y)        {            if (x >= Map.ColumnCount * Map.BlockWidth || y > Map.RowCount * Map.BlockWidth)            {                return null;            }            int index = (y / Map.BlockWidth) * Map.ColumnCount + (x / Map.BlockWidth) % Map.ColumnCount;            if (index < BlockDataList.Count)            {                return BlockDataList[index];            }            else            {                return null;            }         }        public static int GetBlockIndex(int x, int y)        {            if (x >= Map.ColumnCount * Map.BlockWidth || y > Map.RowCount * Map.BlockWidth)            {                return -1;            }            int index = (y / Map.BlockWidth) * Map.ColumnCount + (x / Map.BlockWidth) % Map.ColumnCount;            if (index < BlockDataList.Count)            {                return index;            }            else            {                return -1;            }        }    }    public enum BlockState    {        Closed, Open, UserMine    }    public class BlockGraphics    {        public static Graphics G;        public static Graphics GG;        public static Bitmap MemImage;        public static Font DrawFont = new Font("Arial", 12, FontStyle.Bold);        public static Bitmap ClosedMap;//Map for the closed state        public static Bitmap OpenMap;//Map for the open state        public static Bitmap BlankOpenMap;//Map for the blank state        public static Bitmap UserMineMap;//Map for the mine user marked        public static Bitmap MineBlastMap;//Map for the BlastMine        public static Bitmap MineMap;//Map for the Mine         static BlockGraphics()        {             ClosedMap = new Bitmap((Image)new Bitmap("image/closed.gif"), new Size(Map.BlockWidth, Map.BlockWidth));            OpenMap = new Bitmap((Image)new Bitmap("image/open.gif"), new Size(Map.BlockWidth, Map.BlockWidth));            BlankOpenMap = new Bitmap((Image)new Bitmap("image/open.gif"), new Size(Map.BlockWidth, Map.BlockWidth));            UserMineMap = new Bitmap((Image)new Bitmap("image/usermine.gif"), new Size(Map.BlockWidth, Map.BlockWidth));            MineBlastMap = new Bitmap((Image)new Bitmap("image/MineBlast.gif"), new Size(Map.BlockWidth, Map.BlockWidth));            MineMap = new Bitmap((Image)new Bitmap("image/Mine.gif"), new Size(Map.BlockWidth, Map.BlockWidth));        }         public static void DrawBlock(int x, int y, Bitmap b)        {            if (G != null)            {                G.DrawImage(b, x, y);                GG.DrawImage(b, x, y);            }        }        public static void DrawBlock(BlockData bd)        {            Bitmap b = BlockGraphics.BlankOpenMap;            switch (bd.State)            {                case BlockState.Closed: { b = BlockGraphics.ClosedMap; break; }                case BlockState.Open: { b = BlockGraphics.OpenMap; break; }                case BlockState.UserMine: { b = BlockGraphics.UserMineMap; break; }            }            DrawBlock(bd.x, bd.y, b);            if (bd.State == BlockState.Open && bd.MineCount != 0)            {                StringFormat drawFormat = new StringFormat();                SolidBrush drawBrush = new SolidBrush(System.Drawing.Color.Blue);                switch (bd.MineCount)                {                    case 1: { drawBrush = new SolidBrush(System.Drawing.Color.Blue); break; }                    case 2: { drawBrush = new SolidBrush(System.Drawing.Color.Green); break; }                    case 3: { drawBrush = new SolidBrush(System.Drawing.Color.Red); break; }                    case 4: { drawBrush = new SolidBrush(System.Drawing.Color.Red); break; }                    case 5: { drawBrush = new SolidBrush(System.Drawing.Color.Blue); break; }                    case 6: { drawBrush = new SolidBrush(System.Drawing.Color.Blue); break; }                    case 7: { drawBrush = new SolidBrush(System.Drawing.Color.Blue); break; }                    case 8: { drawBrush = new SolidBrush(System.Drawing.Color.Blue); break; }                 }                G.DrawString(bd.MineCount.ToString(), DrawFont, drawBrush, bd.x, bd.y, drawFormat);                GG.DrawString(bd.MineCount.ToString(), DrawFont, drawBrush, bd.x, bd.y, drawFormat);            }        }        public BlockGraphics()        {         }    }    public class BlockData    {        public int ID = 0;        public int x;        public int y;        public int MineCount = 0;//The mine count around it        public List<BlockData> MineList = new List<BlockData>();        public List<BlockData> BlockList = new List<BlockData>();        public int UserMineCount = 0;//The mine count around it which user marked        public BlockState State = BlockState.Closed;        public bool IsMine = false;        public BlockData(int x, int y, int MineCount)        {            this.x = x;            this.y = y;            this.MineCount = MineCount;        }        public BlockData(int x, int y)        {            this.x = x;            this.y = y;        }    }}

热点排行