目 录
第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
《C#.Net程序设计》是计算机科学与技术专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是软件技术专业学生学习完《C#.Net程序设计》课程后,进行的一次全面的综合训练,C#.Net程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
硬件要求能运行Windows xp操作系统的微机系统。C#.Net程序设计语言及相应的集成开发环境visual studio.net。
熟悉c#语言及visual studio.net集成开发环境。
按程序设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握c#.net2003的基本技能和面向对象的概念和方法;了解windows编程。同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。
打砖块游戏:作为我们一款熟知的游戏我想大家都不陌生吧,就是通过挡板把小球挡回,不让小球落地,直到打光所有砖块为止,游戏过关进入更难得模式小球速度更快,砖块组成的图案发生改变,是一个很有趣味的小游戏。
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.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主窗体运行界面
在期末的课程设计中,我选择的是设计一个游戏(打砖块),这对于我们来说是一次尝试与创新的过程,也可以说是一个挑战的过程毕竟以前没有做过这类的课设,缺乏一定的经验,现在利用自己学到的知识设计并制作一个游戏,这本身就是一个知识转化为生产力的过程,所以我很兴奋,投入了很高的热情和努力
在具体设计和实施中,我感受到了一个程序与无到有的过程,对具体的设计步骤,思路,方法,技巧都有了进一步的了解,并且感受深刻。
在设计中我基本按照规范的方法和步骤进行,首先调查这个游戏,并查阅相关资料,然后确定设计方案,最后设计并制作,实施过程中我深刻的认识到认真做游戏的重要性。一开始由于不细心出现了错误,这方面我应该加强。在这次设计中我们两人一组,分工和相互协调很重要,我们扬长避短,各及所长和合作意识并有效地缩短开发时间。
通过这次的设计,我学到了很多,同时也学到了细心与耐心的培养。我想这在将来的工作或者社会“旅程”中都将起到很大的作用,同时也学会了如何与人相处,与他人配合,共同完成这份作业。
在此我要感谢我的任课老师以及我的指导老师,由衷的感谢你们!
参考文献
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
目录第1章程序设计专题目的与要求111程序设计目的112程序设计的实验环境113程序设计的预备知识114程序设计要求1第2章程序设…
目录123基本功能描述2设计思路2软件设计431设计步骤432界面设计533关键功能实现6331发牌功能的实现6332计时功能的实…
第1章引言1第2章任务概述121问题概述1211问题重述1212设计目的122需求分析1221基本要求1222游戏功能介绍123编…
游戏24点课程设计报告一题目分析类计算24点任意输入4位数字利用四则运算使之得到结果24输出所有不同算法的计算表达式可为运算优先级…
滨江学院20xx20xx学年第2学期数字图像处理课程论文专业姓名学号20xx年06月05日设计通信编程课程论文Java设计扫雷游戏…
丽水学院计算机信息学院C语言课程设计短一指导书二一一年三附件二封面格式丽水学院C语言课程设计总结报告题目井字棋指导教师曹红院系计算…
游戏程序设计课程报告课程Unity3D课程设计题目班级学号姓名日期一摘要1UNITY游戏是一种新型的IT引擎我们研究主要内容是UN…
数字电子技术课程设计报告班级信息0611姓名何海强学号40550311设计题目电子拔河游戏机同组成员史立光田劲王萌路长发组长何海强…
东华理工大学报告学院国际教育学院学院专业电子信息工程班级学号20xx20xx0638姓名钟天运一课程设计题目游戏20xx二课程设计…
上海xxxxx游戏程序设计题目小鸡历险记学号姓名xxxx院系计算机与信息工程学院专业年级软件工程20xx级20xx年6月3日第一章…
一、选题的目的、意义和实用价值随着人们生活质量的不断提高以及个人电脑和网络的普及,人们的业余生活质量要求也在不断提高,选择一款好玩…