软件工程课程设计报告俄罗斯方块

合集下载

俄罗斯方块设计报告

俄罗斯方块设计报告

软件编程实习课程设计报告俄罗斯方块专业:电子信息科学与技术班级:学号:姓名:指导老师:实验时间:2011年11月281.需求分析功能简介顺时针旋转顺时针旋转转块逆时针旋转逆时针旋转转块绘制转块指定画板上绘制转块擦除矩形指定画板上擦除矩形右移动右移动转块左移动左移动转块下移动下移动转块丢下转块在画板上丢下转块自定义转块样式自已定义转块样式设置游戏按钮自定义设置游戏按钮保存游戏基本信息保存游戏基本信息到XML文档等级达到一定分数速度变快1、运行环境需求:WIN95\WIN98\WinMe\WIN2000\WINXP\WINNT2、硬件需求:(1)处理器型号:奔腾III及同等型号以上处理器及内存容量:512MB以上内存(2)外存容量:5G以上硬盘空间(3)联机或脱机:脱机;(4)媒体及其存储格式:XML文档;(5)输入输出设备的型号和数量:鼠标、彩色显示器。

2.主要算法思想俄罗斯方块游戏程序的界面设计图如下图所示:图1俄罗斯方块的主要流程图如下:图23.游戏的结构分析俄罗斯方块游戏中,游戏界面区中不断有各种形状的方块从上向下落,在遇到下面已经固定的方块或者界面区域的底部而不能再下落时,则被固定在所在位置,并且游戏将预览的方块在游戏区域从上继续下落,而且产生一个新的预览方块;当方块堆积的超过游戏界面区域时(或者游戏者积分超过一定值时),游戏结束。

在固定方块时,需要判断是否有全都是方块的行,如果有,则消去该行,并根据预定的规则增加游戏者获得的分数,并修改游戏的级别(即游戏的速度)。

游戏的控制,也即当前正在下落的方块的左右移动和变形操作,由按键控制,根据相应的按键调用相应的函数过程。

当方块左右移动遇到游戏界面中已经固定的方块时,它就被阻挡而不能移动,或者当方块已经到了游戏区域的两侧边界时,也不能移动。

对于变形操作,我们用下落方块的变形后的方块跟游戏区域中已经固定的方块比较,如果变形后没有覆盖已经固定的方块,则下落方块可以变形,否则,它就受到了一定固定的方块的阻挡而不能变形。

俄罗斯方块C#程序设计报告

俄罗斯方块C#程序设计报告

河北联合大学2011-2012第2学期《软件设计基础-C#》课程设计报告设计名称:俄罗斯方块姓名:冯玉杰学号:201114210217专业班级:工业工程2班学院:机械工程学院设计时间:5月10日—5月28日设计地点:学校机房目录1.课程设计目的 ···············································································2.课程设计任务与要求 ······································································3.课程设计说明书 ············································································4.课程设计成果 ···············································································5.程序调试过程 ···············································································6.设计问题的不足和改进方案 ·····························································7.课程设计心得 ···············································································8.附录 ···························································································9.参考文献 ·····················································································《软件设计基础-C#》课程设计报告第 11 页,共 29 页square4.location = new Point(square4.location.X + squareSize, square4.location.Y);Draw(GameField.winHandle);return true;}else //如果不能右移了{return false;}}/*旋转block*/public void Rotate(){//保存每个小块的位置Point oldPosition1 = square1.location;Point oldPosition2 = square2.location;Point oldPosition3 = square3.location;Point oldPosition4 = square4.location;//保存当前的方向RotateDirections oldRotation = myRotation;//开始试着旋转方块,旋转方向:顺时针方向 旋转中心点为形状拐点Erase(GameField.winHandle);switch(blockType){case BlockTypes.square:break;case BlockTypes.line://直线的旋转只有两种方向switch (myRotation){case RotateDirections.North:myRotation = RotateDirections.East;square1.location = new Point(square2.location.X-squareSize,square2.location.Y);square3.location = new Point(square2.location.X+squareSize,square2.location.Y);square4.location = new Point(square2.location.X + 2 * squareSize, square2.location.Y);break;case RotateDirections.East:myRotation = RotateDirections.North;square1.location = new Point(square2.location.X,square2.location.Y-squareSize);square3.location = new Point(square2.location.X, square2.location.Y +squareSize);square4.location = new Point(square2.location.X, square2.location.Y + 2 * squareSize);break;}break;case BlockTypes.J://J形方块有四种旋转方向switch (myRotation)《软件设计基础-C#》课程设计报告第 12 页,共 29 页{case RotateDirections.North:myRotation = RotateDirections.East;square1.location = new Point(square3.location.X+2*squareSize,square3.location.Y);square2.location = new Point(square3.location.X+squareSize,square3.location.Y);square4.location = new Point(square3.location.X,square3.location.Y-squareSize);break;case RotateDirections.East:myRotation = RotateDirections.South;square1.location = new Point(square3.location.X,square3.location.Y+2*squareSize);square2.location = new Point(square3.location.X,square3.location.Y+squareSize);square4.location = new Point(square3.location.X+squareSize,square3.location.Y);break;case RotateDirections.South:myRotation = RotateDirections.West;square1.location = new Point(square3.location.X-2*squareSize,square3.location.Y);square2.location = new Point(square3.location.X-squareSize,square3.location.Y);square4.location = new Point(square3.location.X,square3.location.Y+squareSize);break;case RotateDirections.West:myRotation = RotateDirections.North;square1.location = new Point(square3.location.X,square3.location.Y-2*squareSize);square2.location = new Point(square3.location.X,square3.location.Y-squareSize);square4.location = new Point(square3.location.X-squareSize,square3.location.Y);break;}break;case BlockTypes.L://L形方块有四种旋转方向switch (myRotation){case RotateDirections.North:myRotation = RotateDirections.East;square1.location = new Point(square3.location.X+2*squareSize,square3.location.Y);square2.location = new Point(square3.location.X+squareSize, square3.location.Y);square4.location = new Point(square3.location.X, square3.location.Y+squareSize);break;case RotateDirections.East:myRotation = RotateDirections.South;square1.location = new Point(square3.location.X, square3.location.Y + 2 * squareSize);square2.location = new Point(square3.location.X, square3.location.Y + squareSize);square4.location = new Point(square3.location.X - squareSize, square3.location.Y);break;case RotateDirections.South:myRotation = RotateDirections.West;square1.location = new Point(square3.location.X - 2 * squareSize, square3.location.Y);《软件设计基础-C#》课程设计报告第 13 页,共 29 页square2.location = new Point(square3.location.X - squareSize, square3.location.Y);square4.location = new Point(square3.location.X, square3.location.Y - squareSize);break;case RotateDirections.West:myRotation = RotateDirections.North;square1.location = new Point(square3.location.X, square3.location.Y - 2 * squareSize);square2.location = new Point(square3.location.X, square3.location.Y - squareSize);square4.location = new Point(square3.location.X + squareSize, square3.location.Y);break;}break;case BlockTypes.T://T形方块也有四种旋转方向switch (myRotation){case RotateDirections.North:myRotation = RotateDirections.East;square1.location = new Point(square2.location.X,square2.location.Y-squareSize);square3.location = new Point(square2.location.X, square2.location.Y+squareSize);square4.location = new Point(square2.location.X-squareSize, square2.location.Y);break;case RotateDirections.East:myRotation = RotateDirections.South;square1.location = new Point(square2.location.X+squareSize, square2.location.Y);square3.location = new Point(square2.location.X-squareSize, square2.location.Y);square4.location = new Point(square2.location.X, square2.location.Y-squareSize);break;case RotateDirections.South:myRotation = RotateDirections.West;square1.location = new Point(square2.location.X, square2.location.Y+squareSize);square3.location = new Point(square2.location.X, square2.location.Y-squareSize);square4.location = new Point(square2.location.X+squareSize, square2.location.Y);break;case RotateDirections.West:myRotation = RotateDirections.North;square1.location = new Point(square2.location.X-squareSize, square2.location.Y);square3.location = new Point(square2.location.X+squareSize, square2.location.Y);square4.location = new Point(square2.location.X, square2.location.Y+squareSize);break;}break;case BlockTypes.Z://Z形方块有两种旋转方向switch (myRotation){case RotateDirections.North:《软件设计基础-C#》课程设计报告第 14 页,共 29 页myRotation = RotateDirections.East;square1.location = new Point(square2.location.X, square2.location.Y - squareSize);square3.location = new Point(square2.location.X - squareSize, square2.location.Y);square4.location = new Point(square2.location.X - squareSize, square2.location.Y +squareSize);break;case RotateDirections.East:myRotation = RotateDirections.North;square1.location = new Point(square2.location.X-squareSize, square2.location.Y);square3.location = new Point(square2.location.X, square2.location.Y+squareSize);square4.location = new Point(square2.location.X+squareSize,square2.location.Y+squareSize);break;}break;case BlockTypes.S://S形方块有两种旋转方向switch (myRotation){case RotateDirections.North:myRotation = RotateDirections.East;square1.location = newPoint(square3.location.X+squareSize,square3.location.Y+squareSize);square2.location = new Point(square3.location.X+squareSize, square3.location.Y);square4.location = new Point(square3.location.X, square3.location.Y-squareSize);break;case RotateDirections.East:myRotation = RotateDirections.North;square1.location = new Point(square3.location.X-squareSize,square3.location.Y+squareSize);square2.location = new Point(square3.location.X, square3.location.Y+squareSize);square4.location = new Point(square3.location.X+squareSize, square3.location.Y);break;}break;}//旋转之后检测位置是否冲突if (!(GameField.isEmpty(square1.location.X / squareSize, square1.location.Y / squareSize)&&GameField.isEmpty(square2.location.X / squareSize, square2.location.Y / squareSize)&&GameField.isEmpty(square3.location.X / squareSize, square3.location.Y / squareSize)&&GameField.isEmpty(square4.location.X / squareSize, square4.location.Y / squareSize))){//如果有冲突则回到原来的状态myRotation = oldRotation;square1.location = oldPosition1;square2.location = oldPosition2;square3.location = oldPosition3;《软件设计基础-C#》课程设计报告第 15 页,共 29 页square4.location = oldPosition4;}Draw(GameField.winHandle);}/*检测是否到顶*/public int Top(){returnMath.Min(square1.location.Y,Math.Min(square2.location.Y,Math.Min(square3.location.Y,square4.location.Y)));}}}《软件设计基础-C#》课程设计报告 ⑴功能描述第 16 页,共 29 页本系统为一个用 C#实现的为我们所熟悉的简单的俄罗斯方块游戏,该系统的具体功能如下:1). 能简便的开始游戏,游戏中的方块的功能与日常我们所熟悉的游戏的功能一致,各种块的设置也一致, 包括块的旋转,加速下降,平移,满行消去,到顶游戏结束功能;2). 能够自定义游戏中功能键的具体按键,设置游戏的级别,即方块下降的速度等,并在设置后立即生效,在 游戏中立刻体现,在下次程序运行时读取上次设置的游戏环境;3). 显示下一方块提示信息,以及游戏数据的统计,如速度,按键速度,分数行者等等;4). 游戏有级别设置,级别越高,方块下降的速度越快,当到达一定分数后进入下一级别;⑵概要设计主要写模块说明,模块结构图,系统流程图(例 N-S 流程图)(五号,宋体)模块结构图:根据功能分析,建立系统的体系结构,即将整个系统分解成若干子模块,用框图表示各功能模块之间 的接口关系。

