打砖块JAVA课程设计报告.docx

上传人:b****8 文档编号:9359161 上传时间:2023-02-04 格式:DOCX 页数:24 大小:35.31KB
下载 相关 举报
打砖块JAVA课程设计报告.docx_第1页
第1页 / 共24页
打砖块JAVA课程设计报告.docx_第2页
第2页 / 共24页
打砖块JAVA课程设计报告.docx_第3页
第3页 / 共24页
打砖块JAVA课程设计报告.docx_第4页
第4页 / 共24页
打砖块JAVA课程设计报告.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

打砖块JAVA课程设计报告.docx

《打砖块JAVA课程设计报告.docx》由会员分享,可在线阅读,更多相关《打砖块JAVA课程设计报告.docx(24页珍藏版)》请在冰豆网上搜索。

打砖块JAVA课程设计报告.docx

打砖块JAVA课程设计报告

 

Java课程设计报告

 

XX/XX学年第X学期

 

项目名称:

打砖块游戏

项目负责人:

XXX学号:

XXXXX

同组者:

XXX学号:

XXXXX

同组者:

XX学号:

XXXXX

指导教师:

XXX班级:

XXXXXXX

课程设计时间:

XXXXXXXXXXXXXXXXXXXX

课程设计地点:

XXXXXXXXX

 

[课程设计目的及要求]

《JAVA程序设计》是计算机相关专业的必修专业基础课程,起实践性、应用性很强。

实践教学环节是必不可少的一个重要环节。

本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JAVA程序设计的实际目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合应用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。

能够针对具体的有一定代表性的综合应用类课题设计、分析,全面掌握面向对象的思想、JAVA语言的应用技巧、方法,通过该课程设计使学生进一步理解和掌握利用JAVA开发综合系统的过程,学会用Eclispe、Jbuilder等开发工具。

同时培养学生的合作意识和团队精神。

培养学生对实际系统的采用面向对象的方法进行分析及设计能力,从而是学生提高JAVA语言运用及开发的综合力。

[课程设计题目]

软件系统名称:

JAVA打砖块

人员安排:

学号

姓名

职责

XX

XXX

界面设计、代码编写

XX

XXX

代码编写、流程图

XX

XXX

程序测试、BUG修复、写报告

任务目的:

1.实现游戏的正常运行;

2.培养JAVA程序开发及设计的兴趣;

3.培养团队合作意识;

[程序中使用的数据结构和符号说明]

HitBrick类

GreenBallThread控制小球路线

xUp,yUp,bouncing定义变量存储16位数值形式

x,y小球坐标

xDx,yDy坐标增量

MAX_X,MAX_Y坐标最大值

renew初始化

label标签

Rx,Ry横板坐标

Brick[]砖块

ball小球

HitBrick()定义小球横板及砖块位置坐标

keyPressd(keyEent)定义小球启动键(按空格键启动)

keyReleased(keyEvent)接收键盘事件侦听器接口)

keyTyped(keyEvent)键入空格键时调用keyEvent

paint(Graphics)对砖块填充颜色

move定义小球的运动轨迹和砖块的消失

main主函数

BallThread类

通过继承Thread类使Ball类线程化,并把小球的弹跳动作放进Run()中执行

Brick类

定义砖块坐标位置和砖块按钮

Ball类

定义小球坐标位置

[程序设计流程]

程序中使用的部分方法解释

开始命令:

空格键

privateJLabellabel;定义一个标签,label=newJLabel("按空格键开始");内容为空格键开始,addKeyListener(this);定义一个键盘监听器,

if(e.getKeyCode()==e.VK_SPACE){

if(renew){

greenBallThread=newBallThread(this);

bouncing=true;

greenBallThread.start();

label.setVisible(false);

}

renew=false;

}

重置并开始游戏

移动命令:

方向键左键和右键

if(e.getKeyCode()==e.VK_LEFT){

Rx=Rx-20;

if(bouncing){

if(Rx<0){

Rx=0;

}

}

else{

if(Rx<0){

Rx=0;

}

else{

x=x-20;

ball.ball_x=x;

}

}

repaint();

}

