俄罗斯方块毕业论文

前言

俄罗斯方块游戏是一款风靡全球的电视游戏机和掌上游戏机产品,它曾经造就了无与伦比的商业价值,影响了一代游戏产业链。这款游戏的最初是由苏联的游戏制作人Alex Pajitnov制作的,它看似简单但却变化无穷,令人上瘾,而且引发无数遐想。相信广大读者都还记得为它如痴如醉、茶不思饭不想的那个时代。

随着信息社会日新月异的发展,计算机已经普及到人们的日常生活中。为了使用户在繁忙的日长工作中的得到放松,于是出现了各种各样的休闲工具,如聊天工具,休闲游戏等。《俄罗斯方块》作为一款经典的休闲游戏在该游戏新鲜出炉时就显得非常直观,虽然经过了大量的变形和更改,但游戏的核心依然保持不变。

这个小游戏在Visual Studio 2005 的环境下开发的,从而了解使用Visual Studio 2005 集成开发环境来迅速创建小型简单游戏的方法。在开发中我们可以体验到C#在开发界面软件程序或者游戏程序方面所具有的强大功能,利用其可视化的编程方式可以很轻松地创建简单的游戏界面。同时它还提供了相当优秀的代码编辑,调试,向导,编译和可视化资源编辑等功能,这些强大的功能使它成为当今世界最好的系统开发工具之一。

摘要

俄罗斯方块游戏,从俄罗斯人阿莱克斯帕伊特诺夫在八十年代末制作成功以来,以其规则简单,容易上手,游戏过程变化无穷,且能在娱乐中益智等特点,它已经成为一个家喻户晓,老少皆宜的大众游戏。

游戏实现由四个方块正方形的色块组成,然后储存在数组的四个元素中,计算机随机产生不同七种类型的方块。用户根据键盘的四个方向键控制翻转、向左、向右和向下操作(控制键的实现是由键盘的方向键的事件处理实现)。然后程序根据这七种方块堆叠成各种不同的模型。从软件问题定义开始,接着进行可行性研究、需求分析、概要设计、详细设计,最后对软件进行了测试,整个开发过程贯穿软件开发的知识体系。这款游戏具有丰富的游戏操作功能,用户可以根据自己的操作水平和喜好进行相应的游戏操作设置,从而不仅游戏初学者也能从中享受到成功的快乐,即便高水平的玩家也能品尝到挑战的刺激。该游戏在Visual Studio 2005 环境中使用C#开发实现。C#是基于面向对象的开发设计的编程语言,面向对象的开发在近年已广为普及,成为软件开发最基本的方法。Visual Studio 2005 作为当前功能最为强大的可视化集成开发环境,它不仅支持传统的软件开发方法,更重要的是它能支持可视化的开发风格。

关键词:俄罗斯方块,面向对象,集成开发环境

Abstract

In the 1980s, a Russian named Alex Pajitnov designed and developed the Tetris game .After that the Tetris game has become a well-known and all age’s game because of its simple roles, easy controlling and changeable gaming process .The Tetris game that I designed allows you to play the game in your own way. I designed the Tetris game ,then save in one four chemical elements of the piece set ,random creation dissimilarity of calculator seven the square piece of the category type control it.

The customer is inside out according to four directions key control of the keyboard, to left, rightwards and get down the operation (the realization of the control key is to carry out by the event handling of the direction key of the keyboard),then the procedure pileds according to these seven kinds of square pieces various different model .Definition begins from software problem ,proceed to carry out feasibility study ,need analysis ,essentials design ,detailed design ,the at last has carried out a testing on the software ,entire exploitation process has run through the software knowledge hierarchy .Player can change the configuration of controller by themselves ,so not only beginners can enjoy the game ,but some high level players also can challenge themselves . The game is developed in C# with Microsoft Visual Studio 2005.C# is a programming language based well-known to all these years and it has been a basics software programming method now. As the strongest IDE, the Microsoft Visual Studio 2005 supports classic developing method and visual developing as well.

Key words: Tetris, OOP, IDE

目录

前言 ..................................................................................................................................... I 摘要 .................................................................................................................................... I I ABSTRACT ............................................................................................................................. I II 目录 .................................................................................................................................. IV 第一章绪论 . (1)

