JAVA课程设计俄罗斯方块的实现.docx

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

JAVA课程设计俄罗斯方块的实现.docx

《JAVA课程设计俄罗斯方块的实现.docx》由会员分享,可在线阅读,更多相关《JAVA课程设计俄罗斯方块的实现.docx(35页珍藏版)》请在冰点文库上搜索。

JAVA课程设计俄罗斯方块的实现.docx

JAVA课程设计俄罗斯方块的实现

课程设计报告

课程:

JAVA程序设计

学号:

1410211035

姓名:

班级:

2014级计算机科学与技术(专升本)班

教师:

时间:

2015.7.1

计算机学院

设计名称:

JAVA游戏课程设计——俄罗斯方块

设计内容、目的与要求:

设计内容:

实现正常的运行游戏(旋转、左右移动,下落)

设计目的:

(1)了解JAVA的基本使用方法;

(2)熟悉eclipse的运行环境;

(3)用JAVA面向对象的方法来设计一个俄罗斯方块的小游戏;

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

设计要求:

本次实验要能实现以下功能:

(1)游戏区:

玩家可以在游戏区中堆积方块,并能够在游戏的过程中随时了解得分情况。

(2)游戏控制:

玩家可以通过游戏控制功能来选择开始新的一局游戏,暂停或退出游戏;

 

计划与进度安排:

 

2015年4月6号:

确定选题。

2015年4月8号:

系统需求分析与调研,搜集资料。

2015年4月10号-2015年4月14号:

确定设计流程与步骤。

2015年4月20号-2015年5月10号:

系统的详细设计与功能的实现。

 

设计过程、步骤(可加页):

1.系统需求分析

显示需求:

7个不同形状的方块通过旋转之后可以实现左、右、下的移动

键盘处理事件需求:

可通过键盘方向键(上键、下键、左键、右键)对下落方块进行向上(旋转变形)、向下(加速下落)、向左移动、向右移动。

(1)系统功能模块示意图:

(2)游戏区模块示意图:

(3)控制区模块示意图:

 

2.游戏区模块功能

(1)游戏区模块(创建游戏区,处理玩家操作,显示操作结果)

创建游戏区代码:

publicstaticvoidmain(String[]args){

JFrameframe=newJFrame();

Tetristetris=newTetris();

tetris.setBackground(newColor(0x0000ff));

frame.add(tetris);

frame.setSize(530,580);

frame.setLocationRelativeTo(null);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

tetris.action();

}

显示操作结果:

privatevoidpaintScore(Graphicsg){

intx=290;

inty=160;

g.setColor(newColor(FONT_COLOR));

Fontfont=g.getFont();

font=newFont(font.getName(),font.getStyle(),FONT_SIZE);

g.setFont(font);

Stringstr="SCORE:

"+score;

g.drawString(str,x,y);

y+=56;

str="LINES:

"+lines;

g.drawString(str,x,y);

y+=56;

str="[P]Pause";

if(pause){

str="[C]Continue";

}

if(gameOver){

str="[S]Start!

";

}

g.drawString(str,x,y);

}

(2)游戏控制模块(开始游戏,暂停,继续,退出)

开始游戏:

publicvoidstartAction(){

pause=false;

gameOver=false;

score=0;

lines=0;

clearWall();

tetromino=Tetromino.randomOne();

nextOne=Tetromino.randomOne();

timer=newTimer();

timer.schedule(newTimerTask(){

publicvoidrun(){

softDropAction();

repaint();

}

},interval,interval);

}

暂停P:

{caseKeyEvent.VK_P:

pauseAction();

break;}

....

publicvoidpauseAction(){

timer.cancel();

pause=true;

}

继续C:

if(pause){

if(key==KeyEvent.VK_C){

continueAction();

repaint();

}

return;

}

退出Q:

if(key==KeyEvent.VK_Q){

System.exit(0);

}

3.游戏完成测试

(1)游戏打开界面

(2)游戏进行中界面

(4)J型格子正常下落(5)L型方格正常下落

(5)田字型方格正常下落(6)Z字型方格正常下落

(7)一字型正常下落

4.代码见附录(附录1,附录2,附录3)

结果与分析(可以加页):

1.游戏开始界面

游戏界面实现的功能项:

消除行所得分数SCORE,消除的行LINE,暂停P(继续C),暂停键P,退出键Q

 

2.游戏正常进行

通过键盘按键->,<-,向上(空格),向下对下落的方格进行左移,右移,下落,旋转

设计体会与建议:

java是一种面向对象的编程语言,具有可移植性高,安全,可靠等优点,最初设计时就是本着一次编写到处执行设计的。

可以开发各种应用程序和游戏,不过速度没有c++快。

