当前位置:文档之家› 俄罗斯方块设计思想

俄罗斯方块设计思想

南京邮电大学通达学院算法与数据结构设计报告( 2016/ 2017学年第二学期)专业软件工程嵌入式学号姓名学号姓名学号姓名学号姓名指导教师陈兴国指导单位计算机学院计算机科学与技术系日期2017-5-26俄罗斯方块一、课题内容实现俄罗斯方块游戏。

主要功能为游戏界面显示、上下左右键响应以及当前得分统计。

通过该课题全面熟悉数组、字符串等的使用。

掌握设计的基本方法及友好界面的设计。

课题要求:1、游戏界面显示:下落方块和方块堆、左右移动、旋转、删除行等特效以及得分。

2、动作选择:上下左右键对应于旋转、加速、左右移动的功能。

3、得分统计判断:判定能否消除行、并统计得分总数等。

扩展要求:1、用户数据管理。

二、算法设计与分析I、俄罗斯方块游戏需要解决的问题包括(1)、随机产生方块并自动下移(2)键变体(3)Q退出,按space暂停II(1)、声明俄罗斯方块的结构体(2)、函数原型声明(3)、制作游戏窗口(4)、制作俄罗斯方块(5)、判断是否可动(6)、随机产生俄罗斯方块类型序号(7)、判断是否满行并删除满行的俄罗斯方块(8)暂停,继续功能(9)新游戏创建(10)用户的创建,分数用户名的保存,查看分数Tetris类(主要类)该类包含m a i n方法,应为应用程序的主类。

该类用来创建游戏的用户界面,事件处理功能和menu餐单,用户信息的存储。

整个程序从该类的m a i n方法开始执行。

成员变量:String userName;构造方法:Tetris内部类:Members,TetrisblockTetrisblok类:用来设计游戏界面。

游戏界面显示在由Tetrisblok类创建的整个用户界面的中(Center)区,游戏的即时分数、方块的效果图及方的预览功能都在整个类里面实现。

用来封装俄罗斯小方块。

一个方块的属性是由方块1位置即x和y的坐标、颜色决定的。

成员变量private int blockType;Timer timer=null;private int turnState;private int x;private int y;private int i = 0;int j = 0;static int score = 0;int flag = 0;int delay=1000;// 定义已经放下的方块x=0-12,y=0-22;int[][] map = new int[14][24];// 方块的形状第一组代表方块类型有S、Z、L、J、I、O、T 7种第二组代表旋转几次第三四组为方块矩阵private final int shapes[][][]成员方法:public void newblock()public void drawwall()public void newmap()public void newgame()public void turn();public void left(); public void right(); public void down() ; public int blow(int x, int y, int blockType, int turnState); public void delline() ; public int gameover(int x, int y); public void add(int x, int y, int blockType, int turnState); public void paintComponent(Graphics g); public void keyPressed(KeyEvent e); public void keyTyped(KeyEvent e)Members类:用来创建io流,在D盘中查找username.txt文件,如果没有就创建。

并且在username 和score中间用:隔开,方便以后用split对其进行分割。

成员变量private FileWriter fw=null;private BufferedWriter bw=null;private FileReader fr=null;private BufferedReader br=null;Tetris tt=null;boolean vip=true;//如果有usernametxt这个文件的话就返回true并且允许查看分数判断是否有用户已经创建了ArrayList<NameScore> al=new ArrayList<NameScore>();成员方法getMembers()saveMembers()getpaint()GetMembers()方法NameScore类:每一个用户的分数和姓名存到一个对象NameScore类。

ScorePanel类;这个是用来接收Tetris类中传递过来的储存NameScore对象的ArrayList集合,然后把用迭代器将集合中的每一个对象的username和score取出来然后放到Vector中。

然后添加到JTable中三、算法实现算法实现(伪代码)四、测试数据及结果分析游戏运行新游戏开始超过边界游戏结束新游戏加速减速实现继续功能 实现暂停功能得到成员的姓名和分数经过调试和修改,程序完全实现设计要求,成功模拟了俄罗斯方块的运行过程和游戏 效果,只是界面略微简陋,但已从程序层面上实现了游戏,达到了这次实训的要求和目的。

