程序设计实训封面及内容模板

时间:2024.3.31

郑州轻工业学院

实习报告

实习名称:程序设计与ACM竞赛实训

程序设计实训

    :计算机与通信工程学院

专业班级:计算机20##-01班

    :541407010152

    :张径天

实习地点:科学校区实验楼302

    :20##年7月


第一部分

扫雷游戏的设计与实现

一、实训目的

请注意格式:正文采用小四号字、单倍行距,其中的代码用五号字!注意分段,且每段首行缩进两个字!

1.掌握窗体设计步骤、窗体调用

2.学习Form窗体中控件的灵活使用,能基本理解所学代码的基本含义

3.会使用button、panel、label、textbox、menestrip等按钮,并会使用二维数组的定义与使用二维数组定义雷区,通过enable按钮控制器可使用性

4.  能通过Loction、size等控制界面的合理大方

5.  能使用imagebox、timer等控件的加入,并能通过属性按钮来完成所需要的结果

6.  自学制作过程中不会控件的使用。

二、实训内容

1.  通过一学期所学的C#知识来完成基本的可视化程序设计需求

2.  仿Windows系统扫雷,完善扫雷游戏:添加菜单(包含快捷键、热键等)、实现初级、中级、高级及自定义扫雷;添加扫雷英雄榜;实现各方块中标识周边雷数量的文字采用不同颜色的数字显示

三、程序开发操作步骤

说明:以下共分为4各部分来介绍,分别为:扫雷主界面、自定义窗体、请输入窗体、英雄榜窗体等.

主界面

1.    打开Microsoft Visual Studio 2008,选择c#编译环境,创建一个项目,使用Windows窗体应用程序,并命名为“扫雷_xxb”

2.    点击Form1,从text属性栏中的Form1改为扫雷,icon属性中加入mine.ico图片。再将Font属性改为 新宋体,9pt,加粗。并向其中添加一个timer1控件其属性中的Interval属性改为1000.添加一个imageList1控件,添加图片。

3.    按照如上设计分别加入menestrip控件,设计好菜单为:游戏(&G):新游戏、初级、中级、高级、自定义…、英雄榜…、退出;帮助(&H):游戏说明、

关于扫雷…、关于版权…等。按顺序先把前者属性栏中的ShowShortcutKeys属性设置为True,ShortcutKeys 分别设置为Ctrl+N、Ctrl+L、Ctrl+M、Ctrl+H、Ctrl+D、Ctrl+C、Ctrl+E;后者分别设置为Ctrl+I、Ctrl+F、Ctrl+B。

4.    向Form1中拖入一个menuStrip控件,Loction和size属性按上图设计,分别向其中加入1个button控件和2个label控件。设置label控件的Font属性为宋体,12pt,加粗,其中ForeColor设置为Red。并在buttion窗体的text设置为空,Image加入face.bmp图片。

5.    再向Form1窗体中拖入一个button控件,其Text属性改为 标示出雷,Font属性设置为新宋体,9pt,加粗。其中各个控件的位置是一定的。

6.  选中Form1在其属性事件中单击Load,添加如下代码:

private void Form1_Load(object sender, EventArgs e)   //Form1_Load,用于基本开始界面的设置

        {

            string path;   //定义字符串,用于存放“扫雷英雄榜.txt”的位置

            path = System.Windows.Forms.Application.StartupPath;    // bin路径

            if (!File.Exists(path + "\\扫雷英雄榜.txt"))   //if语句,主要是通过检测是否有扫雷英雄榜.txt,如果没有。。。

                File.Create(path + "\\扫雷英雄榜.txt");    //创建扫雷英雄榜.txt

            初级ToolStripMenuItem.Checked = true;   //使菜单中的初级可用

            Load_Mine();   //用于解决开始时单击任意按钮均胜利的问题

            GameInit();    //游戏初始化

            timer1.Enabled = true;   //开启时钟计时

        }

7.  设置button1按钮:在点击事件下加入如下代码:

private void button1_Click(object sender, EventArgs e)   //这是一个开始按钮,单击即开始游戏

        {

            button1.Image = Image.FromFile("face.bmp");   //用于控制开始按钮的图标,开始时位笑脸

            DelAllMines();   //删除所有的雷区控件(很重要,用于不让其改变等级时有参与)

            RestMine = MineNum;   //用于记录雷数,开始时剩余雷数为总雷数

CostTime = 0;   //用于记录从开始到现在游戏用时,开始为0

            label1.Text = CostTime.ToString();   //label1窗体中用于显示所用的时间

            GamesBegin();   //开始游戏

            GameInit();   //游戏初始化

            timer1.Enabled = true;   //触发计时器

        }

设置button2按钮:在点击事件下加入如下代码:

private void button2_Click(object sender, EventArgs e)   //显示所有的雷数

        {

            show();   //将地图中所有雷标识出来

        }

private void show()//将地图中所有雷标识出来

        {

            for (int i = 0; i < XNum; i++)

                for (int j = 0; j < YNum; j++)

                    if (Convert.ToInt16(Mines[i, j].Tag) == 1)

                    {

                        //==1时,代表这个位置是地雷

                        Mines[i, j].BackgroundImage = Image.FromFile("mine.bmp");

                    }

        }