软件工程课程设计报告俄罗斯方块

软件工程课程设计报告俄罗斯方块

《软件工程》课程设计报告课题:俄罗斯块学院:计算机与信息学院专业:软件工程姓名(学号):晋烨(2011112360)指导教师:昭一、任务分析俄罗斯块是个老少皆宜的小游戏,它实现由四块正形的色块组成,计算机随机产生不同七种类型的块,根据计算机时钟控制它在一定的时间不停的产生,用户根据键盘的四个向键控制翻转、向左、向右和向下操作,然后程序根据这七种块堆叠成各种不同的模型。

二、可行性研究报告1、设计背景俄罗斯块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。

俄罗斯块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。

随着计算机的发展而发展,俄罗斯块不断推出新,深爱广大玩家喜爱。

这个游戏有的简单,有的复杂,但其根本原理是一样的都是对运动的块进行组合,来训练玩家的反应能力。

因此开发此游戏软件可满足人们的一些娱乐的需求。

此俄罗斯块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯块游戏。

2、设计目的通过本游戏的设计,综合自己在校期间所学的理论知识,设计开发俄罗斯广场游戏,使自己熟应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,初步掌握软件工程的系统理论,进一步巩固和加强自身对J2SE基础知识的理解,提高自己的编程水平,从而达到理论与实践相结合的目的。

3、设计要求本游戏开发的总体任务是实现游戏的可操作性,以及界面的美观性。

整个开发过程遵循软件工程规,采用JAVA GUI编程实现界面以及事件的控制。

用户根据键盘的四个向键控制翻转、向左、向右、和向下操作,通过菜单栏中的相应菜单选项实现游戏的开始、结束、变换向、积分以及等级的功能。

4、设计目标通过本游戏的开发,主要实现游戏的可操作性及美观性,同时使自己对JAVA语言的了解更进一层,为将来的实际工作打下坚实的基础。

三、需求分析游戏需求28种状态的块随机产生,自由下落,落下时可由玩家用上、下、左、右控制键控制翻转和移动,以便玩家所需要的形态和位置落下。

课程设计报告-俄罗斯方块

课程设计报告-俄罗斯方块

课程设计报告题目俄罗斯方块专业计算机学院(嵌入式方向)班级1姓名学号同组人指导老师史毓达计算机学院2016.6.15目录摘要 (1)关键字 (1)1功能说明 (1)2开发环境 (1)2.1 Qt简介 (1)2.2 Qt安装 (1)2.3 Qt开发基础 (2)2.3.1 Qt 对象与对象树 (2)2.3.2信号与槽 (2)2.3.3事件 (5)3系统设计 (5)3.1需求分析 (5)3.2框架设计 (6)3.2.1俄罗斯方块基本规则 (6)3.2.2系统模块 (7)3.3系统实现 (7)4系统测试 (9)5课程设计总结 (10)6附录 (10)6.1参考资料 ...................................错误!未定义书签。

6.2程序源码 (10)摘要Qt 是一个跨平台的C++图形用户界面应用程序框架。

本程序利用Qt 提供的相关类,实现了俄罗斯方块的基本功能。

关键字QT、嵌入式、软件开发1功能说明支持俄罗斯方块游戏的基本功能支持虚拟按键2开发环境操作系统: ubuntu 10.04 LTS开发工具: gnu 编译工具链 (gcc 等) 、Qt Creator 、Qt 4.6.22.1Qt 简介Qt 是跨平台的应用程序和UI 框架。

它包括跨平台类库、集成开发工具和跨平台IDE 。

使用Qt,只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。

2.2Qt 安装1.Qt 官网( )上有完整的SDK下载,下载开发平台的 SDK,下载完成后点击即可安装2.如果是使用 Linux 系统,也可能通过命令行进行安装,以 ubuntu 10.04 LTS 为例:sudo apt-get install qt4-dev-tools qtcreator qt4-doc qt4-qtconfig qt-demos3.如果希望构建嵌入式 Qt 开发平台,则需要参考相关开发板的说明,一般是先制作交叉编译工具链、再交叉编译一个用于目标板的 Qt 库,这里不再详述2.3 Qt 开发基础2.3.1Qt 对象与对象树QObject 是所有 Qt 类的基类。

c课程设计俄罗斯方块

c课程设计俄罗斯方块

c 课程设计俄罗斯方块一、教学目标本课程的教学目标是让学生掌握C语言编程的基本知识,学会使用俄罗斯方块游戏引擎进行游戏开发。

具体分为以下三个部分:1.知识目标:使学生了解C语言的基本语法、数据类型、运算符、控制结构等,理解面向对象编程的基本概念,掌握游戏引擎的使用方法。

2.技能目标:培养学生具备运用C语言进行简单游戏开发的能力,能够独立完成俄罗斯方块游戏的编写,提高学生的编程实践能力。

3.情感态度价值观目标:激发学生对计算机编程的兴趣,培养学生的创新精神和团队合作意识,使学生在解决实际问题的过程中,体验到编程带来的成就感和乐趣。

二、教学内容教学内容主要包括C语言基础知识、面向对象编程、游戏引擎的使用和俄罗斯方块游戏的开发。

具体安排如下:1.第一章:C语言基础知识,包括数据类型、运算符、控制结构等。

2.第二章:面向对象编程,包括类与对象、继承与多态等。

3.第三章:游戏引擎的使用,包括引擎的基本功能、事件处理、图形渲染等。

4.第四章:俄罗斯方块游戏的开发,包括游戏逻辑、界面设计、音效处理等。

三、教学方法本课程采用讲授法、案例分析法、实验法等多种教学方法相结合的方式进行教学。

1.讲授法:用于讲解C语言基本语法、数据类型、运算符、控制结构等知识。

2.案例分析法:通过分析经典游戏案例,使学生掌握游戏引擎的使用方法和游戏开发技巧。

3.实验法:安排多次上机实验,让学生亲手编写代码,培养学生的实际编程能力。

四、教学资源教学资源包括教材、参考书、多媒体资料和实验设备等。

1.教材:选用《C程序设计原理与应用》作为主要教材,辅助以《C语言编程实战》等参考书。

2.多媒体资料:制作PPT、视频教程等,用于辅助讲解和演示。

3.实验设备:提供计算机实验室,让学生进行上机实验。

4.网络资源:推荐学生访问一些优秀的编程,如CSDN、StackOverflow等,以便于学生自主学习和交流。

五、教学评估本课程的评估方式包括平时表现、作业、考试等部分,以全面客观地评价学生的学习成果。

俄罗斯方块游戏课程设计报告

俄罗斯方块游戏课程设计报告

计算机工程学院课程设计说明书课程名称:______________________________________ 设计项目:______________________________________ 学生姓名:______________________________________ 学号:______________________________________ 专业:______________________________________ 班级:______________________________________ 指导教师:____________________________________________年______月一、任务与具体要求二、设计说明书包括的内容三、应完成的图纸四、评语及成绩指导教师(签字)_____________________年____月____日目录1.系统概述 (2)2.原有程序概况 (3)3.现在系统操作界面 (5)4.现在程序详细设计 (7)5.用户手册 (14)6.测试计划 (15)7.课程设计心得体会 (16)8.参考书籍及资料 (17)系统概述1.1现状分析在个人电脑日益普及的今天,一些有趣的桌面游戏已经成为人们在使用计算机进行工作学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一,它以其趣味性强,易上手等诸多特点得到了大众认可,因此开发此游戏软件可满足人们的一些娱乐需求.此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游戏。

1。

2项目要求俄罗斯方块是一款适合大众的游戏软件,它适合不同年龄的人玩.本软件实现的基本功能如下:●游戏区:玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况和下一个将要出现方块的提示。

●游戏控制:玩家可以通过游戏控制功能来控制游戏开始,暂停,结束游戏,游戏难度的设置以及音效控制.●玩家游戏信息存储及删除:玩家的得分在前五名时,将会记录在排行榜上,同时可为玩家清空排行榜。

《Java程序设计》实训报告范文-俄罗斯方块

《Java程序设计》实训报告范文-俄罗斯方块

《Java程序设计》实训报告范文-俄罗斯方块——《俄罗斯方块》一、实训任务及要求:1.1、实训任务1.运用Java实现小游戏的开发2.了解Java开发项目的流程3.掌握规划,设计,开发,测试的能力1.2、实训要求熟悉java的编程环境J2SDK,掌握Application和Applet的程序结构,并能熟练编写和调试两类程序。

