打砖块游戏课程设计报告

目  录

第1章 程序设计专题目的与要求............................................................................... 1

1.1 程序设计目的........................................................................................................... 1

1.2 程序设计的实验环境............................................................................................... 1

1.3 程序设计的预备知识............................................................................................... 1

1.4 程序设计要求........................................................................................................... 1

第2章 程序设计内容...................................................................................................... 2

2.1概要设计.................................................................................................................... 2

2.2程序整体设计说明.................................................................................................... 2

2.3程序部分源代码及注释............................................................................................ 8

2.4测试结果.................................................................................................................... 12

第3章 程序设计总结...................................................................................................... 13

参考文献................................................................................................................................ 14

第1章    程序设计目的与要求

1.1 程序设计目的

《C#.Net程序设计》是计算机科学与技术专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是软件技术专业学生学习完《C#.Net程序设计》课程后,进行的一次全面的综合训练,C#.Net程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。

1.2 程序设计的实验环境

硬件要求能运行Windows xp操作系统的微机系统。C#.Net程序设计语言及相应的集成开发环境visual studio.net。

1.3 程序设计的预备知识

熟悉c#语言及visual studio.net集成开发环境。

1.4 程序设计要求

按程序设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握c#.net2003的基本技能和面向对象的概念和方法;了解windows编程。同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。

第2章    程序设计内容

2.1程序设计题目

打砖块游戏:作为我们一款熟知的游戏我想大家都不陌生吧,就是通过挡板把小球挡回,不让小球落地,直到打光所有砖块为止,游戏过关进入更难得模式小球速度更快,砖块组成的图案发生改变,是一个很有趣味的小游戏。

2.2程序整体设计说明

2.2.1程序设计内容

  1. 需求分析

       本系统为一个用C#实现的为我们所熟悉的简单的打砖块游戏,该系统的具体功能如下:

1)   能简便的开始游戏,游戏中的功能与日常我们所熟悉的游戏的功能一致 ,直到砖块全部打光过关和在砖块打光之前机会用完游戏结束功能;

2)   当游戏结束时会自动弹出消息框提示本关所获得得分数;

3)   当过关时会出现提示图片,点击进入下一关,下一关的方块位置和所组成的形状会发生改变

   2   设计环境

   本程序选择Visual Studio 2008作为实验环境。

3.  程序设计内容和思路

1)   游戏设计游戏开始时,小球会停在挡板正中间,而且此时小球可以随着挡板左右自由移动,当按下空格键小球弹出,并在程序设定的区域中不停碰撞反弹。

2)   当小球碰撞到墙壁、挡板、和砖块的时候,均以相同的速度反弹,并且砖块被碰撞后会以相同的速度反弹,并且当砖块被碰撞后会消失。

3)   挡板可以左右移动以接住小球,若超过三次没有接住,则游戏结束,按退出键退出,当所有砖块全部打光时则出现进入下一关的提示框,点击进入下一关。

2.2.1.1  程序中所用类说明

根据设计思路,可以为系统设计三个类,实现小球的类RussiaBlock继承Object类,主窗体类MainForm类,设置窗体类SettingForm类。

using System;

using System.Collections.Generic;

using System.Text;

using System.Drawing;

namespace Arkanoid

{

    class DisposeDAO

    {

        /// <summary>

        /// 处理球碰到砖块后弹的方向(上下)

        /// </summary>

        /// <param name="bx">砖的X坐标</param>

        /// <param name="by">砖的Y坐标</param>

        /// <param name="bw">砖的水平长度</param>

        /// <param name="bh">砖的高度</param>

        /// <param name="qx">球的X坐标</param>

        /// <param name="qy">球的Y坐标</param>

        /// <param name="qr">球的直径</param>

        /// <returns>返回string类型值</returns>

        public static string DisposeTopDown(int bx, int by, int bw, int bh, int qx, int qy, int qr)

        {

            string Yfangxiang = "";

            int f = 0;  //方向

            if (Math.Abs(by - (qy + qr)) <= 2)

            {

                f = 1;  //从上碰撞到球

            }

            else if (Math.Abs(qy - (by + bh)) <= 2)

            {

                f = 2;  //从下碰撞到球

            }

            if (f == 1)

            {

                Yfangxiang = "YTop";

            }

            else if (f == 2)

            {

                Yfangxiang = "YDown";

            }

            return Yfangxiang;

        }

        /// <summary>

        /// 处理球碰到砖块后弹的方向(左右)

        /// </summary>

        /// <param name="bx">砖的X坐标</param>

        /// <param name="by">砖的Y坐标</param>

        /// <param name="bw">砖的水平长度</param>

        /// <param name="bh">砖的高度</param>

        /// <param name="qx">球的X坐标</param>

        /// <param name="qy">球的Y坐标</param>

        /// <param name="qr">球的直径</param>

        /// <returns>返回string类型值</returns>

      