8.   分别通过菜单栏中选项的单击添加如代码:

        private void 新游戏ToolStripMenuItem_Click(object sender, EventArgs e)    //新游戏按钮的定义

        {

            button1.Image = Image.FromFile("face.bmp");   //开始时,让button1按钮的Image设为face.bmp

            DelAllMines();   //删除所有的雷区控件(很重要,用于不让其改变等级时有参与)

            RestMine = MineNum;   //计数剩余的雷数

            CostTime = 0;   //计数所用时间

            label1.Text = CostTime.ToString();   //用于在开始界面显示所用的时间

            GamesBegin();   //开始游戏

            GameInit();//游戏初始化

            timer1.Enabled = true;   //触发计时器

        }

        private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)   //定义退出

        {

            Application.Exit();   //单击退出

        }

        private void 自定义ToolStripMenuItem_Click(object sender, EventArgs e)    //自定义按钮的定义

        {

            button1.Image = Image.FromFile("face.bmp");   //开始时,让button1按钮的Image设为face.bmp

            初级ToolStripMenuItem.Checked = false;   //初级按钮不可用

            中级ToolStripMenuItem.Checked = false;   //中级按钮不可用

            高级ToolStripMenuItem.Checked = false;   //高级按钮不可用

            自定义ToolStripMenuItem.Checked = true;   //自定义按钮可用

            Form zdy = new Form2();   //通过定义调用新的Form窗体

            zdy.ShowDialog();   //显示自定义窗体

            if (zdy.DialogResult == DialogResult.OK)   //如果在自定义窗体中单击 确定

                zdyGames();   //开始自定义游戏

        }

        private void zdyGames()   //自定义游戏

        {

            DelAllMines();   //删除残余雷片

            XNum = zdyXNum;   //定义雷区的列数

            YNum = zdyYNum;   //定义雷区的行数

            MineNum = zdyMineNum;   //定义总雷数

            label1.Text = CostTime.ToString();   //用于在开始界面显示所用的时间

            GamesBegin();   //开始游戏

            GameInit();//游戏初始化

            timer1.Enabled = true;   //触发计时器

        }

        private void 关于扫雷ToolStripMenuItem1_Click(object sender, EventArgs e)

        {

            MessageBox.Show("游戏简介:\r\n\r\n------------------------------------------\r\n\r\n扫雷是单人计算机游戏,游戏的用户界面十分友好!\r\n\r\n------------------------------------------\r\n\r\n当游戏方格组成的战场构成开始时,计算机将固定的地雷数随机的放到战场的方格。\r\n\r\n------------------------------------------\r\n\r\n此游戏还允许玩家指定雷区中的地雷数,让您尽情玩到底!!\r\n\r\n------------------------------------------\r\n\r\n    据有关调查显示:此游戏具有开发智力少儿的功能!!  ", " 说 明:");   //显示游戏简介

        }

        private void 关于游戏ToolStripMenuItem_Click(object sender, EventArgs e)

        {

            MessageBox.Show("关于版权:\r\n\r\n本游戏是防Micosoft软件扫雷游戏 由\r\n\r\n    郑州轻工业学院 \r\n    计算机与通信工程学院\r\n    计算机科学与技术14-01班\r\n    李艳祥\r\n\r\n改编用于C#作业使用!特此声明!\r\n\r\n  辅导老师:李灿林\r\n\r\n                           谢谢合作!!\r\n\r\n    如有雷同,纯属巧合", "版权声明:");   //显示游戏版本及版权说明

        }

        private void 关于扫雷ToolStripMenuItem_Click(object sender, EventArgs e)

        {

            MessageBox.Show("游戏说明:\r\n\r\n  ▲在“游戏”菜单上,单击“开局”;\r\n  ▲要启动计时器,请单击游戏区中的任何方块;\r\n\r\n注意:\r\n\r\n  ▲ 单击就可以揭开方块,如果揭开的是地雷,您便输掉游戏;\r\n  ▲ 如果方块上出现数字,则表示在它周围的八个方块中共有多少颗地雷(0-8)如有都可将用不同的图片标示;\r\n  ▲ 要标记您认为可能有地雷的方块,请右键单击它;\r\n  ▲ 游戏区包括菜单、雷区、地雷计数器、计时器和开始按钮,请按游戏规则游戏!\r\n  ▲本游戏的英雄榜是记录游戏者的成绩使用,因能力有限仅支持初中高级的游戏记录。并设置了重置功能,方便玩家。\r\n\r\n   谢谢您对本游戏的支持 小谢 祝 您游戏愉快!", "游戏说明:");   //游戏的使用说明,简介游戏使用问题

        }

        private void 扫雷英雄榜ToolStripMenuItem_Click(object sender, EventArgs e)

        {

            Form herof = new Form3();   //定义新的窗体,通过关联调用

            herof.Show();   //显示扫雷英雄棒的窗体

        }

       private bool IsInMineArea(int row, int col)   //判断是否已出雷区

        {

            return (row >= 0 && row < XNum && col >= 0 && col < YNum);   //返回true or false

        }

        private void button1_Click(object sender, EventArgs e)   //这是一个开始按钮,单击即开始游戏

        {

            button1.Image = Image.FromFile("face.bmp");   //用于控制开始按钮的图标,开始时位笑脸

            DelAllMines();   //删除所有的雷区控件(很重要,用于不让其改变等级时有参与)

            RestMine = MineNum;   //用于记录雷数,开始时剩余雷数为总雷数

            CostTime = 0;   //用于记录从开始到现在游戏用时,开始为0

            label1.Text = CostTime.ToString();   //label1窗体中用于显示所用的时间

            GamesBegin();   //开始游戏

            GameInit();   //游戏初始化

            timer1.Enabled = true;   //触发计时器

        }

        private void DelAllMines()   //删除所有的雷区

        {

            for (int i = 0; i < XNum; i++)

                for (int j = 0; j < YNum; j++)   //二维数组逐个删除

                {

                    Button n = new Button();   //定义一个新的button

                    n = (Button)Mines[i,j];   //强制类型转换

                    this.Controls.Remove(Mines[i, j]);   //删除所指雷区

                }

        }

        private void GamesBegin()   //用于开始游戏,主要是定义雷区

        {

            Turn = new int[XNum, YNum];   //定义新的二维数组

            Mines = new Button[XNum, YNum];   //定义按钮

            for (int x = 0; x < XNum; x++)

                for (int y = 0; y < YNum; y++)   //通过二维数组,逐个定义初始化button按钮

                {

                    Mines[x, y] = new Button();

                    this.Controls.Add(Mines[x, y]);   //增加新按钮

                    Mines[x, y].Left = 10 + MineWidth * x;   //定义雷区开始在Form窗体中的左边界

                    Mines[x, y].Top = 65 + MineWidth * y;   //定义雷区开始在Form窗体中的上边界

                    Mines[x, y].Width = MineWidth;   //定义雷块的宽度

                    Mines[x, y].Height = MineWidth;   //定义雷块的高度

                    Mines[x, y].Font = new Font("宋体", 10.5F, FontStyle.Bold, GraphicsUnit.Point, ((byte)(134)));   //定义字体

                    Mines[x, y].BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;   //定义backgroundimageLayout

                    Mines[x, y].Name = "Mines" + (x + y * XNum).ToString();   //定义雷区的名字

                    Mines[x, y].MouseUp += new MouseEventHandler(bt_MouseUp);   //定义单击事件

                    Mines[x, y].Visible = true;   //控制Mines按钮的可见

                }

            detform();

        }

        private void Load_Mine()   //这个与上面的基本相同,主要是了解决在开始时单击人一个按钮均会胜利的问题,一下不做解释。

        {

            Turn = new int[XNum, YNum];

            Mines = new Button[XNum, YNum];

            for (int x = 0; x < XNum; x++)

                for (int y = 0; y < YNum; y++)

                {

                    Mines[x, y] = new Button();

                    this.Controls.Add(Mines[x, y]);

                    Mines[x, y].Left = 10 + MineWidth * x;

                    Mines[x, y].Top = 65 + MineWidth * y;

                    Mines[x, y].Width = MineWidth;

                    Mines[x, y].Height = MineWidth;

                    Mines[x, y].Font = new Font("宋体", 10.5F, FontStyle.Bold, GraphicsUnit.Point, ((byte)(134)));

                    Mines[x, y].BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;

                    Mines[x, y].Name = "Mines" + (x + y * XNum).ToString();

                    Mines[x, y].MouseUp += new MouseEventHandler(bt_MouseUp);

                    Mines[x, y].Visible = true;

                }

        }

        private void detform()   //决定form1的整体框架

        {

            button1.Location = new Point( -10 + XNum * MineWidth/2 , -1 );   //控制form1中的button1按钮开始的位置

            button2.Location = new Point(-25 + XNum * MineWidth / 2, 65 + YNum * MineWidth);   ////控制form1中的button2按钮开始的位置

            panel1.Size = new Size(30 + MineWidth * XNum, 35);   //控制panel1的大小

            label2.Location = new Point(XNum * MineWidth - 30, 7);   //控制label2的位置

            Form1.ActiveForm.Width = 30 + MineWidth * XNum;   //用于控制form窗体的宽度

            Form1.ActiveForm.Height = 130 + MineWidth * YNum;   //用于控制form窗体的高度

        }

        private void GameInit()  //游戏初始化

        {

            RestMine = MineNum;

            label1.Text = RestMine.ToString();

            for (int x = 0; x < XNum; x++)

                for (int y = 0; y < YNum; y++)

                {

                    Mines[x, y].Text = "";

                    Mines[x, y].Visible = true;

                    Mines[x, y].Enabled = true;

                    Mines[x, y].Tag = null;

                    Mines[x, y].BackgroundImage = null;

                    Turn[x, y] = 0;        //刚开始都未插旗、未表示为雷

                }

            LayMines();

        }

        private void timer1_Tick(object sender, EventArgs e)   //定义计时器

        {

            CostTime++;

            label2.Text = CostTime.ToString();

        }

        private void bt_MouseUp(object sender, MouseEventArgs e)    //这里处理事件方法

        {

            String btName;

            Button bClick = (Button)sender;   //将被击的按钮赋给定义的bClick变量

            btName = bClick.Name;   //获取按钮的Name

            int n = Convert.ToInt16(btName.Substring(5));

            int x = n % XNum;

            int y = n / XNum;

            //通过按钮Name属性来判断是哪个Button被点击,并执行相应的操作

            switch (e.Button)

            {

                case MouseButtons.Left:

                    if (Convert.ToInt16(Mines[x, y].Tag) != 1)

                    {

                        detpicture(GetAroundNum(x, y), x, y);

                        Mines[x, y].Enabled = false;

                        ExpandMines(x, y);

                        if (Victory())

                        {

                            // 判断是否胜利,是则将地图中所有雷标识出来

                            show();

                            MessageBox.Show("恭喜您,胜利啦!!!", "游戏结束");

                            Form v = new Form4();

                            v.ShowDialog();

                            timer1.Enabled = false;//停止计时

                            // Endsgames();

                        }

                    }

                    else

                    {

                        Mines[x, y].BackgroundImage = Image.FromFile("mine1.bmp");

                        button1.Image = Image.FromFile("face1.jpg");

                        MessageBox.Show("真的很遗憾,您失败啦!!!", "游戏结束");                      

                        timer1.Enabled = false;//停止计时

                        Endall();

                    }

                    break;

                case MouseButtons.Right:

                    Mines[x, y].BackgroundImage = Image.FromFile("flag.bmp");

                    if (Turn[x, y] == 1)//表示这个位置插上红旗

                    {

                        Turn[x, y] = 0;//取消红旗,表示这个位置没有翻开

                        RestMine++;

                        Mines[x, y].BackgroundImage = null;

                    }

                    else

                    {

                        Turn[x, y] = 1;//表示这个位置插上红旗

                        RestMine--;

                    }

                    label1.Text = RestMine.ToString();

                    if (Victory())

                    {

                        MessageBox.Show("恭喜您,胜利啦!!!", "游戏结束");

                        Form vic = new Form4();

                        vic.ShowDialog();

                        timer1.Enabled = false;//停止计时

                    }

                    break;

            }

        }

        private void Endall()

        {

            for (int i = 0; i < XNum; i++)

                for (int j = 0; j < YNum; j++)

                {

                    Mines[i, j].Enabled = false;

                }

        }

        private void LayMines()   //布雷

        {

            int x, y;

            Random s = new Random();

            //取随机数

            for (int i = 0; i < MineNum; )

            {

                //取随机数

                x = s.Next(XNum);     //取随机数,返回一个小于所指定最大值的非负随机数

                y = s.Next(YNum);

                if (Convert.ToInt16(Mines[x, y].Tag) != 1)

                {

                    //==1时,代表这个位置是地雷

                    Mines[x, y].Tag = 1;//修改属性为雷

                    //Mines[x, y].Text = "u";

                    i++;

                }

            }

            label1.Text = MineNum.ToString();

            CostTime = 0;

            label2.Text = StartTime.ToString();

        }

        private void detpicture(int n, int i, int j)   //用于调用不同的图片显示所单击按钮周围所剩的雷数

        {

            switch (n)

            {

                case 1:

                    {

                        Mines[i, j].BackgroundImage = Image.FromFile("1.PNG");

                        break;

                    }

                case 2:

                    {

                        Mines[i, j].BackgroundImage = Image.FromFile("2.PNG");

                        break;

                    }

                case 3:

                    {

                        Mines[i, j].BackgroundImage = Image.FromFile("3.PNG");

                        break;

                    }

                case 4:

                    {

                        Mines[i, j].BackgroundImage = Image.FromFile("4.PNG");

                        break;

                    }

                case 5:

                    {

                        Mines[i, j].BackgroundImage = Image.FromFile("5.PNG");

                        break;

                    }

                case 6:

                    {

                        Mines[i, j].BackgroundImage = Image.FromFile("6.PNG");

                        break;

                    }

                case 7:

                    {

                        Mines[i, j].BackgroundImage = Image.FromFile("7.PNG");

                        break;

                    }

                case 8:

                    {

                        Mines[i, j].BackgroundImage = Image.FromFile("8.PNG");

                        break;

                    }

            }

        }

        private int GetAroundNum(int row, int col)   //用于获取所单击按钮周围8个雷块中所剩的雷数

        {

            int i, j;

            int around = 0;   //定义所生的雷数,开始为0

            int minRow = (row == 0) ? 0 : row - 1;

            int maxRow = row + 2;

            int minCol = (col == 0) ? 0 : col - 1;

            int maxCol = col + 2;

            for (i = minRow; i < maxRow; i++)

            {

                for (j = minCol; j < maxCol; j++)     //[row,col]处没有雷

                {

                    if (!IsInMineArea(i, j))   //判断是否在扫雷区域

                        continue;

                    if (Convert.ToInt16(Mines[i, j].Tag) == 1) around++;

                }

            }

            return around;   //返回所生的雷数

        }

        private void ExpandMines(int row, int col)

        {

            int i, j;

            int minRow = (row == 0) ? 0 : row - 1;

            int maxRow = row + 2;

            int minCol = (col == 0) ? 0 : col - 1;

            int maxCol = col + 2;

            int around = GetAroundNum(row, col);   //对周围一个雷都没有的空白区域拓展

            if (around == 0)

            {

                Mines[row, col].Enabled = false;

                for (i = minRow; i < maxRow; i++)

                {

                    for (j = minCol; j < maxCol; j++)

                    {

                        //对于周围可以拓展的区域进行的规拓展         

                        if (!IsInMineArea(i, j)) continue;

                        if (!(i == row && j == col) && Mines[i, j].Enabled != false)   //&& Convert.ToInt16(Mines[i,j].Tag)!= 1

                        {

                            ExpandMines(i, j);

                        }

                        Mines[i, j].Enabled = false;   //周围无雷的区域按钮无效

                        detpicture(GetAroundNum(i, j), i, j);

                    }

                }

            }

        }

        private bool Victory()   // 检测是否胜利

        {

            for (int i = 0; i < XNum; i++)

                for (int j = 0; j < YNum; j++)

                {

                    //没翻开且未标示,则未成功

                    if (Mines[i, j].Enabled == true && Turn[i, j] != 1)

                        return false;

                    //不是雷却误标示为雷,则也未成功

                    if (Convert.ToInt16(Mines[i, j].Tag) != 1 && Turn[i, j] == 1)

                        return false;

                }

            return true;

        }