熟练使用各种常用类库。

理解JDK的事件处理机制,掌握java.awt、java某.wing,java某.wing.event中的GUI标准组件的用法,学会合理运用布局策略、综合运用各种界面元素,编程构造满足应用需要的图形工作界面。

二、需求分析:1.课程设计的目的和意义2.系统功能设计1.本系统主要设计以下几种功能2.1、游戏难度选择功能3.游戏难度选择界面设置在程序运行开始时,一共有九种难度供玩家选择,每选一级难度,都会相应地显示出代表该难度的图片。

开始时不设置任何默认的难度,如果玩家不选难度直接按“Enter”进入,将会弹出提示框,提示其先选难度再进入。

4.2、方块下落、变形功能5.在整个俄罗斯方块游戏中,方块的设计是核心。

这里设计了一个方块类:Square(),用来生成方块以及实现块的左移、右移、向下、变形、重画、同步显示、初始化新块等。

6.3、自动升级功能7.当分数累积到一定大小时,系统将自动为玩家提高难度。

这里设置了每消除10行方块,就增加一级难度。

当难度增加的时候,方块会相应地改变颜色,以作为对玩家的提示。

8.4、游戏音乐功能9.游戏开始音乐就自动播放,游戏暂停与结束时音乐相应消除。

10.5、获取帮助功能11.这里设置了一个类,用来显示帮助,按F1键就能弹出窗口,显示游戏规则。

3.系统功能设计分析GameArea,GameSetting,GameOver,Help,ImagePanel,JieMian,MyPane l,MyTimer,PlayMidi,WinLitener,每个类的描述如下:2.1、Square,方块类。

俄罗斯方块设计报告书

俄罗斯方块设计报告书

软件体系结构设计课程设计报告课程设计题目:俄罗斯方块小游戏专业名称:软件工程2017 年6月30日一、简介1.1俄罗斯方块游戏简介《俄罗斯方块》(Tetris,俄文:Тетрис)是一款由俄罗斯人阿列克谢·帕基特诺夫于1984年6月发明的休闲游戏。

由小方块组成的不同形状的板块陆续从屏幕上方落下来,玩家通过调整板块的位置和方向,使它们在屏幕底部拼出完整的一条或几条。

这些完整的横条会随即消失,给新落下来的板块腾出空间,与此同时,玩家得到分数奖励。

没有被消除掉的方块不断堆积起来,一旦堆到屏幕顶端,玩家便告输,游戏结束。

1.2 俄罗斯方块游戏规则1.游戏主画面在一个用于摆放方块的面板上2.(1)一组由4个小型正方形组成的规则图形(即方块)共有7种形状,分别为一字形、田字形、7字形、反7形、Z形、反Z形、T形。

(2)一字形:一次最多消除四层田字形:消除一至二层7字形:最多消除三层,或消除二层反7形:最多消除三层,或消除二层Z形:最多二层,容易造成孔洞反Z形:最多二层,容易造成孔洞T形:最多二层3. 方块从区域上方开始下落,玩者可以按指定按钮左右移动方块、逆时针旋转方块,以及让方块加速落下。

4. 方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的方块出现在区域上方开始落下。

5. 当区域中某一行横向格子全部由方块填满,则该列会消失,玩家得分。

6. 当固定的方块累积堆到一定层数(设计游戏时设置)时,游戏结束。

7. 游戏会提示下一个要落下的方块形状。

二、需求分析与游戏设计2.2 需求分析2.2.1 游戏界面需求良好的用户界面设计。

本游戏主要有三个界面,一是主游戏区的面板,显示变化和下落的方块;二是用于放置按钮以及显现游戏信息的面板,三是双人对战时用以显示对方游戏信息的面板。

2.2.2 方块控制需求方块下落时,可通过特定按钮对该方块进行翻转、加速,以及向左、向右移动等操作。

2.2.3 图形显示需求随机给出不同的形状(一字形、田字形、7字形、反7形、Z形、反Z形、T形),下落填充给定的区域,填满一行则消掉记分,方块累积到一定层数无法再消去行时游戏结束。

俄罗斯方块编程课程设计报告

俄罗斯方块编程课程设计报告

课程设计报告题目:俄罗斯方块设计设计者:* *专业班级:* *学号:* *指导教师:* *所属系部:* ** *年* *月* *日、目录目录 .................... 错误!未定义书签。

一.设计的目的和要求..... 错误!未定义书签。

二.设计内容............. 错误!未定义书签。

三.设计任务............. 错误!未定义书签。

四.游戏基本规则......... 错误!未定义书签。

五.总体设计............. 错误!未定义书签。

六.详细设计与程序实现... 错误!未定义书签。

七.主要处理流程.......... 错误!未定义书签。

八.游戏设计源程序........ 错误!未定义书签。

九.截图 ................. 错误!未定义书签。

十心得体会.............. 错误!未定义书签。

十一参考文献............ 错误!未定义书签。

一.设计的目的和要求加深对《C语言》课程所学知识的理解,进一步巩固C语言语法规则。

学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力。

二.设计内容在熟练掌握C语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。

进一步掌握各种函数的应用,包括时间函数、绘图函数,以及文件的读写操作等。

三.设计任务1.游戏欢迎界面。

2.游戏执行功能,包括计算得分。

3.游戏结束界面。

四.游戏基本规则游戏共由7种不同形状的方块组成,游戏开始以后随机产生一个方块由屏幕的顶端开始向下落下,落到低端则固定到桌面,并开始下一个方块。

在游戏窗口的左边作为游戏的桌面,用宽度10和高度20的表格表示。

游戏桌面的右边靠上显示得分,最下边显示游戏帮助。

java课程设计实验报告俄罗斯方块

java课程设计实验报告俄罗斯方块

成绩评定表课程设计任务书目录1.课设软件主要功能 (1)2.类总体设 (1)2.1类组合关系图 (1)2.2主类 (2)2.3其它类 (2)3.类详细设计 (2)3.1 ERS_Block主类 (2)3.2 Command处理控制类 (4)3.3 GameCanvas游戏画布类 (4)3.4 Block方块类 (6)4.关键类成员函数流程图及代码 (7)5.软件运行结果 (17)结论 (20)参考文献 (20)1.课设软件主要功能本系统是一个俄罗斯方块游戏的系统设计[1],实现的基本功能就是能实现经典俄罗斯方块游戏的基本功能。

如用键盘上的空格下左右键来控制方块的变形,移动等功能。

点击控制面板上的开始游戏,游戏暂停,提高级数,降低级数退出游戏等按钮来实现游戏的开始,暂停,停止游戏,增加难度,降低难度等功能。

图1.1功能图2.类总体设计2.1类组合关系图图2.1. 类组合关系图2.2主类ERS_Block继承Frame类负责游戏全局的控制[2]。

对开始游戏、暂停/继续游戏、结束游戏、等级设置。

玩家可自行设定游戏等级,主要提供10种级别,级别越高,游戏速度越快,难度越大2.3其他类1.Mypanel继承Panel类。

2.Block是方块类控制块的移动,下落变形功能。

七种类型方块的父类,定义了所有类型方块的共同特征和行为。

3.GameCanvas是游戏画布类,继承Canvas类,界面设计应遵循简介美观方便易用的基本原则在游戏区显示方块。

mand类是控制按钮类。

5.MyTimer类继承自线程类Thead。

包含run()方法,sleep()方法,控制游戏的速度。

6.WinListener类继承WindowAdapter类。

3.类详细设计3.1ERS_Block主类图3.1主类数据透视图定义成员变量[3]①右边信息窗体的布局MyPanel infoScr = new MyPanel();infoScr.setLayout(new GridLayout(4,1,0,5));infoScr.setSize(120,300);②定义标签和初始值Label scorep = new Label("分数:",Label.LEFT);Label levelp = new Label("级数:",Label.LEFT);③右边控制按钮窗体的布局MyPanel controlScr = new MyPanel();controlScr.setLayout(new GridLayout(5,1,0,5));rightScr.add(controlScr);④定义按钮playButton play_b = new Button("开始游戏");play_b.setSize(new Dimension(50,200));定义按钮Level UPButton level_up_b = new Button("提高级数");level_up_b.setSize(new Dimension(50,200));⑤定义按钮Level DownButton level_down_b =new Button("降低级数");level_down_b.setSize(new Dimension(50,200));⑥定义按钮Level PauseButton pause_b =new Button("游戏暂停");pause_b.setSize(new Dimension(50,200));⑦定义按钮QuitButton quit_b = new Button("退出游戏");quit_b.setSize(new Dimension(50,200)); ;成员方法①俄罗斯方块类的构造方法方法定义:ERS_Block(String title)②isGameOver方法方法定义:private boolean isGameOver()功能描述:该方法是判断游戏是否该结束了,只需要判断窗口中的最顶端那一行中是否有方块,同时也要判断最底端的是否也有,如果都有即结束。

俄罗斯方块课程设计报告

俄罗斯方块课程设计报告

1.系统概述 (1)2.设计说明书 (4)3.系统操作界面 (6)4.源程序编码 (7)5.测试计划 (36)6.改进意见 (39)7 •课程设计心得体会 (40)8.参考书籍、资料 (40)系统概述1.1现状分析在个人电脑日益普及的今天,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一,它以其趣味性强,易上手等诸多特点得到了大众的认可,因此开发此游戏软件可满足人们的一些娱乐的需求。

此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游戏。

1.2项目要求俄罗斯方块游戏是一款适合大众的游戏软件,它适合不同年龄的人玩。

本软件要实现的功能如下:(1)游戏区:玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况。

(2)游戏控制:玩家可以通过游戏控制功能来选择开始新的一局游戏,暂停或退出游戏。

(3)级别设置:玩家可以根据自己的需要自行设定游戏的开始级别,级别越高,游戏的速度越快,难度越大。

