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

时间:2024.5.13

前言

实习时间:

实习学时: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,关闭窗口类。


第二篇:java俄罗斯方块实验报告


import javax.swing.JFrame;

public class Game {

public static void main(String[] args){

ShapeFactory shapeFactory=new ShapeFactory();

Ground ground =new Ground();

GamePanel gamePanel=new GamePanel();

Controller controller=new Controller(shapeFactory,ground,gamePanel); JFrame frame =new JFrame("俄罗斯方块");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(gamePanel.getSize().width+10,gamePanel.getSize().height+35);

frame.add(gamePanel);

gamePanel.addKeyListener(controller);

frame.addKeyListener(controller);

frame.setVisible(true);

controller.newGame();

}

}

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

//处理按键事件,处理逻辑

public class Controller extends KeyAdapter implements ShapeListener{ private Shape shape;

private ShapeFactory shapeFactory;

private Ground ground;

private GamePanel gamePanel;

public void keyPressed(KeyEvent e) { switch(e.getKeyCode()){ case KeyEvent.VK_UP: if(ground.isMoveable(shape, Shape.ROTATE)) shape.roate(); break; case KeyEvent.VK_DOWN:

} if(ground.isMoveable(shape, Shape.DOWN)) shape.moveDown(); break; if(ground.isMoveable(shape, Shape.LEFT)) case KeyEvent.VK_LEFT: shape.moveLeft(); break; case KeyEvent.VK_RIGHT: } if(ground.isMoveable(shape, Shape.RIGHT)) shape.moveRight(); break; gamePanel.display(ground, shape); //下面这个方法“synchronized”是同步的意思。因为有多个线程用到这个方法 public synchronized boolean isShapeMoveDown(Shape shape) { } @Override public void shapeMoveDown(Shape shape) { } public void newGame(){ } shape=shapeFactory.getShape(this); gamePanel.display(ground, shape); if(ground.isMoveable(shape, Shape.DOWN)) return true; ground.accept(this.shape);//图形变成障碍物 if(!ground.isFull()){ this.shape=shapeFactory.getShape(this);//产生一个新的图形 } if(ground.isFull()){ } return false; System.exit(0);

public Controller(ShapeFactory shapeFactory,Ground ground,GamePanel gamePanel){

}

} this.gamePanel=gamePanel; this.ground=ground; this.shapeFactory=shapeFactory;

import java.awt.Color;

import java.awt.Graphics;

import javax.swing.JPanel;

//整个游戏面板

public class GamePanel extends JPanel {

private Ground ground; private Shape shape;

//显示的方法

public void display(Ground ground,Shape shape){

}

protected void paintComponent(Graphics g) {

}

public GamePanel(){

}

} this.setSize(Global.WIDTH*Global.CELL_SIZE,Global.HEIGHT*Global.CELL_SIZE); //重新显示 g.setColor(new Color(0xcfcfcf)); g.fillRect(0,0,Global.WIDTH*Global.CELL_SIZE,Global.HEIGHT*Globalif(shape!=null&&ground!=null){ shape.drawMe(g); ground.drawMe(g); } System.out.println("GamePanel's display"); this.repaint(); this.shape=shape; this.ground=ground; .CELL_SIZE);

public class Global {

} public static final int CELL_SIZE =20; public static final int WIDTH = 15; public static final int HEIGHT = 15;

import java.awt.Graphics;

//存放障碍物的类

public class Ground {

private int[][] obstacles=new int[Global.WIDTH][Global.HEIGHT]; //障碍物 public void accept(Shape shape){//接受图形,把图形变成障碍物 System.out.println("Ground's accept"); } private void deleteFullLine(){ for(int y = Global.HEIGHT-1;y>=0;y--){//判断是否满行一行一行的判断,for(int x=0;x<4;x++){ } for(int y = Global.HEIGHT-1;y>=0;y--){ deleteFullLine(); } for(int y=0;y<4;y++){ } if(shape.isMember(x, y,false)){ } obstacles[shape.getLeft()+x][shape.getTop()+y]=1; 从最下面一行开始判断

boolean full=true;

for(int x=0;x<Global.WIDTH;x++){//判断这行是否有空白 if(obstacles[x][y]==0) } full=false;//如果有一列有空白。。则full=false if(full){ deleteLine(y);//消除这一行 }

} } private void deleteLine(int lineNum){//消除这一行的方法 } public void drawMe(Graphics g){ } public boolean isMoveable(Shape shape,int action){ int left=shape.getLeft(); int top=shape.getTop(); switch(action){ case Shape.LEFT: } for(int x=0;x<4;x++){ for(int y=0;y<4;y++){ if(shape.isMember(x,y,action==Shape.ROTATE)){ if(top + left--; break; left++; break; top++; break; System.out.println("Ground's drawMe"); for(int x=0;x<Global.WIDTH;x++){ } for(int y=0;y<Global.HEIGHT;y++){ } if(obstacles[x][y]==1){ } g.fill3DRect(x*Global.CELL_SIZE, y*Global.CELL_SIZE, Global.CELL_SIZE, Global.CELL_SIZE, true); for(int y=lineNum;y>0;y--){//满行的地方起,以上的行总体下一行 for(int x=0;x<Global.WIDTH;x++){ } for(int x=0; x<Global.WIDTH;x++){//第一行全部变成空白 obstacles[x][0]=0; } } obstacles[x][y]=obstacles[x][y-1]; case Shape.RIGHT: case Shape.DOWN:

y>=Global.HEIGHT||left+x<0||left+x>=Global.WIDTH||

obstacles[left+x][top+y]==1)//超出边界或者对应位置是障碍物返回false

} } } return true; } } return false; public boolean isFull(){ } for(int x=0;x<Global.WIDTH;x++){ } return false; if(obstacles[x][0]==1)//判断第一行是否有障碍物 return true;