经过一学期的Java课程设计学习,使我对java有了深入的了解,让我知道了java是如何使用,如何来开发系统等等。

java的功能比较完善,这使我很有兴趣来学习java,在学习中虽然有很多地方不理解,刚开始时觉得很乱,总是找不到头绪,让自己不知所措, 而且在学习中遇到了不少的麻烦,上课的时候总是有一些问题使自己跟不上老师所讲的的课程,这样使自己少学了不少的知识,还好学校安排了课程设计这门课,在这个时候我算是又重新学了java程序设计。

在这次课程设计的过程中有很多的地方不会,但通过问老师问同学、和查阅书籍来完成的了。

虽然自己遇到了少的困难,但是我很认真的学习,来对待自己。

刚开始开发这个俄罗斯方块作品的时候,存在不少分歧,虽然我们是参照参考书籍来做的,但还是有许多地方不合逻辑,最后通过不懈的努力,多次的研究,一一攻破,解决每一个问题,使作品更加的完善。

在开发作品的时候,游戏整体遇到了许多的麻烦,但是通过同学的帮助使作品逐步完成 。

通过这次课程设计让自己更加了解一下自己,充分的感觉到自身的不足,还有待进一步的学习。

 

附录代码

1.Cell.java

ackageaa;

importjava.awt.image.BufferedImage;

/**

*格子

*/

publicclassCell{

privateintrow;//格子的行

privateintcol;//格子的列

privateBufferedImageimage;//格子的贴图

publicCell(introw,intcol,BufferedImageimage){

super();

this.row=row;

this.col=col;

this.image=image;

}

publicintgetRow(){

returnrow;

}

publicvoidsetRow(introw){

this.row=row;

}

publicintgetCol(){

returncol;

}

publicvoidsetCol(intcol){

this.col=col;

}

publicBufferedImagegetImage(){

returnimage;

}

publicvoidsetImage(BufferedImageimage){

this.image=image;

}

publicvoiddrop(){

row++;

}

publicvoidmoveRight(){

col++;

}

publicvoidmoveLeft(){

col--;

row+","+col;}}

}

@Override//重写

publicString

toString()

}return

 

2.Tetris.java)

packageaa;

importjava.awt.Color;

importjava.awt.Font;

importjava.awt.Graphics;

importjava.awt.event.KeyAdapter;

importjava.awt.event.KeyEvent;

importjava.awt.image.BufferedImage;

importjava.util.Arrays;

importjava.util.Timer;

importjava.util.TimerTask;

importjavax.imageio.ImageIO;

importjavax.swing.JFrame;

importjavax.swing.JPanel;

/**

*俄罗斯方块

*/