(4)1.3 系统功能模块示意图项目开发计划书项目开发计划书设计说明1.1游戏区模块1.2控制区模块1.3系统流程图(2)游戏控制模块(开始,暂停继续,提高等级,降低等级, 停止,新游戏,帮助)系统操作界面游戏打开界面回鬲矗慕歹斯方块苦戏□Array游戏进行中界面自犠罗斯方块却E源代码编码#i nclude <stdio.h>#in elude <bios.h>#in elude <dos.h>#in elude vgraphics.h> #i nclude <stri ng.h>#i nclude <stdlib.h>#define true 1#define false 0#defi ne BoardWidth 12#defi ne BoardHeight 23 #define _INNER_HELPERinner helper method */ /*Scan Codes Define*/en umKEYCODESK_ESC =0x011b.K_UP =0x4800, /* upward arrow */K_LEFT =0x4b00,K_DOWN =0x5000,K_RIGHT =0x4d00,K_SPACE =0x3920,K_P =0x1970};/* the data structure of the block */ typedef struct tagBlock {char c[4][4]; /* cell fill info array, 0-empty, 1-filled */ int x; /* block position cx [ 0,BoardWidht -1] */ int y; /* block position cy [-4,BoardHeight-1] */ char color; /* block color */char size; /* block max size in w idth or height */char name; /* block name (the block's shape) */} Block;/* game's global info */int FrameTime= 1300;int CellSize= 18;int BoardLeft= 30;int BoardTop= 30;/* next block grid */int NBBoardLeft= 300;int NBBoardTop= 30;int NBCellSize= 10;/* score board position */int ScoreBoardLeft= 300;int ScoreBoardTop=100;int ScoreBoardWidth=200;int ScoreBoardHeight=35;int ScoreColor=LIGHTCYAN;/* infor text postion */int InfoLeft=300;int InfoTop=200;int InfoColor=YELLOW;int BorderColor=DARKGRAY;int BkGndColor=BLACK;int GameRunning=true;int TopLine=BoardHeight-1; /* top empty line */int TotalScore=100;char info_score[20];char info_help[255];char info_common[255];/* our board, Board[x][y][0]-isFilled, Board[x][y][1]-fillColor*/unsigned char Board[BoardWidth][BoardHeight][2];char BufferCells[4][4]; /* used to judge if can rotate/* current moving block */ next Blockto appear */ /* function list */int GetKeyCode();int CanMove(int dx,int dy);int CanRotate();int RotateBlock(Block *block);int MoveBlock(Block *block,int dx,int dy); void DrawBlock(Block *block,int,int,int); void EraseBlock(Block *block,int,int,int); void DisplayScore();void DisplayInfo(char* text);void GenerateBlock(Block *block);void NextBlock();void InitGame();int PauseGame();void QuitGame();/*Get Key Code */int _INNER_HELPEGRetKeyCode(){int key=0;if(bioskey(1)){key=bioskey(0);}return key;}/* display text! */void _INNER_HELPEDRisplayInfo(char *text) {setcolor(BkGndColor);outtextxy(InfoLeft,InfoTop,info_common);strcpy(info_common,text); setcolor(InfoColor);outtextxy(InfoLeft,InfoTop,info_common);}/* create a new block by key number,* the block anchor to the top-left corner of 4*4 cells block */Block curBlock; Block nextBlock; /*_INNER_HELPEGRenerateBlock(Block *block)int key=(random(13)*random(17)+random(1000)+random(3000))%7;block->size=3;/* because most blocks' size=3 */ memset(block->c,0,16); switch(key){case 0:block->name='T'; block->color=RED; block->c[1][0]=1;block->c[1][1]=1, block->c[2][1]=1; block->c[1][2]=1; break; case 1:block->name='L'; block->color=YELLOW; block->c[1][0]=1; block->c[1][1]=1;block->c[1][2]=1, block->c[2][2]=1; break; case 2:block->name='J';block->color=LIGHTGRAY; block->c[1][0]=1; block->c[1][1]=1;block->c[1][2]=1, block->c[0][2]=1; break; case 3:block->name='z'; block->color=CYAN;block->c[0][0]=1, block->c[1][0]=1; block->c[1][1]=1, block->c[2][1]=1; break; case 4:block->name='5';block->color=LIGHTBLUE;block->c[1][0]=1, block->c[2][0]=1; block->c[0][1]=1, block->c[1][1]=1; break; case 5:block->name='o'; block->color=BLUE;*/void {block->size=2;block->c[0][0]=1, block->c[1][0]=1;block->c[0][1]=1, block->c[1][1]=1; break;case 6: block->name='I'; block->color=GREEN;block->size=4; block->c[1][0]=1; block->c[1][1]=1;block->c[1][2]=1; block->c[1][3]=1; break;}}/* get next block! */ void NextBlock(){/* copy the nextBlock to curBlock */curBlock.size=nextBlock.size; curBlock.color=nextBlock.color;curBlock.x=(BoardWidth-4)/2; curBlock.y=-curBlock.size;memcpy(curBlock.c,nextBlock.c,16);/* generate nextBlock and show it */EraseBlock(&nextBlock,NBBoardLeft,NBBoardTop,NBCellSize);GenerateBlock(&nextBlock);nextBlock.x=1,nextBlock.y=0;DrawBlock(&nextBlock,NBBoardLeft,NBBoardTop,NBCellSize);}/* rotate the block, update the block struct data */int _INNER_HELPE R otateCells(char c[4][4],char { char temp,i,j;switch(blockSize){case 3:temp=c[0][0];c[0][0]=c[2][0], c[2][0]=c[2][2], c[0][2]=temp;temp=c[0][1];c[0][1]=c[1][0], c[1][0]=c[2][1],blockSize)c[2][2]=c[0][2],c[2][1]=c[1][2break;/* judge if the block can move toward the direction */ int CanMove(int dx,int dy){int i,j,tempX,tempY;for(i=0;i<curBlock.size;i++){for(j=0;j<curBlock.size;j++){if(curBlock.c[i][j]){/* cannot move leftward or rightward */ tempX = curBlock.x + i + dx;if(tempX<0 || tempX>(BoardWidth-1)) return false;/* make sure x is valid! *//* cannot move downward */tempY = curBlock.y + j + dy; if(tempY>(BoardHeight-1)) onlychecked lower bound, maybe negative!!!! /* the cell already filled,if(tempY>=0 && Board[tempX][tempY][0]) returnfalse;}}}return true;}/* judge if the block can rotate */ int CanRotate(){int i,j,tempX,tempY; /* update buffer */memcpy(BufferCells, curBlock.c, 16); RotateCells(BufferCells,curBlock.size); for(i=0;i<curBlock.size;i++){for(j=0;j<curBlock.size;j++)c[1][2]=temp ; case 4: /* only 'I'c[1][0]=1-c[1][0], c[0][1]=1-c[0][1], c[3][1];break;}}block arived here! */ c[1][2]=1-c[1][2], c[2][1]=1-c[1][3]=1-c[1][3];c[3][1]=1- return false; /* y is*/ we must check Y's upper bound before check cell*/{if(BufferCells[i][j]){tempX=curBlock.x+i;tempY=curBlock.y+j;if(tempX<0 || tempX>(BoardWidth-1))return false;if(tempY>(BoardHeight-1))return false;if(tempY>=0 && Board[tempX][tempY][0])return false;}}}return true;}/* draw the block */void _INNER_HELPERDrawBlock(Block *block,int bdLeft,intbdTop,int cellSize){int i,j;setfillstyle(SOLID_FILL,block->color);for(i=0;i<block->size;i++){for(j=0;j<block->size;j++){if(block->c[i][j] && (block->y+j)>=0){floodfill(bdLeft+cellSize*(i+block->x)+cellSize/2,bdTop+cellSize*(j+block->y)+cellSize/2,BorderColor);}}}}/* Rotate the block, if success, return true */int RotateBlock(Block *block){char temp,i,j;int b_success;if(block->size==2)return true;if(( b_success=CanRotate())){EraseBlock(block,BoardLeft,BoardTop,CellSize);memcpy(curBlock.c,BufferCells,16);DrawBlock(block,BoardLeft,BoardTop,CellSize);}return b_success;}/* erase a block, only fill the filled cell with background color */ void_INNER_HELPEREraseBlock(Block *block,int bdLeft,int bdTop,int cellSize){int i,j;setfillstyle(SOLID_FILL,BkGndColor);for(i=0;i<block->size;i++){for(j=0;j<block->size;j++){if(block->c[i][j] && (block->y+j>=0)){floodfill(bdLeft+cellSize*(i+block->x)+cellSize/2,bdTop+cellSize*(j+block->y)+cellSize/2, BorderColor);}}}}/* move by the direction if can, donothing if cannot* return value: true - success, false - cannot move toward this direction */ int MoveBlock(Block *block,int dx,int dy) {int b_canmove=CanMove(dx,dy); if(b_canmove){EraseBlock(block,BoardLeft,BoardTop,CellSize); curBlock.x+=dx; curBlock.y+=dy;DrawBlock(block,BoardLeft,BoardTop,CellSize);}return b_canmove;}/* drop the block to the bottom! */ int DropBlock(Block *block){EraseBlock(block,BoardLeft,BoardTop,CellSize); while(CanMove(0,1)){curBlock.y++;}DrawBlock(block,BoardLeft,BoardTop,CellSize);return 0;/* return value is assign to the block's alive */}/* init the graphics mode, draw the board grid */ void InitGame(){int i,j,gdriver=DETECT,gmode; struct time sysTime; /* draw board cells */memset(Board,0,BoardWidth*BoardHeight*2); memset(nextBlock.c,0,16); strcpy(info_help,"P: Pause Game. --by hoodlum1980"); initgraph(&gdriver,&gmode,"");setcolor(BorderColor); for(i=0;i<=BoardWidth;i++) {line(BoardLeft+i*CellSize, BoardTop+ BoardHeight*CellSize); }for(i=0;i<=BoardHeight;i++){line(BoardLeft,BoardLeft+BoardWidth*CellSize,}/* draw board outer border rectangle(BoardLeft-CellSize/4,BoardLeft+BoardWidth*CellSize+CellSize/4, BoardTop+BoardHeight*CellSize+CellSize/4); /* draw next block grids */ for(i=0;i<=4;i++){line(NBBoardLeft+i*NBCellSize, NBBoardTop,NBBoardLeft+i*NBCellSize, NBBoardTop+4*NBCellSize);BoardTop, BoardLeft+i*CellSize,BoardTop+i*CellSizeBoardTop+ i*CellSize); rect */BoardTop-CellSize/4,line(NBBoardLeft, NBBoardTop+i*NBCellSize,NBBoardLeft+4*NBCellSize, NBBoardTop+i*NBCellSize);}/* draw score rect */rectangle(ScoreBoardLeft,ScoreBoardTop,ScoreBoardLeft+ScoreBoardWidth,S coreBoardTop+ScoreBoardHeight);DisplayScore();/* set new seed! */ gettime(&sysTime);srand(sysTime.ti_hour*3600+sysTime.ti_min*60+sysTime.ti_sec);GenerateBlock(&nextBlock);NextBlock(); /* create first block */setcolor(DARKGRAY);outtextxy(InfoLeft,InfoTop+20,"Up -rotate Space-drop");outtextxy(InfoLeft,InfoTop+35,"Left-left Right-right");outtextxy(InfoLeft,InfoTop+50,"Esc -exit");DisplayInfo(info_help);}/* set the isFilled and fillcolordata to the board */void _INNER_HELPEFRillBoardData(){int i,j;for(i=0;i<curBlock.size;i++){for(j=0;j<curBlock.size;j++){if(curBlock.c[i][j] && (curBlock.y+j)>=0){Board[curBlock.x+i][curBlock.y+j][0]=1;Board[curBlock.x+i][curBlock.y+j][1]=curBlock.color;}/* draw one line of the board */void _INNER_HELPEPRaintBoard(){int i,j,fillcolor; for(j=max((TopLine-4),0);j<BoardHeight;j++){for(i=0;i<BoardWidth;i++){ fillcolor=Board[i][j][0]? Board[i][j][1]:BkGndColor;setfillstyle(SOLID_FILL,fillcolor);floodfill(BoardLeft+i*CellSize+CellSize/2,BoardTop+j*CellSize+CellSize/2,BorderColor);}}}/* check if one line if filled full and increase the totalScore! */ void_INNER_HELPECRheckBoard(){int i,j,k,score=10,sum=0,topy,lines=0;/* we find the top empty line! */ j=topy=BoardHeight-1;do{sum=0;for(i=0;i< BoardWidth; i++){ sum+=Board[i][topy][0];}topy--;} while(sum>0 && topy>0);/* remove the full filled line (max remove lines count = 4) */ do{sum=0;for(i=0;i< BoardWidth; i++) sum+=Board[i][j][0];if(sum==BoardWidth)/* we find this line is full filled, remove it! */{/* move the cells data down one line */ for(k=j; k > topy;k--){ for(i=0;i<BoardWidth;i++) {Board[i][k][0]=Board[i][k-1][0];Board[i][k][1]=Board[i][k-1][1];}}/*make the top line empty! */ for(i=0;i<BoardWidth;i++) {Board[i][topy][0]=0;Board[i][topy][1]=0;}topy++; /* move the topline downward one line! */ lines++; /*lines <=4 */ TotalScore+=score;score*=2; /* adding: 10, 30, 70, 150 */}elsej--;} while(sum>0 && j>topy && lines<4);/* speed up the game when score is high, minimum is 400 */FrameTime=max(1200-100*(TotalScore/200), 400);TopLine=topy;/* update the top line *//* if no lines remove, only add 1: */if(lines==0)TotalScore++;}/* display the score */void _INNER_HELPEDRisplayScore(){setcolor(BkGndColor);outtextxy(ScoreBoardLeft+5,ScoreBoardTop+5,info_score);setcolor(ScoreColor);sprintf(info_score,"Score: %d",TotalScore);outtextxy(ScoreBoardLeft+5,ScoreBoardTop+5,info_score);}/* we call this function when a block is inactive. */ void UpdateBoard(){FillBoardData(); CheckBoard();PaintBoard();DisplayScore();}/* pause the game, and timer handler stop move down the block! */ int PauseGame(){int key=0;DisplayInfo("Press P to Start or Resume!"); while(key!=K_P && key!=K_ESC) { while(!(key=GetKeyCode())){}}DisplayInfo(info_help);return key;}/* quit the game and do cleaning work. */ void QuitGame(){ closegraph();}/* the entry point function. */void main(){int i,flag=1,j,key=0,tick=0;InitGame(); if(PauseGame()==K_ESC) goto GameOver;/* wait until a key pressed */ while(key!=K_ESC){/* wait until a key pressed */ while(!(key=GetKeyCode())) {tick++;if(tick>=FrameTime){/* our block has dead! (can't move down), we get nextblock */if(!MoveBlock(&curBlock,0,1)){UpdateBoard();NextBlock();if(!CanMove(0,1))goto GameOver;}tick=0;}delay(100);}switch(key){case K_LEFT:MoveBlock(&curBlock,-1,0);break;case K_RIGHT:MoveBlock(&curBlock,1,0);break;case K_DOWN:MoveBlock(&curBlock,0,1);break;case K_UP:RotateBlock(&curBlock);break;case K_SPACE:DropBlock(&curBlock);break;case K_P:PauseGame();break;}}GameOver:DisplayInfo("GAME OVER! Press any key to exit!"); getch(); /* wait the user Press any key. */ QuitGame();}测试计划1.1 测试方案本游戏的测试方法采用检查各个功能能否实现的方法1.2测试项目及功能控制区开始:实现游戏的开始暂停:实现游戏暂停继续:实现游戏继续提高级数: 提高级数增加游戏的难度降低级数:降低级数减小游戏的难度菜单区新游戏:游戏结束从新开始新一轮的游戏提高级数:提高游戏难度降低级数:减小游戏难度退出:退出游戏开始:开始游戏暂停:暂停正在进行的游戏从新开始:重新开始游戏停止:停止正在进行的游戏帮助信息:游戏控制键显示区:显示俄罗斯方块提前显示窗口:显示下一个方块的样式测试进度:本游戏在我和同组李帅同学的辛苦努力下用了半天的时间完成了1.3测试准备编写相应的驱动模块,并精心设计测试用例1.4测试机构测试人员: 王新勃职责:找出程序中的错误,实现游戏的功能1.5 测试项目说明测试1:名称:控制区功能测试目的:测试控制区各个功能的按钮。

