java课程设计报告俄罗斯方块文档格式.docx

上传人:b****3 文档编号:6902066 上传时间:2023-05-07 格式:DOCX 页数:22 大小:30.93KB
下载 相关 举报
java课程设计报告俄罗斯方块文档格式.docx_第1页
第1页 / 共22页
java课程设计报告俄罗斯方块文档格式.docx_第2页
第2页 / 共22页
java课程设计报告俄罗斯方块文档格式.docx_第3页
第3页 / 共22页
java课程设计报告俄罗斯方块文档格式.docx_第4页
第4页 / 共22页
java课程设计报告俄罗斯方块文档格式.docx_第5页
第5页 / 共22页
java课程设计报告俄罗斯方块文档格式.docx_第6页
第6页 / 共22页
java课程设计报告俄罗斯方块文档格式.docx_第7页
第7页 / 共22页
java课程设计报告俄罗斯方块文档格式.docx_第8页
第8页 / 共22页
java课程设计报告俄罗斯方块文档格式.docx_第9页
第9页 / 共22页
java课程设计报告俄罗斯方块文档格式.docx_第10页
第10页 / 共22页
java课程设计报告俄罗斯方块文档格式.docx_第11页
第11页 / 共22页
java课程设计报告俄罗斯方块文档格式.docx_第12页
第12页 / 共22页
java课程设计报告俄罗斯方块文档格式.docx_第13页
第13页 / 共22页
java课程设计报告俄罗斯方块文档格式.docx_第14页
第14页 / 共22页
java课程设计报告俄罗斯方块文档格式.docx_第15页
第15页 / 共22页
java课程设计报告俄罗斯方块文档格式.docx_第16页
第16页 / 共22页
java课程设计报告俄罗斯方块文档格式.docx_第17页
第17页 / 共22页
java课程设计报告俄罗斯方块文档格式.docx_第18页
第18页 / 共22页
java课程设计报告俄罗斯方块文档格式.docx_第19页
第19页 / 共22页
java课程设计报告俄罗斯方块文档格式.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

java课程设计报告俄罗斯方块文档格式.docx

《java课程设计报告俄罗斯方块文档格式.docx》由会员分享,可在线阅读,更多相关《java课程设计报告俄罗斯方块文档格式.docx(22页珍藏版)》请在冰点文库上搜索。

java课程设计报告俄罗斯方块文档格式.docx

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

第二章设计概要

2.1功能设计

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

项目需求分析如下:

1)由方块组成的不同的随机图形会从区域上方开始缓慢落下。

2)玩家可以做的操作有:

以90度为单位旋转方每一格块。

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

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

4)当区域中某一列横向格子全部由方块填满,则该列会自动消除并成为玩家的得分。

5)一次性销毁不同行数方块得分不同,一行1分,两行2分,三行5分,四行10分。

6)当固定的方块堆到区域最上方,则游戏结束。

处理玩家操作

2.2功能分析

2.2.1系统操作界面

2.2.2程序主要功能说明

1.面板画笔类

代码:

packageTetris;

importjava.awt.Color;

importjava.awt.Font;

importjava.awt.Graphics;

importjava.awt.event.KeyAdapter;

importjava.awt.event.KeyEvent;

importjava.util.Arrays;

importjava.util.Timer;

importjava.util.TimerTask;

importjavax.swing.JFrame;

importjavax.swing.JPanel;