1.1课题背景及目的 (1)

1.2国内外研究概况 (1)

1.3开发工具简介 (1)

1.4研究的主要内容 (2)

1.5研究方法、技术路线 (2)

第二章系统分析 (3)

2.1研究可行性分析 (3)

2.1.1设计目的 (3)

2.1.2游戏面向的用户群体 (3)

2.1.3可行性研究前提 (3)

2.1.4可行性分析 (3)

2.1.5结论 (3)

2.2系统需求分析 (4)

2.2.1用户界面需求 (4)

2.2.2软硬件环境需求 (4)

2.2.3游戏质量需求 (4)

第三章系统说明 (5)

3.1游戏功能描述 (5)

3.2系统功能分析 (5)

3.3算法的描述和流程图 (5)

3.4系统功能模块图 (6)

第四章系统设计 (8)

4.1数据库模块设计及部分代码 (8)

4.2数据库与界面之间的连接 (9)

4.3用户登录模块设计及部分代码 (9)

4.4管理员管理模块设计及部分代码 (12)

4.5成绩排行模块设计及部分代码 (15)

4.6游戏窗体菜单项和控制按钮模块设计及部分代码 (16)

第五章软件的测试 (18)

5.1数据库与界面之间连接测试 (18)

5.2用户登录模块测试 (18)

5.3管理员管理模块测试 (18)

5.4成绩排行模块测试 (18)

5.5游戏界面菜单选项和控制按钮功能测试 (19)

第六章总结 (21)

参考文献 (22)

致谢 (23)

第一章绪论

1.1课题背景及目的

背景:俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与经济价值可以说是游戏史上的一件大事。这款游戏最是由苏联的游戏Alex Pajitnow制作的,它看似简单却变化无穷,令人着迷,相信大多数人都还记得为它的规则简单,容易上手,且游戏过程变化无穷。而在“联众俄罗斯方块”中,游戏人既能感受到游戏中的乐趣,也能提供一个展现自己高超技艺的场所,究其历史,俄罗斯方块最早还是出现在PC机上,无数人进入游戏编程的世界都是从编写俄罗斯方块游戏开始的,因为这是检验一个人对开发语言,环境和基本数据结构知识熟练程度的便捷途径。Microsoft Visual Studio提供了开发Window应用程序的最迅速,最简捷的方法。不论Window应用程序的资深专业开发人员还是初学者,Microsoft Visual Studio 都为他们提供了整套的工具,以便开发应用程序。

目的:在实现俄罗斯方块的基本游戏的前提下,优化其算法与数据结构,并增加一些传统游戏中没有的新特点,最终实现一款小巧精致的益智俄罗斯方块游戏。本课题要求在.net平台下采用C#实现,图形使用GDI,并增添一些传统游戏没有的新特点,如用户信息和分数排行的数据库,登录界面的Flash动画制作等。通过对本课题设计的实现,能提高对熟悉.net开发环境,数据库的运用,Flash动画制作。

1.2国内外研究概况

俄罗斯方块红遍世界的各个角落,一个本来是吃大锅饭的人在消极怠工的时候发明的娱乐工具成了造福全人类的宝贝,它的价值远远超越了开发时候的预想,这是一个算法实现的比较简单,但又乐趣无穷的游戏。课题用C#实现,这是一种基于面向对象的方法正受到全世界越来越强烈的关注和高度重视,针对日趋复杂的软件需求,业界也越来越崇尚利用面向对象的方法和思想进行软件开发。

1.3开发工具简介

C#作为微软在21世纪推出的新语言,有着其他语言无法比拟的优势。C#语言的应用非常广泛,在软件行业的多个应用领域中,它已成为基于.NET Framework解决方案的首选语言。C#作为一门新的程序设计语言,集中了C、C++和Java等语言的优点,是一门现代的、优越的、具有广阔发展前景的程序设计语言。

SQL Server 2005是数据库管理系统,具备了通常数据库管理系统最基本的功能。Microsoft SQL Server 是一种基于客户机/服务器的关系型,一种基于数据库管理系统,用来对存放在计算机中的数据库进行组织、管理和检索,它使用Transact-SQL 语言在检索,它使用语言在服务器和客户机之间传送请求。