JAVA--俄罗斯方块实验报告

JAVA--俄罗斯方块实验报告

JAVA–俄罗斯方块实验报告实验目的本次实验旨在通过使用JAVA程序设计语言编写俄罗斯方块游戏,巩固和深入理解JAVA语言的基础知识,提高编程实践能力。

实验环境本次实验主要使用了Java SE SDK 8环境,使用Eclipse Java EE IDE for Web Developers编程工具,以及Java AWT和Java Swing开发组件。

实验过程首先,我们需要确定游戏的基本功能和规则:•游戏开始时,屏幕上出现一个空白的方块区域,以及一个正在下落的方块组合(包括四个小方块);•玩家通过移动和旋转方块来使其落到正确的位置;•当一个完整的水平行被填满时,该行会消失并向下移动其上面的方块;•当屏幕上出现一个顶部行被填满时,游戏结束。

接下来,我们需要考虑如何实现这些功能:1.创建游戏屏幕并绘制方块•使用Java AWT和Java Swing组件创建一个屏幕窗口,并在该窗口中创建一个Panel,用于绘制游戏方块区域;•实现绘制方块的方法,例如,使用drawRect()方法绘制一个小方块,实现方块组合的方法。

2.状态管理和动作控制•状态管理:定义枚举类型来表示方块的状态(例如,下落、停止、旋转等);•动作控制:实现按键监听器来接收玩家输入的键盘事件,并根据事件执行相应的动作。

3.移动和旋转操作的实现•根据当前方块的状态,在方块组合中确定一个基准点,以此为基础进行方块的移动和旋转;•对于方块的移动,计算新的位置并检查其是否合法;•对于方块的旋转,计算新的方块组合位置并检查其是否合法,若不合法则撤销当前的旋转操作。

4.水平行填满的处理•在Panel中定义一个二维数组,存储每个小方块的位置以及其所在的行和列;•定义方法来检查每一行是否填满,并返回一个布尔值;•在检查到满行时,将该行变为灰色表示该行已填满,并将所有位于该行上方的方块向下移动一行。

5.游戏结束的处理•定义方法来判断游戏是否结束,判断条件为:新的方块组合不能在放置时超出游戏区域的顶部。

俄罗斯方块课程设计报告

俄罗斯方块课程设计报告

俄罗斯方块课程设计报告一问题的分析关于俄罗斯方块程序的一些问题(以及我写的游戏是否解决这些问题):怎么样设置图形显示?(运用解决EasyX,但方块之间的变色未解决)常用图形函数的用法?(运用EasyX_Help.chm)怎样获取鍵盘输入?怎样控制方块的移动?怎样控制时间间隔(用于游戏中控制形状的下落)?游戏中的各种形状及整个游戏空间怎么用数据表示?游戏中怎么判断左右及向下移动的可能性?游戏中怎么判断某一形状旋转的可能性?按向下方向键时加速某一形状下落速度的处理?怎么判断某一形状已经到底?怎么判断某一已经被填满?(以上基本解决)怎么消去已经被填满的一行?怎么消去某一形状落到底后能够消去的所有的行?(以上二个问题,玩的过程会发现有点问题,希望有人能帮我改过来)怎样修改游戏板的状态?怎样统计分数?怎样处理升级后的加速问题?怎样判断游戏结束?关于计分板设计的问题。