import java.awt.Color;

import java.awt.Graphics;

//各种形状的方块

public class Shape {

public static final int ROTATE=0; public static final int LEFT=1; public static final int RIGHT=2; public static final int DOWN=3; private int[][]body; private int status; private int left; private int top; private ShapeListener listener;

//3个移动的方法:left,right,down。。没有向上的还有一个旋转的方法 public void moveLeft(){

}

public void moveRight(){ System.out.println("Shape's moveLeft"); left--;

} System.out.println("Shape's moveRight"); left++;

public void moveDown(){

}

public void roate(){

}

//显示方块的方法

public void drawMe(Graphics g){

}

private boolean getFlagByPoint(int x,int y){

}

private class ShapeDriver implements Runnable{

public void run() { while(listener.isShapeMoveDown(Shape.this)){ moveDown(); listener.shapeMoveDown(Shape.this); try { Thread.sleep(1000); } catch (InterruptedException e) { } int tempstatus=status; if(rotate){ } return body[tempstatus][y*4+x]==1; tempstatus=(status+1)%body.length; return body[status][y*4+x]==1; System.out.println("Shape's frawMe"); g.setColor(Color.BLUE); for(int x=0;x<4;x++){ for(int y=0;y<4;y++){ if(getFlagByPoint(x,y)){ System.out.println("Shape's roate"); status=(status+1)%body.length; System.out.println("Shape's moveDown"); top++; g.fill3DRect((left+x)*Global.CELL_SIZE ,(y+top)*Global.CELL_SIZE, } } } Global.CELL_SIZE,Global.CELL_SIZE,true); public boolean isMember(int x,int y,boolean rotate){

} } } } e.printStackTrace();

public Shape(){

}

public void addShapeListener(ShapeListener l){

}

public void setBody(int body[][]){

}

public void setStatus(int status){

}

public int getTop(){

}

public int getLeft(){

}

} return left; return top; this.status=status; this.body=body; if(l!=null) this.listener=l; new Thread(new ShapeDriver()).start();

import java.util.Random;

public class ShapeFactory {

private int shapes [][][]=new int[][][]{//7个 {

{ 1,0,0,0, 1,1,1,0, }, { 1,1,0,0, 1,0,0,0, 0,0,0,0, 0,0,0,0,

}, 1,0,0,0, 0,0,0,0, { 1,1,1,0, 0,0,1,0, }, { 0,1,0,0, 0,1,0,0, 1,1,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,

}

},

{

{ 0,0,1,0, 1,1,1,0,

0,0,0,0, 0,0,0,0,

},

{ 1,0,0,0, 1,0,0,0,

1,1,0,0, 0,0,0,0,

},

{ 1,1,1,0, 1,0,0,0,

0,0,0,0, 0,0,0,0,

},

{ 1,1,0,0, 0,1,0,0,

0,1,0,0, 0,0,0,0,

}

},

{

{ 1,1,0,0, 0,1,1,0,

0,0,0,0, 0,0,0,0,

},

{ 0,1,0,0, 1,1,0,0,

1,0,0,0, 0,0,0,0,

},

{ 1,1,0,0, 0,1,1,0,

0,0,0,0, 0,0,0,0,

},

{ 0,1,0,0, 1,1,0,0,

1,0,0,0, 0,0,0,0,

}

},

{

{ 0,1,1,0, 1,1,0,0,

0,0,0,0, 0,0,0,0,

},

{ 1,0,0,0, 1,1,0,0,

0,1,0,0, 0,0,0,0,

},

}; }, { }, { } { 0,1,1,0, 1,1,0,0, }, { 1,0,0,0, 1,1,0,0, } 0,1,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, { 1,1,1,1, 0,0,0,0, }, { 1,0,0,0, 1,0,0,0, }, { 1,1,1,1, 0,0,0,0, }, { 1,0,0,0, 1,0,0,0, } 1,0,0,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, 1,0,0,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, { 0,1,1,0, 0,1,1,0, }, { 0,1,1,0, 0,1,1,0, }, { 0,1,1,0, 0,1,1,0, }, { 0,1,1,0, 0,1,1,0, } 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,