并定义如下变量:

        private Button[,] Mines;   //定义一个 二维动态数组 用于显示雷区

        private int XNum = 9;   //初始化累的列数(即为:初级时的行列数)

        private int YNum = 9;   //初始化雷的行数

        public static int zdyXNum;   //用于自定义中的列数

        public static int zdyYNum;   //用于自定义中的行数

        private int MineNum = 10;   //初始化雷的总数

        public static int zdyMineNum;   //用于记录自定义中的雷数

        private int[,] Turn;   //用二维数组赋值:-1 表示这个位置已经翻开;0 表示这个位置没有翻开;1 表示这个位置插上红旗;

        public static int CostTime = 0;   //计量所用的时间

        private int StartTime = 0;   //初始化时间

        private int RestMine = 10;   //用于改变等级时载入剩余雷数

        private int MineWidth = 20;   // 控制雷块的大小

自定义窗体:

1.      通过单击项目,添加Windows窗体,添加一个Windows窗体,命名为Form2(可能程序中有点问题,因为我改过的),把其text属性改为:自定义. . .,并在icon中添加图片。

2.      添加一个groupbox窗体,把其text属性改为:请自定义难度. . . ,在其中添加3个label控件和3个textbox控件,按如图所示布局,再添加2个button按钮,分别把其属性改为:确定、取消。