        /// <summary>

        /// 处理球碰撞到砖块后的动作

        /// </summary>

        /// <param name="point">砖块的坐标</param>

        /// <param name="qx">球的X坐标</param>

        /// <param name="qy">球的Y坐标</param>

        /// <param name="qr">球的直径</param>

        /// <param name="xfangxiang">目前X方向</param>

        /// <param name="yfangxiang">目前Y方向</param>

        /// <returns>RreturnDataDbean类型值</returns>

        public static ReturnDataBean DisposeBrick(Point[] point, int qx, int qy, int qr, string xfangxiang, string yfangxiang)

        rn rdb;

        }

    }

}

2.2.2.程序窗体

2.2.2.1程序主界面

进入游戏时的主界面,可以选择开始、帮助和退出功能。

2.2.2.1程序主界面

2.2.2.2 游戏界面

游戏开始前的画面,显示游戏信息,分数、关卡、及生命次数。

2.2.2.2游戏界面

2.2.2.3帮助界面

帮助信息,是关于游戏如何开始,介绍游戏玩法,以及开发作者的游戏说明。

2.2.2.3帮助界面

2.2.2.4开始游戏

进入游戏之后,游戏开始画面,空格开始游戏,可以通过键盘的←、→来控制挡板的移动。

2.2.2.4开始游戏

2.2.2.5游戏结束

游戏结束画面,当你用完所有的生命时,会弹出此窗口,提示你所得分数,游戏结束,可退出。

2.2.2.5游戏结束

2.2.2.6游戏过关提示

当你打光所有砖块时,屏幕会出现此字样,提示你点击进入下一关,显示剩余生命值。

2.2.2.6游戏过关

2.2.3异常处理说明

退出命令。用户可直接退出程序。

注意,如果在游戏过程中鼠标点击别的地方,或关闭别的文件,此时游戏会继续运行,只要点击窗口则会继续进行。

2.2.4程序运行效果及存在的问题

2.2.4.1未处理问题

2.2.4.1未处理问题

2.3程序部分源代码及注释

2.3.1   RussiaBlock类

以下涉及的词语基本块指的是由四个小方块构成的实体,四个小方块指的是小正方形。方块与基本块同义。

1)   构造函数,通过给定的参数:控件实例,左边界,底边界,小方块(一个基本块由4个小方块构成)单位象素,形状号,起始位置,颜色。

2)   程序部分源代码及注释

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Threading;

namespace Arkanoid

{

    public partial class GameCol1 : Form

    {

        public GameCol1()

        {

            InitializeComponent();

        }

        Point[] pointPic = new Point[50];            //封装pictureBox对象

        string keySpace = "";                        //是否按下空格键

        string key = "";                             //是否按下左右键

        string xfangxiang = "XRight";                //X方向默认为右

        string yfangxiang = "YTop";                  //Y方向默认为上

        int x = 4;                                   //X坐标移动方向

        int y = 4;                                   //Y坐标移动方向

        public static int count = 3;                 //剩余机会

        int bw = 0;                                  //砖块宽度

        int bh = 0;                                  //砖块高度

        int qr = 0;                                  //球的直径

        Point dispoint = new Point(999, 999);         //移动砖块到XY位置

        public static int score = 0;                 //得分

        int _count = -1;

        int countB = 50;

        ReturnDataBean rdb = new ReturnDataBean();

        //控制球的移动timer事件

        private void timer1_Tick(object sender, EventArgs e)

        {

            _count = -1;                    //击中的哪一个砖块

            if (countB == 0)

            {

                keySpace = "Stop";

                xfangxiang = "";

                yfangxiang = "";

                this.picNext.Location = new Point(12, 254);

            }

            //右上

            if (keySpace == "Space" && xfangxiang == "XRight" && yfangxiang == "YTop")

            {

                this.TopRight();

            }

            //左下

            else if (keySpace == "Space" && xfangxiang == "XLeft" && yfangxiang == "YTop")

            {

                this.TopLeft();

            }

            //左下

            else if (keySpace == "Space" && xfangxiang == "XLeft" && yfangxiang == "YDown")

            {

                this.DownLeft();

            }

            //右下

            else if (keySpace == "Space" && xfangxiang == "XRight" && yfangxiang == "YDown")

            {

                this.DownRight();

            }

            //判断是否击中球

            if (_count >= 0 && _count < 50)

            {

                this.IsScore(_count);

            }

        }

        //按下键盘键发生事件

        private void GameCol1_KeyDown(object sender, KeyEventArgs e)

        {

            if (e.KeyCode == Keys.Left)

            {

                key = e.KeyCode.ToString();

            }

            if (e.KeyCode == Keys.Right)

            {

                key = e.KeyCode.ToString();

            }

            if (e.KeyCode == Keys.Space)

            {

                keySpace = e.KeyCode.ToString();

            }

        }

        //释放键盘键发生事件

