java编写俄罗斯方块实验报告
- 格式:doc
- 大小:191.50 KB
- 文档页数:8
java编写俄罗斯方块实验报告前言实习时间:实习学时:36学时实习地点:北京科技大学信息楼Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun 公司于1995年5月推出的Java程序设计语言和Java 平台的总称。
Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
Java 编程语言的风格十分接近C、C++语言。
Java是一个纯的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心。
Java舍弃了C ++语言中容易引起错误的指针、运算符重载、多重继承等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。
在Java 1.5 版本中,Java 又引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。
它首先将源代码编译成二进制字节码,然后依赖各种不同平台上的虚拟机来解释执行字节码。
从而实现了“一次编译、到处执行”的跨平台特性。
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了Java 程序的运行效率。
实习目的和要求认识实习是教学计划的主要部分之一,它是培养学生实践能力和解决实际问题的第三课堂,它是专业知识培养的摇篮,也是对专业的实际应用和工作需求直接的认识与认知。
实习中应该深入实际,认真观察,大胆实践,获取直接经验,巩固所学基本理论,保质保量完成指导老师所布置的任务。
要习惯本专业工作的性质,要学会耐得住寂寞,在看似枯燥的编程中寻找兴趣点,大胆想象,培养我们的实践能力和创新能力,开拓视野,培养实际中研究、观察、分析、解决问题的能力。
认识实习是我们工科学生的一门必修课,通过认识实习,我们要对通信工程专业建立感性认识,并进一步了解专业的学习实践环节,培养自己专业的思想。
嘉应学院计算机学院实验报告课程名称:JAVA课程设计开课学期:2011—2012年第一学期班级:093指导老师:项目题目:俄罗斯方块学生姓名:学号:提交时间:2011-11—13一、概述了解开始使用Jigloo 并进而使用其高级功能(例如可视化继承)使用XML、XML Schema 和JAXB熟悉事件处理程序和数据绑定的UI 编程概念了解AWT/Swing 或SWT3)图形用户界面设计;4)AWT组件库。
教师提出的要求:在实现程序应该有的功能至上再扩充一些功能。
3。
课程设计的主要设计思想俄罗斯方块应有如下功能:1、在二维的平面里用各种随即产生的方块堆积木,每填满一行消去一行,当到达顶部时,游戏结束。
2、玩家能通过方向键来控制方块的转动,左移,右移和直落。
3、每种类型的方块都有颜色.游戏有预览的功能,能告诉玩家下一个将出现什么类型的方块。
4、游戏能够在玩的过程中,给出玩家的分数,分数是由随即方块的类型决定的,每堆一个方块,就将分数累加到总分中。
5、游戏有暂停、开始和结束、游戏规则、游戏说明等控制。
二、类模块设计通过对功能要求的分析,将俄罗斯方块游戏的功能划分为2个类模块,它们是:Tetris类:该类包含main方法,应为应用程序的主类.该类用来创建游戏的用户界面,整个程序从该类的main方法开始执行。
Tetrisblok类:用来设计游戏界面.游戏界面显示在由Tetrisblok类创建的整个用户界面的中(Center)区,游戏的即时分数、堆积木的二维平面即时效果图及方块的预览功能都在整个类里面实现。
用来封装俄罗斯小方块。
一个方块的属性是由方块1位置即x和y的坐标、颜色决定的。
三、详细设计1、Tetris类的设计Tetris类中包含main方法,为主类.在主类中创建了JFrame窗口类的一个实例,设计如下:成员变量:成员方法:2、Tetrisblok类的设计Tetrisblok类用来设计游戏的用户界面。
目录一.需求分析2二.系统运行环境2三.系统功能需求描述:2四.总体设计2五.系统结构图3六.程序模块设计3七、实验总结体会15一.需求分析在个人电脑日益普及的今天,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一,它以其趣味性强,易上手等诸多特点得到了大众的认可,因此开发此游戏软件可满足人们的一些娱乐的需求。
此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游戏。
二.系统运行环境操作系统选择Windows XP 版本,运行环境选择MyEclipse三.系统功能需求描述俄罗斯方块游戏是一款适合大众的游戏软件,它适合不同年龄的人玩。
本软件要实现的功能如下:1.游戏区:玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况。
2.游戏控制:玩家可以通过游戏控制功能来选择开始新的一局游戏,暂停或退出游戏。
3.级别设置:玩家可以根据自己的需要自行设定游戏的开始级别,级别越高,游戏速度越快,难度越大。
四.总体设计游戏中玩家可以做的操作有:1.以90度为单位旋转方每一格块。
2.以格子为单位左右移动方块,让方块加速落下。
3.方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的随机图形会出现在区域上方开始落下。
4.当区域中某一列横向格子全部由方块填满,则该列会自动消除并成为玩家的得分。
同时删除的列数越多,得分指数上升。
5.当固定的方块堆到区域最上方,则游戏结束。
五.系统结构图六.程序模块设计6.1用户界面设计6.2 程序代码设计package russia。
import java.awt.*。
import java.awt.event.*。
//俄罗斯方块类class ERS_Block extends Frame{/****/private static final long serialVersionUID = 1L。
基于Java语言的俄罗斯方块游戏课程设计学院:X专业:X班级:X:X学号:X指导老师:X摘要第一章引言1.1 设计的课题背景1.2 研究课题的任务,目的和意义1.2.1 课题的任务1.2.2 课题的目的1.2.3 课题的意义1.3 系统的主要功能和特色1.3.1 系统的主要功能1.3.2 系统的特色第二章系统需求分析2.1 本课题研究现状分析2.2 要解决的问题及解决方法2.3 系统设计的主要容、目标2.3.1 系统设计的主要容2.3.2 设计的目标2.4 使用的关键技术第三章系统的详细设计3.1 系统的总体系结构3.2 系统各模块的界面设计及实现3.2.1 主窗体程序模块设计与实现3.2.2 方块变换模块设计与实现3.2.3 满行消除并计分模块设计与实现第四章系统的安装与测试4.1 系统的安装4.1.1 系统的运行环境4.1.2 系统的安装4.2 系统的测试结束语参考文献附录:有关程序代码摘要:在现代,高科技的飞跃发展,人们工作习惯的改变,特别是电脑的大量普及,人们生活节奏越来越快,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一。
俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克·帕基特诺夫发明,故得此名。
俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。
由于上手简单、老少皆宜,从而家喻户晓,风靡世界。
为此,我设计了一款简单的俄罗斯方块JAVA 游戏程序,以便更好的满足广大电脑工作者闲暇之余的消遣,并且也让我学到编程技术。
关键字:俄罗斯方块游戏、Java语言、编程第一章引言1.1设计的课题背景俄罗斯方块是一款电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克·帕基特诺夫发明,故得此名。
俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。
《JAVA程序设计》实训报告课题名称:RussiaBlocksGame(俄罗斯方块)专业:计算机软件班级:学号:姓名:指导教师:2010年12月27 日目录《JAVA程序设计》实训报告 (1)一、课程设计目的 (4)二、课程设计题目描述和要求 (4)1)题目: (4)2)题目描述: (4)3)题目要求: (4)三、课程设计报告内容 (4)3.1设计方案的论证: (4)3.2硬件及软件开发平台: (5)3.3各个功能模块图设计 (5)具体模块划分算法: (5)3.4详细设计 (11)3.4.1模型层设计 (11)3.4.2游戏演示 (16)3.5系统测试 (18)3.5.1快捷键测试 (18)3.5.2右侧快捷按钮测试 (18)3.5.3界面菜单选项的功能测试 (18)3.5.4 按键事件的功能测试 (19)3.5.5方块堆砌与消行测试 (19)3.5.6 测试结果分析 (20)四、结论 (20)1、问题: (20)2、解决方法: (20)五、结束语 (20)六、参考书目: (21)七、附录:(源程序清单) (21)一、课程设计目的1)运用Java实现小游戏的开发2)了解Java开发项目的流程3)掌握规划,设计,开发,测试的能力二、课程设计题目描述和要求1)题目:RussiaBlocksGame(俄罗斯方块)2)题目描述:RussiaBlocksGame是基于JAVA-J2SE平台开发的一款JAVA小游戏。
3)题目要求:熟悉java的编程环境J2SDK,掌握Application 和Applet的程序结构,并能熟练编写和调试两类程序。
熟练使用各种常用类库。
理解JDK的事件处理机制,掌握java.awt 、javax.swing,javax.swing.event中的GUI标准组件的用法,学会合理运用布局策略、综合运用各种界面元素,编程构造满足应用需要的图形工作界面。
三、课程设计报告内容3.1设计方案的论证:本游戏是根据流行的俄罗斯方块的样式改变而成的,但屏蔽了音乐,背景图片等功能,因为无法掌握深奥的算法。
《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,方块类。
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.游戏结束的处理•定义方法来判断游戏是否结束,判断条件为:新的方块组合不能在放置时超出游戏区域的顶部。
目录一.需求分析....................................................... 错误!未定义书签。
二.系统运行环境 (2)三.系统功能需求描述: (2)四.总体设计 (2)五.系统结构图 (3)六.程序模块设计 (3)七、实验总结体会 (15)一.需求分析在个人电脑日益普及的今天,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一,它以其趣味性强,易上手等诸多特点得到了大众的认可,因此开发此游戏软件可满足人们的一些娱乐的需求。
此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游戏。
二.系统运行环境操作系统选择Windows XP 版本,运行环境选择MyEclipse三.系统功能需求描述俄罗斯方块游戏是一款适合大众的游戏软件,它适合不同年龄的人玩。
本软件要实现的功能如下:1.游戏区:玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况。
2.游戏控制:玩家可以通过游戏控制功能来选择开始新的一局游戏,暂停或退出游戏。
3.级别设置:玩家可以根据自己的需要自行设定游戏的开始级别,级别越高,游戏速度越快,难度越大。
四.总体设计游戏中玩家可以做的操作有:1.以90度为单位旋转方每一格块。
2.以格子为单位左右移动方块,让方块加速落下。
3.方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的随机图形会出现在区域上方开始落下。
4.当区域中某一列横向格子全部由方块填满,则该列会自动消除并成为玩家的得分。
同时删除的列数越多,得分指数上升。
5.当固定的方块堆到区域最上方,则游戏结束。
五.系统结构图六.程序模块设计6.1用户界面设计6.2 程序代码设计package russia;import java.awt.*;import java.awt.event.*;//俄罗斯方块类class ERS_Block extends Frame{/****/private static final long serialVersionUID = 1L;public static boolean isPlay=false;public static int level=1,score=0;public static TextField scoreField,levelField;public static MyTimer timer;GameCanvas gameScr;public static void main(String[] argus){ERS_Block ers = new ERS_Block("俄罗斯方块游戏V1.0 Author:Vincent"); WindowListener win_listener = new WinListener();ers.addWindowListener(win_listener);}//俄罗斯方块类的构造方法SuppressWarnings("deprecation")ERS_Block(String title){super(title);setSize(600,480);setLayout(new GridLayout(1,2));gameScr = new GameCanvas();gameScr.addKeyListener(gameScr);timer = new MyTimer(gameScr);timer.setDaemon(true);timer.start();timer.suspend();add(gameScr);Panel rightScr = new Panel();rightScr.setLayout(new GridLayout(2,1,0,30));rightScr.setSize(120,500);add(rightScr);//右边信息窗体的布局MyPanel infoScr = new MyPanel();infoScr.setLayout(new GridLayout(4,1,0,5));infoScr.setSize(120,300);rightScr.add(infoScr);//定义标签和初始值Label scorep = new Label("分数:",Label.LEFT);Label levelp = new Label("级数:",Label.LEFT);scoreField = new TextField(8);levelField = new TextField(8);scoreField.setEditable(false);levelField.setEditable(false);infoScr.add(scorep);infoScr.add(scoreField);infoScr.add(levelp);infoScr.add(levelField);scorep.setSize(new Dimension(20,60));scoreField.setSize(new Dimension(20,60));levelp.setSize(new Dimension(20,60));levelField.setSize(new Dimension(20,60));scoreField.setText("0");levelField.setText("1");//右边控制按钮窗体的布局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));play_b.addActionListener(new Command(Command.button_play,gameScr));//定义按钮Level UPButton level_up_b = new Button("提高级数");level_up_b.setSize(new Dimension(50,200));level_up_b.addActionListener(new Command(Command.button_levelup,gameScr));//定义按钮Level DownButton level_down_b =new Button("降低级数");level_down_b.setSize(new Dimension(50,200));level_down_b.addActionListener(new Command(Command.button_leveldown,gameScr)); //定义按钮Level PauseButton pause_b =new Button("游戏暂停");pause_b.setSize(new Dimension(50,200));pause_b.addActionListener(new Command(Command.button_pause,gameScr));//定义按钮QuitButton quit_b = new Button("退出游戏");quit_b.setSize(new Dimension(50,200));quit_b.addActionListener(new Command(Command.button_quit,gameScr)); controlScr.add(play_b);controlScr.add(level_up_b);controlScr.add(level_down_b);controlScr.add(pause_b);controlScr.add(quit_b);setVisible(true);gameScr.requestFocus();}}//重写MyPanel类,使Panel的四周留空间class MyPanel extends Panel{/****/private static final long serialVersionUID = 1L;public Insets getInsets(){return new Insets(30,50,30,50);}}//游戏画布类class GameCanvas extends Canvas implements KeyListener{ /****/private static final long serialVersionUID = 1L;final int unitSize = 30; //小方块边长int rowNum; //正方格的行数int columnNum; //正方格的列数int maxAllowRowNum; //允许有多少行未削int blockInitRow; //新出现块的起始行坐标int blockInitCol; //新出现块的起始列坐标int [][] scrArr; //屏幕数组Block b; //对方快的引用//画布类的构造方法GameCanvas(){rowNum = 15;columnNum = 10;maxAllowRowNum = rowNum - 2;b = new Block(this);blockInitRow = rowNum - 1;blockInitCol = columnNum/2 - 2;scrArr = new int [32][32];}//初始化屏幕,并将屏幕数组清零的方法void initScr(){for(int i=0;i<rowNum;i++)for (int j=0; j<columnNum;j++){ scrArr[i][j]=0; }b.reset();repaint();}//重新刷新画布方法public void paint(Graphics g){for(int i = 0; i < rowNum; i++)for(int j = 0; j < columnNum; j++)drawUnit(i,j,scrArr[i][j]);}//画方块的方法public void drawUnit(int row,int col,int type){scrArr[row][col] = type;Graphics g = getGraphics();switch(type){ //表示画方快的方法case 0: g.setColor(Color.black);break; //以背景为颜色画case 1: g.setColor(Color.blue);break; //画正在下落的方块case 2: g.setColor(Color.magenta);break; //画已经落下的方法}g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true);g.dispose();}public Block getBlock(){return b; //返回block实例的引用}//返回屏幕数组中(row,col)位置的属性值public int getScrArrXY(int row,int col){if (row < 0 || row >= rowNum || col < 0 || col >= columnNum)return(-1);elsereturn(scrArr[row][col]);}//返回新块的初始行坐标方法public int getInitRow(){return(blockInitRow); //返回新块的初始行坐标}//返回新块的初始列坐标方法public int getInitCol(){return(blockInitCol); //返回新块的初始列坐标}//满行删除方法void deleteFullLine(){int full_line_num = 0;int k = 0;for (int i=0;i<rowNum;i++){boolean isfull = true;L1:for(int j=0;j<columnNum;j++)if(scrArr[i][j] == 0){k++;isfull = false;break L1;}if(isfull) full_line_num++;if(k!=0 && k-1!=i && !isfull)for(int j = 0; j < columnNum; j++){if (scrArr[i][j] == 0)drawUnit(k-1,j,0);elsedrawUnit(k-1,j,2);scrArr[k-1][j] = scrArr[i][j];}}for(int i = k-1 ;i < rowNum; i++){for(int j = 0; j < columnNum; j++){drawUnit(i,j,0);scrArr[i][j]=0;}}ERS_Block.score += full_line_num;ERS_Block.scoreField.setText(""+ERS_Block.score); }//判断游戏是否结束方法boolean isGameEnd(){for (int col = 0 ; col <columnNum; col ++){if(scrArr[maxAllowRowNum][col] !=0)return true;}return false;}public void keyTyped(KeyEvent e){}public void keyReleased(KeyEvent e){}//处理键盘输入的方法public void keyPressed(KeyEvent e){if(!ERS_Block.isPlay)return;switch(e.getKeyCode()){case KeyEvent.VK_DOWN:b.fallDown();break; case KeyEvent.VK_LEFT:b.leftMove();break;case KeyEvent.VK_RIGHT:b.rightMove();break; case KeyEvent.VK_SPACE:b.leftTurn();break;}}}//处理控制类class Command implements ActionListener{ static final int button_play = 1; //给按钮分配编号static final int button_levelup = 2;static final int button_leveldown = 3;static final int button_quit = 4;static final int button_pause = 5;static boolean pause_resume = true;int curButton; //当前按钮GameCanvas scr;//控制按钮类的构造方法Command(int button,GameCanvas scr){ curButton = button;this.scr=scr;}//按钮执行方法SuppressWarnings("deprecation")public void actionPerformed (ActionEvent e){ switch(curButton){case button_play:if(!ERS_Block.isPlay){scr.initScr();ERS_Block.isPlay = true;ERS_Block.score = 0;ERS_Block.scoreField.setText("0");ERS_Block.timer.resume();}scr.requestFocus();break;case button_levelup:if(ERS_Block.level < 10){ ERS_Block.level++;ERS_Block.levelField.setText(""+ERS_Block.level); ERS_Block.score = 0;ERS_Block.scoreField.setText(""+ERS_Block.score); }scr.requestFocus();break;case button_leveldown:if(ERS_Block.level > 1){ ERS_Block.level--;ERS_Block.levelField.setText(""+ERS_Block.level); ERS_Block.score = 0;ERS_Block.scoreField.setText(""+ERS_Block.score);}scr.requestFocus();break;case button_pause:if(pause_resume){ERS_Block.timer.suspend();pause_resume = false;}else{ERS_Block.timer.resume();pause_resume = true;}scr.requestFocus();break;case button_quit:System.exit(0);}}}//方块类class Block {static int[][] pattern = {{0x0f00,0x4444,0x0f00,0x4444},//用十六进至表示,本行表示长条四种状态{0x04e0,0x0464,0x00e4,0x04c4},{0x4620,0x6c00,0x4620,0x6c00},{0x2640,0xc600,0x2640,0xc600},{0x6220,0x1700,0x2230,0x0740},{0x6440,0x0e20,0x44c0,0x8e00},{0x0660,0x0660,0x0660,0x0660}};int blockType; //块的模式号(0-6)int turnState; //块的翻转状态(0-3)int blockState; //快的下落状态int row,col; //块在画布上的坐标GameCanvas scr;//块类的构造方法Block(GameCanvas scr){this.scr = scr;blockType = (int)(Math.random() * 1000)%7;turnState = (int)(Math.random() * 1000)%4;blockState = 1;row = scr.getInitRow();col = scr.getInitCol();}//重新初始化块,并显示新块public void reset(){blockType = (int)(Math.random() * 1000)%7;turnState = (int)(Math.random() * 1000)%4; blockState = 1;row = scr.getInitRow();col = scr.getInitCol();dispBlock(1);}//实现“块”翻转的方法public void leftTurn(){if(assertValid(blockType,(turnState + 1)%4,row,col)){ dispBlock(0);turnState = (turnState + 1)%4;dispBlock(1);}}//实现“块”的左移的方法public void leftMove(){if(assertValid(blockType,turnState,row,col-1)){ dispBlock(0);col--;dispBlock(1);}}//实现块的右移public void rightMove(){if(assertValid(blockType,turnState,row,col+1)){ dispBlock(0);col++;dispBlock(1);}}//实现块落下的操作的方法public boolean fallDown(){if(blockState == 2)return(false);if(assertValid(blockType,turnState,row-1,col)){ dispBlock(0);row--;dispBlock(1);return(true);}else{blockState = 2;dispBlock(2);return(false);}}//判断是否正确的方法boolean assertValid(int t,int s,int row,int col){ int k = 0x8000;for(int i = 0; i < 4; i++){for(int j = 0; j < 4; j++){if((int)(pattern[t][s]&k) != 0){int temp = scr.getScrArrXY(row-i,col+j);if (temp<0||temp==2)return false;}k = k >> 1;}}return true;}//同步显示的方法public synchronized void dispBlock(int s){int k = 0x8000;for (int i = 0; i < 4; i++){for(int j = 0; j < 4; j++){if(((int)pattern[blockType][turnState]&k) != 0){ scr.drawUnit(row-i,col+j,s);}k=k>>1;}}}}//定时线程class MyTimer extends Thread{ GameCanvas scr;public MyTimer(GameCanvas scr){this.scr = scr;}SuppressWarnings("deprecation")public void run(){while(true){try{sleep((10-ERS_Block.level + 1)*100);}catch(InterruptedException e){}if(!scr.getBlock().fallDown()){scr.deleteFullLine();if(scr.isGameEnd()){ERS_Block.isPlay = false;suspend();}elsescr.getBlock().reset();}}}}class WinListener extends WindowAdapter{ public void windowClosing (WindowEvent l){ System.exit(0);}}6.3 运行结果游戏进行中界面七.实验总结体会实验顺利完成,我觉得很有收获。
目录一.引言 (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功能需求本课程设计的目标是设计一个名为《俄罗斯方块》的游戏软件,实现其界面的初始化,程序运行,退出,和相应数据处理。
能实现游戏的基本功能,类似下移、左移、右移、翻转、得分累加等,并在规定时间内达到课题所需要实现的功能及要求。
课程设计报告课程设计名称JA V A课程设计(J2EE) 专业计算机科学与技术班级7 班学号10030716姓名潘建康指导教师徐淑平成绩2013年1月15日目录一、设计任务与要求 (2)1.1 设计任务与要求 (2)1.2 选题目的与意义 (2)二、需求分析 (2)2.1 用户需求分析 (2)2.2 开发环境分析 (2)三、系统设计 (3)3.1 系统总体设计 (3)3.2 功能模块设计 (3)3.3 程序流程图 (4)四、程序实现 (5)4.1 类的设计 (5)4.1.1建立界面 (5)4.1.2创建游戏对象 (8)4.1.3 创建与显示大方块 (12)4.1.4 处理方块的行为 (17)4.1.5 消除行、计分与级别的提升 (30)4.2 类与数据结构实现 (35)五、测试运行 (36)5.1 系统测试方案 (36)5.1.1 右侧快捷按钮测试 (36)5.1.2按键事件的功能测试 (36)5.1.3方块堆砌与消行测试 (37)5.2 运行结果分析 (37)六、设计体会 (38)一、设计任务与要求1.1 设计任务与要求(1)、运用Java实现小游戏的开发;(2)、了解Java开发项目的流程;(3)、掌握规划,设计,开发,测试的能力。
1.2 选题目的与意义俄罗斯方块是我们最常见的游戏之一,该游戏出现过在掌上游戏机、家用游戏机、手机游戏和电脑游戏中,因此俄罗斯方块也是一个十分经典的游戏。
我们可以在网上下载到各式各样的俄罗斯方块游戏,也可以在各个游戏大厅中见到网络对战形式的俄罗斯方块。
一般的俄罗斯方块规则比较简单,游戏中随机出现一些方块,再对这些方块进行变换,下降到游戏界面中的不同位置,如果某一行中都填充了方块,那么该行就消除。
当然,还有更复杂的俄罗斯方块,例如方块穿墙,方块消除列等。
本次实验我们实现一个简单的单机俄罗斯方块,来学习俄罗斯方块的实现原理。
二、需求分析2.1 用户需求分析随着信息技术的迅速发展,给人们带来了各种各样的信息和更多更新的娱乐。
前言
实习时间:
实习学时:36学时
实习地点:北京科技大学信息楼
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun 公司于1995年5月推出的Java程序设计语言和Java 平台的总称。
Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
Java 编程语言的风格十分接近C、C++语言。
Java是一个纯的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心。
Java舍弃了C ++语言中容易引起错误的指针、运算符重载、多重继承等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。
在Java 1.5 版本中,Java 又引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
Java 不同于一般的编译执行计算机语言和解释执行计算机语
言。
它首先将源代码编译成二进制字节码,然后依赖各种不同平台上的虚拟机来解释执行字节码。
从而实现了“一次编译、到处执行”的跨平台特性。
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了Java 程序的运行效率。
实习目的和要求
认识实习是教学计划的主要部分之一,它是培养学生实践能力和解决实际问题的第三课堂,它是专业知识培养的摇篮,也是对专业的实际应用和工作需求直接的认识与认知。
实习中应该深入实际,认真观察,大胆实践,获取直接经验,巩固所学基本理论,保质保量完成指导老师所布置的任务。
要习惯本专业工作的性质,要学会耐得住寂寞,在看似枯燥的编程中寻找兴趣点,大胆想象,培养我们的实践能力和创新能力,开拓视野,培养实际中研究、观察、分析、解决问题的能力。
认识实习是我们工科学生的一门必修课,通过认识实习,我们要对通信工程专业建立感性认识,并进一步了解专业的学习实践环节,培养自己专业的思想。
通过接触实际实习过程,一方面,达到对所学专业的性质、内容及其在工程技术领域中的地位有一定的认识,为了解和巩固专业思想创造条件,在实践中了解专业、熟悉专业、热爱专业。
另一方面,巩固、加深理解在课堂所学的理论知识,让自己的
理论知识更加扎实,专业技能更加过硬,更加善于理论联系实际。
再有,通过分析利用编程解决生活中的小问题为进一步学习技术基础和专业知识奠定基础。
认知实习的过程中学生是以假想技术人员的身份完成老师布置的任务,在实习中应深入实际,认真实习,获取直接知识,巩固所学理论,培养和锻炼独立分析问题和解决问题的能力。
丰富和扩大学生的专业知识领域,也培养了学生的团结合作精神,牢固树立学生的群体意识,即个人智慧只有在融入集体之中才能最大限度地发挥作用,让我们对于以后所担任的角色及工作内容有了更深的了解和体会,对于我们以后的实习和工作都是有很大帮助的。
实习要求
学生必须在教师指导下,按照实习大纲和实习计划进行实习,努力完成实习任务。
严格遵守学校的规章制度。
实习期间要严格考勤,病假由指导教师批准,两天以上必须有医院诊断证明,超过一周时要及时向学院汇报。
学生一般不得请事假,特殊情况需请事假时,三天以内由负责教师批准,三天以上报学院审批。
无故不参加实习两天者由负责教师负责报学院给予通报批评;无故不参加实习三天(含)以上者,其成绩按不及格处理。
实习缺课三分之一以上天数者不予评定成绩。
不交实习报告者,不得参加考核,其成绩按“0”计。
严格遵守实验室的有关规章制度,对违反纪律的学生要进行批评教育,对情节严重者要及时向学院汇报处理,可取消其本次实习资格,其成绩按“0”分处理。
1、实习期间应该注意自己的着装,不能穿背心、短裤和拖鞋
2、实习期间一定要听从老师的指挥,认真遵守该有的课堂纪律,按时到教室,不擅自离开
3、实习期间仔细观察,认真听老师和专家的讲解,遇到不懂得地方可以提出来,随时做笔记
实习所用工具介绍
Windows XP系统电脑一台,eclipse编程软件
实习内容
1.需求分析
俄罗斯方块是一个经典的小游戏,由于它简单有趣,因而得到了广泛的流行,男女老幼都适合。
而俄罗斯方块游戏的设计工作复杂且富有挑战性,它包含的内容多,涉及的知识广泛,与图形界面联系较大,包括界面的显示与更新、数据收集等,在设计的过程中,必将运用到各方面的知识,这对于我的认识实习及专业认知是有很大帮助
的。
2.系统功能设计
1.本系统主要设计以下几种功能
1、游戏难度选择功能
如果玩家不选难度直接按“开始游戏”,则使用默认的难度5,难度最高等级为10。
2、方块下落、变形功能
键盘上的左、右、下、上的箭头分别代表方块的向左、向右、向下、变形的功能。
3.升级功能
在游戏过程中能自主更改难度系数,如果觉得速度过慢,则可按“提高级数”,若过快,则可按“降低级数”
4.暂停功能
在游戏中方便暂时离开设置了“游戏暂停”功能。
5.帮助功能
界面中的帮助,能够使游戏者更好的使用该小游戏界面
6.界面设定
界面左侧为游戏区,上面有“游戏”“控制”“帮助”三个选项,右上方为下一个方块的提示,下方为等级和得分。
技术难点
因为是第一次使用java编程,所以对于基础应用还是不太会,如果只是看所谓的基础介绍,感觉短短两周是无法完成任务的。
因为想到要做俄罗斯方块,众多类的建立会是个问题,而且俄罗斯方块看似简单,可是界面的布置,具体细节的功能实现
3.系统功能设计分析1. 俄罗斯方块游戏根据功能的不同,设置了如下8个类ErsBlocksGame,GameCanvas、ErsBlock、boolean、ControlPanel、JMenuBar、JMenu、JMenuItem。
每个类的描述如下:
2.1、ErsBlocsGAME
这个类中定义了生成方块的方法,用二维数组int[][] pattern,存放7 种方块的四种状态。
在构造方法中以随机的形式生成方块,同时提供了以下几种方法:分别实现方块的重画、翻转、左移、右移、下落、同步显示等功能。
2.2、Command,处理控制类。
这是一个实现ActionListener 接口的类,主要处理点击按钮事件。
类中定义了三个int 型变量:button_play,button_quit,button_pause,和一个boolean 型的变量:pause_resume,并赋值。
在GameArea 类中通过事件响应,在按钮执行方法中调用其值,使用switch 语句,根据不同按钮不同的值,来响应不同的事件。
2.3、GameArea,游戏界面类。
GameArea 继承了JFrame,是俄罗斯方块的主要游戏界面。
这个类定义了GameSetting 类的gameScr 对象和ImagePanel 类的imagepanel 对象作为游戏区域面板和控制区域面板。
在游戏区域,主要是根据相应格子的设置标志来显示相应的图形图片,这
样就实现了俄罗斯方块的实时显示。
2.4、GameSetting, 游戏画布类。
这个类生成的对象将作为游戏界面的方块下落区域,画布的设置为15 行10 列,当中的方格边长为30,类中还定义了一个二维数组int [][] scrArr 作为屏幕数组,表示每一个方格。
游戏区域中每一个方格是否存在游戏方块是由该方格的值来决定的,如果该方格的值为1,则表示该方格中存在游戏方块;如果该方格中的值为0,则表示该方格中不存在游戏方块,因此二维数组用于记录游戏区域中每个小方格的值。
此外,类中还定义了画方块的方法,根据不同的难度画出不同颜色的方块。
单击Play 按钮时,系统调用initScr( )方法,初始化屏幕,将屏幕数组清零。
当满足满行删除的条件时,系统调用deleteFullLine( )方法,进行删行加分,而且每删除十行,难度自动增加一级,方块颜色改变,并在难度显示框中相应显示。
2.5、GameOver,游戏结束弹出提示框类。
当游戏结束时,系统弹出提示,包括玩家分数以及询问玩家要继续游戏还是退出。
2.6、Help,帮助类。
在游戏界面,按F1 键,弹出提示窗口,获取帮助。
2.7、ImagePanel,背景图片类。
这个类继承了JPanel 类,用来作为游戏界面中控制区域的容器,并添加图片。
2.8、JieMian,主界面类。
这个类继承了JPanel 类,作为游戏的第一个界面,也是难度选择界面。
定义了9 个单选按钮,当玩家未选任何难度就按Enter 时,系统会弹出一个提示框,提示玩家先选难度再进入。
2.9、MyPanel,重写MyPanel 类,使Panel 的四周留空间。
2.10、MyTimer,定时线程类。
类中定义了一个run()方法,用sleep()函数实现方块下落的快慢,即调节难度。
2.11、PlayMidi,添加音乐类。
在游戏过程中添加背景音乐。
2.12、WinListener,关闭窗口类。