ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:44.13KB ,
资源ID:26335016      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26335016.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(java课程设计报告材料俄罗斯方块.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

java课程设计报告材料俄罗斯方块.docx

1、java课程设计报告材料俄罗斯方块 JAVA程序设计课程设计 之 俄罗斯方块年级:13级 班级:T412 网络工程指导老师:朱林小组成员: 20138346021 许浩洋 时间:2015年11月11日摘要在现代,高科技的飞跃发展,人们工作习惯的改变,特别是电脑的大量普及,人们生活节奏越来越快,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一。俄罗斯方块(Tetris, 俄文:)是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,

2、使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。 为此,我们设计了一款简单的俄罗斯方块JAVA游戏程序,以便更好的满足广大电脑工作者闲暇之余的消遣,并且也让我们学到编程技术与团队意识。关键字:俄罗斯方块、JAVA游戏、编程第1章 课程设计要求题目名称:俄罗斯方块题目类型:设计型课程设计目的: 1)了解Java的基本使用方法。 2)熟悉eclipse的运行环境。 3)用JAVA来设计一个俄罗斯方块的小游戏。 4)基本实现俄罗斯方块的应用功能。实验原理:JAVA程序分析与设计、类的灵活运用、多态技术、模板技术、异常处理等。实验内容:本俄罗斯方块游戏是对于随机

3、给出不同的形状(长条形、Z字形、反Z形、田字形、L字形、反L形、T字型)下落填充给定的区域,若填满一条便消掉,记分。若在游戏中各形状填满了给定区域,为输者。 第二章 设计概要2.1 功能设计本项目是为了实现俄罗斯方块的基本功能而设计的,基本能够达到俄罗斯方块的各种游戏性。项目需求分析如下:1)由方块组成的不同的随机图形会从区域上方开始缓慢落下。2)玩家可以做的操作有: 以90度为单位旋转方每一格块。以格子为单位左右移动方块,让方块加速落下。3)方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的随机图形会出现在区域上方开始落下。4)当区域中某一列横向格子全部由方块填满,则该

4、列会自动消除并成为玩家的得分。5)一次性销毁不同行数方块得分不同,一行1分,两行2分,三行5分,四行10分。6)当固定的方块堆到区域最上方,则游戏结束。2.2 功能分析2.2.1 系统操作界面2.2.2 程序主要功能说明1.面板画笔类代码:package Tetris;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.util.Arrays;import ja

5、va.util.Timer;import java.util.TimerTask;import javax.swing.JFrame;import javax.swing.JPanel;public class TetrisPanel extends JPanel/游戏主面板20行10列private static final int ROWS = 20;private static final int COLS = 10;/代表方块着陆的墙private Cell wall = new CellROWSCOLS;/定义每一小块的大小private static final int CELL_

6、SIZE = 25;/游戏得分private int score;/游戏销毁行数private int lines;/一次性销毁行数的计分标准(0行=0分,1行=1分,2行=4分,3行=10分,4行=20分)private static final int SCORE_LEVEL =0,1,4,10,20;/游戏结束标记private boolean gameOver = false;/游戏暂停标记private boolean pause = false;/正在下落的四格方块private Tetromino currentTetro ;/下一个下落的四格方块private Tetromin

7、o nextTetro ;/定义游戏定时器private Timer timer;public static void main(String args)JFrame frame = new JFrame(俄罗斯方块);int width = (COLS+8)*CELL_SIZE+100;int height = ROWS*CELL_SIZE+100;frame.setSize(width, height);frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/取消系统默认

8、布局frame.setLayout(null);TetrisPanel panel = new TetrisPanel();panel.setLocation(45, 35);panel.setSize(COLS+8)*CELL_SIZE,ROWS*CELL_SIZE+1);frame.add(panel);frame.setVisible(true);panel.action();public void paint(Graphics g)super.paint(g);/填充背景颜色this.paintBackground(g);/绘制游戏墙paintWall(g);/绘制分数墙paintSc