1.4研究的主要内容

在整个俄罗斯方块游戏项目中,我负责数据库模块设计,数据库与界面之间的连接,用户登录模块设计,管理窗体中负责实现管理员对普通用户进行添加,修改,删除的操作。在游戏窗体的界面中,负责窗体的菜单选项和可见控件的实现。最后是对软件的用户登录、管理员管理操作、数据库与界面之间的连接、成绩排行、游戏界面菜单选项和课件控件分别进行测试。研究主要内容如图1-1所示:

图1-1:研究的主要内容

1.5研究方法、技术路线

本课题完全按照课题要求实现,在保持原有俄罗斯方块规则不变的前提下,尽可能的提高游戏的乐趣。比如添加数据库模块,数据库与C#连接,用户登录模块,管理员对普通用户进行管理模块等等。本设计在.net平台下采用C#实现。创建数据库,增加项目的复杂性,用两个Label控件的叠加,可见性与不可见性来更改用户权限。用Read()方法读取数据库表中数据。用SQL语句的插入、更新、删除更新数据等等。

第二章系统分析

2.1 研究可行性分析

2.1.1设计目的

综合运用在校期间所学理论知识和技能,设计开发俄罗斯方块,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,提高软件实践能力,为将来实际工作打下坚实的基础。

2.1.2游戏面向的用户群体

游戏爱好者,休闲娱乐!

2.1.3可行性研究前提

(1)系统开发的总体任务是实现游戏的可操作性、美观性、及时性及适当的功能扩展。

(2)采用结构化设计方法,开发出一个可操作性、美观性、及时性的游戏,并通过此次软件开发过程全面提高自身的综合素质。

(3)通过研究分析俄罗斯方块所具备的能力及实现的方法、确定主体结构。利用现阶段所达到的能力,以最简洁、最容易的办法,边开发边测试边修改,实现一个有一定可玩性的游戏软件。

(4)本游戏尽量追求游戏操作的合理性及正确性,但是仍不排除会出现一些偶然性的错误;同时游戏也尽量追求界面的美观性及功能的丰富性,但是基于时间的关系,可能会有极少数的扩展功能不能实现。

2.1.4可行性分析

(1)管理可行性:本游戏设计的目的只在于提高自身实践水平,并不对外发布,因此完全具有管理可行性。

(2)经济可行性:由于本游戏的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台电脑使用便可,所以不用考虑到经济问题。

(3)社会可行性:本游戏的开发作为毕业课程设计以巩固先前所学的知识,以个人为单位,仅供个人平常娱乐所用,无须考虑有可能造成的社会社会影响,不用考虑到法律、版权等的社会因素,所以在这方面是完全可行的。

2.1.5结论

综上所述,本游戏软件的技术成熟、完备。各方面均无重大问题,因此本游戏软件可以开始着手编写。

2.2 系统需求分析

2.2.1用户界面需求

用户界面需求,如表2-1所示:

2.2.2软硬件环境需求

软硬件环境需求,如表2-2所示:

2.2.3游戏质量需求

游戏质量需求,如表2-3所示:

第三章系统说明

3.1游戏功能描述

对于俄罗斯方块游戏,其功能描述如下:

(1)当程序运行时,出现登录界面,填写用户名称和密码,正确后,管理员进入管理界面,进行添加、修改、删除操作。普通用户进入主界面,进行游戏。

(2)游戏开始,游戏区域上方不断地出现预定义形状的下坠物件。

(3)下坠物件可以通过旋转改变其显示形态,并且不断地往下坠,直到它接触到游戏区域底部或其他之前已经垒叠起的下坠物件。当一个下坠物件到达底部后,其位置则确定下来并占有该空间的位置区域。

(4)当游戏区域的某一行被下坠物件完全填充,则消除该行的所有下坠物,垒在其上面的物件将掉下代替该行空间。

(5)游戏的结束是以下坠物件的顶部到达游戏区域的顶部作为判断依据,表示装满溢出。并且在某一瞬间,下一个方块的形态在游戏区域的右上方有预先提示,同时每抵消一行空间积分自增。

