当前位置:文档之家› java课程设计报告材料-俄罗斯方块

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

JAVA程序设计课程设计之俄罗斯方块年级:13级班级:T412 网络工程指导老师:朱林小组成员:20138346021 许浩洋时间:2015年11月11日目录摘要................................................................. 第一章课程设计要求..................................................第二章设计概要......................................................2.1 功能设计......................................................2.2 功能分析......................................................2.2.1 系统操作界面...............................................2.2.2 程序主要功能说明...........................................第三章调试分析与测试结果............................................3.1 游戏运行界面..................................................3.2 测试项目......................................................3.2.1 功能区按键测试............................................3.2.2 键盘功能测试..............................................3.2.3 游戏结束测试..............................................第四章设计总结......................................................4.1 改进意见......................................................4.2 《Java课程设计》心得体会 ......................................摘要在现代,高科技的飞跃发展,人们工作习惯的改变,特别是电脑的大量普及,人们生活节奏越来越快,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一。

俄罗斯方块(Tetris, 俄文:Тетрис)是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。

俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。

由于上手简单、老少皆宜,从而家喻户晓,风靡世界。

为此,我们设计了一款简单的俄罗斯方块JAVA游戏程序,以便更好的满足广大电脑工作者闲暇之余的消遣,并且也让我们学到编程技术与团队意识。

关键字:俄罗斯方块、JAVA游戏、编程第一章课程设计要求题目名称:俄罗斯方块题目类型:设计型课程设计目的:1)了解Java的基本使用方法。

2)熟悉eclipse的运行环境。

3)用JAVA来设计一个俄罗斯方块的小游戏。

4)基本实现俄罗斯方块的应用功能。

实验原理:JAVA程序分析与设计、类的灵活运用、多态技术、模板技术、异常处理等。

实验内容:本俄罗斯方块游戏是对于随机给出不同的形状(长条形、Z字形、反Z 形、田字形、L字形、反L形、T字型)下落填充给定的区域,若填满一条便消掉,记分。

若在游戏中各形状填满了给定区域,为输者。

第二章设计概要2.1 功能设计本项目是为了实现俄罗斯方块的基本功能而设计的,基本能够达到俄罗斯方块的各种游戏性。

项目需求分析如下:1)由方块组成的不同的随机图形会从区域上方开始缓慢落下。

2)玩家可以做的操作有:以90度为单位旋转方每一格块。

以格子为单位左右移动方块,让方块加速落下。

3)方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的随机图形会出现在区域上方开始落下。

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;importjava.awt.event.KeyEvent;import java.util.Arrays;import java.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 Cell[ROWS][COLS];//定义每一小块的大小private static final int CELL_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 Tetromino 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);//取消系统默认布局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);//绘制分数墙paintScore(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 Color(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;row<ROWS;row++){for(int col=0;col<COLS;col++){Cell cell = wall[row][col];int x =col*CELL_SIZE;int y= row*CELL_SIZE;if(cell==null){g.setColor(new Color(BORDER_COLOR));g.drawRect(x, y, CELL_SIZE, CELL_SIZE);}else{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);}}}}//绘制分数墙的方法public void paintScore(Graphics g){int x = 12*CELL_SIZE;int y = 6*CELL_SIZE;Font font = 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_SIZE;g.drawString(msg, x, y);}else{msg = "【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){//如果没有四格方块,则返回不绘画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);}}//绘制下个四格方块的方法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.setColor(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;}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 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 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(int row =0;row<ROWS;row++){//wall[row]这一行全部用null表示Arrays.fill(wall[row], null);}}//生成(随机)下一个四格方块,1.下一个变成当前的。

相关主题