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;
}
}
}
分享到:
相关推荐
c#扫雷小程序,适用于交作业时,简单易懂。便于学习,适用于初学者。
自己编的一个小程序——扫雷,背景是优美的风景,游戏设置三个关卡。
c#写的和windows里自带的一样的扫雷游戏
【C# 窗体扫雷小程序】是一个基于C#编程语言和WinForms技术实现的简单游戏项目。在Windows平台上,WinForms是一个常用的GUI(图形用户界面)框架,用于构建桌面应用程序。本项目旨在帮助开发者了解如何利用C#和...
用c#语言做的简单的扫雷小游戏,内容简单,代码简易,逻辑清晰,可供c#初学者制作参考,相信对初学者有所帮助。
卓越的扫雷程序,经典程序 扫雷程序 C#程序 window应用窗体程序 免费下载 无限量下载
在本文中,我们将深入探讨如何使用C# WinForms来实现一个经典的扫雷游戏。C#是一种面向对象的编程语言,广泛应用于Windows桌面应用开发,而WinForms是.NET Framework中的一个库,用于创建图形用户界面(GUI)。通过...
《C#实现扫雷游戏详解》 扫雷是一款经典的益智游戏,深受广大玩家喜爱。在C#编程语言中实现扫雷游戏,可以让我们深入了解Windows Forms应用开发、事件处理、数组操作以及逻辑推理等核心概念。本文将深入探讨C#实现...
在本项目中,"C#制作高仿windows自带扫雷"是一个编程实践,旨在帮助C#初学者通过模仿经典游戏Windows扫雷来学习C#语言和相关开发技术。这个项目的特点在于它不仅复制了游戏的基本功能,还添加了一些额外特性,如双击...
在编程领域,C#是一种广泛...总的来说,"C#扫雷控件"项目涵盖了C#窗体控件的创建、游戏逻辑的实现、用户交互的处理等多个方面的知识。它是一个很好的学习实践案例,可以帮助开发者提升在C#环境下构建复杂UI组件的能力。
【C#经典扫雷程序】是一款使用C#编程语言实现的经典电脑游戏——扫雷。扫雷游戏起源于早期的Windows操作系统,是许多用户熟悉的小游戏,旨在锻炼玩家的空间推理和逻辑思维能力。在这个项目中,我们将探讨如何用C#...
《C#实现Windows扫雷游戏详解》 在编程领域,创建一个经典的Windows扫雷游戏是一项有趣且富有挑战性的任务,特别是在C#环境下。本篇文章将深入探讨如何利用C#语言和动态控件来构建这样一个游戏。 一、项目背景与...
一个windoms窗体程序 基本上实现了微软自带的扫雷
扫雷是一个宽益智游戏,对于大多数电脑玩家和普通朋友来说,扫雷可能是电脑入门游戏之一。 编这个游戏主要是练习可视化开工具的一些基本操作,下面说一下这个游戏的思想和难点。如果大家在玩的时候发现错误,或者有...
1)FrmMain 是主控窗体,负责项目的启动和关闭;并协调内部各个组建模块的协调工作。 2)CrlMineField是雷区的封装,是游戏的核心组建;它负责方格的布局以及地雷的分布;并控制玩家的基本操作以及正确的响应。 3)...
C#扫雷是一款经典的桌面游戏,它的实现涉及到了C#编程语言的基础知识,如类、对象、事件处理、Windows窗体应用等。以下是关于这款扫雷源码的一些关键知识点: 1. **基础语法与数据结构**: - C#是一种面向对象的...
【C#开发的扫雷小游戏_仿照WINDOWS系统扫雷】是基于C#编程语言实现的一个经典游戏项目,旨在帮助初学者理解C#语言的基本特性和面向对象编程思想。扫雷游戏作为一款广为人知的单人益智游戏,其核心逻辑简单而富有挑战...
《C#扫雷游戏开发详解》 扫雷是一款经典的益智游戏,深受广大玩家喜爱。在本文中,我们将深入探讨如何使用C#编程语言来实现扫雷游戏,同时对比两种不同的实现方式:一种是利用GDI+进行绘制,另一种则是采用按钮控件...
"学习c#,模仿做的一个 扫雷小游戏" 这个标题表明了这个项目是一个基于C#编程语言开发的扫雷游戏,是作者为了学习C#而进行的一个实践项目。扫雷游戏是一款经典的逻辑推理游戏,通过在网格中标记雷区来完成挑战,通常...
《扫雷》是一款大众类的益智小游戏。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。