3.2系统功能分析

俄罗斯方块游戏对广大读者来说应该并不陌生,所以本项目实例的主要功能就是控制游戏的运行,实现游戏的完整运行。具体来说,主要包括如下功能模块:(1)数据库与界面之间的连接:完善项目。

(2)游戏登录界面:管理员和普通用户进行用户名和密码的核对。

(3)游戏管理员管理界面:管理员可以对用户进行添加、修改、删除操作。

(4)游戏控制菜单:可以控制游戏的开始、退出和样式的选择。

(5)设置菜单:可以设置游戏的显示样式,并提供游戏帮助等信息。

3.3算法的描述和流程图

首先,在游戏开始后检查当前的下坠方块是否已经到了底部,如果不是的话就将下坠方块到了该定时器间隔的时间后整体往下移动一个单位,否则,进行到达底部后的操作。对于到达底部后的操作,可以分为以下几个步骤来处理。

(1)先对进行到底部后的所有可以抵消的行进行销行处理。

(2)生成一个新的“下一个方块”,这个方块的形态需要随机地生成。

(3)在将旧的“下一个方块”置换成新的下一个方块,并在屏幕右上方显示。

(4)将当前的“方块”换成以前产生的旧的“下一个方块”,并且马上使用。由于在这个过程中已经重新使用了一个新的下坠方块,在刚使用时并且还没有下降前,应该判断它是否已经不可以下降到底部(也就是说,在方块已经堆砌到接近游戏区域顶部的时候,下坠方块一旦被使用,就已经到达了底部),如果时刚好到达底部则实行销行检测和操作,并且判断顶部(第一行)的某些区域是否已经被占用了,是则表示游戏已经触发结束的标志时间,应该进入游戏结束状态。

(5)在前面判断为到达底部后,进行销行检测与操作。

(6)在下坠方块到达底部的同时,判断是否已经到达了游戏的顶部,是则表示游戏结束,进行游戏结束的资源释放与数据库环境清理工作。

俄罗斯方块游戏的流程图,如图3-1所示:

图3-1:俄罗斯方块游戏流程图

3.4系统功能模块图

系统开发流程图,如图3-2所示:

图3-2:系统开发流程图

系统运行流程图,如图3-3所示:

图3-3:系统运行流程图

游戏主窗体菜单和可见控件运行流程图,如图3-4所示:

图3-4:游戏模块运行流程图

第四章系统设计

4.1数据库模块设计及部分代码

在建立数据库时,要根据项目的需要,设计表格。

打开SQL Server 服务器,新建数据库,命名为Youxi。

创建游戏用户表,列名主要包括ID、用户名称、用户密码和用户权限,其中ID为主键,游戏用户表主要是用于保存用户的信息。游戏用户表设计如图4-1所示:

图4-1:游戏用户表的设计

游戏用户表的测试数据如图4-2所示:

图4-2:游戏用户表的测试

创建游戏成绩排行,列名包括用户名称和分数,其中用户名称为主键,用于保存用户游戏成绩。游戏成绩排行设计如图4-3所示:

图4-3:游戏成绩排行的设计

游戏成绩排行的测试数据如图4-4所示:

图4-4:游戏成绩排行的测试

4.2数据库与界面之间的连接

在用户登录窗体的界面中,数据库与界面连接是整个项目的枢纽,关键代码如下:conn = new SqlConnection("server=.;uid=sa;pwd=123;database=Youxi");

//server为数据库服务器,uid为登入名,pwd为登入密码,database为数据库名

DataSet ds = new DataSet();//初始化实例

da = new SqlDataAdapter("select 用户名称,用户权限from 用户表", conn);

if (conn.State == ConnectionState.Closed)//描述与数据源连接的当前状态

{

conn.Open();

}

da.Fill(ds, "用户表");

conn.Close();

name.DataSource = ds.Tables["用户表"];

name.DisplayMember = "用户名称";

4.3用户登录模块设计及部分代码

打开“Microsoft Visual Studio 2005”,新建项目,名称为youxi,新建项目图示如图4-5所示:

保存路径

图4-5:新建项目图示

在项目开发环境中,创建文件夹用来存放项目中的各种文件和窗体,俄罗斯方块游戏项目结构如图4-6所示:

图4-6:俄罗斯方块游戏项目结构

创建用户登录模块的登录窗体,命名为frnLogin ,窗体界面包括用户名称、用户密码和用户权限。普通用户填写用户名称和用户密码,点击登录按钮,正确后界面转到主窗体。管理员则转到管理界面。用户登录模块设计如图4-7所示:

图4-7:用户登录模块登录界面

登录窗体中,只允许登录的用户信息是数据库Youxi 中用户表存在的数据。认证用户输入的用户名称和用户密码要与数据库中一样,否则登录失败,重新输入。管理员和普通用户权限不同,要根据用户名称改变用户权限。用户登录模块关键代码如下:

da = new SqlDataAdapter("select * from 用户表 where 用户名称='" +

name.Text.Trim() + "' and 用户密码='" +

pwd.Text.Trim() + "'", conn);

DataSet ds = new DataSet();

if (conn.State == ConnectionState.Closed)

{

conn.Open();

}

da.Fill(ds, "用户表");

游戏开始窗体

游戏关于版权窗体 用户登录窗体 游戏主窗体 游戏帮助窗体 成绩排行窗体 用户删除窗体 用户添加窗体 用户修改窗体

conn.Close();

if (ds.Tables["用户表"].Rows.Count > 0)

{

//判断权限,根据权限选择进入不同窗体

if (userRight == "admin")

{

guanli g = new guanli();

this.Hide();

music.Stop();

g.Show();

}

else if (userRight == "user")

{//给游戏界面传输用户信息

frmMain frmmain = new frmMain();

https://www.360docs.net/doc/4a637579.html,erFen = userfen;

https://www.360docs.net/doc/4a637579.html,erName = name.Text.Trim();

frmmain.Owner = this;

this.Hide();

music.Stop();

frmmain.Show();

}

}

用户名称的文本框获取数据库中相应的用户名称,用户权限根据用户名称的改变而改变,用两个Label控件的叠加,用控件的可见性与不可见性来实现的,关键代码如下:com = new SqlCommand("select 用户名称,用户权限from 用户表where

用户名称='" + name.Text + "'", conn);

if (conn.State == ConnectionState.Closed)

{

conn.Open();

}

dr = com.ExecuteReader();

if (dr.Read())

{//显示权限

userRight = dr["用户权限"].ToString();

if(userRight=="admin")

{

guanli.Visible=true;

putong.Visible=false;

}

else if(userRight=="user")

{

guanli.Visible = false;

putong.Visible = true;

}

}

4.4管理员管理模块设计及部分代码

游戏管理员管理界面,管理员可以对普通用户分别进行添加、修改和删除的操作管理。游戏管理员管理内容图4-8所示:

图4-8:游戏管理员管理内容

(1)在管理员对用户进行添加操作时,根据用户名称和用户密码进行添加,输入用户名称和用户密码,完成后点击“确定”按钮,管理员添加普通用户步骤如图4-9所示:

图4-9:管理员添加普通用户步骤

管理员添加普通用户,判断添加的用户名称是否已经存在的关键代码如下:

da = new SqlDataAdapter("select * from 用户表 where 用户名称='"

+ t1.Text + "'", conn);

DataSet ds = new DataSet();

if (conn.State == ConnectionState.Closed)

{

conn.Open();

}

int count = da.Fill(ds, "用户表");

conn.Close();

if (count != 0)

{

MessageBox.Show("该用户名称已存在,请重新输入!");

输入用户名称

输入用户密码

return;

}

管理员添加普通用户,把添加的用户添加到数据库中,关键代码如下:

string SQLString;

SQLString = "insert into 用户表(用户名称,用户密码,用户权限) values (@用

户名称,@用户密码,@用户权限) insert into 成绩排

行(用户名称,分数) values (@用户名称,'0')";

com=new SqlCommand(SQLString,conn);

com.Parameters.Clear();

SqlParameter nameParameter = new SqlParameter();

nameParameter.ParameterName = "@用户名称";