关于“下一个”形状取法的问题。

最高记录的显示。

实现一个进度存储功能(以上能解决)二、设计理念其中数显关系为重点难点!其次控制平台的的构建要先做。

(后面的每一个函数的测试多要用到)结构关系如下:三、函数调用关系如下:数据说明;Board[22][13];为游戏版面上已经固定的方块,数据1为有固定的方块。

以下数据为开始新游戏版面上的数据(其中上面的1为边,可通过运行“读取上次游戏数据.c ”查看,但得先保存游戏)1111111111111100000000000110000000000011000000000001100000000000110000000000011000000000001100000000000110000000000011000000000001100000000000110000000000011000000000001100000000000110000000000011000000000001100000000000110000000000011000000000001100000000000110000000000011111111111111结构体ID,XY 分别表示相对坐标和颜色(color 我没用上,绘制不同颜色的方块有点麻烦)XY 表示实际坐标和方向DRAW 用于显示方块和隐藏方块函数说明:DrawBlocks();DrawBlock();为由数据绘制方块其函数思想:将相对坐标放大Size=30倍加实际坐标后用bar3d()绘制 Init();绘界面NewBlock();随机生成方块,其中调用了DrawBlock()DesignBlock() 用于设计方块,我的设计方法如下:其它的类似。

俄罗斯方块课程设计

俄罗斯方块课程设计

附件1:攀枝花学院学生课程设计(论文)题目:俄罗斯方块学生姓名:陈小蝶学号: 2所在院(系):数学与计算机学院专业: 2013级软件工程班级:软件工程1班指导教师:张会职称:2014年6 月 23日攀枝花学院教务处制攀枝花学院本科学生课程设计任务书注:任务书由指导教师填写。

附件3:摘要近年来,随着游戏产业的突飞猛进,游戏玩家的技术也是与日俱增,当你看见游戏高手完美的表演时,你是否想过我也能达到那种水平,本程序采用全世界最金典的游戏—俄罗斯方块作为背景,程序设置了鼠标和键盘两个选择方式,游戏运行时随着等级的提高而速度加快,这需要玩家快速操作。

因此,本程序主要意义是为高手玩家提供训练平台。

其次也可为刚踏入游戏领域的新手们,提供一个很好的锻炼机会。

本次课程设计主要解决利用Visual C++设计实现俄罗斯方块游戏的算法、游戏内部功能、游戏区域的绘图的程序设计。

对于每个俄罗斯方块各自的形态变化改变到下一个形态利用数组来实现,在程序设计中,采用WIN32机制来实现,并且直接从架构的其中一个类对象中继承下来,将它完善而变成有某功能特性的物件对象。

关键词俄罗斯方块数据结构算法数组 Visual C++目录摘要 (Ⅰ)一、绪论 (2)1.1 课题背景 (2)二、课程设计的要求与目的……………………………………………………32.1 课程设计的要求 (3)2.2课程设计的目的 (3)三、程序需求分析3.1 功能需求…………………………………………………………………………………3.2方块及各种变化需求……………………………………………………………………3.3操作需求3.31 向上键……………………………………………………………………………………3.32向下键……………………………………………………………………………………3.33向右键………………………………………………………………………………….四、程序流程图4.1 主要功能设计…………………………………………………………………………4.2 程序流程图……………………………………………………………………………4.3 游戏界面………………………………………………………………………………4.4生成方块……………………………………………………………………………4.5 方块变形………………………………………………………………………………4.6 方块显示……………………………………………………………………………4.7 障碍判断………………………………………………………………………………4.8 消行记分………………………………………………………………………………4.9 暂停退出………………………………………………………………………………4.10 软件使用说明……………………………………………………………………………五、源程序代码5.1 源程序代码………………………………………………………………………………六、程序结果6.1 程序结果…………………………………………………………………………………参考文献...................................................................................................致谢 (56)第一章绪论俄罗斯方块是个老幼皆宜的小游戏,是经久不衰的一款游戏,自从它诞生那天起就一直深受人们的喜爱。

俄罗斯方块课程设计报告

俄罗斯方块课程设计报告

俄罗斯方块课程设计报告一、课程设计目的本课程设计旨在通过学习俄罗斯方块游戏的开发,提高学生的编程能力和游戏开发能力,同时培养学生的团队协作能力和创新思维能力。

二、课程设计内容1. 课程介绍介绍俄罗斯方块游戏的历史和基本玩法,以及本课程设计的目的和内容。

2. 编程基础介绍编程语言的基本语法和数据类型,以及常用的编程工具和开发环境。

3. 游戏开发基础介绍游戏开发的基本概念和流程,包括游戏设计、图形渲染、物理引擎等。

4. 俄罗斯方块游戏开发学生将分成小组,每个小组负责开发一个俄罗斯方块游戏。

课程将涵盖以下内容:(1)游戏设计:包括游戏规则、游戏界面、游戏音效等。

(2)图形渲染:使用图形库实现游戏界面的绘制和更新。

(3)物理引擎:使用物理引擎实现方块的运动和碰撞检测。

(4)游戏逻辑:实现游戏的逻辑控制,包括方块的生成、移动、旋转、消除等。

(5)游戏优化:优化游戏性能,提高游戏体验。

5. 课程总结总结本课程的学习成果和经验,分享学生的游戏作品,并讨论游戏开发的未来发展方向。

三、课程设计要求1. 学生需要具备一定的编程基础,熟悉至少一种编程语言。

2. 学生需要具备一定的游戏开发基础,熟悉至少一种游戏引擎或图形库。

3. 学生需要分组完成一个俄罗斯方块游戏的开发,每个小组需要有至少3名成员。

4. 学生需要按时提交作业和项目,参加课堂讨论和评估。

四、课程设计评估1. 课堂表现(20%):包括参与课堂讨论、提问和回答问题、课堂作业等。

2. 项目评估(60%):包括游戏的功能、界面、性能、创新等方面的评估。

3. 个人贡献(20%):包括个人在小组中的贡献、代码质量、文档编写等方面的评估。

五、课程设计参考资料1. 《Python编程从入门到实践》2. 《Unity游戏开发实战》3. 《OpenGL编程指南》4. 《游戏引擎架构》5. 《游戏设计基础》6. 《游戏开发实战》7. 《游戏编程模式》8. 《游戏开发中的数学》9. 《游戏开发中的物理学》10. 《游戏开发中的人工智能》。

c课程设计俄罗斯方块

c课程设计俄罗斯方块

c 课程设计俄罗斯方块一、课程目标知识目标:1. 学生能够理解俄罗斯方块游戏的起源、发展及其在计算机科学中的应用。

2. 学生能够掌握运用基础编程知识,设计并实现一个简单的俄罗斯方块游戏。

3. 学生能够了解并解释俄罗斯方块游戏中的几何图形变换原理。

技能目标:1. 学生能够运用所学的编程技能,进行问题分析、设计算法,并编写代码实现游戏功能。

2. 学生能够通过实际操作,培养解决实际问题的能力,提高逻辑思维和创新能力。

3. 学生能够通过团队合作,培养沟通协调能力和团队协作精神。

情感态度价值观目标:1. 学生通过学习,培养对计算机科学的兴趣,激发学习编程的热情。

2. 学生能够在游戏设计过程中,体验编程的乐趣,提高自信心和成就感。

3. 学生能够认识到团队合作的重要性,培养积极向上的团队精神。

课程性质:本课程为信息技术学科,结合实际操作和团队合作,培养学生编程兴趣和技能。

学生特点:五年级学生,具备一定的计算机操作能力,对游戏有较高的兴趣。

教学要求:结合学生特点,注重实践操作,以小组合作形式进行教学,培养学生编程思维和团队协作能力。

通过本课程,使学生在掌握知识技能的同时,提高情感态度价值观。

将课程目标分解为具体学习成果,以便教学设计和评估。

二、教学内容1. 游戏发展史简介:介绍俄罗斯方块游戏的起源、发展及其在计算机科学中的应用。

- 教材章节:第一章 计算机游戏概述2. 编程基础:运用所学的编程知识,如变量、循环、条件语句等,设计游戏逻辑。

- 教材章节:第二章 编程基础3. 几何图形变换:学习并解释俄罗斯方块游戏中几何图形的旋转、移动原理。

- 教材章节:第三章 几何图形与变换4. 游戏设计实现:分析问题,设计算法,编写代码实现简单俄罗斯方块游戏。

- 教材章节:第四章 游戏设计基础5. 团队合作与沟通:以小组合作形式,共同完成游戏设计,培养沟通协调能力。

- 教材章节:第五章 团队合作与沟通教学内容安排与进度:第一课时:游戏发展史简介,激发学生学习兴趣。

俄罗斯方块JAVA课程设计实验报告

俄罗斯方块JAVA课程设计实验报告

目录一.引言 (2)1.1运行环境 (2)二.需求分析 (2)2.1开发背景 (2)2.2设计目的 (2)2.3功能需求 (2)三.概要设计 (3)3.1设计思想 (3)3.2系统架构 (3)四.详细设计 (3)4.1事件处理 (3)4.2界面设计 (4)4.3游戏画布类 (4)4.4方块类 (6)4.5消行并统计分数 (11)五.使用说明 (12)5.1游戏开始运行 (12)5.2填满一行即消行得分 (13)5.3列被填满,则游戏自动结束 (14)六.课程设计总结与体会 (14)七.参考文献 (15)一.引言1.1运行环境操作系统:Microsoft Windows XP程序语言:Java开发工具:JCreator LE 4.50二.需求分析2.1开发背景Java是现在全球最时髦的开发工具之一,它拥有一套庞大且完善的类库,内置了其他语言需要靠库甚至是操作系统才能支持的功能。

Java的产生与流行是Internet 发展的客观要求。