9、ore(g);/绘制面板边框paintTetrisBorder(g);/绘制当前四格方块paintCurrentTetro(g);/绘制下个四格方块paintNextTetro(g); /private static final int BG_COLOR = 0xC3D5EA;/private static final int BORDER_COLOR = 0x667799;/private static final int FONT_COLOR = 0x000000;/绘制背景的方法public void paintBackground(Graphics g)g.setColor(new C

10、olor(BG_COLOR);/this.setBackground(new Color(BG_COLOR);g.fillRect(0, 0, this.getWidth(), this.getHeight();/绘制游戏墙的方法public void paintWall(Graphics g)for(int row=0;rowROWS;row+)for(int col=0;colCOLS;col+)Cell cell = wallrowcol;int x =col*CELL_SIZE;int y= row*CELL_SIZE;if(cell=null)g.setColor(new Color

11、(BORDER_COLOR);g.drawRect(x, y, CELL_SIZE, CELL_SIZE);elseg.setColor(new Color(cell.getColor();g.fillRect(x, y, CELL_SIZE, CELL_SIZE);g.setColor(new Color(BORDER_COLOR);g.drawRect(x, y, CELL_SIZE, CELL_SIZE);/绘制分数墙的方法public void paintScore(Graphics g)int x = 12*CELL_SIZE;int y = 6*CELL_SIZE;Font fon

12、t = new Font(楷体,Font.BOLD,23);String msg =分数:+score;g.setColor(new Color(FONT_COLOR);g.setFont(font);g.drawString(msg, x, y);y+=2*CELL_SIZE;msg = 行数:+lines;g.drawString(msg, x, y);if(gameOver)msg = (T_T)【S】再来;y+=2*CELL_SIZE;x-=CELL_SIZE;g.drawString(msg, x, y);else if(pause)msg = 【C】继续;y+=2*CELL_SIZ

13、E;g.drawString(msg, x, y);elsemsg = 【P】暂停;y+=2*CELL_SIZE;g.drawString(msg, x, y);/绘制面板边框的方法public void paintTetrisBorder(Graphics g)g.setColor(new Color(BORDER_COLOR);g.drawRect(0, 0, CELL_SIZE*(COLS+8)-1, CELL_SIZE*ROWS);/绘制当前四格方块的方法public void paintCurrentTetro( Graphics g)if(currentTetro=null)/如果

14、没有四格方块,则返回不绘画return;for(Cell cell:currentTetro.cells)int row = cell.getRow();int col = cell.getCol();int x = col*CELL_SIZE;int y = row*CELL_SIZE;g.setColor(new Color(cell.getColor();g.fillRect(x, y, CELL_SIZE, CELL_SIZE);g.setColor(new Color(BORDER_COLOR);g.drawRect(x, y, CELL_SIZE, CELL_SIZE);/绘制下个

15、四格方块的方法public void paintNextTetro( Graphics g)if(nextTetro=null)/如果没有四格方块,则返回不绘画return;for(Cell cell:nextTetro.cells)int row = cell.getRow();int col = cell.getCol();int x = (col+9)*CELL_SIZE;int y = (row+1)*CELL_SIZE;g.setColor(new Color(cell.getColor();g.fillRect(x, y, CELL_SIZE, CELL_SIZE);g.setCo

16、lor(new Color(BORDER_COLOR);g.drawRect(x, y, CELL_SIZE, CELL_SIZE);/让四格方块动起来的方法public void action()startGameAction();/请求此容器获取输入焦点this.requestFocus();this.addKeyListener(new KeyAdapter()public void keyPressed(KeyEvent e)int key= e.getKeyCode();if(gameOver)if(key=KeyEvent.VK_S)startGameAction();return

17、;if(pause)if(key=KeyEvent.VK_C)continueAction();return;switch(key)case KeyEvent.VK_DOWN:softDownAction();break;case KeyEvent.VK_LEFT:moveLeftAction();break;case KeyEvent.VK_RIGHT:moveRightAction();break;case KeyEvent.VK_UP:rotateRightAction();break;case KeyEvent.VK_SPACE:hardDownAction();break;case

18、KeyEvent.VK_P:pauseAction();break;repaint();/暂停游戏的方法private void pauseAction() pause = true;timer.cancel();/继续游戏的方法private void continueAction() pause = false;timer = new Timer();timer.schedule(new TimerTask() public void run() softDownAction();repaint();, 500, 500););/在游戏开始时调用或者【S】按下时调用public void

19、startGameAction()gameOver = false;pause = false;score = 0;lines = 0;/清空游戏主面板emptyWall();/生成下一个四格方块nextTetromino();/生成定时器对象timer = new Timer();/启动定时器工作timer.schedule(new TimerTask() public void run() /调用面板的四格方块下落方法(自由下落)softDownAction();/重画面板repaint();, 500, 500);/清空游戏主面板方法public void emptyWall()for(

20、int row =0;rowROWS;row+)/wallrow这一行全部用null表示Arrays.fill(wallrow, null);/生成(随机)下一个四格方块,1.下一个变成当前的。2.随机生成下一个。public void nextTetromino()if(nextTetro=null)/第一次nextTetro是null时就随机生成一个nextTetro = Tetromino.randomTetromino();/下一个四格方块立即变成当前四格方块currentTetro = nextTetro;nextTetro = Tetromino.randomTetromino()

21、;/四格方块下落流程,方块移动到区域最下方或者移动到其他方块上则固定在此处。/而新的四个方块则会出现在区域上方并开始下落且随机生成下一个四格方块public void softDownAction()if(canDown()/如果能下落则继续下落currentTetro.softDown();else/不能下落则着陆到墙上tetrominoLandToWall();/每一个四格方块着陆清除满行且计分destroy();/每一个四格方块着陆需要检测游戏是否结束if(gameOver()/如果游戏结束gameOverAction();else/随机生成下一个四格方块nextTetromino();

22、/检查方块是否能够继续下落(落到最底部或者墙上的下方有方块)private boolean canDown() /检查是否到底部Cell cells = currentTetro.cells;for(Cell cell:cells)if(cell.getRow()=ROWS-1)return false;/检查次四格方块下方是否有方块for(Cell cell:cells)int row = cell.getRow();int col = cell.getCol();Cell block = wallrow+1col;if(block!=null)return false;return tru

23、e;/方块“着陆”到墙上,取出每个小方块找到对应的行号row和列号col,将cell小方块放到对应的wallrowcol位置上private void tetrominoLandToWall() Cell cells = currentTetro.cells;for(Cell cell:cells)int row = cell.getRow();int col = cell.getCol();/将cell小方块放到对应的wallrowcol位置上wallrowcol=cell;/销毁满行的方法private void destroy() /统计本次销毁的行数int lines =0;for(i

24、nt row =0 ;rowROWS;row+)/判断此行是否是满行if(fullCells(row)/清除此行clearLine(row);/每清除一行就累计加一lines+;/整个游戏面板每一行判断之后要记录销毁行数与计分score += SCORE_LEVELlines;this.lines += lines;/判断某一行是否填满cell小方块private boolean fullCells(int row) Cellline = wallrow;for(int i=0; i=1;i-)/wallrow = Arrays.copyOf(wallrow-1, COLS);System.a

25、rraycopy(wallrow-1, 0, wallrow, 0, COLS);/第一行全部用null填充Arrays.fill(wall0, null);/检查游戏是否结束(思路:游戏主面板中第一行出现四个方块的区域有小方块cell在则游戏结束)private boolean gameOver() gameOver = wall03!=null|wall04!=null;return gameOver;/清零游戏结束现场(停止计时器)private void gameOverAction() /停止计时器timer.cancel();/以四格方块为单位左右移动的方法:1.遇到左右边界不能移

26、动。2.遇到左右有方块不能移动。/左移的方法private void moveLeftAction() currentTetro.moveLeft();if(outOfBounds()|coincide()currentTetro.moveRight();/判断四格方块是否与墙上的方块重合的方法private boolean coincide() for(Cell cell:currentTetro.cells)int col = cell.getCol();int row = cell.getRow();/System.out.println(col+:+row);if(wallrowcol

27、!= null)return true;return false;/判断四格方块是否出边界的方法 private boolean outOfBounds() for(Cell cell:currentTetro.cells)int col = cell.getCol();if(col=COLS)return true;return false;/右移的方法private void moveRightAction() currentTetro.moveRight();if(outOfBounds()|coincide()currentTetro.moveLeft();/四格方块加速下落的方法pr

28、ivate void hardDownAction() /四格方块继续下落while(canDown()currentTetro.softDown();/着陆到墙上tetrominoLandToWall();/清除满行并计分destroy();if(gameOver()gameOverAction();elsenextTetromino();/旋转流程控制private void rotateRightAction() currentTetro.rotateRight();if(outOfBounds()|coincide()currentTetro.rotateLeft();2.2.2方块类代码:package Tetris;/代

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1