




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
延安大学计算机学院实验报告专用纸实验室:基础实验室 机号:_ 实验日期:2010年06 月27日姓名李军华班级计08-2班课程名称计算机操作系统任课教师马乐荣实验项目名称俄罗斯方块项目指导教师马乐荣实验组别第 组同组者孟倩宇,董彦波,陈园,韦航军,侯敏江,万斌利,徐正杰教师评语及成绩: 实验成绩_ 教师签字:_(请按照实验报告的有关要求书写。一般必须包括1、实验目的;2、实验内容;3、实验步骤与方法;4、实验数据与程序清单;5、出现的问题及解决方法;6、实验结果、结果分析与体会等内容。) 第 1 页,共 页延安大学计算机学院实验报告附页姓 名李军华班 级计08-2班实验名称一 实验人员安排组长:李军华组员:孟倩宇,董彦波,陈园,韦航军,侯敏江,万斌利,徐正杰二 任务分配李军华:负责俄罗斯方块运行的开始界面、控制类面板,以及线程类的控制,同时负责整合整个俄罗斯方块的零件类,使之成为完整的项目。孟倩宇:主要负责画布类的生成以及游戏主界面的制作、菜单选项以及状态栏的制作。董彦波:负责游戏中的方块的生成,及下落、左移、右移、旋转等活动的算法。各种情况下方块活动的判断条件。陈 园:编写升级面板,可以人为的设置级别难度和帮助类面板。韦航军:主要负责游戏中的timer类的扫描以及键盘监听,随时保持游戏级别的动态更新。侯敏江:实现排行榜面板的调用,以及弹出输入玩家姓名的对话框。万斌利:负责游戏结束时的响应处理,游戏结束时弹出对话框保存玩家姓名。徐正杰:负责游戏的界面风格设置以及背景图片的处理和整个游戏的颜色处理。三 实验分析 1)需求分析:设计一个用户可参与,可由用户控制任意暂停,设置等级、可计分的俄罗斯方块游戏;2) 概要设计:一个游戏运行界面,控制面板,菜单选项。3)详细设计:对整个设计进行总体分析如下: 1定义7种砖块的类型,用两个4*4的二维数组来表示。 2在屏幕上用一个10*20表示游戏区域 3上下左右的出界问题的考虑4砖块的变形问题5砖块的移动(向左向右向下)问题 第2 页,共 页延安大学计算机学院实验报告附页姓 名李军华班 级计08-2班实验名称 6满一行后消掉砖块 7记分问题 8用开始按扭启动游戏,暂停按扭暂停游戏 9增加难度游戏速度加快,降低难度游戏速度减缓。 10界面的设定 11背景图片的加入四 项目命名以及类文件 项目命名为:俄罗斯项目,包括3个java包,13个类,功能描述如下: 一、 Main包:.Gamestart.java:游戏运行的入口,包含主方法。并调用开始面板。.M.java:生成开始面板。开始面板上有开始、帮助、退出三个按钮。开始按钮负责调用主界面。帮助按钮调用帮助面板。退出按钮退出游戏.Dialog.java:生成帮助面板。二、 back包:.board.java: 预提示面板,用于显示下一将要下落的方块,通过取到下一方块的逻辑坐标,并显示到该面板上,使玩家预先知道下一方块的形状,便于游戏的进行。.can.java: 画布类的生成,此类里主要负责随时动态更新画布的显示以及方块的下落、左移、右移、旋转等方法的定义以及判断。同时有键盘监听类的构造,负责在游戏运行过程中时刻监听键盘的事件。.Element.java:游戏中的方块类,用于抽象描述各种方块的形状和方块行为。三、 MainFframe包:.BlockFrame.java: 所有游戏面板运行的主界面。包括画布类,控制类按钮以及菜单选项。同时含有线程类来监听游戏在运行过程中的方块自由下落。.Contropanel.java: 显示面板。包括当前分数、级别的显示。并且包括开始游戏、暂停游戏、增加难度、降低难度、退出游戏等控制按钮。此类中含有timer类的生成,负责扫描面板上的分数值,当分数值等于或大于预设值的时候,自动更新级别。 第 3 页,共 页延安大学计算机学院实验报告附页姓 名李军华班 级计08-2班实验名称.Data.java: 该类中存储了游戏所需的21种标准图形和随机生成这些方块的方法,用于按照游戏设计概率产生新的方块,提供给预提示面板。.Level.java: 级别设置面板的生成。在游戏开始前可以认为的设置游戏的级别。.Player.java:输入玩家姓名的面板,当游戏结束时,弹出此面板,等待输入玩家姓名,当确定后,保存到RankedList.java生成的面板上。.RankedList.java:排行榜面板的生成,玩家可以通过点击菜单栏里的排行榜查看玩家的排行情况。 .Team.java:我们团队的所有成员介绍,人物各有特点,带有幽默风格。 具体的项目结构如下:图一.项目树形结构图 第 4 页,共 页延安大学计算机学院实验报告附页姓 名李军华班 级计08-2班实验名称五 功能演示1.项目界面图一.项目开始界面 2项目主界面图二.项目主界面界面 第 5 页,共 页延安大学计算机学院实验报告附页姓 名李军华班 级计08-2班实验名称3.游戏结束时六 具体代码如下Main包:/游戏的入口程序(GameStart.java)package Main; public class GameStart public static void main(String argv) new M();/开始界面类(M.java)package Main;import java.awt.BorderLayout;import java.awt.Component;import java.awt.Container;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import MainFrame.BlockFrame;public class M extends JFrame /* * */private static final long serialVersionUID = 1L;public int hhh;public BlockFrame b=new BlockFrame();public JButton start = new JButton(开始);public JButton exit = new JButton(退出);public JButton help = new JButton(帮助);Icon icon;JLabel t = new JLabel();BlockFrame af; /开始游戏界面的构造函数public M() super(俄罗斯方块);setBak();init();setSize(280, 330);center(this);setResizable(false);setVisible(true);public void init() setContentPane(CreatPan();public Container CreatPan() JPanel pan1 = new JPanel(new BorderLayout();pan1.setBorder(new EmptyBorder(0, 80, 50, 50);pan1.add(BorderLayout.SOUTH, Creatp2();pan1.setOpaque(false);return pan1;private Component Creatp2() JPanel pan1 = new JPanel(new BorderLayout();pan1.setBorder(new EmptyBorder(30, 40, 15, 40);pan1.setOpaque(false);pan1.setLayout(new GridLayout(3, 1, 0, 10);pan1.add(start);pan1.add(help);pan1.add(exit);start.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) M.this.setVisible(false);b.setVisible(true););help.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) new Dialog(););exit.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) int val = JOptionPane.showConfirmDialog(M.this, 确定退出, 提示框, 0);if (val = JOptionPane.YES_OPTION) System.exit(0););return pan1;public void setBak() (JPanel) this.getContentPane().setOpaque(false);ImageIcon img = new ImageIcon(getClass().getResource(1.jpg);JLabel background = new JLabel(img);this.getLayeredPane().add(background, new Integer(Integer.MIN_VALUE);background.setBounds(0, 0, img.getIconWidth(), img.getIconHeight();public static void center(Container win) Toolkit toolkit = Toolkit.getDefaultToolkit();Dimension screen = toolkit.getScreenSize();int x = (screen.width - win.getWidth() / 2;int y = (screen.height - win.getHeight() / 2;win.setLocation(x, y);/帮助界面类(Dialog.java)package Main;import java.awt.BorderLayout;import java.awt.Container;import java.awt.Dimension;import java.awt.Toolkit;import javax.swing.JFrame;import javax.swing.JLabel;public class Dialog extends JFrame /* * */private static final long serialVersionUID = 1L;JLabel ll = new JLabel(游戏帮助+ 本游戏是适合各年龄阶段益智游戏、绿色游戏、健康游 + 戏不含暴力、淫秽内容+ ,是各位玩家休闲娱乐、茶余饭后、家居旅行的必备游戏。 + 本游戏免费。+ 一、游戏规则说明1、生存之路游戏中下降的各种形状的+ 方块将会从低到高累积起来,只有用方块填满同一行,这一行才会瞬间化为乌+ 有,你将得到分数。而建立在此之上的所有方块都会下移一行,当然如果是更 + 多的行就最好了。+ 2、灭亡之时如果你的建筑物高到触到顶 + 部,却没有一排消去,您就GAME OVER了。+ 二、游戏控制说明 + 1、在方块触底之前,您可以通过键盘上的+ 下、左、右按键控制下落中方块的运动方向,并使用上键旋转这些方块,以使他们+ 在正确的时间,以正确的方向、落在正确的地方,填满某一排,你就可以得到相应的+ 积分。2、当连续几排同时消去方块时,你会看见你本次的得分成倍的增加哦!+ 三、级别说明+ 1、当你的分数增加到一定程度时,您将会升到更高级别,此时你拥有的不仅是身份、 + 地位,还有更大的挑战!+ 2、升级说明+ 成长级别 所需分数 + 这个游戏刺激阿,有木有?这个游戏好耍啊,有木有?+ 各路英雄,迎接你的挑战啊!);/帮助界面的构造函数。public Dialog() super(帮助框);this.add(BorderLayout.NORTH, ll);this.setSize(400, 500);center(this);setResizable(false);setVisible(true);public static void center(Container win) Toolkit toolkit = Toolkit.getDefaultToolkit();Dimension screen = toolkit.getScreenSize();int x = (screen.width - win.getWidth() / 2;int y = (screen.height - win.getHeight() / 2;win.setLocation(x, y);Back包:/预提示面板(board.java)package back;import java.awt.Color;import java.awt.GridLayout;import javax.swing.JPanel;import javax.swing.border.BevelBorder;public class board extends JPanel /* * */private static final long serialVersionUID = 1L;JPanel panel = new JPanel44;int i, j;/board的构造方法public board() setVisible(true);setLayout(new GridLayout(4, 4);for (i = 0; i 4; i+) for (j = 3; j 7; j+) panelij-3 = new JPanel();for (i = 0; i 4; i+) for (j = 3; j 7; j+) add(panelij-3, new GridLayout(18, 10);panelij-3.setBackground(Color.pink);panelij-3.setVisible(true);panelij-3.setBorder(new BevelBorder(BevelBorder.LOWERED);public void boardp(Element block) int ad=new int24; ad=block.outArray(); int k = 0;setSize(400, 400);setVisible(true);setLayout(new GridLayout(4, 4);for (i = 0; i 4; i+) for (j = 3; j 7; j+) add(panelij-3);panelij-3.setBackground(Color.cyan);panelij-3.setBorder(new BevelBorder(BevelBorder.LOWERED);System.out.println();for (k = 0; k 4; k+) for (i = 0; i 4; i+) for (j =3 ; j 7; j+) if (j = ad0k) & (i = ad1k) panelij-3.setBackground(Color.blue); /画布类的生成(can.java)package back;import java.awt.Color;import java.awt.GridLayout;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import javax.swing.JPanel;import javax.swing.border.BevelBorder;import MainFrame.Data;public class Can extends JPanel/* * */private static final long serialVersionUID = 1L;JPanel panel = new JPanel1810;public boolean mCanarray = new boolean1810;public boolean Canarray = new boolean1810;int maxT=new int10;private int minT=new int10;public int d_value=new int18,18,18,18,18,18,18,18,18,18;int i, j;public int min=18;public Element block = new Element();public Element nextblock = new Element();public boolean p=true;public boolean q=false;/画布类的构造函数public Can() setVisible(true);setLayout(new GridLayout(18, 10);for (i = 0; i 18; i+) for (j = 0; j 10; j+) panelij = new JPanel();setSize(10, 10);mCanarrayij = false;Canarrayij = false;for (i = 0; i 18; i+) for (j = 0; j 10; j+) add(panelij, new GridLayout(18, 10);panelij.setBackground(new Color(50, 60, 50);panelij.setVisible(true);panelij.setBorder(new BevelBorder(BevelBorder.RAISED);addKeyListener(new ControlKeyListener();public void intoboolArray(Element block) int ad = new int24;ad = block.outArray();for (int k = 0; k 4; k+) for (int i = 0; i 18; i+) for (int j = 0; j 10; j+) if (j = ad0k) & (i = ad1k) mCanarrayij = true;public void rescue() for (int i = 0; i 18; i+) for (int j = 0; j 10; j+) mCanarrayij = false;panelij.setBackground(new Color(50, 60, 50);/求或public void lgc() for (i = 0; i 18; i+) for (j = 0; j 10; j+) mCanarrayij |= Canarrayij;/更新画布public void updateCan(Element block) rescue(); intoboolArray(block); lgc(); for (i = 0; i 18; i+) for (j = 0; j 10; j+) if (mCanarrayij=true) panelij.setBackground(new Color(0,134,139);repaint(); if(min=1)saveCan(); public void cls()for (int i = 0; i 18; i+) for (int j = 0; j 10; j+) Canarrayij = false;panelij.setBackground(new Color(50, 60, 50);public void saveCan() for (int k = 0; k 4; k+) for (int i = 0; i 18; i+) for (int j = 0; j 10; j+) if (j = block.array0k) & (i = block.array1k) Canarrayij = true; /控制public void down()int i;boolean tin=true;for( i=0;i=0)&(block.array1i=0)&(block.array1i17)&(Canarrayblock.array1i+1block.array0i)System.out.print(block.array0i+block.array1i);tin=false; if(tin=false|block.maxY()=17)min=1;saveCan();if(tin)block.down();updateCan(block);for( i=0;i10;i+)if(Canarray0i=true)System.out.print(zuobiap+i);System.out.print(chudFFFFFFFF);public void left()boolean tin=true;for(int i=0;i=1)&(block.array1i=0)&(Canarrayblock.array1iblock.array0i-1)tin=false;if(tin)block.left();updateCan(block);public void right()boolean tin=true;for(int i=0;i=0)&(block.array0i=0)&(Canarrayblock.array1iblock.array0i+1)tin=false;if(tin) block.right();updateCan(block);public void revolve()boolean tin=true; block.revolve(); for(int i=0;i=0)&(block.array1i=0)&(Canarrayblock.array1iblock.array0i) tin=false;if(tin)updateCan(block);elseblock.revolve();block.revolve();block.revolve();/产生方块public Element makingnextblock()Data d=new Data();nextblock=d.makingRandom().Arrayfirst();return nextblock;/键盘监听private class ControlKeyListener extends KeyAdapter public void keyPressed(KeyEvent ke) switch (ke.getKeyCode() case KeyEvent.VK_DOWN: down();repaint();break;case KeyEvent.VK_LEFT: left();break;case KeyEvent.VK_RIGHT: right();break;case KeyEvent.VK_UP: revolve();break;default:break;/方块类(Element.java) package back;public class Element extends Thread implements Cloneable /相近的两级之间,块每落下一行的时间差别是多少(毫秒)public final static int BETWEEN_LEVELS_DEGRESS_TIME=50; /让升级变化平滑的因子,避免最后几级之间的速度相差近一倍public final static int LEVEL_FLATNESS_GENE=3; int array;int ID;int bi=3;int bj=0;/构造传数组的方法public Element(int x, int y) array = new int24;ID = y;System.arraycopy(x, 0, array, 0, x.length);/默认数组public Element() SuppressWarnings(unused)int array = 0, 0, 0, 0 , 0, 0, 0, 0 ;ID = 0; /修改当前对象数组坐标public void updateArray(int arr)array=arr;/ 返回当前对象数组元素public Element Arrayfirst() for (int i = 0; i 4; i+)array0i = array0i+3;return this;public int outArray() return array;/返回当前对象最大x坐标private int maxX()int max=0;for(int i=0;i4;i+)if(maxarray0i)max=array0i;return max; /返回当前对象最小x坐标private int minX()int min=1000;for(int i=0;iarray0i)min=array0i;return min; /返回当前对象最大y坐标public int maxY()int max=0;for(int i=0;i4;i+)if(maxarray1i)max=array1i;return max; /返回当前对象最小y坐标public int minY()int min=1000;for(int i=0;iarray1i)min=array1i;return min;/*控制*/ 方块左移public void left() int i;if(minX()0)for (i = 0; i 4; i+) array0i = array0i - 1; -bi;/ 方块右移public void right() int i;if(maxX()9)for (i = 0; i 4; i+) array0i = array0i + 1; +bi;/ 方块下移public void down() int i;if(maxY()17)for (i = 0; i 4; i+) array1i = array1i + 1;+bj;System.out.print(纵坐标评议+bj); /旋转方块public void revolve()int t_arr=new int24;for(int i=0;i2;i+)for(int j=0;j4;j+)t_arrij=arrayij;int arr=new int24;if(maxY()17) if(ID=0) elsefor(int i=0;i4;i+) array0i=array0i-bi;array1i=array1i-bj; /坐标旋转 arr0i=array1i;if(ID=12)arr1i=3-array0i;elsearr1i=2-array0i; /平移到当前位置arr0i=arr0i+bi;arr1i=arr1i+bj;array=arr; if(maxX()=0)&(maxY()18) else for(int i=0;i2;i+)for(int j=0;j4;j+)arrayij=t_arrij; / 复制当前对象public Object clone() Element ele = null;try ele = (Element) super.clone(); catch (CloneNotSupportedException e) e.printStackTrace();return ele;/ 显示当前对象数组public void displayArray() int i, j;for (i = 0; i 4; i+) for (j = 0; j 2; j+)System.out.print(arrayji); System.out.print(/); System.out.println();public boolean getplaying()if(maxY()17)return true;elsereturn false;/游戏主界面的生成(BlockFrame.java)package MainFrame;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.Dimension;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import back.Can;import Main.Dialog;public class BlockFrame extends JFrame implements ActionListener public boolean playing = true;private static final long serialVersionUID = 1L;public final static int PER_LINE_SCORE = 10;/ 积多少分后能升级public final static int PER_LEVEL_SCORE = PER_LINE_SCORE * 20;JPanel contentPane;BorderLayout borderLayout = new BorderLayou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年资产评估行业当前市场规模及未来五到十年发展趋势报告
- 2025年电抗器行业当前发展现状及增长策略研究报告
- 保定市安新县2024-2025学年中考数学模拟试题含解析
- 2025年版《义务教育道德与法治课程标准》试题(含答案)
- 2025年食堂从业人员卫生知识测试试题与答案
- 2025年安全工程师试卷及答案
- (完整)老年痴呆护理培训考试试题及答案
- 摩托驾驶安全知识培训课件
- 2025政府采购评审专家考试试题及答案
- 2025年全国公文写作与处理自考试题及答案解析
- 2023成都高新未来科技城发展集团有限公司招聘试题及答案解析
- 新教师岗前培训讲座中小学教学常规PPT
- 卡拉贝利110千伏线路吊车跨越G3013高速公路施工方案
- 闸调器介绍讲解
- YB/T 4089-2000高功率石墨电极
- GB/T 9268-2008乳胶漆耐冻融性的测定
- GB/T 16439-2009交流伺服系统通用技术条件
- 成都理工大学2023年805普通物理学考研真题(回忆版)
- 申克振动筛操作和维护手册
- 三晶变频器说明书SAJ8000系列简约版
- 循环系统-超声诊断
评论
0/150
提交评论