3.      在Form1的Load属性中添加如下代码:

        private void Form2_Load(object sender, EventArgs e)

        {

            textBox1.Text = "";

            textBox2.Text = "";

            textBox3.Text = "";

        }

通过button1和button2按钮的点击属性添加如下代码:

        private void button1_Click(object sender, EventArgs e)

        {

            if (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == "")

            {

                MessageBox.Show("不要激动!请输入完整!!", "提示", MessageBoxButtons.OK);

                return;

            }

            int h, w, m;

            h = Convert.ToInt16(textBox1.Text);

            w = Convert.ToInt16(textBox2.Text);

            m = Convert.ToInt16(textBox3.Text);

            if (m > h * w)

            {

                MessageBox.Show("雷量太大,请重新输入!", "提示", MessageBoxButtons.OK);

                return;

            }

            if (h < 9 || h > 24 || w < 9 || w > 40 || m < 10 || m > 668)

            {

                MessageBox.Show("系统错误,请按要求填写!谢谢!!", "提示", MessageBoxButtons.OK);

                return;

            }

            扫雷_xxb.Form1.zdyXNum = w;

            扫雷_xxb.Form1.zdyYNum = h;

            扫雷_xxb.Form1.zdyMineNum = m;

            this.Close();

            DialogResult = DialogResult.OK;

        }

        private void button2_Click(object sender, EventArgs e)

        {

            this.Close();

            DialogResult = DialogResult.Cancel;

        }