        private void GameCol1_KeyUp(object sender, KeyEventArgs e)

        {

            key = "";

        }

        //单击退出键发生事件

        private void lblClose_Click(object sender, EventArgs e)

        {

            GameMain.isLoginGame = false;

            Program.bol = true;

            this.Close();

        }

        private void lblClose_MouseEnter(object sender, EventArgs e)

        {

            this.lblClose.ForeColor = Color.Red;

        }

       

        private void lblClose_MouseLeave(object sender, EventArgs e)

        {

            this.lblClose.ForeColor = Color.Black;

        }

        private void goFeichuan_Tick(object sender, EventArgs e)

        {

            if (key == "Left")

            {

                Point Fpoint = this.picFeichuan.Location;

                Point Qpoint = this.picQiu.Location;

                if (this.picFeichuan.Location.X >= (this.picLeftborder.Location.X + 18))

                {

                    Fpoint.X -= 10;

                    if (keySpace == "")

                    {

                        Qpoint.X -= 10;

                    }

                }

                this.picFeichuan.Location = Fpoint;

                this.picQiu.Location = Qpoint;

            }

            else if (key == "Right")

            {

                Point Fpoint = this.picFeichuan.Location;

                Point Qpoint = this.picQiu.Location;

                if (this.picFeichuan.Location.X <= (this.picRightborder.Location.X - 97))

                {

                    Fpoint.X += 10;

                    if (keySpace == "")

                    {

                        Qpoint.X += 10;

                    }

                }

                this.picFeichuan.Location = Fpoint;

                this.picQiu.Location = Qpoint;

            }

        }

3)   游戏结束代码

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace Arkanoid

{

    public partial class GameOver : Form

    {

        public GameOver()

        {

            InitializeComponent();

        }

        private void lblExit_Click(object sender, EventArgs e)

        {

            Application.Exit();

        }

        private void lblExit_MouseEnter(object sender, EventArgs e)

        {

            this.lblExit.ForeColor = Color.Red;

        }

        private void lblExit_MouseLeave(object sender, EventArgs e)

        {

            this.lblExit.ForeColor = Color.Black;

        }

        private void GameOver_Load(object sender, EventArgs e)

        {

            this.lblScore.Text = GameCol1.score.ToString();

        }

        private void label1_Click(object sender, EventArgs e)

        {

        }

    }

}

2.4   测试结果

2.4.1 主窗体运行界面

编程完毕后,运行调试,主窗体界面,及游戏信息。

2.4.1主窗体运行界面

第3章 程序设计总结

在期末的课程设计中,我选择的是设计一个游戏(打砖块),这对于我们来说是一次尝试与创新的过程,也可以说是一个挑战的过程毕竟以前没有做过这类的课设,缺乏一定的经验,现在利用自己学到的知识设计并制作一个游戏,这本身就是一个知识转化为生产力的过程,所以我很兴奋,投入了很高的热情和努力

在具体设计和实施中,我感受到了一个程序与无到有的过程,对具体的设计步骤,思路,方法,技巧都有了进一步的了解,并且感受深刻。

在设计中我基本按照规范的方法和步骤进行,首先调查这个游戏,并查阅相关资料,然后确定设计方案,最后设计并制作,实施过程中我深刻的认识到认真做游戏的重要性。一开始由于不细心出现了错误,这方面我应该加强。在这次设计中我们两人一组,分工和相互协调很重要,我们扬长避短,各及所长和合作意识并有效地缩短开发时间。

通过这次的设计,我学到了很多,同时也学到了细心与耐心的培养。我想这在将来的工作或者社会“旅程”中都将起到很大的作用,同时也学会了如何与人相处,与他人配合,共同完成这份作业。

在此我要感谢我的任课老师以及我的指导老师,由衷的感谢你们!

参考文献

1.   余仁才《C#课程设计教程》2001.5

2.   罗飞《Visual C#编程实例精粹》 2002.3

3.   郑敬东《C#程序设计教程》2004.9

4.   罗斌 越飞 等编著《Visual C# 2005编程实例精粹》 2005.3

5.   郑阿奇 梁敬东主编《C#程序设计教程》2005.9

6.   张家祥 方凌江 张贤坤 何鑫 等编著《C#范例解析》2006.5

7.   段德亮,余健,张仁才 编《C#课程设计案例精编》2004。5

8.   刘洪成《C#高级教程》清华大学出版社2003

9.   张祥 张鑫《C#范例解析》2004.5

10. 张凌江《C#范例解析》2004.5

11.  孙永强等. Visual C#.NET入门与提高.北京:清华大学出版社. 2002

12. B-power工作室.C#网络程序设计. 北京: 中国铁道出版社. 20##

13. [美]Anders Hejlsberg,Scott Wiltamuth,Peter Golde著, 张晓坤 谭立平 车树良译《C#编程语言详解》.北京:电子工业出版社.2004

相关推荐