publicclassTetrisPanelextendsJPanel{

//游戏主面板20行10列

privatestaticfinalintROWS=20;

privatestaticfinalintCOLS=10;

//代表方块着陆的墙

privateCell[][]wall=newCell[ROWS][COLS];

//定义每一小块的大小

privatestaticfinalintCELL_SIZE=25;

//游戏得分

privateintscore;

//游戏销毁行数

privateintlines;

//一次性销毁行数的计分标准(0行=0分,1行=1分,2行=4分,3行=10分,4行=20分)

privatestaticfinalint[]SCORE_LEVEL={0,1,4,10,20};

//游戏结束标记

privatebooleangameOver=false;

//游戏暂停标记

privatebooleanpause=false;

//正在下落的四格方块

privateTetrominocurrentTetro;

//下一个下落的四格方块

privateTetrominonextTetro;

//定义游戏定时器

privateTimertimer;

publicstaticvoidmain(String[]args){

JFrameframe=newJFrame("

俄罗斯方块"

);

intwidth=(COLS+8)*CELL_SIZE+100;

intheight=ROWS*CELL_SIZE+100;

frame.setSize(width,height);

frame.setLocationRelativeTo(null);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//取消系统默认布局

frame.setLayout(null);

TetrisPanelpanel=newTetrisPanel();

panel.setLocation(45,35);

panel.setSize((COLS+8)*CELL_SIZE,ROWS*CELL_SIZE+1);

frame.add(panel);

frame.setVisible(true);

panel.action();

}

publicvoidpaint(Graphicsg){

super.paint(g);

//填充背景颜色

this.paintBackground(g);

//绘制游戏墙

paintWall(g);

//绘制分数墙

paintScore(g);

//绘制面板边框

paintTetrisBorder(g);

//绘制当前四格方块

paintCurrentTetro(g);

//绘制下个四格方块

paintNextTetro(g);

//

privatestaticfinalintBG_COLOR=0xC3D5EA;

privatestaticfinalintBORDER_COLOR=0x667799;

privatestaticfinalintFONT_COLOR=0x000000;

//绘制背景的方法

publicvoidpaintBackground(Graphicsg){

g.setColor(newColor(BG_COLOR));

//this.setBackground(newColor(BG_COLOR));

g.fillRect(0,0,this.getWidth(),this.getHeight());

//绘制游戏墙的方法

publicvoidpaintWall(Graphicsg){

for(introw=0;

row<

ROWS;

row++){

for(intcol=0;

col<

COLS;

col++){

Cellcell=wall[row][col];

intx=col*CELL_SIZE;

inty=row*CELL_SIZE;

if(cell==null){

g.setColor(newColor(BORDER_COLOR));

g.drawRect(x,y,CELL_SIZE,CELL_SIZE);

}else{

g.setColor(newColor(cell.getColor()));

g.fillRect(x,y,CELL_SIZE,CELL_SIZE);

//绘制分数墙的方法

publicvoidpaintScore(Graphicsg){

intx=12*CELL_SIZE;

inty=6*CELL_SIZE;

Fontfont=newFont("

楷体"

Font.BOLD,23);

Stringmsg="

分数:

"

+score;

g.setColor(newColor(FONT_COLOR));

g.setFont(font);

g.drawString(msg,x,y);

y+=2*CELL_SIZE;

msg="

行数:

+lines;

if(gameOver){

(T_T)

【S】再来"

;

x-=CELL_SIZE;

}elseif(pause){

【C】继续"

【P】暂停"

//绘制面板边框的方法

publicvoidpaintTetrisBorder(Graphicsg){

g.drawRect(0,0,CELL_SIZE*(COLS+8)-1,CELL_SIZE*ROWS);

//绘制当前四格方块的方法

publicvoidpaintCurrentTetro(Graphicsg){

if(currentTetro==null){

//如果没有四格方块,则返回不绘画

return;

for(Cellcell:

currentTetro.cells){

introw=cell.getRow();

intcol=cell.getCol();

intx=col*CELL_SIZE;

inty=row*CELL_SIZE;

//绘制下个四格方块的方法

publicvoidpaintNextTetro(Graphicsg){

if(nextTetro==null){

nextTetro.cells){

intx=(col+9)*CELL_SIZE;

inty=(row+1)*CELL_SIZE;

//让四格方块动起来的方法

publicvoidaction(){

startGameAction();

//请求此容器获取输入焦点

this.requestFocus();

this.addKeyListener(newKeyAdapter(){

publicvoidkeyPressed(KeyEvente){

intkey=e.getKeyCode();

if(key==KeyEvent.VK_S){

if(pause){

if(key==KeyEvent.VK_C){

continueAction();

switch(key){

caseKeyEvent.VK_DOWN:

softDownAction();

break;

caseKeyEvent.VK_LEFT:

moveLeftAction();

caseKeyEvent.VK_RIGHT:

moveRightAction();

caseKeyEvent.VK_UP:

rotateRightAction();

caseKeyEvent.VK_SPACE:

hardDownAction();

caseKeyEvent.VK_P:

pauseAction();

repaint();

//暂停游戏的方法

privatevoidpauseAction(){

pause=true;

timer.cancel();

//继续游戏的方法

privatevoidcontinueAction(){

pause=false;

timer=newTimer();

timer.schedule(newTimerTask(){

publicvoidrun(){

},500,500);

});

//在游戏开始时调用或者【S】按下时调用

publicvoidstartGameAction(){

gameOver=false;

score=0;

lines=0;

//清空游戏主面板

emptyWall();

//生成下一个四格方块

nextTetromino();

//生成定时器对象

//启动定时器工作

//调用面板的四格方块下落方法(自由下落)

//重画面板

//清空游戏主面板方法

publicvoidemptyWall(){

for(introw=0;

//wall[row]这一行全部用null表示

Arrays.fill(wall[row],null);

//生成(随机)下一个四格方块,1.下一个变成当前的。

2.随机生成下一个。

publicvoidnextTetromino(){

//第一次nextTetro是null时就随机生成一个

nextTetro=Tetromino.randomTetromino();

//下一个四格方块立即变成当前四格方块

currentTetro=nextTetro;

//四格方块下落流程,方块移动到区域最下方或者移动到其他方块上则固定在此处。

//而新的四个方块则会出现在区域上方并开始下落且随机生成下一个四格方块

publicvoidsoftDownAction(){

if(canDown()){

//如果能下落则继续下落

currentTetro.softDown();

//不能下落则着陆到墙上

tetrominoLandToWall();

//每一个四格方块着陆清除满行且计分

destroy();

//每一个四格方块着陆需要检测游戏是否结束

if(gameOver()){

//如果游戏结束

gameOverAction();

//随机生成下一个四格方块

//检查方块是否能够继续下落(落到最底部或者墙上的下方有方块)

privatebooleancanDown(){

//检查是否到底部

Cell[]cells=currentTetro.cells;

cells){

if(cell.getRow()==ROWS-1){

returnfalse;

//检查次四格方块下方是否有方块

Cellblock=wall[row+1][col];

if(block!

=null){

returntrue;

//方块“着陆”到墙上,取出每个小方块找到对应的行号row和列号col,将cell小方块放到对应的wall[row][col]位置上

privatevoidtetrominoLandToWall(){

//将cell小方块放到对应的wall[row][col]位置上

wall[row][col]=cell;

//销毁满行的方法

privatevoiddestroy(){

//统计本次销毁的行数

intlines=0;

for(introw=0;

//判断此行是否是满行

if(fullCells(row)){

//清除此行

clearLine(row);

//每清除一行就累计加一

lines++;

//整个游戏面板每一行判断之后要记录销毁行数与计分

score+=SCORE_LEVEL[lines];

this.lines+=lines;

//判断某一行是否填满cell小方块

privatebooleanfullCells(introw){

Cell[]line=wall[row];

for(inti=0;

i<

line.length;

i++){

if(line[i]==null){

//只要慈航有一个位置没有cell,就不是满行

//清除此行的方法,方法:

(依次将此行的上一行复制到下一行,第一行全部用null填充)

privatevoidclearLine(introw){

//循环将游戏面板中的每一行复制到下一行

for(inti=row;

i>

=1;

i--){

//wall[row]=Arrays.copyOf(wall[row-1],COLS);

System.arraycopy(wall[row-1],0,wall[row],0,COLS);

//第一行全部用null填充

Arrays.fill(wall[0],null);

//检查游戏是否结束(思路:

游戏主面板中第一行出现四个方块的区域有小方块cell在则游戏结束)

privatebooleangameOver(){

gameOver=wall[0][3]!

=null||wall[0][4]!

=null;

returngameOver;

//清零游戏结束现场(停止计时器)

privatevoidgameOverAction(){

//停止计时器

//以四格方块为单位左右移动的方法:

1.遇到左右边界不能移动。

2.遇到左右有方块不能移动。

//左移的方法

privatevoidmoveLeftAction(){

currentTetro.moveLeft();

if(outOfBounds()||coincide()){

currentTetro.moveRight();

//判断四格方块是否与墙上的方块重合的方法

privatebooleancoincide(){

//System.out.println(col+"

:

+row);

if(wall[row][col]!

=null){

//判断四格方块是否出边界的方法

privatebooleanoutOfBounds(){

if(col<

0||col>

=COLS){

//右移的方法

privatevoidmoveRightAction(){

//四格方块加速下落的方法

privatevoidhardDownAction(){

//四格方块继续下落

while(canDown()){

//着陆到墙上

//清除满行并计分

//旋转流程控制

privatevoidrotateRightAction(){

currentTetro.rotateRight();

currentTetro.rotateLeft();

2.2.2方块类

//代表游戏中每一个小格子方块

publicclassCell{

//小方块在游戏面板中的哪一行

privateintrow;

//小方块在游戏面板中的哪一列

privateintcol;

//小方块的颜色

privateintcolor;

publicCell(int

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2