英雄榜窗体:

同上添加Form3窗体,改变其中的Image和text属性,设计好其大小:

在From3中添加label,textbox,button按钮各一个。在Form3的Load的事件中添加如下代码:

private void Form3_Load(object sender, EventArgs e)

        {

            string path1, mr1 = "名字\t\t成绩\r\n", mystr1 = "";

            path1 = System.Windows.Forms.Application.StartupPath;

            FileStream fs1 = File.OpenRead(path1 + "\\扫雷英雄榜.txt");

            StreamReader sr1 = new StreamReader(fs1);

            fs1.Seek(0, SeekOrigin.Begin);

            while (sr1.Peek() > -1)

            {

                mystr1 += sr1.ReadLine() + "\t\t";

                mystr1 += sr1.ReadLine() + "\r\n";

            }

            sr1.Close();

            fs1.Close();

            textBox1.Text = mr1 + mystr1;

        }

在button1_click事件中添加如下代码:

        private void button2_Click(object sender, EventArgs e)

        {

            this.Close();

        }

请输入窗体:

1.      添加窗体Form4,如图改变Icon属性和text属性,在分别添加一个label控件,一个textbox控件和一个button控件,把label的text改为:人外有人,天外有天。兄弟,输入你的尊姓大名吧button1的text属性改为 确定。并在picturebox属性中添加图片 校园。