public Shape getShape(ShapeListener listener){//产生不同形状的图形 System.out.println("ShapeFactory's getShape");

Shape shape=new Shape();

shape.addShapeListener(listener);

int type= new Random().nextInt(shapes.length);

shape.setBody(shapes[type]);

shape.setStatus(0);

return shape;

}

}

public interface ShapeListener {

boolean isShapeMoveDown(Shape shape); } void shapeMoveDown(Shape shape);

更多相关推荐:
俄罗斯方块实验报告

《软件工程与开发实践1》软件设计报告题目:俄罗斯方块学院:计算机学院专业:计算机科学与技术一、软件设计概述(目的、任务、开发环境、参考资料)俄罗斯方块游戏属于经典小游戏,游戏规则简单,但又不乏趣味。而计算的一大…

JAVA 俄罗斯方块实验报告

目录一需求分析错误未定义书签二系统运行环境2三系统功能需求描述2四总体设计2五系统结构图3六程序模块设计3七实验总结体会15一需求分析在个人电脑日益普及的今天一些有趣的桌面游戏已经成为人们在使用计算机进行工作或...

c语言俄罗斯方块实验报告

C语言之游戏俄罗斯方块课程设计报告专业学生姓名指导教师完成时间1目录一需求分析错误未定义书签二概要设计错误未定义书签三详细设计错误未定义书签四调试分析19五用户手册20六测试数据错误未定义书签七附录错误未定义书...

俄罗斯方块实验报告

程序设计实践报告20xx20xx学年第2学期题目专学生姓班级学指导教指导单日俄罗斯方块游戏设计业名号师位软件工程系期20xx0327俄罗斯方块游戏设计一课题内容和要求本程序的主要任务就是编写简单的俄罗斯方块游戏...

俄罗斯方块设计实验报告

数字电路与逻辑设计实验报告基于VHDL的简易俄罗斯方块实验名称姓名班级简易俄罗斯方块电信工程学院04107班辅导老师日期高英20xx年11月6日摘要俄罗斯方块游戏是我们熟知的经典小游戏之一本实验通过硬件编成实现...

C++俄罗斯方块实验报告(附实验体会)

程序设计综合实验设计文档惠州学院HUIZHOUUNIVERSITY课程名称程序设计综合实验姓名实验名称俄罗斯方块学号任课教师专业班级计算机科学与技术1班实验时间第一周至第十二周实验成绩批阅教师签字第1页共18页...

游戏设计俄罗斯方块实验报告

江苏省惠山中等专业学校实验报告课程名称C程序设计实验名称游戏设计俄罗斯方块班级G1241姓名鲍顺亮日期指导教师卫洛斌成绩

C语言俄罗斯方块试验报告,包括源程序

实验内容游戏程序----俄罗斯方块指导老师##一.实验题目设计完成俄罗斯方块游戏。游戏开始后在游戏小窗口的顶部会随机产生一个方块并以一定的速度下移,下移过程玩家作变换、左右移操作以使其摆放合适,当叠满一行时会自…

俄罗斯方块vb报告

沈阳工程学院课程设计说明书摘要visualbasic继承了basic语言易学易用的特点特别适合于初学者学习windows系统编程随着21世纪信息社会的到来计算机在人们的工作和生活中的深入要求我们越来越多地与计算...

俄罗斯方块游戏的设计和实现

北京邮电大学信息与通信工程学院程序设计实践设计报告课题名称俄罗斯方块游戏的设计和实现学生姓名xxxxxxxxx班级班内序号20学号日期20xx615第1页北京邮电大学信息与通信工程学院1课题概述11课题目标和主...

VC++俄罗斯方块课程设计报告(含源代码)

班级学号姓名课程设计报告文档题目俄罗斯方块游戏一引言1编写目的通过本课程设计使学生巩固面向对象程序设计的基本概念原理和技术学会使用VisualC开发工具进行简单面向对象程序的开发将理论与实际相结合完成一个小型面...

俄罗斯方块设计论文

摘要在现今电子信息高速发展的时代电子游戏已经深入人们的日常生活成为老少皆宜的娱乐方式但是游戏设计结合了日新月异的技术在一个产品中整合了复杂的设计艺术声音和软件所以并不是人人皆知直到今天在中国从事游戏设计的人仍然...

俄罗斯方块实验报告(44篇)