精华内容
下载资源
问答
  • 几个自学C#编程的视频网站和论坛......
  • 自学C#语言基础

    千次阅读 2018-09-09 18:39:31
    自学C#语言基础 ** 所需要的开发工具: Vsiual studio 2015 1.C#是什么? C#是微软公司推出的一种语法简洁,类型安全的面向对象的编程语言。开发人员可以通过它编写在.NET Framework 上运行的各种安全可靠的应用...

    **

    自学C#语言基础

    **

    所需要的开发工具:
    Vsiual studio 2015
    1.C#是什么?
    C#是微软公司推出的一种语法简洁,类型安全的面向对象的编程语言。开发人员可以通过它编写在.NET Framework 上运行的各种安全可靠的应用程序。能够开发桌面应用程序以及WEB程序。

    2…NET Framework是什么?
    .NET Framework是用于Windows的新托管代码编程模型。它将强大的功能与新技术结合起来,用于构建具有视觉上引人注目的用户体验的应用程序,实现跨技术边界的无缝通信,并且能支持各种业务流程。

    第一步:打开我们的Vsiual studio 打开文件 新建 项目(ctrl+shift+N)
    这里写图片描述

    第二步:1:我们建的是C#项目
    2:最好是使用 4.5的
    3:竟然是我们学习C#基础的话要用的就是控制台应用程序
    3:项目名称(可中文或英文)
    4:项目的路径(别放C盘)
    5:解决方案跟项目名是同样的
    这里写图片描述

    第三步:
    这样的话我们成功建好项目了
    可以在 花阔号内写代码代码结构

    using 命名空间
    C#的程序是利用命名空间所组成。命名空间既可用于程序的内部,也可以作向外部的公开的组织系统。如果要调用某个命名空间中的类或者方法,首先需要使用using指令引入命名空间,using指令讲命名空间所标识的命名空间内的类型成员导入到当前的编译单元中,从而可以直接使用每个被导入的类型的标识符,而不必加完全限定限定名。

    namespace 命名空间
    C#的中的每一个类都会有namespace是为了区分每个类所在的命名空间,那么如果说类名相同而命名空间不相同,那么也不会有类名的冲突问题。而namespace后面的命名空间和using的引入的命名空间指向的是同一个,只是发现namespace的命名空间就是当前的项目名称。所以可以理解为每一个项目名称都是一个名空间在多个

    Main方法
    

    作为C#程序的主入口,必须要存在,但是只能存在一个,不能存在多个。

    这里写图片描述

    代码块

    namespace _123
    {
    class Program
    {
    static void Main(string[] args)
    {

           Console.WriteLine("你好呀!认识一下,我叫张Sir");
            Console.ReadKey();//参考资料在QQ群:683782676
    
        }
    }
    

    这里写图片描述}

    展开全文
  • 一些c#小例子...........................自学c#的一些经典问题
  • ASP.Net视频教程_自学C#基础入门网站实战项目实例开发mvc编程ASP.Net视频教程_自学C#基础入门网站实战项目实例开发mvc编程ASP.Net视频教程_自学C#基础入门网站实战项目实例开发mvc编程ASP.Net视频教程_自学C#基础...
  • 自学C#之路6——.NET

    2018-11-20 16:12:35
    如果将 C#程序比喻为一座大厦, 那么大厦的设计思想就是面向对象编程,而建筑大厦的材料则来自于.NET 框架基础类库, 我们可以像使用钢筋、水泥、砖块一样使用 FCL 中的类构建应用程序大厦。FCL 中的类 不但种类丰富...

    本文基本为概念,请做好无聊的准备

    NET 框架(.NET Framework)是微软为开发应用程序而创建的一个富有革命性的全 新的编程平台。如何理解它呢?最简单的方式是把.NET 框架理解为代码的执行环境,一 方面它管理代码的执行过程,另一方面它为代码提供类库支持

    1.公共语言运行时 用.NET 平台编写的代码一般都在公共语言运行时(Common Language Runtime,CLR) 的管理下运行,它负责运行代码,确保代码的安全性和准确性,又负责内存管理、线程调 度等核心服务。通常我们把在 CLR 控制下运行的代码称为托管代码(Managed Code)。

    2..NET 为我们提供了一个内容丰富 的.NET 框架基础类库(Framework Class Library,FCL)。如果将 C#程序比喻为一座大厦, 那么大厦的设计思想就是面向对象编程,而建筑大厦的材料则来自于.NET 框架基础类库, 我们可以像使用钢筋、水泥、砖块一样使用 FCL 中的类构建应用程序大厦。FCL 中的类 不但种类丰富,而且直观形象,易于使用,能方便直观的实现各种需求。最重要的是我们 不用关心这些功能是如何实现的,拿起来用就行了。因此学习 C#的一个重点就是学习 FCL 类库中的常用类。

    综上所述,.NET 担任了双重角色,一方面它是代码的管理者,另一方面它是代码的 支持者。

     

    • C#和.NET的关系

    传统的高级语言只进行一次编译,源代码直接被编译为机器语言,但C#与它们不同, 需要经过两次编译。程序员编写好源代码之后进行第一次编译,将源代码编译为微软中间 语言(Microsoft Intermediate Language, MSIL),生成可以发布的应用软件。当用户运行 软件时,CLR在才进行第二次编译,将载入内存的中间语言编译为计算机能够执行的机器 语言。

     

    托管代码的优点:

    1. 提高性能,即时编可以译针对该 CPU 的特性进行代码优化
    2. 语言的互操作性,不同语言编写的组件最终都编译为中 间语言,然后组成一个完整的程序。
    3. 平台无关性,理论上,只要操作系统安装了.NET 框架,编译为 MSIL 的软件可以运行在任何操作系 统上。

    展开全文
  • 自学C#时写的一款《捡麻将》游戏

    千次阅读 2021-11-14 22:36:35
    三、游戏技巧:牌断开的点越少越好 ** 游戏效果演示: ** ** 再现流程: 先说明一下,本人自学C#写的这个游戏,代码不够精练、算法不是最佳是必然的,当时也没怎么写注释,敬请谅解。 ** 1、使用新建一个项目,取名...

    游戏说明:

    一、游戏目标:
    消除所有的麻将牌。
    二、游戏规则:
    (一)消除麻将:
    点击选择一张麻将牌,再单击另外一张相邻的同字牌,就可以消除。
    (二)移动:
    1、选择一张麻将牌,单击准备移动到的位置,即可移动。
    2、麻将牌只能在同行或同列上移动,不能行列同时改变。
    3、有足够的空位才能移动(不能移动到有牌的地方)。
    4、被移动牌在移动方向上的相邻牌同时跟随移动。
    5、每次移动后,必须且只能消除选择移动的那张牌。
    三、游戏技巧:牌断开的点越少越好

    **

    游戏效果演示:

    **请添加图片描述
    **

    再现流程:

    先说明一下,本人自学C#写的这个游戏,代码不够精练、算法不是最佳是必然的,当时也没怎么写注释,敬请谅解。
    **
    1、使用新建一个项目,取名“MaJiang”(建议VS2010及以上版本)
    在这里插入图片描述

    2、在右侧解决方案管理器中,单击选择Form1.designer.cs文件,用下面提供的Form1.designer.cs代码覆盖左侧窗口中原有代码
    在这里插入图片描述
    3、建立两个类:OneMJ.cs(一张牌)、AllMJ.cs(所有牌),具体方法是:

    (1)在解决方案资源管理器中的项目名上,右键,添加,新建项
    在这里插入图片描述
    (2)在弹出的添加新项窗口中,选择“类”,在“名称”文本框中输入类名
    在这里插入图片描述
    (3)确定后,将下面提供的两个类的代码复制对应的类中,保存。

    4、现在可以尝试运行了!

    游戏代码如下:(C#)

    1、OneMJ.CS(一张麻将牌类)

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace Majiang
    {
        class OneMJ
        {
            private System.Windows.Forms.ImageList imgList;
            private string _Name;
    
            public string Name
            {
                get { return _Name; }
                set {
                    btnMJ.Name = value;
                    btnMJ.Image = imgList.Images[value + ".jpg"];
                    _Name = value; }
            }
    
            private int _Row;
    
            public int Row
            {
                get {
                    _Row = Index / 17;
                    return _Row; }
            }
            private int _Col;
    
            public int Col
            {
                get {
                    _Col = Index % 17;
                    return _Col; }
            }
            private int _index;
    
            public int Index
            {
                get { return _index; }
                set {
                    btnMJ.TabIndex = value;
                    btnMJ.TabIndex = value;
                    btnMJ.Left = (value % 17) * 53 + 20;
                    btnMJ.Top = (value / 17) * 68 + 20;
                    btnMJ.Width = 53;
                    btnMJ.Height = 68;
                    btnMJ.BackColor = System.Drawing.Color.Gray;
                    
                    picDot.Width = 14;
                    picDot.Height = 14; 
                    picDot.BackColor = System.Drawing.Color.DarkGray;
                    picDot.Top = btnMJ.Top+2;
                    picDot.Left = btnMJ.Left+2;
                    picDot.SizeMode =System.Windows.Forms.PictureBoxSizeMode.StretchImage;
                    picDot.Visible = false;
                    // oneMJ.picDot.Visible = false;
    
                    _index = value; }
            }
    
            private bool _Selected;
    
            public bool Selected
            {
                get { return _Selected; }
                set {
                    if (value == true)
                    {
                        btnMJ.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
                        btnMJ.Top += 3;
                        btnMJ.Left += 3;
                    }
                    else
                    {
                        btnMJ.Top -= 3;
                        btnMJ.Left -= 3;
                        btnMJ.FlatStyle = System.Windows.Forms.FlatStyle.Standard;
                    }
                    _Selected = value; }
            }
    
    
            
            public System.Windows.Forms.Button btnMJ = new System.Windows.Forms.Button();
            public System.Windows.Forms.PictureBox picDot = new System.Windows.Forms.PictureBox();
            public OneMJ(System.Windows.Forms.ImageList imglist)
            {
                imgList = imglist;
                picDot.Image = imglist.Images["DOT1.gif"];
            }
             public void Clear()
            {
                Name = "";
    
                picDot.Visible = false;
            }
        }
    }
    
    

    2、AllMJ.cs(所有麻将牌类)

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    
    namespace Majiang
    {
        //声明一个事件委托
        public delegate void MjBackupEvent(bool redoEnabled);
        static class MoveDirection
        {
            public const int Up = 0;
            public const int Down = 1;
            public const int Left = 2;
            public const int Right = 3;
        }
        public class OneStep
        {
            public string[] MJlist = new string[136];
            public int LastMovedMJ = -1;
            public int CountClear = 0;
        }
        class AllMJ
        {
            public event MjBackupEvent mjBackupEvent;
            public System.Windows.Forms.Form frm = new System.Windows.Forms.Form();
            public int CountClear = 0;
            public int LastMoved = -1;
            public DateTime baginTime;
            const string mjp = "一万一万二万二万三万三万四万四万五万五万六万六万七万七万八万八万九万九万一饼一饼二饼二饼三饼三饼四饼四饼五饼五饼六饼六饼七饼七饼八饼八饼九饼九饼一条一条二条二条三条三条四条四条五条五条六条六条七条七条八条八条九条九条红中红中发财发财白板白板东风东风南风南风西风西风北风北风";
            public List<OneMJ> MjList = new List<OneMJ>();
            public List<OneStep> MJBackUp = new List<OneStep>();
            public AllMJ(System.Windows.Forms.Form frm, System.Windows.Forms.ImageList imglist)
            {
    
                for (int row = 0; row <= 7; row++)
                {
                    for (int col = 0; col <= 16; col++)
                    {
                        OneMJ oneMJ = new OneMJ(imglist);
                        int index= row * 17 + col;
                        oneMJ.Index= index;
                        //oneMJ.Name= mj.Substring((row * 17 + col) * 2, 2);
                        MjList.Add(oneMJ);
                        frm.Controls.Add(oneMJ.picDot);
                        frm.Controls.Add(oneMJ.btnMJ);
    
                    }
                }
                string easySetupText = ((System.Windows.Forms.ComboBox)frm.Controls["comboEasy"]).Text.ToString();
                Fresh(easySetupText);
            }
    
            public void SaveAsFile()
            {
                string s="";
                foreach (string one in MJBackUp[0].MJlist)
                {
                    s += one + ',';
                }
                string path = this.GetType().Assembly.Location;
                FileStream fs = new FileStream(path, FileMode.CreateNew);
                StreamWriter sw = new StreamWriter(fs);
                //开始写入
                sw.Write(s);
                //清空缓冲区
                sw.Flush();
                //关闭流
                sw.Close();
                fs.Close();
            
            }
    
            public void Backup()
            {
                MJBackUp.Add(new OneStep() );
                int c = MJBackUp.Count - 1;
                int i=0;
                foreach (OneMJ omj in MjList)
                {
                    MJBackUp[c].MJlist[i]= omj.Name;
                    i++;
                }
                MJBackUp[c].LastMovedMJ = LastMoved;
                MJBackUp[c].CountClear = CountClear;
                mjBackupEvent(true);
            }
            public void GOBack()
            {
                int c = MJBackUp.Count - 1;
                if (c >= 0)
                {
                    int i = 0;
                    foreach (OneMJ omj in MjList)
                    {
                        omj.Name = MJBackUp[c].MJlist[i];
                        i++;
                    }
                    LastMoved = MJBackUp[c].LastMovedMJ;
                    CountClear = MJBackUp[c].CountClear;
                    MJBackUp.RemoveAt(c);
                }
            }
            public bool ClearBoth(OneMJ FirstClick, OneMJ SecondClick)
            {
                Backup();
                LastMoved = -1;
                FirstClick.Clear();
                SecondClick.Clear();
                ClearFlag();
                CountClear += 2;
                if (CountClear==136)
                {
                    
                    TimeSpan df = DateTime.Now - baginTime;
                    System.Windows.Forms.MessageBox.Show("恭喜过关!,用时" + df.Minutes.ToString() + "分" + (df.Seconds % 60).ToString() + "秒");
                    //Fresh();
                }
                return true;
            }
            public void Fresh(string limitEasyText)
            {
                string mj = mjp+mjp;
                MJBackUp.Clear();
                Random rnd = new Random();
                int x, y;
                for (int i = 0; i <= 5000; i++)
                {
                    x = rnd.Next(0, 66) * 2;
                    y = rnd.Next(68, 135) * 2;
                    if ((y-x)%4==0)
                        mj = mj.Substring(x, y - x) + mj.Substring(0, x) + mj.Substring(y);
                    else
                        mj = mj.Substring(0, x) + mj.Substring(y)+mj.Substring(x, y - x)  ;
                }
                for (int row = 0; row <= 7; row++)
                {
                    for (int col = 0; col <= 16; col++)
                    {
                        int index = row * 17 + col;
                        MjList[index].Name = mj.Substring((row * 17 + col) * 2, 2);
                    }
                }
                baginTime = System.DateTime.Now;
                LastMoved = -1;
                CountClear = 0;
                int limitEasy = 0;
                try
                {
                    limitEasy = int.Parse(limitEasyText);
                }
                catch
                {
                    limitEasy = 0;
                }
                while (ShowDouble(limitEasy) != limitEasy && limitEasy != 0) Fresh(limitEasyText);
            }
            /// <summary>
            /// 显示成对的
            /// </summary>
            public int ShowDouble(int limit)
            {
                int count = 0;
                for (int row = 0; row <= 7; row++)
                {
                    for (int col = 0; col <= 16; col++)
                    {
                        int index = row * 17 + col;
                        MjList[index].picDot.Visible = false;
                    }
                }
                for (int row = 0; row <= 7; row++)
                {
                    for (int col = 0; col <= 15; col++)
                    {
                        int index = row * 17 + col;
                        if (MjList[index].Name == MjList[index + 1].Name)
                        {
                            MjList[index].picDot.Visible = true;
                            MjList[index+1].picDot.Visible = true;
                            count++;
                        }
                    }
                }
                for (int col = 0; col <= 16; col++)
                {
                    for (int row = 0; row <= 6; row++)    
                    {
                        int index = row * 17 + col;
                        if (MjList[index].Name == MjList[index + 17].Name)
                        {
                            MjList[index].picDot.Visible = true;
                            MjList[index + 17].picDot.Visible = true;
                            count++;
                        }
                    }
                }
                return count;
            }
    
    
            public string SearchFirstNoBlank(int index, int direction)
            {
                switch (direction)
                {
                    case MoveDirection.Up://for (int i = 1; ; i++)
                            if (index - i * 17 >= 0)
                            { if (MjList[index - i * 17].Name != "") return MjList[index - i * 17].Name; }
    
                            else
                                break;
                        break;
                    case MoveDirection.Down://for (int i = 1; ; i++)
                            if (index + i * 17 <= 135)
                            { if (MjList[index + i * 17].Name != "") return MjList[index + i * 17].Name; }
                            else
                                break;
                        break;
                    case MoveDirection.Left://for (int i = 1; ; i++)
                            if ((index - i) / 17 == index / 17 && index - i > 0)
                            { if (MjList[index - i].Name != "") return MjList[index - i].Name; }
                            else
                                break;
                        break;
                    case MoveDirection.Right://for (int i = 1; ; i++)
                            if ((index + i) / 17 == index / 17 && index + i <= 135)
                            { if (MjList[index + i].Name != "") return MjList[index + i].Name; }
                            else
                                break;
                        break;
                }
                return "";
            }      
            public int CountNearBlank(int index,int direction)
            {
                int blankCount = 0;
                switch (direction)
                {
                    case MoveDirection.Up://for (int i = 1; ; i++)
                            if (index - i * 17 >= 0)
                                if (MjList[index - i * 17].Name == "") blankCount++;
                                else
                                    break;
                            else
                                break;
                        break;
                    case MoveDirection.Down://for (int i = 1; ; i++)
                            if (index + i * 17 <= 135)
                                if (MjList[index + i * 17].Name == "") blankCount++;
                                else
                                    break;
                            else
                                break;
                        break;
                    case MoveDirection.Left://for (int i = 1; ; i++)
                            if ((index - i) / 17 == index / 17 && index - i>=0)
                                if (MjList[index - i].Name == "") blankCount++;
                                else
                                    break;
                            else
                                break;
                        break;
                    case MoveDirection.Right://for (int i = 1; ; i++)
                            if ((index + i) / 17 == index / 17 && index+i<=135)
                                if (MjList[index + i].Name == "") blankCount++;
                                else
                                    break;
                            else
                                break;
                        break;
                }
                return blankCount;
            }
            
      
            public int CountMove(OneMJ selectMJ, int direction )
            {
                int count = 0;
                switch (direction)
                {
                    case MoveDirection.Up:
                        for (int i = 1; selectMJ.Row - i >= 0; i++)
                        {
                            if (MjList[selectMJ.Index - i * 17].Name != "") count++;
                            else
                                break;
                        }
                        break;
                    case MoveDirection.Down:
                        for (int i = 1; selectMJ.Row + i <= 7; i++)
                        {
                            if (MjList[selectMJ.Index + i * 17].Name != "") count++;
                            else
                                break;
                        }
                        break;
                    case MoveDirection.Left:
                        for (int i = 1; selectMJ.Col - i >= 0; i++)
                        {
                            if (MjList[selectMJ.Index - i].Name != "") count++;
                            else
                                break;
                        }
                        break;
                    case MoveDirection.Right:
                        for (int i = 1; selectMJ.Col + i <= 16; i++)
                        {
                            if (MjList[selectMJ.Index + i].Name != "") count++;
                            else
                                break;
                        }
                        break;
    
                }
                return count;
            }
    
            public int CountBlank(OneMJ selectMJ, int direction)
            {
                int count = 0;
                switch (direction)
                {
                    case MoveDirection.Up:
                        for (int i = 1; selectMJ.Row - i >= 0; i++)
                        {
                            if (MjList[selectMJ.Index - i * 17].Name == "") count++;
                            else
                                if (count > 0) break;
                        }
                        break;
                    case MoveDirection.Down:
                        for (int i = 1; selectMJ.Row + i <= 7; i++)
                        {
                            if (MjList[selectMJ.Index + i * 17].Name == "") count++;
                            else
                                if (count > 0) break;
                        }
                        break;
                    case MoveDirection.Left:
                        for (int i = 1; selectMJ.Col - i >= 0; i++)
                        {
                            if (MjList[selectMJ.Index - i].Name == "") count++;
                            else
                                if (count > 0) break;
                        }
                        break;
                    case MoveDirection.Right:
                        for (int i = 1; selectMJ.Col + i <= 16; i++)
                        {
                            if (MjList[selectMJ.Index + i].Name == "") count++;
                            else
                                if (count > 0) break;
                        }
                        break;
                }
                return count;
            }
        
            public void ShowFlag(string mjName)
            {
                if (mjName == "") return;
                foreach(OneMJ oneMJ in MjList)
                {
                    if (oneMJ.Name == mjName) oneMJ.picDot.Visible = true;
                    else
                        oneMJ.picDot.Visible = false;
                }
            }
            public void ClearFlag()
            {
                foreach (OneMJ oneMJ in MjList)
                {
                         oneMJ.picDot.Visible = false;
                }
            }
    
            public bool CheckMove(OneMJ SecondClickMJ, OneMJ FirstClickMJ)
            {
                bool MoveEnabled = false;
                if (FirstClickMJ.Row == SecondClickMJ.Row || FirstClickMJ.Col == SecondClickMJ.Col)
                {
                    if (FirstClickMJ.Row > SecondClickMJ.Row)
                        MoveEnabled = CheckMove2(FirstClickMJ, SecondClickMJ, MoveDirection.Up, FirstClickMJ.Row - SecondClickMJ.Row, CountMove(FirstClickMJ, MoveDirection.Up), CountBlank(FirstClickMJ, MoveDirection.Up));
                    else if (FirstClickMJ.Row < SecondClickMJ.Row)
                        MoveEnabled = CheckMove2(FirstClickMJ, SecondClickMJ, MoveDirection.Down, SecondClickMJ.Row - FirstClickMJ.Row, CountMove(FirstClickMJ, MoveDirection.Down), CountBlank(FirstClickMJ, MoveDirection.Down));
                    else if (FirstClickMJ.Col > SecondClickMJ.Col)
                        MoveEnabled = CheckMove2(FirstClickMJ, SecondClickMJ, MoveDirection.Left, FirstClickMJ.Col - SecondClickMJ.Col, CountMove(FirstClickMJ, MoveDirection.Left), CountBlank(FirstClickMJ, MoveDirection.Left));
                    else if (FirstClickMJ.Col < SecondClickMJ.Col)
                        MoveEnabled = CheckMove2(FirstClickMJ, SecondClickMJ, MoveDirection.Right, SecondClickMJ.Col - FirstClickMJ.Col, CountMove(FirstClickMJ, MoveDirection.Right), CountBlank(FirstClickMJ, MoveDirection.Right));
                    return MoveEnabled;
                }
                else
                    return false;
            }
    
            private bool CheckMove2(OneMJ selectMj, OneMJ TargetMj, int Direction, int MoveDistance, int countMove, int countBlank)
            {
                int index = selectMj.Index;
                if (MoveDistance > countBlank) return false;
                //countMove++;
                //此处代码验证移动落点处的四周是否有相同牌,没有则不移动。
                switch (Direction)
                {
                    case MoveDirection.Up:
                    case MoveDirection.Down:
                        if (SearchFirstNoBlank(TargetMj.Index, MoveDirection.Left) == selectMj.Name || SearchFirstNoBlank(TargetMj.Index, MoveDirection.Right) == selectMj.Name)
                            return true;
                        else
                            return false;
                    case MoveDirection.Left:
                    case MoveDirection.Right:
                        if (SearchFirstNoBlank(TargetMj.Index, MoveDirection.Up) == selectMj.Name || SearchFirstNoBlank(TargetMj.Index, MoveDirection.Down) == selectMj.Name)
                            return true;
                        else
                            return false;
                }
                return true;
            }
            public bool CheckClear(OneMJ SecondClickMJ, OneMJ FirstClickMJ)
            {
                if (FirstClickMJ.Name != SecondClickMJ.Name) return false;
                
                int rowDist = SecondClickMJ.Row - FirstClickMJ.Row;
                int colDist = SecondClickMJ.Col - FirstClickMJ.Col;
                int Y_Dif = Math.Abs(FirstClickMJ.Row - SecondClickMJ.Row);
                int X_Dif = Math.Abs(FirstClickMJ.Col - SecondClickMJ.Col);
                int FirstClickIndex = FirstClickMJ.Index;
                if (LastMoved >= 0 && SecondClickMJ.Index != LastMoved && FirstClickMJ.Index != LastMoved)
                {
                    System.Windows.Forms.MessageBox.Show("  只能清除移动的牌!(" + MjList[LastMoved].Name + ")", "规则有误", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                    return false;
                }
                if (Y_Dif +X_Dif == 1) return true ;
    
                if (rowDist == 0)//同一行上
                {
                    if (colDist > 0)//向右检测
                    {
                        int blank = CountNearBlank(FirstClickIndex, MoveDirection.Right);
                        if (blank >=X_Dif - 1) return true;
    
                    }
                    else
                    {
                        int blank = CountNearBlank(FirstClickIndex, MoveDirection.Left);
                        if (blank >=X_Dif - 1) return true; 
                    }
                }
                if (colDist == 0)//同一列上
                {
                    if (rowDist < 0)//向上检测
                    {
                        int blank = CountNearBlank(FirstClickIndex, MoveDirection.Up);
                        if (blank >= Y_Dif - 1) return true;
                    }
                    else//向下检测
                    {
                        int blank = CountNearBlank(FirstClickIndex, MoveDirection.Down);
                        if (blank >= Y_Dif - 1) return true;
                    }
                }
    
                //如果不同行也不同列
    
                if (FirstClickMJ.Row > SecondClickMJ.Row)
                {
                    //firstclick在下边
                    if (FirstClickMJ.Col > SecondClickMJ.Col)//firstclick在右下角
                    {
                        if ((CountNearBlank(FirstClickMJ.Index, MoveDirection.Left) >= X_Dif && CountNearBlank(SecondClickMJ.Index, MoveDirection.Down) >= Y_Dif) || (CountNearBlank(FirstClickMJ.Index, MoveDirection.Up) >= Y_Dif && CountNearBlank(SecondClickMJ.Index, MoveDirection.Right) >= X_Dif))
                            return true;
    
                    }
                    else//firstclick在左下角
                    {
                        if ((CountNearBlank(FirstClickMJ.Index, MoveDirection.Right) >= X_Dif && CountNearBlank(SecondClickMJ.Index, MoveDirection.Down) >= Y_Dif) || (CountNearBlank(FirstClickMJ.Index, MoveDirection.Up) >= Y_Dif && CountNearBlank(SecondClickMJ.Index, MoveDirection.Left) >= X_Dif))
                            return true;
                    }
                }
                else
                {
                    //firstclick在上边
                    if (FirstClickMJ.Col > SecondClickMJ.Col)//firstclick在右上角
                    {
                        if ((CountNearBlank(FirstClickMJ.Index, MoveDirection.Left) >= X_Dif && CountNearBlank(SecondClickMJ.Index, MoveDirection.Up) >= Y_Dif) || (CountNearBlank(FirstClickMJ.Index, MoveDirection.Down) >= Y_Dif && CountNearBlank(SecondClickMJ.Index, MoveDirection.Right) >= X_Dif))
                            return true;
                    }
                    else//firstclick在左上角
                    {
                        if ((CountNearBlank(FirstClickMJ.Index, MoveDirection.Right) >= X_Dif && CountNearBlank(SecondClickMJ.Index, MoveDirection.Up) >= Y_Dif) || (CountNearBlank(FirstClickMJ.Index, MoveDirection.Down) >= Y_Dif && CountNearBlank(SecondClickMJ.Index, MoveDirection.Left) >= X_Dif))
                            return true;
                    }
    
                }
    
                return false;
            }
            public void MoveMJ(OneMJ selectMj, OneMJ TargetMj )
            {
                int Direction = 0;
                int MoveDistance = 0;
                int countMove=0;
                int countBlank=0;
                if (selectMj.Row > TargetMj.Row)
                {
                    Direction = MoveDirection.Up; 
                    MoveDistance = selectMj.Row - TargetMj.Row;
                    countMove = CountMove(selectMj, Direction);
                    countBlank = CountBlank(selectMj, Direction);
                }
                else if (selectMj.Row < TargetMj.Row)
                {
                    Direction = MoveDirection.Down; 
                    MoveDistance = TargetMj.Row - selectMj.Row;
                    countMove = CountMove(selectMj, Direction);
                    countBlank = CountBlank(selectMj, Direction);
                }
                else if (selectMj.Col > TargetMj.Col)
                {
                    Direction = MoveDirection.Left;
                    MoveDistance = selectMj.Col - TargetMj.Col;
                    countMove = CountMove(selectMj, Direction);
                    countBlank = CountBlank(selectMj, Direction);
                }
                else if (selectMj.Col < TargetMj.Col)
                {
                    Direction = MoveDirection.Right;
                    MoveDistance = TargetMj.Col - selectMj.Col;
                    countMove = CountMove(selectMj, Direction);
                    countBlank = CountBlank(selectMj, Direction);
                }
    
                int index = selectMj.Index;
                Backup();
                LastMoved = TargetMj.Index;
                ClearFlag();
                switch (Direction)
                {
                    case MoveDirection.Up:
                        for (int i = countMove; i >= 0; i--)
                        {
                            MjList[index - MoveDistance * 17 - i * 17].Name = MjList[index - i * 17].Name;
                        }
                        for (int i = 0; i < MoveDistance; i++)
                        {
                            MjList[index - i * 17].Clear();
                        }
                        break;
                    case MoveDirection.Down:
                        for (int i = countMove; i >= 0; i--)
                        {
                            MjList[index + MoveDistance * 17 + i * 17].Name = MjList[index + i * 17].Name;
                        }
                        for (int i = 0; i < MoveDistance; i++)
                        {
                            MjList[index + i * 17].Clear();
                        }
                        break;
                    case MoveDirection.Left:
                        for (int i = countMove; i >= 0; i--)
                        {
                            MjList[index - MoveDistance - i].Name = MjList[index - i].Name;
                        }
                        for (int i = 0; i < MoveDistance; i++)
                        {
                            MjList[index - i].Clear();
                        }
    
                        break;
                    case MoveDirection.Right:
                        for (int i = countMove; i >= 0; i--)
                        {
                            MjList[index + MoveDistance + i].Name = MjList[index + i].Name;
                        }
                        for (int i = 0; i < MoveDistance; i++)
                        {
                            MjList[index + i].Clear();
                        }
    
                        break;
                }
            }
        }
       
    }
    
    

    3、Form1.cs(Form1窗体):
    在这里插入图片描述
    4、Form1窗体设计代码

    namespace Majiang
    {
        partial class Form1
        {
            /// <summary>
            /// 必需的设计器变量。
            /// </summary>
            private System.ComponentModel.IContainer components = null;
    
            /// <summary>
            /// 清理所有正在使用的资源。
            /// </summary>
            /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            #region Windows 窗体设计器生成的代码
    
            /// <summary>
            /// 设计器支持所需的方法 - 不要
            /// 使用代码编辑器修改此方法的内容。
            /// </summary>
            private void InitializeComponent()
            {
                this.components = new System.ComponentModel.Container();
                System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
                this.imageList1 = new System.Windows.Forms.ImageList(this.components);
                this.btnNew = new System.Windows.Forms.Button();
                this.btnExit = new System.Windows.Forms.Button();
                this.lblReadme = new System.Windows.Forms.Label();
                this.linkLabel1 = new System.Windows.Forms.LinkLabel();
                this.btnRedo = new System.Windows.Forms.Button();
                this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
                this.comboEasy = new System.Windows.Forms.ComboBox();
                this.label1 = new System.Windows.Forms.Label();
                this.SuspendLayout();
                // 
                // imageList1
                // 
                this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
                this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
                this.imageList1.Images.SetKeyName(0, "一万.jpg");
                this.imageList1.Images.SetKeyName(1, "二万.jpg");
                this.imageList1.Images.SetKeyName(2, "八饼.jpg");
                this.imageList1.Images.SetKeyName(3, "八条.jpg");
                this.imageList1.Images.SetKeyName(4, "八万.jpg");
                this.imageList1.Images.SetKeyName(5, "白板.jpg");
                this.imageList1.Images.SetKeyName(6, "北风.jpg");
                this.imageList1.Images.SetKeyName(7, "东风.jpg");
                this.imageList1.Images.SetKeyName(8, "二饼.jpg");
                this.imageList1.Images.SetKeyName(9, "二条.jpg");
                this.imageList1.Images.SetKeyName(10, "发财.jpg");
                this.imageList1.Images.SetKeyName(11, "九饼.jpg");
                this.imageList1.Images.SetKeyName(12, "九条.jpg");
                this.imageList1.Images.SetKeyName(13, "九万.jpg");
                this.imageList1.Images.SetKeyName(14, "六饼.jpg");
                this.imageList1.Images.SetKeyName(15, "六条.jpg");
                this.imageList1.Images.SetKeyName(16, "六万.jpg");
                this.imageList1.Images.SetKeyName(17, "南风.jpg");
                this.imageList1.Images.SetKeyName(18, "七饼.jpg");
                this.imageList1.Images.SetKeyName(19, "七条.jpg");
                this.imageList1.Images.SetKeyName(20, "七万.jpg");
                this.imageList1.Images.SetKeyName(21, "三饼.jpg");
                this.imageList1.Images.SetKeyName(22, "三条.jpg");
                this.imageList1.Images.SetKeyName(23, "三万.jpg");
                this.imageList1.Images.SetKeyName(24, "四饼.jpg");
                this.imageList1.Images.SetKeyName(25, "四条.jpg");
                this.imageList1.Images.SetKeyName(26, "四万.jpg");
                this.imageList1.Images.SetKeyName(27, "五饼.jpg");
                this.imageList1.Images.SetKeyName(28, "五条.jpg");
                this.imageList1.Images.SetKeyName(29, "五万.jpg");
                this.imageList1.Images.SetKeyName(30, "西风.jpg");
                this.imageList1.Images.SetKeyName(31, "一饼.jpg");
                this.imageList1.Images.SetKeyName(32, "一条.jpg");
                this.imageList1.Images.SetKeyName(33, "红中.jpg");
                this.imageList1.Images.SetKeyName(34, "DOT1.gif");
                // 
                // btnNew
                // 
                this.btnNew.Location = new System.Drawing.Point(375, 582);
                this.btnNew.Name = "btnNew";
                this.btnNew.Size = new System.Drawing.Size(88, 28);
                this.btnNew.TabIndex = 0;
                this.btnNew.Text = "下一盘";
                this.btnNew.UseVisualStyleBackColor = true;
                this.btnNew.Click += new System.EventHandler(this.btnNew_Click);
                // 
                // btnExit
                // 
                this.btnExit.Location = new System.Drawing.Point(489, 582);
                this.btnExit.Name = "btnExit";
                this.btnExit.Size = new System.Drawing.Size(88, 28);
                this.btnExit.TabIndex = 0;
                this.btnExit.Text = "退出";
                this.btnExit.UseVisualStyleBackColor = true;
                this.btnExit.Click += new System.EventHandler(this.btnExit_Click);
                // 
                // lblReadme
                // 
                this.lblReadme.AutoSize = true;
                this.lblReadme.Cursor = System.Windows.Forms.Cursors.Hand;
                this.lblReadme.ForeColor = System.Drawing.Color.Blue;
                this.lblReadme.Location = new System.Drawing.Point(816, 590);
                this.lblReadme.Name = "lblReadme";
                this.lblReadme.Size = new System.Drawing.Size(53, 12);
                this.lblReadme.TabIndex = 1;
                this.lblReadme.Text = "游戏说明";
                this.lblReadme.Click += new System.EventHandler(this.lblReadme_Click);
                // 
                // linkLabel1
                // 
                this.linkLabel1.AutoSize = true;
                this.linkLabel1.Location = new System.Drawing.Point(28, 598);
                this.linkLabel1.Name = "linkLabel1";
                this.linkLabel1.Size = new System.Drawing.Size(65, 12);
                this.linkLabel1.TabIndex = 2;
                this.linkLabel1.TabStop = true;
                this.linkLabel1.Text = "于鸿弋制作";
                this.toolTip1.SetToolTip(this.linkLabel1, "QQ:1501728");
                // 
                // btnRedo
                // 
                this.btnRedo.Enabled = false;
                this.btnRedo.Location = new System.Drawing.Point(741, 585);
                this.btnRedo.Name = "btnRedo";
                this.btnRedo.Size = new System.Drawing.Size(69, 23);
                this.btnRedo.TabIndex = 3;
                this.btnRedo.Text = "回撤一步";
                this.btnRedo.UseVisualStyleBackColor = true;
                this.btnRedo.Click += new System.EventHandler(this.btnRedo_Click);
                // 
                // comboEasy
                // 
                this.comboEasy.FormattingEnabled = true;
                this.comboEasy.Items.AddRange(new object[] {
                "1",
                "2",
                "3",
                "4",
                "5",
                "6",
                "7",
                "8",
                "9",
                "随机"});
                this.comboEasy.Location = new System.Drawing.Point(282, 586);
                this.comboEasy.Name = "comboEasy";
                this.comboEasy.Size = new System.Drawing.Size(56, 20);
                this.comboEasy.TabIndex = 4;
                this.comboEasy.Text = "随机";
                // 
                // label1
                // 
                this.label1.AutoSize = true;
                this.label1.Location = new System.Drawing.Point(211, 590);
                this.label1.Name = "label1";
                this.label1.Size = new System.Drawing.Size(65, 12);
                this.label1.TabIndex = 5;
                this.label1.Text = "开局难度:";
                // 
                // Form1
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(892, 622);
                this.Controls.Add(this.label1);
                this.Controls.Add(this.comboEasy);
                this.Controls.Add(this.btnRedo);
                this.Controls.Add(this.linkLabel1);
                this.Controls.Add(this.lblReadme);
                this.Controls.Add(this.btnExit);
                this.Controls.Add(this.btnNew);
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
                this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
                this.MaximizeBox = false;
                this.Name = "Form1";
                this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
                this.Text = "麻将对对碰-160603版";
                this.Load += new System.EventHandler(this.Form1_Load);
                this.ResumeLayout(false);
                this.PerformLayout();
    
            }
    
            #endregion
    
            private System.Windows.Forms.ImageList imageList1;
            private System.Windows.Forms.Button btnNew;
            private System.Windows.Forms.Button btnExit;
            private System.Windows.Forms.Label lblReadme;
            private System.Windows.Forms.LinkLabel linkLabel1;
            private System.Windows.Forms.Button btnRedo;
            private System.Windows.Forms.ToolTip toolTip1;
            private System.Windows.Forms.ComboBox comboEasy;
            private System.Windows.Forms.Label label1;
    
        }
    }
    
    
    
    展开全文
  • 一、程序的编辑与编译 关于程序的编辑和编译就不详细说明了,这部分的知识网上搜有很多详细... C#的编辑器推荐使用Visual Studio,也可以使用它的相当于是轻量版的Visual Studio Code,在官网下载即可。 1、Visu...

    一、程序的编辑与编译

            关于程序的编辑和编译就不详细说明了,这部分的知识网上搜有很多详细讲解。
    (6条消息) Java程序的编辑、编译、运行_张张张呀的博客-CSDN博客https://blog.csdn.net/weixin_46204469/article/details/109258777

    二、程序的编辑

            C#的编辑器推荐使用Visual Studio,也可以使用它的相当于是轻量版的Visual Studio Code,在官网下载即可。

            1、Visual Studio地址:Visual Studio IDE: 面向开发人员的一体式编程工具 (microsoft.com)https://visualstudio.microsoft.com/zh-hans/vs/

             下载community版本就行了。点击下载后,下载的是一个下载器,运行下载器后的安装页面,要勾选VS和.NET,具体的详细操作可见:安装 Visual Studio - Visual Studio (microsoft.com)

             个人推荐使用VS code,相比它大哥来说,要轻便得多,而且功能丰富强大,有很多插件,安装插件后还可以用于其他方面的编程,C/C++、JAVA、web前端等都可以。    

      2、Visual Studio Code下载地址:

    Visual Studio Code - Code Editing. Redefinedhttps://code.visualstudio.com/?wt.mc_id=vscom_downloads        由于VScode安装时不附带安装环境,在安装VScode前,你需要自己安装上.NET Core:Download .NET (Linux, macOS, and Windows) (microsoft.com)   

            下载完成后,点击安装程序安装就可以了,然后继续VScode的安装。

            关于VScode的安装及一些插件:Visual Studio code安装步骤 - 前端HL - 博客园 (cnblogs.com)

            安装完成后,不能直接使用,还需要安装C#相关的插件

             点击程序左上竖排的第四个插件图标,在搜索栏里搜C#,装上上图里c#那两个就可以了。

             关于更详细的操作,以及创建出第一个程序:Visual Studio Code创建C#项目 - zhuanghamiao - 博客园 (cnblogs.com)

    使用 Visual Studio Code 创建 .NET 控制台应用程序 - .NET | Microsoft Docs        

     在终端里面,输入dotnet new console -n exg,就可以创建一个新解决方案。前面的C:\code\c#\c#study是表示当前所在的位置,在此位置下输入命令,新的解决方案会创建在这个目录下。

    dotnet new console代表创建一个新的控制台程序,-n及--name,帮助里面看得到,代表后接的是程序名字,exg就代表我所给程序起的名字了。这样就创建好了。

     

    然后回到VScode里,点击文件、打开文件夹,打开刚刚创建的解决方案,然后VScode右下角有个这样的提示,点击YES,它可以帮助你配置解决方案的其他重要文件。

     

     cs是C#源文件的后缀名,点击这个文件就出来了经典的Hello World!

    可以按F5或者直接点击上侧选项的运行,启动调试。就可以运行调试程序了,控制台显示Hello World!

    展开全文
  • 经过自己的了解和老师的推荐,我选择了开始学习C#。 今天是学习的第一天! 使用的软件肯定是Visual Studio Community 2019 安装过程很简单!只需要点点点就行了,就算不会安装也可以在下载页面查看教程。 我也...
  • C#编程自学软件

    2021-05-20 11:53:43
    这是C#编程自学软件,编程技术知识,详细讲解,包括:C# 语言,语法,数组,面向对象技术,winform 视窗开发技术,asp.net 建站技术,ADO.NET 数据库技术等,是自学 C# 编程技术的好助手!软件介绍这是立丰老师自...
  • 从头开始自学C#

    2020-03-26 21:20:27
    从头开始自学C# 这个博客就是用来记录自己的学习过程的 希望在一定时间内能依靠C#就业吧 近期还在待业状态 今天是开始学习的第一天 简单记录一下今天学习的知识吧 C#的基本语法 using:用于引用程序中的命名空间 ...
  • 最近在学习C#,整理了一些电子书,希望对其他初学者有些帮助。 2008-09-10(教师节送小礼!)
  • 自学笔记 c#自学笔记 c#自学笔记 c# 没更新
  • C#全套视频教学

    2018-10-02 18:57:18
    内有.net全套视频资源,01.Net全套就业视频教程之DotNet基础加强-video
  • 本来想学c++可是现在大的培训机构都没有线下了 就想学java好找工作 unity用的c#跟java挺想的 如果自学的话难度大时间长吗</p>
  • 学习用C#中操作ini文件过程中,在网上查了很多文章,但是感觉自己基础太薄弱,对各位大神发的文章不是特别理解,摸索了很久也才只学会了创建ini文件和读写ini文件。下面给出一个我写的小例子。 首先,建立一个...
  • 先把前端大概的框架搭起来,美化后面再做。 登录: 左边空白应该会配公司的图 主要功能模块 ...具体数据项等数据库设计完成后再完善 ...灰色是数据库显示块,等待连接数据库成功后可显示相关查询结果 ...
  • 各位大神,本人小白一个,从事金蝶软件实施,想自学C#.求各位大神给于方法及给点入门级的资料,感谢!
  • 第一部分,原文章程序 实例001 带历史信息的菜单 实例说明 在开发图纸管理软件时,要求在菜单上记录用户最近打开的档案或图纸,以方便下次使用。如图1.1所示,单击“文件”菜单下的“打开文件”子菜单,打开需要...
  • 24小时自学C#,不过也要看你自己的能耐
  • 自学C#之路1——Hello World

    千次阅读 2018-11-20 15:58:36
    叩响C#之门 在百度百科中对这本书的介绍是这样的 图书简介 图中划红线的地方是这本书最吸引我的地方; 书中插图 初识:C# 不要傻傻地读作“C 井”,而应酷酷的读做“C Sharp”。它的含义是在 C++的基础上再...
  • 求一套C#教学课件,自学C#用. 楼主学生党一枚,假期闲来无事,又不想把所有时间全部浪费在吃和睡上,所以想自学一下C#,目前已学过C和C++
  • csharp基础练习题:找到左上角到右下角的总和【难度:1级】–景越C# 经典编程题库,不同难度C# 练习题,适合自学C# 的新手进阶训练 csharp高级练习题:与伯努利的数字相处【难度:3级】–景越C# 经典编程题库,不同难度C#...
  • 从0自学C#01--自绘窗体边框

    千次阅读 2016-01-15 14:46:45
    从0自学C#01–自绘窗体边框主要介绍自绘窗体边框和背景颜色逐级变浅(深)。
  • csharp进阶练习题:GrandChild养成了叔叔的习惯【难度:2级】–景越C# 经典编程题库,不同难度C# 练习题,适合自学C# 的新手进阶训练 csharp基础练习题:拿衍生词【难度:0级】–景越C# 经典编程题库,不同难度C# 练习题,...
  • csharp进阶练习题:将switch语句重构为Visitor模式【难度:2级】–景越C# 经典编程题库,不同难度C# 练习题,适合自学C# 的新手进阶训练 csharp基础练习题:匕首【难度:1级】–景越C# 经典编程题库,不同难度C# 练习题,...
  • csharp基础练习题:描述列表【难度:1级】–景越C# 经典编程题库,不同难度C# 练习题,适合自学C# 的新手进阶训练 免责申明 本博客所有编程题目及答案均收集自互联网,主要用于供网友学习参考,如有侵犯你的权益请联系...
  • csharp进阶练习题:头等舱阶乘函数【难度:2级】:...C#,而主要是必要的,有实用的功能.这项工作是编写将返回另一个函数的函数. .父功能 - GetFactorialFunction - 就是你需要填写返回应该接受一个整数参数的方法,并呼吁...
  • csharp基础练习题:阿尔卑斯山ASCII-ING【难度:1级】–景越C# 经典编程题库,不同难度C# 练习题,适合自学C# 的新手进阶训练 csharp基础练习题:是数字回文?【难度:1级】–景越C# 经典编程题库,不同难度C# 练习题,适合...
  • 从0自学C#08--绘制曲线chart控件

    千次阅读 2018-07-09 14:42:39
    本文转载连接: https://blog.csdn.net/tclxspy/article/details/50818000chart控件的使用本文介绍如何使用工具箱里的chart控件,绘制多条曲线。效果图如下:1.InitializeChart在窗体里添加chart控件,然后在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,222
精华内容 6,088
关键字:

自学c#

c# 订阅