2.      在button1_Click事件下添加如下代码:

       private void button1_Click(object sender, EventArgs e)

        {

            string path = System.Windows.Forms.Application.StartupPath; // bin路径

            string name;

            name = textBox1.Text;

            if (name == "")

            {

                this.Close();

                return;

            }

            string  mystr = "";//mr = "名字\t\t成绩\r\n",

            path = System.Windows.Forms.Application.StartupPath; // bin路径

            FileStream fs = File.OpenRead(path + "\\扫雷英雄榜.txt");

            StreamReader sr = new StreamReader(fs);

            fs.Seek(0, SeekOrigin.Begin);

            while (sr.Peek() > -1)

            {

                mystr += sr.ReadLine() + "\t\t";

                mystr += sr.ReadLine();

            }

            sr.Close();

            fs.Close();

            mystr += name + "\r\n" + 扫雷_xxb.Form1.CostTime.ToString() + "\r\n";

            FileStream fsa = File.OpenWrite(path + "\\扫雷英雄榜.txt");

            StreamWriter sw = new StreamWriter(fsa);

            sw.WriteLine(mystr);

            sw.Close();

            fsa.Close();

            this.Close();

        }

四、程序运行结果与分析

1. 单机游戏的运行结果如图:

QQ截图20150717085719               

          

五、实训心得

本次在做C#扫雷的过程中使我明白了,只要努力的不断接受新知识才能适应时代的发展,才能掌握更多的知识去迎接新的挑战。