同开始命令原理,如果键入左键,横版向左移动20个单位(Rx为横板坐标),如果小球还在运动,当横板移到最左侧(Rx=0),不能再向左移动,则横板靠在最左侧(Rx=0),

if(e.getKeyCode()==e.VK_RIGHT){

Rx=Rx+20;

if(bouncing){

if(Rx+80>300){

Rx=220;

}

}

else{

if(Rx+80>300){

Rx=220;

}

else{

x=x+20;

ball.ball_x=x;

}

}

repaint();

}

}

向右移动同向左移动原理,因为定义界面横坐标最大值为300,横板长度80,故Rx=220时碰最右侧

砖块设定:

brick[0]=newBrick(0,60,50,20);

brick[1]=newBrick(50,60,50,20);

brick[2]=newBrick(100,60,50,20);

……

brick[16]=newBrick(200,160,50,20);

brick[17]=newBrick(250,160,50,20);

ball=newBall(150,450,10,10);

publicvoidpaint(Graphicsg){

super.paint(g);

ball.rect.setLocation(x,y);

if(bouncing){

for(inti=0;i<=17;i++){

if(brick[i].visible==true){

switch(i){

case0:

g.setColor(Color.blue);

break;

case1:

g.setColor(Color.cyan);

break;

case2:

g.setColor(Color.gray);

break;

……

case17:

g.setColor(Color.yellow);

break;

}

g.fill3DRect(brick[i].brick_x,brick[i].brick_y,brick[i].brick_width,brick[i].brick_height,true);

}

}

g.setColor(Color.red);

g.fillOval(x,y,10,10);

g.setColor(Color.blue);

g.fillRect(Rx,Ry,80,20);

brick[0]=newBrick(0,60,50,20);设置砖块坐标,ball=newBall(150,450,10,10);和小球的坐标

if(brick[i].visible==true)判断砖块存在,用switch语句,逐个对砖块填充颜色,最后四行代码是分别对小球和横板颜色坐标的定义

小球的移动:

try{

Thread.currentThread().sleep(25);

}

catch(InterruptedExceptionexception){

System.err.println(exception.toString());

}

定义小球的速度,若发生错误,则执行catch语句,打印错误

for(inti=0;i<=17;i++){

if(ball.rect.intersects(brick[i].rect)&&brick[i].visible){

brick[i].visible=false;

yUp=!

yUp;/

}

}

当小球接触到砖块时,砖块不可见(消失)

if(x+5>Rx&&x+5=Ry){

yUp=false;

xDx=(int)(Math.random()*5+2);

yDy=(int)(Math.random()*5+2);

}

判断小球坐标和横板坐标,当小球落在横板坐标之内,小球反弹,小球横坐标和纵坐标都以一个随机值改变后运动

if(xUp==true){

x+=xDx;

}

else{

x-=xDx;

}

if(yUp==true){

y+=yDy;

}

else{

y-=yDy;

}

判断小球横坐标如果在增加,小球横坐标=小球原横坐标+小球横坐标增量,否则小球横坐标=小球原横坐标-小球横坐标增量;纵坐标同理

if(y<=0){

y=0;

ball.ball_y=y;

yUp=true;

xDx=(int)(Math.random()*5+2);

yDy=(int)(Math.random()*5+2);

}

elseif(y>=MAX_Y-15){

yDy=(int)(Math.random()*5+2);

//yUp=false;

break;

}

判断小球到画面顶部(定义顶部的纵坐标为0),小球向下反弹,原理同小球和横板接触的反弹规则,否则,判断小球纵坐标是否大于MAX_Y-15(纵坐标最大值-15),反弹规则改变为横坐标不变,纵坐标随机改变

if(x<=0){

x=0;

ball.ball_x=x;

xUp=true;

xDx=(int)(Math.random()*5+2);

yDy=(int)(Math.random()*5+2);

}

elseif(x>=MAX_X-10){

x=MAX_X-10;

ball.ball_x=x;

xDx=(int)(Math.random()*5+2);

yDy=(int)(Math.random()*5+2);

xUp=false;

}

判断小球到画面最左侧(定义最左侧横坐标为0),向右侧反弹,反弹规则同小球和横板接触的反弹规则,或者小球到画面最右侧,向左反弹,反弹规则同上,(if(x>=MAX_X-10)判断小球是否到右边侧,小球的直径为10)

inti;

for(i=0;i<=17&&brick[i].visible==false;i++){

}

if(i==18){

break;

}

如果所有砖块都不可见,则重新玩

renew=true;//初始化

bouncing=false;

for(inti=0;i<=17;i++){

brick[i].visible=true;

}

xUp=true;

yUp=false;

xDx=1;

yDy=1;

x=150;

y=450;

Rx=120;

Ry=460;//

重新开始,初始化,小球静止,所有砖块可见,小球在横坐标方向,可随横板移动而移动,纵坐标在未开时游戏前不能改变,定义小球横坐标和纵坐标增量都为1,小球初始位置坐标(150,450)横板初始位置坐标(120,460)

[源程序]

importjava.awt.*;

importjavax.swing.*;

importjava.awt.event.*;

importjavax.swing.event.*;

publicclassHitBrickextendsJFrameimplementsKeyListener{

privateBallThreadgreenBallThread;//控制小球的线程

privatebooleanxUp,yUp,bouncing;

privateintx,y,xDx,yDy;//小球坐标,增量

privatefinalintMAX_X=300,MAX_Y=500;

privatebooleanrenew;

privateJLabellabel;

privateintRx,Ry;//横板坐标

privateBrickbrick[]=newBrick[18];//砖块

privateBallball;//小球

publicHitBrick(){

super("打砖块");

Containerpane=getContentPane();//设置空白面板容器

label=newJLabel("按空格键开始");//标签

label.setHorizontalAlignment(JLabel.CENTER);//水平

label.setVerticalAlignment(JLabel.BOTTOM);//垂直

pane.add(label);//向面板里添加标签

xUp=true;//横坐标可以移动

yUp=false;//纵坐标不可以移动

xDx=1;

yDy=1;

x=150;//小球坐标

y=450;

Rx=120;//横板坐标

Ry=460;

renew=true;

bouncing=false;

addKeyListener(this);//键盘监听器

brick[0]=newBrick(0,60,50,20);//砖块坐标

brick[1]=newBrick(50,60,50,20);

brick[2]=newBrick(100,60,50,20);

brick[3]=newBrick(150,60,50,20);

brick[4]=newBrick(200,60,50,20);

brick[5]=newBrick(250,60,50,20);

brick[6]=newBrick(0,90,50,20);

brick[7]=newBrick(50,110,50,20);

brick[8]=newBrick(100,130,50,20);

brick[9]=newBrick(150,130,50,20);

brick[10]=newBrick(200,110,50,20);

brick[11]=newBrick(250,90,50,20);

brick[12]=newBrick(0,160,50,20);

brick[13]=newBrick(50,160,50,20);

brick[14]=newBrick(100,160,50,20);

brick[15]=newBrick(150,160,50,20);

brick[16]=newBrick(200,160,50,20);

brick[17]=newBrick(250,160,50,20);

ball=newBall(150,450,10,10);//球的坐标

setSize(MAX_X,MAX_Y);//窗口大小

setResizable(false);

setVisible(true);//可视化

}

publicvoidkeyPressed(KeyEvente){

if(e.getKeyCode()==e.VK_SPACE){

if(renew){

greenBallThread=newBallThread(this);

bouncing=true;

greenBallThread.start();

label.setVisible(false);

}

renew=false;

}

if(e.getKeyCode()==e.VK_LEFT){

Rx=Rx-20;

if(bouncing){

if(Rx<0){

Rx=0;

}

}

else{

if(Rx<0){

Rx=0;

}

else{

x=x-20;

ball.ball_x=x;

}

}

repaint();

}

if(e.getKeyCode()==e.VK_RIGHT){

Rx=Rx+20;

if(bouncing){

if(Rx+80>300){

Rx=220;

}

}

else{

if(Rx+80>300){

Rx=220;

}

else{

x=x+20;

ball.ball_x=x;

}

}

repaint();

}

}

publicvoidkeyReleased(KeyEvente){}

publicvoidkeyTyped(KeyEvente){}

publicvoidpaint(Graphicsg){

super.paint(g);

ball.rect.setLocation(x,y);

if(bouncing){

for(inti=0;i<=17;i++){

if(brick[i].visible==true){

switch(i){

case0:

g.setColor(Color.blue);

break;

case1:

g.setColor(Color.cyan);

break;

case2:

g.setColor(Color.gray);

break;

case3:

g.setColor(Color.green);

break;

case4:

g.setColor(Color.magenta);

break;

case5:

g.setColor(Color.yellow);

break;

case6:

g.setColor(Color.white);

break;

case7:

g.setColor(Color.black);

break;

case8:

g.setColor(Color.orange);

break;

case9:

g.setColor(Color.pink);

break;

case10:

g.setColor(Color.darkGray);

break;

case11:

g.setColor(Color.red);

break;

case12:

g.setColor(Color.blue);

break;

case13:

g.setColor(Color.cyan);

break;

case14:

g.setColor(Color.gray);

break;

case15:

g.setColor(Color.green);

break;

case16:

g.setColor(Color.magenta);

break;

case17:

g.setColor(Color.yellow);

break;

}

g.fill3DRect(brick[i].brick_x,brick[i].brick_y,brick[i].brick_width,brick[i].brick_height,true);

}

}

g.setColor(Color.red);

g.fillOval(x,y,10,10);

g.setColor(Color.blue);

g.fillRect(Rx,Ry,80,20);

}

else{

for(inti=0;i<=17;i++){

switch(i){

case0:

g.setColor(Color.blue);

break;

case1:

g.setColor(Color.cyan);

break;

case2:

g.setColor(Color.gray);

break;

case3:

g.setColor(Color.green);

break;

case4:

g.setColor(Color.magenta);

break;

case5:

g.setColor(Color.yellow);

break;

case6:

g.setColor(Color.white);

break;

case7:

g.setColor(Color.black);

break;

case8:

g.setColor(Color.orange);

break;

case9:

g.setColor(Color.pink);

break;

case10:

g.setColor(Color.darkGray);

break;

case11:

g.setColor(Color.red);

break;

case12:

g.setColor(Color.blue);

break;

case13:

g.setColor(Color.cyan);

break;

case14:

g.setColor(Color.gray);

break;

case15:

g.setColor(Color.green);

break;

case16:

g.setColor(Color.magenta);

break;

case17:

g.setColor(Color.yellow);

break;

}

g.fill3DRect(brick[i].brick_x,brick[i].brick_y,brick[i].brick_width,brick[i].brick_height,true);

}

g.setColor(Color.red);

g.fillOval(x,y,10,10);

g.setColor(Color.blue);

g.fillRect(Rx,Ry,80,20);

}

}

publicvoidmove(){

while(true){

try{

Thread.currentThread().sleep(25);

}

catch(InterruptedExceptionexception){

System.err.println(exception.toString());

}

for(inti=0;i<=17;i++){

if(ball.rect.intersects(brick[i].rect)&&brick[i].visible){

brick[i].visible=false;

yUp=!

yUp;//打到球不可见

}

}

if(x+5>Rx&&x+5=Ry){

yUp=false;

xDx=(int)(Math.random()*5+2);//小球坐标增量

yDy=(int)(Math.random()*5+2);

}

if(xUp==true){

x+=xDx;//小球左右移动坐标改变

}

else{

x-=xDx;

}

if(yUp==true){

y+=yDy;

}

else{

y-=yDy;

}

if(y<=0){

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

当前位置:首页 > 农林牧渔 > 水产渔业

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

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