当前位置:文档之家› 俄罗斯方块实验报告

俄罗斯方块实验报告

邮电大学通达学院算法与数据结构设计报告(2016/ 2017学年第二学期)专业软件工程嵌入式学号姓名学号姓名学号姓名指导教师指导单位计算机学院计算机科学与技术系日期2017-5-26目录课题容---------------------------------------1算法设计与分析---------------------------------1 算法实现---------------------------------------9测试数据及结果分析----------------------------38 调试过程中的问题------------------------------40 总结------------------------------------------41俄罗斯方块一、课题容实现俄罗斯方块游戏。

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

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

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

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

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

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

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

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

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

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

基本规则1、一个用于摆放小型正方形的平面虚拟场地,其标准大小:行宽为10,列高为20,以每个小正方形为单位。

2、一组由4个小型正方形组成的规则图形,英文称为Tetromino,中文通称为方块共有7种,分别以S、Z、L、J、I、O、T这7个字母的形状来命名。

I:一次最多消除四层J(左右):最多消除三层,或消除二层L:最多消除三层,或消除二层O:消除一至二层S(左右):最多二层,容易造成孔洞Z (左右):最多二层,容易造成孔洞T:最多二层(1)部分游戏有单格方块,可以穿透固定的方块到达最下层空位。

其他的改版中出现更多特别的造型。

方块会从区域上方开始缓慢继续落下。

(2)玩家可以做的操作有:以90度为单位旋转方块,以格子为单位左右移动方块,让方块加速落下。

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

(4)当区域中某一列横向格子全部由方块填满,则该列会消失并成为玩家的得分。

同时删除的列数越多,得分指数上升。

(5)当固定的方块堆到区域最上方而无法消除层数时,则游戏结束。

(6)一般来说,游戏还会提示下一个要落下的方块,熟练的玩家会计算到下一个方块,评估要如何进行。

由于游戏能不断进行下去对商业用游戏不太理想,所以一般还会随着游戏的进行而加速提高难度。

二、算法设计与分析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;构造方法:TetrisuserName=JOptionPane.showInputDialog(null, "输入你的名字");if(userName==null||userName.equals("")){userName="无名氏";}//如果没有命名就定义为无名氏部类: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()方法获取username.txt 的File对象NameScore类:private String username;private String score;public String getUsername() {public String getUsername() {public void setUsername(String username) {public String getScore() {每一个用户的分数和存到一个对象NameScore类。

ScorePanel类;Vector col=null;Vector rol=null;JTable jt;public ScorePanel(ArrayList<NameScore> al) throws IOException{这个是用来接收Tetris类中传递过来的储存NameScore对象的ArrayList集合,然后把用迭代器将集合中的每一个对象的username和score取出来然后放到Vector中。

然后添加到JTable中。

三、算法实现1.0 Tetris类(主要类)Tetris类功能该类包含main方法,应为应用程序的主类。

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

整个程序从该类的main方法开始执行。

成员变量:String userName;构造方法:Tetris实现在初始化的时候进行弹框如果没有输入值则就将username命名为无名氏public Tetris() throws IOException{userName=JOptionPane.showInputDialog(null, "输入你的名字");if(userName==null||userName.equals("")){userName="无名氏";}//如果没有命名就定义为无名氏final JMenuItem pause;final JMenuItem goon;final JMenuItem getscore;final JMenuItem exit;final JMenuItem saveexit;newgame.addActionListener(new ActionListener(){pause.addActionListener(new ActionListener(){goon.addActionListener(new ActionListener(){getscore.addActionListener(new ActionListener(){exit.addActionListener(new ActionListener(){saveexit.addActionListener(new ActionListener(){high.addActionListener(new ActionListener() 2.Tetrisblok 类Tetrisblok 类功能:用来设计游戏界面。

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

相关主题