从接到C#作业的那一刻,到现在我成扫雷的完整版的整个过程中自己遇到啦很多的困难,也不止一次的向老师,同学们求助,在此表示感谢!!谢谢他们对我的支持。

在第一次的考虑雷区的重载问题,即队已经定一定二维数组的在此初始化,经过向老师求助,明白只要通过 this.Controls.Remove(Mines[i, j]);,从界面上删掉在初级时加进来的雷方块控件。

       当然,在其中还有很多的问题,如怎么调用不同的窗体,怎么在程序的运行过程中改变图片,如何通过Loction、Size、ActiveForm等来控制所需控件在Form窗体中的位置,大小,和控制Form控件的大小。

       总之:不经过实践就不知道自己有多少东西不会,自己有多少东西需要继续学习,相信我会继续努力,继续前行,继续在未知中求索。


第二部分

学生成绩管理信息系统的设计与实现

一、实训目的

二、实训内容

三、数据库设计

四、程序开发操作步骤

五、程序运行结果与分析

六、实训心得

更多相关推荐:
设计报告封面

课程设计报告题目高校助学金借贷系统课程名称工程项目实践院部名称龙蟠学院专业计算机科学与技术班级M11计算机科学与技术II学生姓名学号课程设计地点校内课程设计学时8周指导教师金陵科技学院教务处制【注:根据课程设计…

专题报告封面设计模板

专题报告项目名称课程名称班级姓名学号教师信息工程学院计算机系

设计报告封面格式

第一届交通设计大赛学院编号题目序号二一四年五月

设计报告封皮

模拟电子技术课程设计报告题目学生姓名1学号学生姓名2学号学生姓名3学号专业学院设计时间

实习报告封面模板、要求范例

内蒙古科技大学经济管理学院公共事业管理专业实习报告(论文)撰写与装订规范1、实习报告主要部分(1)摘要和关键词摘要应概括实习报告的主要内容和成果,摘要200字左右、关键词3~5个。目录按三级标题编写,即1……、…

课程设计报告模板(带新封皮的)

齐鲁理工学院课程设计说明书论文题目课程名称二级学院专业班级学生姓名学号设计地点指导教师设计起止时间年月日至年月日目录四号仿宋GB2312加粗居中空一行一设计任务与要求宋体小四15倍行距2二题目分析或内容摘要2三...

图书封面设计文案经典模版

封面设计文案

南京师范大学毕业设计(论文)封面模板

南京师范大学毕业设计论文题目学院专业姓名学号指导教师20xx届论学院南京师范大学教务处制1目录黑体小四目录中的正文采用左右分散对齐标题中间与页码间以联结1导论章黑体小四标题号与标题间不加点空一格12企业内部信息...

自查报告封面字号、字体、及内页制作要求

学校二O一四年自查报告安岳县学校二O一四年十二月二十五日1公文字体格式要求体实践中为了美观也有不少正式公文将标题排成二号小标宋体或者将除第一二层标题外一律使用三号仿宋字体公文中的标题第一层标题用三号黑体第二层用...

设计性实验报告封面

太原师范学院设计性实验报告题目Zn和Mg混合液各组分含量的测定课程名称分析化学实验姓名陈娟学号20xx122233系别化学系专业应用化学班级114班指导教师职称李省云实验学期20xx至20xx学年第一学期Zn2...

实验报告封面格式及文档参考模版

实验报告封面格式及文档参考模版计算机科学与技术学院200200学年第学期操作系统实验报告题目所选五个题目都写上班级学号姓名教师成绩以下内容每个实验一份共三份1题目分析11设计目的12设计内容13相关知识概述2实...

20xx报告要求+封面模板

技术总结报告要求封面格式见下图摘要简述本题目的概况完成的任务达到的技术水平有何特色和创新点中文200字以内关键词23个一设计任务即题目的要求二方案论证最少要论证23个可行的方案进行比较选择其中的一个说明原因给出...

报告封面设计模板(38篇)