nameParameter.Value = t1.Text;

com.Parameters.Add(nameParameter);

SqlParameter pwdParameter = new SqlParameter();

pwdParameter.ParameterName = "@用户密码";

pwdParameter.Value =t2.Text;

com.Parameters.Add(pwdParameter);

SqlParameter quanParameter = new SqlParameter();

quanParameter.ParameterName = "@用户权限";

quanParameter.Value = "user";

com.Parameters.Add(quanParameter);

(2)在管理员对普通用户进行信息修改时,是对用户名称和用户密码进行修改。管理员对普通用户修改如图4-10所示:

4-10:管理员与普通用户进行修改

在管理员对普通用户进行修改时,存放用户名称的文本框获取数据库Youxi 用户表中用户名称和相对应的用户密码,关键代码如下:

com = new SqlCommand("select 用户名称,用户密码 from 用户表 where

用户名称='" + comboBox1.Text + "'", conn);

if (conn.State == ConnectionState.Closed)

{

conn.Open();

}

dr = com.ExecuteReader();

if (dr.Read())

{

修改用户名称

修改用户密码

userPwd = dr["用户密码"].ToString();

t2.Text = userPwd;

}

dr.Close();

conn.Close();

管理员对普通用户进行修改,同时更新数据库表中关键代码如下:

SQLString = " update 用户表 set 用户名称=@用户名称,用户密码=

@用户密码,用户权限=@用户权限 where

用户名称='" + comboBox1.Text + "'";

(3)在管理员对普通用户进行删除操作时,是根据用户名称进行选择删除的,管理员对普通用户进行删除如图4-11所示:

图4-11:管理员对普通用户进行删除

管理员对普通用户进行删除用户操作,根据用户名称进行删除,删除后要及时的跟心数据表中的数据,关键代码如下:

com = new SqlCommand("delete from 用户表 where 用户名称='" +

comboBox1.Text + "'" + " delete from 成绩

排行 where 用户名称='" +

comboBox1.Text + "'", conn);

if (conn.State == ConnectionState.Closed)

{

conn.Open();

}

com.ExecuteNonQuery();

conn.Close();

MessageBox.Show("删除数据成功!");

//删除成功后更新数据

DataSet ds = new DataSet();

da = new SqlDataAdapter("select 用户名称 from 用户表 where 用

户权限='user'", conn);

if (conn.State == ConnectionState.Closed)

{

conn.Open();

}

da.Fill(ds, "用户表");

conn.Close();

根据用户名称

删除用户

comboBox1.DataSource = ds.Tables["用户表"];

comboBox1.DisplayMember = "用户名称";

4.5成绩排行模块设计及部分代码

普通用户游戏主窗体界面,用户可以直接开始游戏,可以先查看分数排行的前五名,可以查看关于我们的信息。前五名用户成绩排行图4-10所示:

图4-12:前五名用户成绩排行

查看前五名用户的成绩排行榜,用选择语句把数据库Youxi表成绩排行的数据进行分数的从高到底排行,然后显示到成绩排行的界面中,前五名用户成绩排行关键代码如下:

private void paihang_Load(object sender, EventArgs e)

{

…...//省略连接数据库成绩排行的代码

try

{

da = new SqlDataAdapter("select * from 成绩排行order by 分数desc",

conn);

DataSet ds = new DataSet();

if (conn.State == ConnectionState.Closed)

{

conn.Open();

}

int count = da.Fill(ds, "成绩排行");

conn.Close();

//对成绩排行表中的分数进行排行,显示前五名成绩

t1.Text = ds.Tables[0].Rows[0][0].ToString();

t11.Text = ds.Tables[0].Rows[0][1].ToString();

t2.Text = ds.Tables[0].Rows[1][0].ToString();

t22.Text = ds.Tables[0].Rows[1][1].ToString();

t3.Text = ds.Tables[0].Rows[2][0].ToString();

t33.Text = ds.Tables[0].Rows[2][1].ToString();

t4.Text = ds.Tables[0].Rows[3][0].ToString();

t44.Text = ds.Tables[0].Rows[3][1].ToString();

相关文档
最新文档