JAVA俄罗斯方块实验报告
java编写俄罗斯方块实验报告

java编写俄罗斯方块实验报告前言实习时间:实习学时:36学时实习地点:北京科技大学信息楼Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun 公司于1995年5月推出的Java程序设计语言和Java 平台的总称。
Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
Java 编程语言的风格十分接近C、C++语言。
Java是一个纯的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心。
Java舍弃了C ++语言中容易引起错误的指针、运算符重载、多重继承等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。
在Java 1.5 版本中,Java 又引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。
它首先将源代码编译成二进制字节码,然后依赖各种不同平台上的虚拟机来解释执行字节码。
从而实现了“一次编译、到处执行”的跨平台特性。
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了Java 程序的运行效率。
实习目的和要求认识实习是教学计划的主要部分之一,它是培养学生实践能力和解决实际问题的第三课堂,它是专业知识培养的摇篮,也是对专业的实际应用和工作需求直接的认识与认知。
实习中应该深入实际,认真观察,大胆实践,获取直接经验,巩固所学基本理论,保质保量完成指导老师所布置的任务。
要习惯本专业工作的性质,要学会耐得住寂寞,在看似枯燥的编程中寻找兴趣点,大胆想象,培养我们的实践能力和创新能力,开拓视野,培养实际中研究、观察、分析、解决问题的能力。
认识实习是我们工科学生的一门必修课,通过认识实习,我们要对通信工程专业建立感性认识,并进一步了解专业的学习实践环节,培养自己专业的思想。
(完整word版)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类用来设计游戏的用户界面。
#JAVA俄罗斯方块实验评测报告

目录一.需求分析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程序设计》实训报告范文-俄罗斯方块

《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课程设计实验报告俄罗斯方块

成绩评定表课程设计任务书目录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()功能描述:该方法是判断游戏是否该结束了,只需要判断窗口中的最顶端那一行中是否有方块,同时也要判断最底端的是否也有,如果都有即结束。
JAVA俄罗斯方块实训报告

JAVA俄罗斯⽅块实训报告《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--俄罗斯方块实验报告
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.游戏结束的处理•定义方法来判断游戏是否结束,判断条件为:新的方块组合不能在放置时超出游戏区域的顶部。
JAVA 俄罗斯方块实验报告
目录一.需求分析....................................................... 错误!未定义书签。
二.系统运行环境 (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 运行结果游戏进行中界面七.实验总结体会实验顺利完成,我觉得很有收获。
俄罗斯方块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小学期报告 俄罗斯方块
课程设计报告课程设计名称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 用户需求分析随着信息技术的迅速发展,给人们带来了各种各样的信息和更多更新的娱乐。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录一.需求分析........................ 错误!未定义书签。
二.系统运行环境 (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 运行结果游戏进行中界面七.实验总结体会实验顺利完成,我觉得很有收获。