俄罗斯方块设计思想
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
南京邮电大学
通达学院
算法与数据结构设计报告( 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,Tetrisblock
Tetrisblok类:
用来设计游戏界面。游戏界面显示在由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
成员方法
getMembers()
saveMembers()
getpaint()
GetMembers()方法
NameScore类:
每一个用户的分数和姓名存到一个对象NameScore类。
ScorePanel类;
这个是用来接收Tetris类中传递过来的储存NameScore对象的ArrayList集合,然后把用迭代器将集合中的每一个对象的username和score取出来然后放到Vector中。然后添加到JTable中
三、算法实现
算法实现(伪代码)
四、测试数据及结果分析
游戏运行
新游戏开始