精华内容
下载资源
问答
  • C#练手小案例

    2021-04-14 14:51:54
    前言 本文是将 C# 语言基础中一些易错的知识点结合案例的方式进行讲解,不会全面而细致地对 C# 语法进行阐述。示例代码均是在主函数中书写,因此部分案例省略了 C# 程序框架的部分内容。

    前言

    本文是将 C# 语言基础中一些易错的知识点结合案例的方式进行讲解,不会全面而细致地对 C# 语法进行阐述。示例代码均是在主函数中书写,因此部分案例省略了 C# 程序框架的部分内容。

    1.数据类型的转换

    /*
    	在 C# 语言中默认的整型是 int 类型,比 int 小的整形数据类型会自动转换为 int
    */
    byte number01 = 1;
    short number02 = 2;
    //类型自动提升为 int,想要赋值给 short 型需要强制类型转换
    short number03 = (short)(number01 + number02); //强制类型转换
    int number04 = number01 + number02;
    
    /*
    	遇到比 int 型更大的数据类型进行计算时,int 型会自动转换为相应类型
    	将占用字节数少的数据向占用字节数多的类型转换是一种显式转换,是自动进行的
    	将占用字节数多的数据向占用字节数少的类型转换是一种隐式转换,一般需要强制类型转换
    	int a3 = a1 + a2; 先将 a1 类型转换,使 a1,a2 具有相同的数据类型,然后再进行运算
    */
    int a1 = 1;
    long a2 = 2;
    long a3 = a1 + a2;
    
    int b1 = 1;
    float b2 = 1.0f;
    float b3 = b1 + b2;
    
    /*
    	快捷运算符,不做自动类型提升(常用的快捷运算符:+=、-=、*=、/=、%=、++、--)
    */
    byte b = 1;
    b = (byte)(b + 3); //类型自动提升
    b += 3; 
    
    /*
    	C# 语言中默认的浮点型是 double 类型。如果变使用单精度浮点型,需要在数值后面加上 f 或者 F 来表示
    */
    float c1 = 1.0f; //float c1 = 1.0; 报错:无法将 double 隐式转换为 float
    double c2 = 2.0;
    

    2.算术运算符的使用

    案例要求:使用 /% 运算符来取得数字 1234 中的千位、百位、十位、个位的值。

        class Program
        {
            static void Main(string[] args)
            {
                int number = 1234;
                Console.WriteLine("千位为:" + number / 1000);
                Console.WriteLine("百位为:" + number / 100 % 10);
                Console.WriteLine("十位为:" + number / 10 % 10);
                Console.WriteLine("个位为:" + number % 10);   
            }
        }
    

    3.赋值运算符的易错点

    案例要求:定义两个变量,并将两个变量的值交换后输出。

    class Program
    {
       static void Main(string[] args)
       {
           int a = 100;
           int b = 200;
           Console.WriteLine("交换前:");
           Console.WriteLine("a = " + a + ",b = " + b);
           int temp = a;
           a = b;
           b = temp;
           Console.WriteLine("交换后:");
           Console.WriteLine("a = " + a + ",b = " + b);
       }
    }
    

    方法拓展:

    //通过“加和再减”的方式实现
    class Program
    {
        static void Main(string[] args)
        {
            int a = 100;
            int b = 200;
            Console.WriteLine("交换前:");
            Console.WriteLine("a = " + a + ",b = " + b);
            a = a + b;
            b = a - b; //需要知道这里使用的 a 通过上面的赋值已经不再是 100
            a = a - b;
            Console.WriteLine("交换后:");
            Console.WriteLine("a = " + a + ",b = " + b);
        }
    }
    
    //同一个数如果用 2 次异或操作则数值保持不变 a == a ^ b ^ b;
    class Program
    {
        static void Main(string[] args)
        {
            int a = 100;
            int b = 200;
            Console.WriteLine("交换前:");
            Console.WriteLine("a = " + a + ",b = " + b);
            a = a ^ b;
            b = a ^ b;
            a = a ^ b;
            Console.WriteLine("交换后:");
            Console.WriteLine("a = " + a + ",b = " + b);
        }
    }
    
    运算符
    说明
    & 按位与。两个运算数都为 1,则整个表达式为 1,否则为 0;也可以对布尔型的值进行比较,相当于“与”运算,但不是短路运算
    | 按位或。两个运算数都为 0,则整个表达式为 0,否则为 1;也可以对布尔型的值进行比较,相当于“或”运算,但不是短路运算
    ~ 按位非,当被运算的值为 1 时,运算结果为 0;当被运算的值为 0 时,运算结果为 1。该操作符不能用于布尔型。对正整数取反,则在原来的数上加 1,然后取负数:对负整数取反,则在原来的数上加 1,然后取绝对值
    ^ 按位异或只有运算的两位不同结果才为 1,否则为 0
    << 左移。把运算符左边的操作数向左移动运算符右边指定的位数,右边因移动空岀的部分补 0
    >> 有符号右移。把运算符左边的操作数向右移动运算符右边指定的位数。如果是正值,左侧因移动空出的部分补 0;如果是负值,左侧因移动空出的部分补 1
    >>> 无符号右移。和 >> 的移动方式一样,只是不管正负,因移动空出的部分都补 0

    4.if-else 的使用

    案例要求:使用 if 语句判断从控制台输入的整数是否为偶数。

    //从控制台输入的值是字符串类型,因此需要将字符串类型的值转换成整数型
    //转换是通过“int.Parse(Console.ReadLine())”语句实现的
    class Program
    {
    	static void Main(string[] args)
    	{
    	    Console.WriteLine("请输入一个整数:");
    	    int num = int.Parse(Console.ReadLine());
    	    string msg = num + "不是偶数!";
    	    if (num % 2 == 0)
    	    {
    	        msg = num + "是偶数!";
    	    }
    	    Console.WriteLine(msg);
    	}
    }
    

    5.switch case 语句

    案例要求:使用 switch…case 语句根据学生的考试成绩来判断等级,如果成绩在 90 分以上是优秀;如果成绩为 80~90 分是良好;如果成绩为 60~80 分是及格,如果成绩在 60 分以下是不及格。

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请输入考生成绩(0~100):");
            int grade = int.Parse(Console.ReadLine());
            if (grade<0||grade>100)
            {
                grade = 0;
            }
            switch (grade / 10)
            {
                case 10:
                case 9:
                    Console.WriteLine("优秀");
                    break;
                case 8:
                    Console.WriteLine("良好");
                    break;
                case 7:
                case 6:
                    Console.WriteLine("及格");
                    break;
                default:
                    Console.WriteLine("不及格");
                    break;
            }
        }
    }
    

    6.for 循环的使用

    案例要求:打印九九乘法表。

    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 1; i < 10; i++)
            {
                for (int j = 1; j <= i; j++)
                {
                    Console.Write(i + "x" + j + "=" + i * j + "\t");
                }
                Console.WriteLine();
            }
        }
    }
    

    实现效果:
    在这里插入图片描述
    更新中。。。

    展开全文
  • C#练手之项目10-1之正义永不缺席

    千次阅读 2020-11-20 20:47:07
    C#实例练手之test10-1 ————2020/11/20 写作目的:相互学习交流,提供实例,练习C#,有啥问题,可以直接留言,也可以加我vx:poyeezy996. 目标题目: 1.参照P209例8.7进行实验,要求用到抽象...
    										C#实例练手之test10-1
    																				————2020/11/20
    

    写作目的:相互学习交流,提供实例,练习C#,有啥问题,可以直接留言,也可以加我vx:poyeezy996.

    目标题目:
    1.参照P209例8.7进行实验,要求用到抽象类以及抽象方法。
    2. 定义玩家类(Player)、枪类(Gun)。以及派生于玩家类的警察类(Police)
    和坏人类(Robber),派生于枪类的手枪类(Handgun)和机关枪类
    (MachineGun);
    3. 手枪类可以造成1点初始伤害值,并且发出的声音为“biubiu” 。机关枪类可
    以造成2点初始伤害值,发出的声音为“boomboom

    4. 警察类有初始20点血量,可以使用手枪对坏人射击,造成手枪的伤害值的伤害,
    也可以选择前进一步,使得手枪伤害值提高100%;坏人类有初始20点血量,可
    以使用机关枪对警察射击,造成机关枪的伤害值的伤害,也可以选择前进一步,
    使得机关枪伤害值提高50%。
    5. 在Main函数中循环坏人与警察进行选择判断,分别轮流输入数字进行操作。前
    进增加伤害:1,开枪造成伤害:2。
    6. 直至一方血量低于0,结束游戏。

    目标生成内容:在这里插入图片描述
    思路讲解
    这一个题目涉及到的知识点其实吧,很简单。
    1.抽象类以及抽象方法
    (首先来看看抽象类和抽象方法是什么呢)
    自己看书或者百度吧,记得抽象类不能实例化就行了。
    1.1基本语法
    1.1.1
    抽象类:

    abstarct class 类名{
    	//声明类成员
    }
    

    1.1.2
    抽象方法:

    abstract [修饰符] 返回值类型 方法名 ([形参列表];
    

    2.定义基类和派生类

    using System;
    
    namespace test10_1
    {
        public abstract class Player
        {
            public int hp;   //血量
            public abstract void forward();
        public Player(int hp) { this.hp = hp; }
        }
    
        class Police : Player
        {
            public override void forward()
            {
                Console.WriteLine("前进1步,伤害提升100%");    
            } 
            public Police(int hp=20) : base(hp) { }//定义初始值
        }
    
        class Robber : Player
        {   
            public override void forward()
            {
                Console.WriteLine("前进1步,伤害提升50%"); 
            }       
            public Robber(int hp=20) : base(hp) { }
        }
    
    
        abstract class Gun
        {
            public string voice;
            public double damage;
            public abstract void shoot();
            public Gun(string voice,double damage) { this.voice = voice;this.damage = damage; }
        }
    
        class Handgun:Gun
        {
            public override void shoot()
            {
                Console.Write("警察使用手枪向坏人射击。");
            }
            public Handgun(string voice="biu~biu", double damage=1) : base(voice,damage) { }
        }
        class Machinegun : Gun
        {
            public override void shoot()
            {
                Console.Write("坏人使用手枪向警察射击。");
            }
            public Machinegun(string voice="boom~boom", double damage=2) : base(voice,damage) { }
        }
    
    
    

    对于上面的代码,根据题目要求,基类有Player、Gun,派生类分别是Police、Robber;Handgun、Machinegun.
    要完成动作,前进和射击的功能,我们在基类中分别定义抽象方法forward、shoot,在派生类中,对抽象方法重写,并对属性给定默认值,接下来对后面的对象创建,我们就可以不用给定值了
    3.处理逻辑
    这里是带佬给出来的思路
    在这里插入图片描述
    图都有了,自己看呗,不会留言区见。
    于是我们就处理一下下面的逻辑问题。

      class testprogram
        {
            static void Main()
            {
                int i;
                int people=1;
                Police pc = new Police();
                Robber rb = new Robber();
                Handgun hg = new Handgun();
                Machinegun mg = new Machinegun();
                Console.WriteLine("警察共有"+pc.hp+"滴血,射击一次造成"+hg.damage+"伤害");
                Console.WriteLine("坏人共有" + rb.hp + "滴血,射击一次造成" + mg.damage + "伤害");
                Console.WriteLine("开始游戏:");
    			while (pc.hp > 0 && rb.hp > 0)
    			{
                    if (people % 2 != 0)
                    {
                        Console.Write("坏人选择操作:1:前进1步,伤害提高50%;2:射击,造成"+ mg.damage +"点伤害。请选择:");
                        i = Convert.ToInt32(Console.ReadLine());
                        switch (i)
                        {
                            case 1:
                                rb.forward();
                                mg.damage *= 1.5;
                                people += 1;
                                break;
                            case 2:
                                mg.shoot();
                                Console.WriteLine(mg.voice);
                                pc.hp -= (int)mg.damage;
                                if(pc.hp<=0){Console.WriteLine("警察死亡!");}
                                else{
                                Console.WriteLine("警察受到" + mg.damage + "点伤害,还剩" + pc.hp + "血");
                                }
                                people += 1;
                                break;
                        }
                    }
    
                    else if (people % 2 == 0)
                    {
                        Console.Write("警察选择操作:1:前进1步,伤害提高100%;2:射击,造成"+ hg.damage +"点伤害。请选择:");
                        i = Convert.ToInt32(Console.ReadLine());
                        switch (i)
                        {
                            case 1:
                                pc.forward();
                                hg.damage *= 2;
                                people += 1;
                                break;
                            case 2:
                                hg.shoot();
                                Console.WriteLine(hg.voice);
                                rb.hp -= (int)hg.damage;
                                if (rb.hp <= 0) { Console.WriteLine("坏人死亡!"); }
                                else { 
                                Console.WriteLine("坏人受到" + hg.damage + "点伤害,还剩" + rb.hp + "血");
                                }
                                people += 1;
                                break;
                        }
                    }   
                }
            Console.ReadLine();
            }
            
        }
    }
    
    

    ps:上面两行代码在一起才能运行哦
    嗯哼,首先定义一个i作为派生类在行动时的选择;people作为后面判定该谁进行选择用。
    直接看,while一个都不能死,死了就不玩了。
    if看到谁行动了
    switch看选择啥选择中,把伤害算一下,people要累加。单数时坏人,双数是jc
    于是代码就这样:你一枪我一枪的,演起来了电视桥段,最终正义或许回来迟,但是他永远不会缺席。
    在这里插入图片描述
    PS:我可真想把这玩意放到无限大.
    今天完。

    展开全文
  • 简单的c#小程序。使用滚动条或输入数字,调节RGB的数值,来改变相应的颜色,达到混合改变画板的颜色的目的,只是练手的程序,技术含量不大
  • 案例所涉及到的内容:文件读取,写入。图片的形变,切割,缝合。 项目的流程如下: 1.检索文件 2.修改图片的尺寸比例成3:2 3.按3:2比例分割图片成一块块正方形 ...5.按顺序名字把子图片合并完整的一张图 ...

    案例所涉及到的内容:文件读取,写入。图片的形变,切割,缝合。

    项目的流程如下:

    1.检索文件

    2.修改图片的尺寸比例成3:2

    3.按3:2比例分割图片成一块块正方形

    4.批量修改名字

    5.按顺序名字把子图片合并完整的一张图

     

     

    namespace ImageTool
    {
        class Program
        {
            private static string _fileNameWithoutExtension; //文件名
            private static string _fileExtension;//扩展名
            private static string _fileDirectory;//所属文件夹
            private static string _targetImagePath = null;//分割图片所属的文件路径
            private static string _imageSuffix; //设置图片后缀格式
    
            public static class Data
            {
                public const string jpg = ".jpg";
                public const string bmg = ".bmg";
                public const string png = ".png";
                public const string tiff = ".tiff";
    
                public const string sprit = "\\";
    
                private static string image = null;
    
                public static string Image
                {
                    get
                    {
                        if (image == null)
                        {
                            return image = ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000).ToString();
                        }
                        else
                        {
                            return image;
                        }
    
                    }
                }
    
            }
    
    
            enum StatusMessage
            {
                Null,
                Move,
                Unusual
            }
    
            static void MessageHandling(StatusMessage SM)
            {
                switch (SM)
                {
                    case StatusMessage.Null:
                        Console.WriteLine("程序未启动...");
                        break;
                    case StatusMessage.Move:
                        Console.WriteLine("程序运行中...");
                        break;
                    case StatusMessage.Unusual:
                        Console.WriteLine("出现异常...");
                        return;
                }
            }
    
            public Program() { }
    
            static void Main()
            {
                Program program = new Program();
    
                Console.WriteLine("输入修改图片的地址...");
                var inputImgPath = Console.ReadLine();
    
                string[] suffix = { ".exe" };
                ArrayList Lists = FileSearch(inputImgPath, suffix);
                Console.WriteLine("\n" + "检索到的文件列表如下: ");
                if (Lists.Count == 0) {
    
                    Console.WriteLine("文件列表为null");
                }
                for (int i = 0; i < Lists.Count; i++)
                {
                    Console.WriteLine("files[" + i + "]: "+Lists[i].ToString());
                }
                for (int i = 0; i < Lists.Count; i++)
                {
                    if (File.Exists(Lists[i].ToString()))
                    {
                        _fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(Lists[i].ToString());
                        _fileExtension = System.IO.Path.GetExtension(Lists[i].ToString());
                        _fileDirectory = System.IO.Path.GetDirectoryName(Lists[i].ToString());
    
                    }
                    else
                    {
                        Console.WriteLine("文件不存在...");
                        MessageHandling(StatusMessage.Unusual);
                        return;
                    }
                    Console.WriteLine("\n#####################################################################");
                    Console.WriteLine("开始对文件:[--“" + Lists[i].ToString() + "”--]进行处理####");
                    var inputChangImgPath = _fileDirectory + Data.sprit + Data.Image;
                    string ChangImgPath = program.ChangImageSize(inputChangImgPath, Data.jpg);
                    program.CroppingToScale(ChangImgPath, Program._imageSuffix,false);
                    program.ChangeFilesName(_targetImagePath);
                    program.CombineImages(_targetImagePath, _targetImagePath + Data.sprit + Data.Image +"_"+ _fileNameWithoutExtension, Program._imageSuffix);
                    initialise();
                }
    
                System.Diagnostics.Process.Start(inputImgPath);//处理完成后打开相应的文件夹
                Console.WriteLine("\n" + "---输入回车键退出程序---");
                Console.ReadLine();
    
            }
    
            public static void initialise() {
    
                _fileNameWithoutExtension = null;
                _fileExtension = null;
                _fileDirectory = null;
                _targetImagePath = null;
                _imageSuffix = null;
    
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="path">路径</param>
            /// <param name="exception">排除文件名</param>
            /// <returns></returns>
            public static ArrayList FileSearch(string path, string[] exception)
            {
                if (!Directory.Exists(path))
                {
                    Console.WriteLine("不存在文件...");
                    return null;
                }
    
                int j = 0;
                ArrayList mItem = new ArrayList();
                DirectoryInfo search = new DirectoryInfo(path);
                FileSystemInfo[] fsinfos = search.GetFileSystemInfos();
    
                foreach (FileSystemInfo fsinfo in fsinfos)
                {
                    if (!(fsinfo is DirectoryInfo))
                    {
                        for (int i = 0; i < exception.Length; i++)
                        {
                            if (fsinfo.Name.Contains(exception[i]) == false)
                            {
                                mItem.Add(fsinfo.FullName);
                                j++;
                            }
                        }
    
                    }
                    else
                    {
                        //这个用于检索当前文件夹下包含的所有子文件夹
                        //DirectoryInfo dtinfo = new DirectoryInfo(fsinfo.FullName);
                        //FileInfo[] f = dtinfo.GetFiles();
                        //foreach (FileInfo file in f)
                        //{
                        //    for (int i = 0; i < exception.Length; i++)
                        //    {
                        //        if (file.Name.Contains(exception[i]) == false)
                        //        {
    
                        //            mItem.Add(file.FullName);
                        //            j++;
                        //        }
                        //    }
                        //}
    
                    }
                }
    
                return mItem;
            }
    
            /// <summary>
            /// 修正图片比例,更改为3:2比例
            /// </summary>
            /// <param name="destPath">修正后图片生成地址</param>
            /// <param name="imageSuffix">图片格式</param>
            /// <returns></returns>
            public string ChangImageSize(string destPath, string imageSuffix = Data.png)
            {
                var srcPath = _fileDirectory + Data.sprit + _fileNameWithoutExtension + _fileExtension;
                Program._imageSuffix = imageSuffix;
                try
                {
                    Image inputImg = Image.FromFile(srcPath);
                    Console.WriteLine("\n" + "修正图片尺寸");
                    int imgWidth = inputImg.Width;
                    int imgHeight = inputImg.Height;
    
                    if (imgWidth < imgHeight)
                    {
                        Console.WriteLine("当前图像“imgWidth < imgHeight”,旋转为水平方向");
                        int heightAfter = (int)Math.Ceiling(imgHeight * 1.00);
                        int widthAfter = (int)Math.Ceiling(((heightAfter * 2) / 3) * 1.00);
                        int OffsetWidth = Math.Abs((widthAfter - imgWidth) / 2);
    
                        Bitmap newBmp = new Bitmap(heightAfter, widthAfter, PixelFormat.Format24bppRgb);
                        Graphics newBmpGraphics = Graphics.FromImage(newBmp);
                        newBmpGraphics.Clear(SystemColors.AppWorkspace);
    
                        Rectangle rect = new Rectangle(0, 0, imgHeight, imgWidth);
                        Rectangle rectangle = new Rectangle(0, OffsetWidth, imgHeight, imgWidth);
                        rectangle.Inflate(0, OffsetWidth);
                        inputImg.RotateFlip(RotateFlipType.Rotate90FlipNone);//图片旋转,与画布Graphics无关
                        newBmpGraphics.DrawImage(inputImg, rectangle, rect, GraphicsUnit.Pixel);
                        newBmpGraphics.Save();
    
                        var ChangFinishImagePath = destPath + _fileNameWithoutExtension + imageSuffix;
                        BitMapSave(newBmp, ChangFinishImagePath);
    
                        inputImg.Dispose();
                        newBmp.Dispose();
                        newBmpGraphics.Dispose();
    
                        Console.WriteLine("修正成功,图片地址另存为: " + ChangFinishImagePath);
                        return ChangFinishImagePath;
    
                    }else{
    
                        int widthAfter = (int)Math.Ceiling(imgWidth * 1.00);
                        int heightAfter = (int)Math.Ceiling(((widthAfter * 2) / 3) * 1.00);
                        int OffsetHeight = Math.Abs((heightAfter - imgHeight) / 2);
    
                        Bitmap newBmp = new Bitmap(widthAfter, heightAfter, PixelFormat.Format24bppRgb);
                        Graphics newBmpGraphics = Graphics.FromImage(newBmp);
                        newBmpGraphics.Clear(SystemColors.AppWorkspace);
    
                        Rectangle rect = new Rectangle(0, 0, imgWidth, imgHeight);
                        Rectangle rectangle = new Rectangle(0, OffsetHeight, imgWidth, imgHeight);
                        rectangle.Inflate(0, OffsetHeight);                   
                        newBmpGraphics.DrawImage(inputImg, rectangle, rect, GraphicsUnit.Pixel);
                        newBmpGraphics.Save();
    
                        var ChangFinishImagePath = destPath + _fileNameWithoutExtension + imageSuffix;
                        BitMapSave(newBmp, ChangFinishImagePath);
    
                        inputImg.Dispose();
                        newBmp.Dispose();
                        newBmpGraphics.Dispose();
    
                        Console.WriteLine("修正成功,图片地址为: " + ChangFinishImagePath);
                        return ChangFinishImagePath;
                    }
                }
                catch (OutOfMemoryException e)
                {
                    Console.WriteLine("该文件没有有效的图像格式", e);
                    MessageHandling(StatusMessage.Unusual);
                    return null;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    MessageHandling(StatusMessage.Unusual);
                    return null;
                }
    
            }
    
            /// <summary>
            /// 按比例分割图片
            /// </summary>
            /// <param name="inputImgPath">导入地址</param>
            /// <param name="imageSuffix">图片格式</param>
            /// <param name="Bool">是否删除源文件</param>
            /// <returns></returns>
            public string CroppingToScale(string inputImgPath, string imageSuffix = Data.png, bool Bool = true)
            {
    
                if (!File.Exists(inputImgPath))
                {
                    Console.WriteLine("修正后的图片找不到,文件不存在...");
                    MessageHandling(StatusMessage.Unusual);
                    return null;
                }
               
                // 装载要分隔的图片 
                Image inputImg = Image.FromFile(inputImgPath);
    
                int imgWidth = inputImg.Width;
                int imgHeight = inputImg.Height;
                int cropWidth = imgWidth / 3;
                int cropHeigth = imgHeight / 2;
    
                //---------------------------------------------------------------------- 
                ArrayList areaList = new ArrayList();
    
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append("<table cellpadding='0' cellspacing='0' border='[$border]'>");
                sb.Append(System.Environment.NewLine);
    
                int i = 0;
                int pointY = 0;
                for (int iHeight = 0; iHeight < 2; iHeight++)
                {
                    int pointX = 0;
                    sb.Append("<tr>");
                    sb.Append(System.Environment.NewLine);
                    for (int iWidth = 0; iWidth < 3; iWidth++)
                    {
                        string fileName = string.Format("<img src='http://localhost/File/{0}_{1}{2}'  />", _fileNameWithoutExtension, i, imageSuffix);
                        sb.Append("<td>" + fileName + "</td>");
                        sb.Append(System.Environment.NewLine);
                        string s = string.Format("{0};{1};{2};{3}", pointX, pointY, cropWidth, cropHeigth);
    
                        Rectangle rect = new Rectangle(pointX, pointY, cropWidth, cropHeigth);
                        areaList.Add(rect);
                        pointX += cropWidth;
                        i++;
                    }
                    pointY += cropHeigth;
                    sb.Append("</tr>");
                    sb.Append(System.Environment.NewLine);
                }
    
                sb.Append("</table>");
    
                Console.WriteLine("\n" + "检测是否存在子文件夹...");
    
                string fileSonName = System.IO.Path.GetDirectoryName(inputImgPath) + Data.sprit + Data.Image + Data.sprit + _fileNameWithoutExtension;
                _targetImagePath = fileSonName;
    
                if (Directory.Exists(fileSonName) == false)
                {
                    Console.WriteLine("文件夹不存在,创建中..");
                    Directory.CreateDirectory(fileSonName);
                }
                else
                {
                    Console.WriteLine("生成图片文件夹存在,清空已有数据..");
                    DirectoryInfo dirInfo = new DirectoryInfo(fileSonName);
                    FileInfo[] files = dirInfo.GetFiles();
    
                    foreach (FileInfo file in files)
                    {
                        file.Delete();
                        Console.WriteLine("删除数据的路径 : " + file.DirectoryName + Data.sprit + file.Name);
                    }
                    Console.WriteLine("删除完毕!!!");
                }
                Console.WriteLine("\n" + "开始切割图片...");
    
                for (int iLoop = 0; iLoop < areaList.Count; iLoop++)
                {
                    Rectangle rect = (Rectangle)areaList[iLoop];
                    string fileName = fileSonName + Data.sprit + iLoop.ToString() + imageSuffix;
    
                    Bitmap newBmp = new Bitmap(rect.Width, rect.Height, PixelFormat.Format24bppRgb);
                    Graphics newBmpGraphics = Graphics.FromImage(newBmp);
                    Rectangle rectangle = new Rectangle(0, 0, rect.Width, rect.Height);
                    newBmpGraphics.DrawImage(inputImg, rectangle, rect, GraphicsUnit.Pixel);
    
                    newBmpGraphics.Save();
                    BitMapSave(newBmp, fileName);
    
                    Console.WriteLine("图片生成路径: " + fileName);
                    newBmp.Dispose();
                    newBmpGraphics.Dispose();
                }
    
                inputImg.Dispose();
    
                if (Bool)
                {
                    File.Delete(inputImgPath);
                    Console.WriteLine("\n" + "修正图已被删除(***默认处理***)...,路径: " + inputImgPath);
                }
    
                string html = sb.ToString();
                Console.WriteLine("\n" + "Html(表): " + "\n" + html + "\n");
                return html;
            }
    
            /// <summary>
            /// 修改分割文件名字
            /// </summary>
            /// <param name="folderPath"></param>
            public void ChangeFilesName(string folderPath)
            {
                if (!Directory.Exists(folderPath)) {
                    MessageHandling(StatusMessage.Unusual);
                    return;
                }
                var files = new DirectoryInfo(folderPath).GetFiles();
                Console.WriteLine("进行图片名字批处理..." + "\n" + "读取到的总数: " + files.Length);
    
                if (files.Length == 0)
                {
                    Console.WriteLine("未读取到文件");
                    MessageHandling(StatusMessage.Unusual);
                    return;
                }
                    Console.WriteLine("开始修改... " + "\n\n" + "修改后名字: ");
                    int i = 0;
                    //文件名字处理在此修改
                    foreach (FileInfo file in files)
                    {
                        //string move_test = file.DirectoryName + Data.sprit + "New_image_" + Math.Abs(files.Length - int.Parse(file.Name.Remove(file.Name.IndexOf("."))));
                        //file.MoveTo(move_test + Data.png);
    
                        string move = file.DirectoryName + Data.sprit + "New_image_" + file.Name;
                        file.MoveTo(move);
                        Console.WriteLine("files[" + i + "]: " + move);
    
                        i++;
                    }
                    //int i = 0;
                    //while (i == files.Length)
                    //{
                    //    switch (i)
                    //    {
                    //        case 0:
                    //            files[i].MoveTo(files[i].DirectoryName + Data.sprit + "New_image_" + Math.Abs(files.Length - int.Parse(files[i].Name)));                            
                    //            break;
                    //        case 1:                            
                    //            files[i].MoveTo(files[i].DirectoryName + Data.sprit + "New_image_" + Math.Abs(files.Length - int.Parse(files[i].Name)));
                    //            break;
                    //        case 2:
                    //            files[i].MoveTo(files[i].DirectoryName + Data.sprit + "New_image_" + Math.Abs(files.Length - int.Parse(files[i].Name)));
                    //            break;
                    //        case 3:
                    //            files[i].MoveTo(files[i].DirectoryName + Data.sprit + "New_image_" + Math.Abs(files.Length - int.Parse(files[i].Name)));
                    //            break;
                    //        case 4:
                    //            files[i].MoveTo(files[i].DirectoryName + Data.sprit + "New_image_" + Math.Abs(files.Length - int.Parse(files[i].Name)));
                    //            break;
                    //        case 5:
                    //            files[i].MoveTo(files[i].DirectoryName + Data.sprit + "New_image_" + Math.Abs(files.Length - int.Parse(files[i].Name)));
                    //            break;
                    //    }
                    //    Console.WriteLine("Newfile: " + files[i].DirectoryName + Data.sprit + "New_image_" + Math.Abs(files.Length - int.Parse(files[i].Name)));
                    //    i++;
                    //}
                
    
            }
    
            /// <summary>
            /// 缝合图片,根据名字顺序
            /// </summary>
            /// <param name="folderPath">导入地址</param>
            /// <param name="toPath">导出图片地址</param>
            /// <param name="imageSuffix">图片格式</param>
            private void CombineImages(string folderPath, string toPath, string imageSuffix = Data.png)
            {
                if (!Directory.Exists(folderPath))
                {
                    MessageHandling(StatusMessage.Unusual);
                    return;
                }
                //var files = new DirectoryInfo(folderPath).GetFiles("*" + Data.png, SearchOption.TopDirectoryOnly);//目前检索到的文件只有图片,干脆全部获取
                var files = new DirectoryInfo(folderPath).GetFiles();
                if (files.Length == 0)
                {
                    Console.WriteLine("文件不存在...");
                    MessageHandling(StatusMessage.Unusual);
                }
                Console.WriteLine("\n" + "进行图片缝合..." + "\n" + "处理中...Biubiubiu...");
    
                var imgs = files.Select<FileInfo, Image>(f => Image.FromFile(f.FullName));
                var finalWidth = imgs.Max<Image>(img => img.Width * 3);
                var finalHeight = imgs.Max<Image>(img => img.Height * 2);
    
                var finalImg = new Bitmap(finalWidth, finalHeight);
                Graphics g = Graphics.FromImage(finalImg);
                g.Clear(SystemColors.AppWorkspace);
    
                var width = 0;
                var height = 0;
                for (int i = 0; i < files.Length; i++)
                {
    
                    Image img = Image.FromFile(files[i].FullName);
                    g.DrawImage(img, width, height);
                    width += img.Width;
    
                    bool res = (i == 2) ? true : false;
    
                    if (res)
                    {
                        width = 0;
                        height += img.Height;
                    }
    
                    img.Dispose();
                }
    
                var finalImage = toPath + imageSuffix;
                BitMapSave(finalImg, finalImage);
    
                finalImg.Dispose();
                g.Dispose();
    
                Console.WriteLine("文件已保存,地址: " + finalImage);
                Console.WriteLine("文件:[--" + _fileNameWithoutExtension + _fileExtension + "--]处理完毕!!!!");
    
            }
    
            /// <summary>
            /// 保存BitMap
            /// </summary>
            /// <param name="bmp"></param>
            /// <param name="path">保存路径</param>
            /// <param name="imageSuffix">文件后缀</param>
            public static void BitMapSave(Bitmap bmp, string path)
            {
    
                switch (_imageSuffix.ToLower())
                {
    
                    case ".bmg":
                        bmp.Save(path, ImageFormat.Bmp);
                        break;
                    case ".png":
                        bmp.Save(path, ImageFormat.Png);
                        break;
                    case ".jpg":
                    case ".jpeg":
                        bmp.Save(path, ImageFormat.Jpeg);
                        break;
                    case "gif":
                        bmp.Save(path, ImageFormat.Tiff);
                        break;
                }
    
            }
    
        }
    }
    

     

     

     

     

     

     

    展开全文
  • C# KTV项目 练手

    2017-12-21 23:15:52
    C# KTV项目 练手
  • C#课后练手

    2019-10-03 12:43:29
    做了一个三局两胜的猜拳游戏,顺便帮自己回忆下,也为了更加熟练的运用C#基本代码 1 int user = 0 ; 2 int computer = 0 ; 3 for (; ; ) 4 { 5 6 Console.WriteLine( " 请输入手势...

            猜拳(三局两胜)
    请输入您的手势:石头
    用户手势:石头      电脑手势:剪刀
    用户胜:1      电脑胜:0

    请输入您的手势:石头
    用户手势:石头      电脑手势:石头
    用户胜:1      电脑胜:0

    请输入您的手势:石头
    用户手势:石头      电脑手势:包袱
    用户胜:1      电脑胜:1

    请输入您的手势:石头
    用户手势:石头      电脑手势:剪刀
    用户胜:2      电脑胜:1
    用户胜利!!!

     

    做了一个三局两胜的猜拳游戏,顺便帮自己回忆下,也为了更加熟练的运用C#基本代码

     1             int user = 0;
     2             int computer = 0;
     3             for (; ; )
     4             {
     5 
     6                 Console.WriteLine("请输入手势:剪刀、石头、布");
     7                 string x = Console.ReadLine();
     8                 Random ran = new Random();
     9                 int i = ran.Next(0, 3);
    10 
    11                 int a;
    12                 string b;
    13                 //手势转换
    14                 if (x == "剪刀")
    15                 {
    16                     a = 0;
    17                 }
    18                 else if (x == "石头")
    19                 {
    20                     a = 1;
    21                 }
    22                 else
    23                 {
    24                     a = 2;
    25                 }
    26                 //随机数转换
    27                 if (i == 0)
    28                 {
    29                     b = "剪刀";
    30                 }
    31                 else if (i == 1)
    32                 {
    33                     b = "石头";
    34                 }
    35                 else
    36                 {
    37                     b = "";
    38                 }
    39 
    40                 //手势判断
    41                 if ((a == 0 && i == 0) || (a == 1 && i == 1) || (a == 2 && i == 2))
    42                 {
    43                     Console.WriteLine("人类手势:" + x + "\t电脑手势:" + "\0" + b);
    44                     Console.WriteLine("平局!");
    45                     Console.WriteLine();
    46                 }
    47                 else if ((a == 0 && i == 2) || (a == 1 && i == 0) || (a == 2 && i == 1))
    48                 {
    49                     Console.WriteLine("人类手势:" + x + "\t电脑手势:" + "\0" + b);
    50                     Console.WriteLine("人类胜出!");
    51                     Console.WriteLine();
    52                     user++;
    53                 }
    54                 else
    55                 {
    56                     Console.WriteLine("人类手势:" + x + "\t电脑手势:" + "\0" + b);
    57                     Console.WriteLine("电脑胜出!");
    58                     Console.WriteLine();
    59                     computer++;
    60                 }
    61 
    62                 Console.WriteLine();
    63 
    64                 if (user == 2)
    65                 {
    66                     Console.ForegroundColor = ConsoleColor.Red;
    67                     Console.WriteLine("人类胜利" + user + "" + "           " + "电脑胜利" + computer + "");
    68                     Console.WriteLine();
    69                     Console.WriteLine("         人类最终胜出!!!");
    70                     break;
    71                 }
    72                 else if (computer == 2)
    73                 {
    74                     Console.ForegroundColor = ConsoleColor.Red;
    75                     Console.WriteLine("人类胜利" + user + "" + "           " + "电脑胜利" + computer + "");
    76                     Console.WriteLine();
    77                     Console.WriteLine("         电脑最终胜出!!!");
    78                     break;
    79                 }
    80 
    81                 Console.WriteLine("-------------下一局-------------");
    82 
    83             }
    84             
    85             
    86             Console.ReadLine();

    写起来挺有意思的,感觉越来越好玩儿了

    转载于:https://www.cnblogs.com/TheJoker/p/7763279.html

    展开全文
  • C#五子棋练手小项目源码,控制台五子棋小游戏,包括棋盘绘图,棋子布局,键盘控制下棋子,分两个玩家,控制台显示,可以作为初学者练习代码功底
  • C#程序练手之一: 仿Windows记事本程序
  • C#程序练手之二: 纸牌游戏 游戏板上有16个位置,编号从0到15 0. 1. 2. 3 4. 5. 6. 7 8. 9. 10.11 12.13.14.15 2组8个数,初始化时,牌面朝下。当玩家单击一张牌时,这张牌翻过来。当玩家单击第二张牌时,第二...
  • 初学者用C#开发窗体程序的练手程序,贪吃蛇。其中用了些控件和C#语言的知识
  • c#.net淘宝客基础api练手日记

    千次阅读 2018-09-03 18:47:16
    下载地址: 最新淘宝客C#.NET基础API代码和SDK ...淘宝客基础api练手日记 第一步:SDK 下载 http://open.taobao.com/doc.htm?spm=a219a.7386653.0.0.ae9foK&amp;docId=101618&amp;docType...
  • 基于C#的一个小游戏
  • 运行于MonoDevelop:   void Start () { int number = 0; int[] array = {23, 45, 4, 4, 7, 0, 95, 27, 66}; ShowLog (array); // Bubble sort for (int i = 0; i &... f...
  • C#基础学习之练手

    2008-05-11 21:07:00
    using System;using System.Collections.Generic;using System.Text;namespace DerivedClass{ class DataBase { public int common; public DataBase() { common = 100; 
  • C#_把dataTable数据导出到XLS文件 ,练手
  • 卷积神经网络(CNN)是用于图像分类任务... 我们将在C#中训练深度学习模型,并使用该训练模型来预测手写数字。 我们将使用Keras.NET编写我们自己的模型并使用标准的MNIST数据集进行训练,该数据集包含来自美国人口...
  • 开始学习C#之路,起当然是小小计算器了,这个小软件,包含了很多C#的精华,比如TextBox只处理数字和加减符号等,TextBox设置多行并一直显示最下面,编译生成更改自己的图标等......总之,麻雀虽小,五脏俱全!非常...
  • 练手小项目 可能讲的不是很好,但是没关系,我把我自己写好的代码上传到此给需要的朋友玩一下。(可以实现两个窗口间互相通信) 界面如下: 服务器: 客户端: 代码如下: 服务器 using System; using System....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 489
精华内容 195
关键字:

c#练手

c# 订阅