如今越来越多的应用程序是Java开发的,用Java开发的应用程序可在任何计算平台安全运行。

Java作为一个分布式的,面向对象的程序设计方法,可以让位于任何地方的任何计算机使用网络上的应用程序。

可以说Java是一个万能的开发平台,用Java编程成为一种趋势。

2.2设计目的通过本次课程设计了解和掌握JDK开发环境以及JCreator等集成开发环境,巩固所学的Java知识及编程机制。

了解Java程序开发流程,学会构思比较复杂的课程设计思想;能合理的利用本学期所掌握的多线程、类、GUI等知识编写一个较为复杂的Java应用软件。

掌握面向对象成学设计的有关概念和开发方法,锻炼团队合作开发精神。

2.3功能需求本课程设计的目标是设计一个名为《俄罗斯方块》的游戏软件,实现其界面的初始化,程序运行,退出,和相应数据处理。

能实现游戏的基本功能,类似下移、左移、右移、翻转、得分累加等,并在规定时间内达到课题所需要实现的功能及要求。

俄罗斯方块java课程设计

俄罗斯方块java课程设计

俄罗斯方块java 课程设计一、课程目标知识目标:1. 学生能理解俄罗斯方块游戏的规则和基本逻辑;2. 学生能掌握Java编程语言中的面向对象编程思想,包括类的定义、对象创建、方法调用等;3. 学生能运用Java编程语言实现俄罗斯方块游戏的基本功能,如方块的移动、旋转、消行等。

技能目标:1. 学生能运用面向对象的编程思想,独立完成俄罗斯方块游戏的编写;2. 学生能通过编写代码解决实际问题,提高编程实践能力;3. 学生能运用调试工具,分析并解决程序中的错误,提高程序调试能力。

情感态度价值观目标:1. 学生通过完成本课程的学习,培养对编程的兴趣和热情,提高学习主动性和积极性;2. 学生在团队协作中,学会与他人沟通、分享、合作,培养良好的团队精神和沟通能力;3. 学生在编写程序过程中,培养耐心、细心和解决问题的能力,增强克服困难的信心。

课程性质:本课程为信息技术学科的课程,旨在让学生通过实践操作,掌握Java编程语言的基本知识和技能。

学生特点:本课程面向初中年级学生,他们在学习过程中好奇心强,喜欢动手实践,但可能缺乏一定的编程基础。

教学要求:结合学生特点,注重启发式教学,引导学生通过实践探索,掌握编程技能。

在教学过程中,关注学生的个体差异,提供个性化指导,确保每位学生都能达到课程目标。

将课程目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容1. Java编程基础:包括数据类型、变量、运算符、流程控制(分支、循环)、数组等基本概念;教材章节:第一章至第三章。

2. 面向对象编程:类的定义、构造方法、成员变量、成员方法、封装、继承、多态等;教材章节:第四章至第六章。

3. Java图形用户界面(GUI):Swing组件、事件处理、布局管理等;教材章节:第七章。

4. 俄罗斯方块游戏设计与实现:a) 游戏逻辑设计:方块形状、移动规则、消行判断等;b) 程序设计:使用面向对象方法设计类和对象,实现游戏功能;c) 界面设计:使用Swing组件设计游戏界面,实现游戏交互。

VC俄罗斯方块课程设计报告含源代码

VC俄罗斯方块课程设计报告含源代码