程序正常生成方块,根据速度值每隔一定时间自动下落,如有操作按键按下,根据按 键实现位移和变形。

当方块满一行后,可以消除该行,同时记录分数和等级。

五、调试过程中的问题1.刚开始的时候在障碍物的问题上总是出现数组越界错误2.俄罗斯方块的变形问题,不是顺时针变形,原来是方块数组的排序出现错误2.在添加事件的时候点击新游戏分数不刷新,后来在tetris类中的newgame 中添加了score=0之后解决了问题4.在实现加速和减速的问题上,一开始speed控制的是在时间间隔不变的情况下,变化方块每次跳动的距离,发现比较麻烦后来改用在每次跳动距离不变的情况下,改变事件发生的间隔,间隔越短就越快,但是只能大于0并且小于15005.在点击暂停按钮之后然后点击新游戏会出现错误6.在内部类调用外部类的变量的时候出现错误;7.在程序刚开始运行的时候,弹出来的Input框,如果我没有进行任何处理的话,会报空指针异常虽然我在下面加上了如果username==null但是并没有运行,后来知道原来在if选项中我的username.equal(“”)||username==null写颠倒过来了导致。

8.在实现用户信息管理的时候用的是io流储存,将每次输入的用户名存在username的txt文件下面,如果没有这个文件的话要先创建。

9.在对txt文本中的内容进行分割处理的时候,spilt写了但没作用到网上一查,我当时用的是:进行分割,所以split应该写成split(“//:”)而且返回的是一个数组;第一个数temp[0],第二个数temp[1];10.在实现将用户信息返回到新的jpanel上面的时候,ScorePanel总是得不到从Tetris传过来的值,显示一个异常,根据断点找到是在迭代器中it.next 返回的是一个对象,而且最好的实在实例化一个迭代器的时候对其进行泛型。

在将迭代器改成泛型之后顺利解决六、总结15240223 沙伏全:通过课程的设计,从设计到到完成完整的开发过程,同时对所涉及的学科有了更深入的了解。

增加了实践经验,为今后其他平台的开发打下了坚实的基础。

在设计程序中主要是局限于读课本的知识和概念,但很少自己亲自动手去编写代码,总是眼高手低,当真正的去编写这个俄罗斯游戏的时候就体会到编写代码真的好难,尤其是刚开始的想的时候,根本不知道如何下手。

后来通过上网查询和请教一些编程比较好的同学后才有了三个基本的思路,自己又重新翻阅了一下课本,将课本上的知识又重新细致的复习了一遍,最终借助于网络和同学的帮助完成了这个实验。

通过这个实验发现自己在编程方面还有很大的欠缺,不过通过这个实验带给我最大的收获,必须要亲自动手多写,多看代码才能真正的做好15240227 魏源杞:在这两个星期里,我们专业的学生在专业老师的带领下进行了程序实习学习。

在这之前,我们已经对c语言、java、数据结构。

对这些学科有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到有些棘手。

在实验课上,我们完成多个实验,在这个阶段的学习中,我从认识到熟悉,而后到能够自主运用。

通过对Java的了解,我发现它确实有很多方便之处,它集抽象性、封装性、继承性和多态性于一体,实现了代码重用和代码扩充,提高了软件开发的效率。

对于我们这个专业来说学好Java语言是很重要的,所以在实验自工程中我都尽力理解java编程思想、掌握基础。

此次试验收益匪浅。

15240225 王鹏焱:之前都是看视频,根据视频上面的思路和步骤来写代码,没有整体的思想。

通过这次实验是我第一次自己构思,自己根据之前写过的项目的经验来给这次的俄罗斯添加了数据管理功能,和事件的监听事件。

内部类和外部类之前都是在书上看的没有动手写过,晓得了内部类和外部类之间的关系和内部类调用外部变量应该注意的地方。

这次的代码仍有一些问题,程序的扩展性不好。

这次的实验也让我认识到程序之外的一些问题,容易紧张8<。

以后我要注意这个问题。

还有通过这次的实验,让我认识到写程序一定要在自己头脑清晰的时候写。

不然会出现很多低级错误。

相关主题