publicclassTetrisextendsJPanel{

privateintscore;//分数

privateintlines;//销毁的行数

privateCell[][]wall;//背景墙

privateTetrominotetromino;//正在下落的四格方块

privateTetrominonextOne;//下一个四格方块

/**背景图片*/

privatestaticBufferedImagebackground;

privatestaticBufferedImageoverImage;

publicstaticBufferedImageT;

publicstaticBufferedImageS;

publicstaticBufferedImageI;

publicstaticBufferedImageL;

publicstaticBufferedImageJ;

publicstaticBufferedImageO;

publicstaticBufferedImageZ;

publicstaticfinalintROWS=20;//背景墙的行数

publicstaticfinalintCOLS=10;//背景墙的列数

//将图片素材,复制到com.tarena.tetris包中.

/**使用静态代码块加载静态的图片*/

static{

try{

//Tetris.class的同一个包中找"tetris.png"

background=ImageIO.read(Tetris.class.getResource("tetris.png"));

overImage=ImageIO.read(Tetris.class.getResource("game-over.png"));

T=ImageIO.read(Tetris.class.getResource("T.png"));

I=ImageIO.read(Tetris.class.getResource("I.png"));

S=ImageIO.read(Tetris.class.getResource("S.png"));

Z=ImageIO.read(Tetris.class.getResource("Z.png"));

J=ImageIO.read(Tetris.class.getResource("J.png"));

L=ImageIO.read(Tetris.class.getResource("L.png"));

O=ImageIO.read(Tetris.class.getResource("O.png"));

}catch(Exceptione){

e.printStackTrace();

}

}

/**

*JPanelpaint()paint画重写paint()修改原有的绘制方法

**/

@Override

publicvoidpaint(Graphicsg){

//画背景,画墙,画正在下落的方块画下一个方块...

g.drawImage(background,0,0,null);

g.translate(15,15);//坐标系平移

paintWall(g);//画墙

paintTetromino(g);//绘制正在下落的方块

paintNextOne(g);//绘制下一个要下落的方块

paintScore(g);//绘制分数

if(gameOver){

g.drawImage(overImage,0,0,null);

}

}

/**在Tetris添加启动方法action()*/

publicvoidaction(){

wall=newCell[ROWS][COLS];

startAction();

//wall[2][2]=newCell(2,2,T);

tetromino=Tetromino.randomOne();

nextOne=Tetromino.randomOne();

//处理键盘按下事件,在按下按键时候执行下落方法

KeyAdapterl=newKeyAdapter(){

@Override

//key按键Pressed按下了

publicvoidkeyPressed(KeyEvente){

intkey=e.getKeyCode();//[c]

if(key==KeyEvent.VK_Q){//Q表示退出

System.exit(0);//结束Java进程

}

if(gameOver){

if(key==KeyEvent.VK_S){//S表示开始

startAction();

repaint();

}

return;

}

if(pause){//pause=true

if(key==KeyEvent.VK_C){//C表示继续

continueAction();

repaint();

}

return;

}

switch(key){

caseKeyEvent.VK_DOWN:

//向下箭头表示下落

softDropAction();

break;

caseKeyEvent.VK_RIGHT:

//向右箭头表示右移

moveRightAction();

break;

caseKeyEvent.VK_LEFT:

//向左箭头表示左移

moveLeftAction();

break;

caseKeyEvent.VK_SPACE:

//空格键表示自由下落

hardDropAction();

break;

caseKeyEvent.VK_UP:

//向上箭头表示右旋转

rotateRightAction();

break;

caseKeyEvent.VK_P:

//按键盘上的P表示暂停

pauseAction();

break;

}

repaint();//再画一次!

}

};

//下落流程:

监听键盘事件->如果下箭头按下->

//执行下落算法tetromino.softDrop()->

//修改每个格子对象的数据->调用repaint()->

//尽快调用paint()->paint方法会根据当前的数据

//重新绘制界面->看到移动以后的方块了

//绑定事件到当前面板

this.requestFocus();

this.addKeyListener(l);

}

publicstaticfinalintFONT_COLOR=0x667799;

publicstaticfinalintFONT_SIZE=30;

/**

*绘制分数

*@paramg

*/

privatevoidpaintScore(Graphicsg){

intx=290;

inty=160;

g.setColor(newColor(FONT_COLOR));

Fontfont=g.getFont();//取得g当前字体

font=newFont(font.getName(),font.getStyle(),FONT_SIZE);

g.setFont(font);//更改了g的字体

Stringstr="SCORE:

"+score;

g.drawString(str,x,y);

y+=56;

str="LINES:

"+lines;

g.drawString(str,x,y);

y+=56;

str="[P]Pause";

if(pause){

str="[C]Continue";

}

if(gameOver){

str="[S]Start!

";

}

g.drawString(str,x,y);

}

 

/**

*绘制下一个要下落的方块

*

*@paramg

*/

privatevoidpaintNextOne(Graphicsg){

if(nextOne==null){

return;

}

//将每个格子的row,col换算为x,y然后贴图

Cell[]cells=nextOne.cells;

for(inti=0;i

//i=0123

Cellcell=cells[i];

//cell每个格子

intx=(cell.getCol()+10)*CELL_SIZE;

inty=(cell.getRow()+1)*CELL_SIZE;

g.drawImage(cell.getImage(),x-1,y-1,null);

}

}

/**

*绘制正在下落的方块

*

*@paramg

*/

publicvoidpaintTetromino(Graphicsg){

if(tetromino==null){

return;

}

//将每个格子的row,col换算为x,y然后贴图

Cell[]cells=tetromino.cells;

for(inti=0;i

//i=0123

Cellcell=cells[i];

//cell每个格子

intx=cell.getCol()*CELL_SIZE;

inty=cell.getRow()*CELL_SIZE;

g.drawImage(cell.getImage(),x-1,y-1,null);

}

}

publicstaticfinalintCELL_SIZE=26;

/**画墙*/

privatevoidpaintWall(Graphicsg){

for(introw=0;row

Cell[]line=wall[row];

//line代表墙上的每一行

for(intcol=0;col

Cellcell=line[col];

//cell代表墙上的每个格子

intx=col*CELL_SIZE;

inty=row*CELL_SIZE;

if(cell==null){

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

}else{

g.drawImage(cell.getImage(),x-1,y-1,null);

}

//g.drawString(row+","+col,x,y+CELL_SIZE);

}

}

}

/**检查当前正在下落的方块是否出界了*/

privatebooleanoutOfBounds(){

Cell[]cells=tetromino.cells;

for(inti=0;i

Cellcell=cells[i];

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

当前位置:首页 > 医药卫生 > 基础医学

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

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