课程设计报告文档题目:俄罗斯方块一.引言1、编写目的:通过本课程设计,使学生巩固面向对象程序设计的基本概念、原理和技术,学会使用Visual C++开发工具进行简单面向对象程序的开发,将理论与实际相结合,完成一个小型面向对象程序的设计与实现,并在此基础上强化学生的实践意识,提高其实际动手能力和创新能力;2、.定义:无3、参考资料:郑莉.C++语言程序设计.北京:清华大学出版社,2003罗建军.大学Visual C++程序设计案例教程.北京:高等教育出版社,2004刘路放.Visual C++与面向对象程序设计教程.北京:高等教育出版社,2000David C++技术内幕.潘爱民印译.北京:清华大学出版社,1999侯俊杰.深入浅出MFC.武汉:华中科技大学出版社,2001二.任务的描述:1.目标:编写基于VC++开发工具并能通过键盘和鼠标进行人机交流俄罗斯方块游戏,界面友好,容易操作的游戏;2.功能描述:通过控制键盘可以进行游戏的开始、暂停、结束;能够控制方块的移动、变形;具有进行经典的俄罗斯方块游戏的一般功能;24Y1类1:CAboutDlg类是建立MFC程序时自动生成的类,俄罗斯方块游戏基本上用不到这个类,故不做解释;(2)类2:CMainFrame框架类主要是对游戏的框架进行设计;数据成员:CStatusBar m_wndStatusBar; 工具栏CToolBar m_wndToolBar;状态栏成员函数:1、CMainFrame构造函数:初始化游戏;2、~CMainFrame析构函数:删除游戏数据;3、OnCreate:工具栏的实现;4、PreCreateWindow游戏窗口的规格实现;(3)类3:COptionDlg游戏状态显示类:主要实现对游戏在进行中的一些状态显示比如:级别、下一个方块;数据成员:int m_oldArea; 区域大小int m_o ldLevel;等级int m_oldBlockSytle;背景风格BOOL m_oldDrawGrid;成员函数:1、COptionDlg初始化界面:用户选择的区域大小代码,及级别代码,方块样式2、DoDataExchange数据类型的转换:由键盘消息转换成函数响应消息3、Onok当用户按OK按钮ID是IDOK时调用;覆盖该执行OK按钮动作; 包括自动数据检验和,缺省方式是对应用的某些进行数据的检验和;4CSkyblue_RectApp程序自动生成;5CSkyblue_RectView视图类:这是本游戏主要编写的地方:实现方块的随机生成、方块的移动、变形;游戏的消行、升级、速度的提升以及游戏的开始和结束;数据成员:int m_nWidth; 子窗口的宽度int m_nHeight; 子窗口的高度int m_iCol;int m_iRow; 列与行的数量int m_iLarge;小方块的大小,它会随着行与列的不同而不同,具体为:12行10列,30个象素的正方形18行15列,2024行20列,1530行25列,12int m_iLevel;当前的级别,换算成速度的算法为:1500 - m_iLevel200int m_iBlockSytle;当前选择的方块显示样式int m_iStartX;int m_iStartY;游戏区域左上角的坐标BOOL IsLeftLimit; 坠物件是否可向左移动BOOL IsRightLitmit;int InterFace744;接触面二维数组,记录1~7种下坠物的1~4种形态的接触面信息,把该下坠物的某种形态种的4个方块,有接触面则记录方位,无则为-1标识;int m_currentRect;当前的方块形状CString m_strArea;CString m_strLevel;当前的样式 ,下一个将会出现的样式int m_icurrentStatus;int m_inextStatus;OnDraw中需要用到的设备名称CPen m_pBlackPen;CBrush m_pGrayBrush;CBrush m_pBlackBrush;BOOL m_bDrawGrid; 是否画网格线int m_iPerformance;游戏总成绩BOOL m_bGameEnd;游戏是否已结束,为FALSE表示开始,否则为结束成员函数1、ActiveStatusToGameStatus将当前下坠物的位置映射到游戏区域地图数组中去;2、CSkyblue_RectView初始化游戏;3、~CSkyblue_RectView删除游戏数据;4、CurrentAreaAndLevel用于生成当前区域大小与级别所对应的汉字描述;5、DCEnvClear调取位图资源;6、DcEnvInitial绘图环境初始化;7、DrawGameCDC pDC绘制整个游戏所在窗口的背景;8、InvalidateCurrent刷新当前的区域;9、IsBottom判断当前方块是否已到底,并且销行等相关的工作;10、IsLeftLimit方块是否还可以左移;11、IsRightLitmit方块是否还可以右移;12、OnCreateLPCREATESTRUCT lpCreateStruct 创建一些设备;13、OnDrawCDC pDC承担所有绘制屏幕工作;14、OnGameEnd 游戏结束;15、OnGameExit清理内存设备环境,释放资源;16、OnGameOption 游戏设置;17、OnGamePaush游戏暂停;18、OnGameStart游戏开始;19、OnKeyDownUINT nChar, UINT nRepCnt, UINT nFlags处理用户的输入,方块的左,右移,加速及变形;20、OnOptionArea用菜单设置区域大小;21、OnOptionLevel1 用菜单设置游戏级别:22、OnTimer承担所有驱动工作;23、OnUpdateGameEndCCmdUI pCmdUI如果游戏开始,则此游戏结束按钮被开启;24、OnUpdateGameExitCCmdUI pCmdUI 如果游戏开始,则此退出系统按钮被屏蔽;25、OnUpdateGamePaushCCmdUI pCmdUI 如游戏开始,则游戏暂停按钮开启26、Randomint MaxNumber:产生一个最大值不大于指定值的随机正整数Random;27、RectArrowint m_Type:当前方块下降加速,左移,右移28、RectChange:方块的变形29、RectDown当前方块下降30、RectStatusToActiveStatusint m_which初始掉落时,将根据方块的样式决定当前动态数组的值31、RectStatusToNextStatusint m_which初始掉落时,将根据方块的样式决定下一次将要掉下来的动态数组的值3.类之间的关系:1.问题11问题描述:所遇问题的描述;2解决办法:该问题的解决办法;2.问题21问题描述:所遇问题的描述;2解决办法:该问题的解决办法;……………………………………………五.程序运行1、游戏主页面:游戏主界面,上方是开始、暂停、结束、设置按钮;设置按钮2、游戏开始:注:右上角是下一个方块右下角分别显示分数、游戏大小和级别;3、开始时可以按暂停按钮出现下面情况开始按钮被激活4、按结束按钮出现设置按钮激活5、消行及得分6、升级7、游戏结束3.错误描述及其解决办法1问题1:问题描述:所遇问题的描述;解决办法:该问题的解决办法;2问题2问题描述:所遇问题的描述;解决办法:该问题的解决办法………………………………………六、感想认识通过本次课程设计,谈谈对面向对象编程的体会;七.程序代码: Defines the class behaviors for the application.ifdef _AFXDLLEnable3dControls; SetRegistryKey_T"LocalAppWizard-Generated Applications";LoadStdProfileSettings0; Document templatesCSingleDocTemplate pDocTemplate;pDocTemplate = new CSingleDocTemplateIDR_MAINFRAME,RUNTIME_CLASSCSkyblue_RectDoc,RUNTIME_CLASSCMainFrame, m_pMainWnd->ShowWindowSW_SHOW;m_pMainWnd->UpdateWindow;return TRUE;}ifdef _AFXDLLEnable3dControls; SetRegistryKey_T"LocalAppWizard-Generated Applications";LoadStdProfileSettings0; Document templatesCSingleDocTemplate pDocTemplate;pDocTemplate = new CSingleDocTemplateIDR_MAINFRAME,RUNTIME_CLASSCSkyblue_RectDoc,RUNTIME_CLASSCMainFrame, m_pMainWnd->ShowWindowSW_SHOW;m_pMainWnd->UpdateWindow;return TRUE;}于映射屏幕的内存设备环境储方块位图的内存资源生下一个随机下坠物m_icurrentStatus = m_inextStatus;m_inextStatus = Random7; 改新的“下一下坠物”RectStatusToNextStatus m_inextStatus ;旧的“下一下坠物”用作当前使用m_currentRect = m_icurrentStatus;断当前方块是否已到底IsBottom;断游戏是否已结束: 碰了底,且第1行有小方块if m_isBottomfor i=0;i<m_iCol;i++if GameStatus0i{KillTimer1;AfxMessageBox"游戏已结束";for j=0;j<m_iRow;j++for k=0;k<m_iCol;k++GameStatusjk=0;InvalidateFALSE;m_bGameEnd = TRUE;break;}}else{RectDown;}CView::OnTimernIDEvent;}int CSkyblue_RectView::Randomint MaxNumber{srand unsignedtime NULL ;endif endif endif endif endif //definedAFX_SKYBLUE_RECTVIEW_H__D33E8EC7_BE69_4161_9B54_FB14CBA27F2E_ _INCLUDED_。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

页眉《软件工程》课程设计报告课题:俄罗斯方块学院:计算机与信息学院专业:软件工程姓名(学号):晋烨(2011112360)指导教师:李昭页脚一、任务分析俄罗斯方块是个老少皆宜的小游戏,它实现由四块正方形的色块组成,计算机随机产生不同七种类型的方块,根据计算机时钟控制它在一定的时间不停的产生,用户根据键盘的四个方向键控制翻转、向左、向右和向下操作,然后程序根据这七种方块堆叠成各种不同的模型。

二、可行性研究报告1、设计背景俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。

俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。

随着计算机的发展而发展,俄罗斯方块不断推陈出新,深爱广大玩家喜爱。

这个游戏有的简单,有的复杂,但其根本原理是一样的都是对运动的方块进行组合,来训练玩家的反应能力。

因此开发此游戏软件可满足人们的一些娱乐的需求。

此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游戏。

2、设计目的通过本游戏的设计,综合自己在校期间所学的理论知识,设计开发俄罗斯广场游戏,使自己熟应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,初步掌握软件工程的系统理论,进一步巩固和加强自身对J2SE基础知识的理解,提高自己的编程水平,从而达到理论与实践相结合的目的。

3、设计要求本游戏开发的总体任务是实现游戏的可操作性,以及界面的美观性。

整个开发过程遵循软件工程规范,采用JAVA GUI编程实现界面以及事件的控制。

用户根据键盘的四个方向键控制翻转、向左、向右、和向下操作,通过菜单栏中的相应菜单选项实现游戏的开始、结束、变换方向、积分以及等级的功能。

4、设计目标通过本游戏的开发,主要实现游戏的可操作性及美观性,同时使自己对JAVA语言的2了解更进一层,为将来的实际工作打下坚实的基础。

需求分析三、游戏需求28种状态的方块随机产生,自由下落,落下时可由玩家用上、下、左、右控制键控制翻转和移动,以便玩家所需要的形态和位置落下。

游戏界面需求:设计良好的游戏界面可以让玩家充分感受到游戏带来的娱乐性,游戏的背景是灰色,方块为绿色,在一定区域内运动和变形游戏形状需求:长条形、Z字形、反Z字形、田字形、7字形、反7字形、T字型显示需求:当不同的方块填满一行时可以消行,剩余方块向下移动并统计分数。

当达到一定分数的时候,会增加相应的分数。

总体设计四、1、基本设计概念(1)游戏区:玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况。

3基本设计概念图2、UML类图3、处理流程图4开始设置初始级别类块选择方随机创建游戏区是否到顶部游戏开局是方块下落一行否游戏结束处理玩家操作是否到顶部系统流程图游戏区模块5开始游戏暂停游戏游戏控制模块初始级别设置退出游戏控制区模块详细设计五、、关键模块的功能1 )界面的初始化(1public class ControlPanel extends JPanel {// 实现一组按钮); 牰癩瑡?畂瑴湯戠来楡???敮?畂瑴湯尨开始); 牰癩瑡?畂瑴湯朠佯???敮?畂瑴湯尨继续); 牰癩瑡?畂瑴湯瀠畡敳瑂?渠睥?瑵潴?暂停); 结束牰癩瑡?畂瑴湯猠潴???敮?畂瑴湯尨// private TextField tfSocer = new TextField(10);// private TextField tfGread = new TextField(10);private JTextArea txArea = new JTextArea(0, 9);实现一组容器//private Panel bTPanel = new Panel();private Panel tFPanel = new Panel();private Panel tipPanel = new Panel();private TipBlock tipBlock = new TipBlock();实现与主类的交流//private ErsBlockGame game;public ControlPanel(final ErsBlockGame game) {this.game = game;setLayout(new GridLayout(3, 1, 0, 3));// 组建提示面板tipPanel.setLayout(new BorderLayout());6楴偰湡汥愮摤渨睥?扡汥尨下一个方块), BorderLayout.NORTH);tipPanel.add(tipBlock, BorderLayout.CENTER);bTPanel.setLayout(new GridLayout(4, 2, 0, 1));// 给按钮增加监听者begainBt.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {begainBt.setEnabled(false);game.playGame();}});pauseBt.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {pauseBt.setEnabled(false);game.pause();}});goOnBt.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { pauseBt.setEnabled(true);game.goOn();} });stopBt.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { game.stopGame();} });// 组建按钮面板bTPanel.add(begainBt);bTPanel.add(goOnBt);bTPanel.add(pauseBt);bTPanel.add(stopBt);// 组建分数、等级提示面板硴牁慥献瑥敔瑸尨简易版\n俄罗斯方块+ \ 作者:\n 晋烨+ \QQ:\n123456789);7txArea.setEnabled(false);tFPanel.setLayout(new GridLayout(1, 1)); tFPanel.add(txArea);// 将以上三个面板加入controlPaneladd(tipPanel);add(tFPanel);add(bTPanel);addKeyListener(new ControlKeyListener()); }2、控制部分(1)方块的移动和变化public class ErsBlockGame extends JFrame { private GameCanvas canvas;private ControlPanel controlPanel;private ErsBlock box;private boolean playing = true;Thread thread;public static void main(String[] args) {敮?牅?潬正慇敭尨俄罗斯方块);}public ErsBlockGame(String title) {super(title);setSize(300, 400);Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize(); 8setLocation((scrSize.width - getSize().width) / 2, (scrSize.height - getSize().height) / 2);canvas = new GameCanvas(20, 10);controlPanel = new ControlPanel(this);this.setResizable(false);this.setLayout(new BorderLayout(2, 0));this.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});// canvas.addKeyListener(new ControlKeyListener());this.add(canvas, BorderLayout.CENTER);this.add(controlPanel, BorderLayout.EAST);setVisible(true);canvas.setFocusable(true);canvas.fanning();// Thread thread = new Thread(new Game());// thread.start();}private class Game implements Runnable {@Overridepublic void run() {int col = (int) (Math.random() * 7), style = ErsBlock.STYLES[(int) (Math .random() * 7)][(int) (Math.random() * 4)];while (playing) {9if (box != null && box.isAlive()) {try {Thread.currentThread().sleep(100);} catch (InterruptedException e) {e.printStackTrace();}continue;}checkFullLine();if (gameIsOver()) {playing = false;你输了,孩子!); 佊瑰潩偮湡?桳睯敍獳条?慩潬?畮汬?System.exit(0);}box = new ErsBlock(-1, col, style, canvas);box.start();col = (int) (Math.random() * 7);style = ErsBlock.STYLES[(int) (Math.random() * 7)][(int) (Math .random() * 4)];controlPanel.setTipStyle(style);// System.out.println(style);}}}10public void checkFullLine() {for (int i = 0; i < canvas.getRows(); i++) {int row = -1;boolean fullLineColor = true;for (int j = 0; j < canvas.getCols(); j++) {if (!canvas.getBlock(i, j).getIsColor()) {fullLineColor = false;break;}}if (fullLineColor) {row = i--;canvas.removeLine(row);}}}public void playGame() {play();controlPanel.requestFocus(true);}public void stopGame() {box.stop();thread.stop();System.exit(0);}11public void play() {thread = new Thread(new Game()); thread.start();}public void pause() {box.setPause(true);}public void goOn() { controlPanel.requestFocus(true); box.setPause(false);}public ErsBlock getErsBlock() { return box;}public boolean gameIsOver() {for (int i = 0; i < canvas.getCols(); i++) {Block box = canvas.getBlock(0, i);if (box.getIsColor())return true;}return false;}3、使用对象说明12JPanel:容器,JMenu:菜单,Thread:线程,JButton:按钮。

相关文档
最新文档