Java大二课设,做一个经典打砖块块小游戏

java课程设计贪吃蛇游戏设计_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
java课程设计贪吃蛇游戏设计
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩6页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢Java编程经典小游戏设计-打砖块小游戏源码
作者:LeoZhan
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Java编程经典小游戏设计-打砖块小游戏源码,还是挺不错的,具有一定参考价值,需要的朋友可以了解下。
[程序中使用的数据结构和符号说明]
HitBrick类
GreenBallThread控制小球路线
xUp,yUp,bouncing定义变量存储16位数值形式
x,y小球坐标
xDx,yDy坐标增量
MAX_X,MAX_Y坐标最大值
renew初始化
Rx,Ry横板坐标
Brick[]砖块
HitBrick()定义小球横板及砖块位置坐标
keyPressd(keyEent)定义小球启动键(按空格键启动)
keyReleased(keyEvent)接收键盘事件侦听器接口)
keyTyped(keyEvent)键入空格键时调用keyEvent
paint(Graphics)对砖块填充颜色
move定义小球的运动轨迹和砖块的消失
main主函数
BallThread类
通过继承Thread类使Ball类线程化,并把小球的弹跳动作放进Run()中执行
定义砖块坐标位置和砖块按钮
定义小球坐标位置
[程序设计流程]
程序中使用的部分方法解释
开始命令:空格键
privateJL定义一个标签,label=newJLabel("按空格键开始");内容为空格键开始,addKeyListener(this);定义一个键盘监听器,
if (e.getKeyCode() ==e.VK_SPACE) {
if(renew){
greenBallThread=new BallThread(this);
bouncing =
greenBallThread.start();
label.setVisible(false);
重置并开始游戏
移动命令:方向键左键和右键
if(e.getKeyCode()==e.VK_LEFT){
if(bouncing){
ball.ball_x=x;
repaint();
同开始命令原理,如果键入左键,横版向左移动20个单位(Rx为横板坐标),如果小球还在运动,当横板移到最左侧(Rx=0),不能再向左移动,则横板靠在最左侧(Rx=0),
if(e.getKeyCode()==e.VK_RIGHT){
if(bouncing){
if(Rx+80&300){
if(Rx+80&300){
ball.ball_x=x;
repaint();
向右移动同向左移动原理,因为定义界面横坐标最大值为300,横板长度80,故Rx=220时碰最右侧
砖块设定:
brick[0]=new Brick(0,60,50,20);
brick[1]=new Brick(50,60,50,20);
brick[2]=new Brick(100,60,50,20);
brick[16]=new Brick(200,160,50,20);
brick[17]=new Brick(250,160,50,20);
ball=new Ball(150,450,10,10);
public void paint(Graphics g){
super.paint(g);
ball.rect.setLocation(x,y);
if(bouncing){
for(int i=0;i&=17;i++){
if(brick[i].visible==true){
switch(i){
case 0 :g.setColor(Color.blue);
case 1 :g.setColor(Color.cyan);
case 2 :g.setColor(Color.gray);
case 17 :g.setColor(Color.yellow);
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语句,逐个对砖块填充颜色,最后四行代码是分别对小球和横板颜色坐标的定义
小球的移动:
Thread.currentThread().sleep(25);
catch(InterruptedException exception){
System.err.println(exception.toString());
定义小球的速度,若发生错误,则执行catch语句,打印错误
for(int i=0;i&=17;i++){
if(ball.rect.intersects(brick[i].rect)&&brick[i].visible){
brick[i].visible=
yUp=!yUp;/
当小球接触到砖块时,砖块不可见(消失)
if(x+5&Rx&&x+5&Rx+80&&y+10&=Ry){
xDx=(int)(Math.random()*5+2);
yDy=(int)(Math.random()*5+2);
判断小球坐标和横板坐标,当小球落在横板坐标之内,小球反弹,小球横坐标和纵坐标都以一个随机值改变后运动
if(xUp==true){
if(yUp==true){
判断小球横坐标如果在增加,小球横坐标=小球原横坐标+小球横坐标增量,否则小球横坐标=小球原横坐标-小球横坐标增量;纵坐标同理
ball.ball_y=y;
xDx=(int)(Math.random()*5+2);
yDy=(int)(Math.random()*5+2);
else if(y&=MAX_Y-15){
yDy=(int)(Math.random()*5+2);
判断小球到画面顶部(定义顶部的纵坐标为0),小球向下反弹,原理同小球和横板接触的反弹规则,否则,判断小球纵坐标是否大于MAX_Y-15(纵坐标最大值-15),反弹规则改变为横坐标不变,纵坐标随机改变
ball.ball_x=x;
xDx=(int)(Math.random()*5+2);
yDy=(int)(Math.random()*5+2);
else if(x&=MAX_X-10){
x=MAX_X-10;
ball.ball_x=x;
xDx=(int)(Math.random()*5+2);
yDy=(int)(Math.random()*5+2);
判断小球到画面最左侧(定义最左侧横坐标为0),向右侧反弹,反弹规则同小球和横板接触的反弹规则,或者小球到画面最右侧,向左反弹,反弹规则同上,(if(x&=MAX_X-10)判断小球是否到右边侧,小球的直径为10)
for(i=0;i&=17&&brick[i].visible==i++){
if(i==18){
如果所有砖块都不可见,则重新玩
for(int i=0;i&=17;i++){
brick[i].visible=
重新开始,初始化,小球静止,所有砖块可见,小球在横坐标方向,可随横板移动而移动,纵坐标在未开时游戏前不能改变,定义小球横坐标和纵坐标增量都为1,小球初始位置坐标(150,450)横板初始位置坐标(120,460)
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
public class HitBrick extends JFrame implements KeyListener{
private BallThread greenBallT
//控制小球的线程
private Boolean xUp,yUp,
private int x,y,xDx,yDy;
//小球坐标,增量
private final int MAX_X=300,MAX_Y=500;
private JL
private int Rx,Ry;
//横板坐标
private Brick brick[]=new Brick[18];
public HitBrick(){
super("打砖块");
Container pane=getContentPane();
//设置空白面板容器
label=new JLabel("按空格键开始");
label.setHorizontalAlignment(JLabel.CENTER);
label.setVerticalAlignment(JLabel.BOTTOM);
pane.add(label);
//向面板里添加标签
//横坐标可以移动
//纵坐标不可以移动
//小球坐标
//横板坐标
addKeyListener(this);
//键盘监听器
brick[0]=new Brick(0,60,50,20);
//砖块坐标
brick[1]=new Brick(50,60,50,20);
brick[2]=new Brick(100,60,50,20);
brick[3]=new Brick(150,60,50,20);
brick[4]=new Brick(200,60,50,20);
brick[5]=new Brick(250,60,50,20);
brick[6]=new Brick(0,90,50,20);
brick[7]=new Brick(50,110,50,20);
brick[8]=new Brick(100,130,50,20);
brick[9]=new Brick(150,130,50,20);
brick[10]=new Brick(200,110,50,20);
brick[11]=new Brick(250,90,50,20);
brick[12]=new Brick(0,160,50,20);
brick[13]=new Brick(50,160,50,20);
brick[14]=new Brick(100,160,50,20);
brick[15]=new Brick(150,160,50,20);
brick[16]=new Brick(200,160,50,20);
brick[17]=new Brick(250,160,50,20);
ball=new Ball(150,450,10,10);
//球的坐标
setSize(MAX_X,MAX_Y);
//窗口大小
setResizable(false);
setVisible( true );
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() ==e.VK_SPACE) {
if(renew){
greenBallThread=new BallThread(this);
bouncing =
greenBallThread.start();
label.setVisible(false);
if(e.getKeyCode()==e.VK_LEFT){
if(bouncing){
ball.ball_x=x;
repaint();
if(e.getKeyCode()==e.VK_RIGHT){
if(bouncing){
if(Rx+80&300){
if(Rx+80&300){
ball.ball_x=x;
repaint();
public void keyReleased (KeyEvent e) {
public void keyTyped (KeyEvent e){
public void paint(Graphics g){
super.paint(g);
ball.rect.setLocation(x,y);
if(bouncing){
for (int i=0;i&=17;i++){
if(brick[i].visible==true){
switch(i){
case 0 :g.setColor(Color.blue);
case 1 :g.setColor(Color.cyan);
case 2 :g.setColor(Color.gray);
case 3 :g.setColor(Color.green);
case 4 :g.setColor(Color.magenta);
case 5 :g.setColor(Color.yellow);
case 6 :g.setColor(Color.white);
case 7 :g.setColor(Color.black);
case 8 :g.setColor(Color.orange);
case 9 :g.setColor(Color.pink);
case 10 :g.setColor(Color.darkGray);
case 11 :g.setColor(Color.red);
case 12 :g.setColor(Color.blue);
case 13 :g.setColor(Color.cyan);
case 14 :g.setColor(Color.gray);
case 15 :g.setColor(Color.green);
case 16 :g.setColor(Color.magenta);
case 17 :g.setColor(Color.yellow);
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);
for (int i=0;i&=17;i++){
switch(i){
case 0 :g.setColor(Color.blue);
case 1 :g.setColor(Color.cyan);
case 2 :g.setColor(Color.gray);
case 3 :g.setColor(Color.green);
case 4 :g.setColor(Color.magenta);
case 5 :g.setColor(Color.yellow);
case 6 :g.setColor(Color.white);
case 7 :g.setColor(Color.black);
case 8 :g.setColor(Color.orange);
case 9 :g.setColor(Color.pink);
case 10 :g.setColor(Color.darkGray);
case 11 :g.setColor(Color.red);
case 12 :g.setColor(Color.blue);
case 13 :g.setColor(Color.cyan);
case 14 :g.setColor(Color.gray);
case 15 :g.setColor(Color.green);
case 16 :g.setColor(Color.magenta);
case 17 :g.setColor(Color.yellow);
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);
public void move(){
while(true){
Thread.currentThread().sleep(25);
catch(InterruptedException exception){
System.err.println(exception.toString());
for (int i=0;i&=17;i++){
if(ball.rect.intersects(brick[i].rect)&&brick[i].visible){
brick[i].visible=
//打到球不可见
if(x+5&Rx&&x+5&Rx+80&&y+10&=Ry){
xDx=(int)(Math.random()*5+2);
//小球坐标增量
yDy=(int)(Math.random()*5+2);
if(xUp==true){
//小球左右移动坐标改变
if(yUp==true){
ball.ball_y=y;
xDx=(int)(Math.random()*5+2);
yDy=(int)(Math.random()*5+2);
} else if(y&=MAX_Y-15){
yDy=(int)(Math.random()*5+2);
ball.ball_x=x;
xDx=(int)(Math.random()*5+2);
yDy=(int)(Math.random()*5+2);
} else if(x&=MAX_X-10){
x=MAX_X-10;
ball.ball_x=x;
xDx=(int)(Math.random()*5+2);
yDy=(int)(Math.random()*5+2);
ball.rect.setLocation(ball.ball_x,ball.ball_y);
repaint();
//如果所有砖块都不可见
for (i=0;i&=17&&brick[i].visible==i++){
//则重新玩
if(i==18){
for (int i=0;i&=17;i++){
brick[i].visible=
repaint();
repaint();
label.setVisible(true);
public static void main(String[] args) {
HitBrick mar=new HitBrick();
class BallThread extends Thread{
private HitB
BallThread(HitBrick a){
//super();
public void run(){
m.repaint();
class Brick{
Rectangle rect=
//长方形对象,砖块按钮的位置和宽高
int brick_x,brick_y;
//按扭的左上角坐标
int brick_width,brick_
//按扭的宽和高
public Brick(int x,int y,int w,int h)
brick_x=x;
brick_y=y;
brick_width=w;
brick_height=h;
rect=new Rectangle(x,y,w,h);
//创建长方形对象---砖块按钮的位置和宽高。
class Ball{
Rectangle rect=
int ball_x,ball_y;
int ball_width,ball_
public Ball(int x,int y,int w,int h){
ball_width=w;
ball_height=h;
rect=new Rectangle(x,y,w,h);
运行结果:
空格键开始,方向键控制左右,死亡重新开始。
虽然系统的基本功能都已实现,但还是存在系统不稳定等多个bug尚待解决。在做系统的过程中遇到了很多问题,有的是知识存储不足,有的是考虑不够周全,所以学习之路永无止境。作为一个程序编程人员,要保持清醒的头脑,以现实为依据,让自己的每一行代码都能实现自己的意义。
以上就是本文关于Java编程经典小游戏设计-打砖块小游戏源码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:、等,有什么问题可以随时留言,小编会及时回复大家的。感谢朋友们对本站的支持!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
基于java的打砖块游戏毕业(设计)论文.doc 41页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:200 &&
你可能关注的文档:
··········
··········
北方民族大学
学士学位论文
基于JAVA的打砖块游戏开发
系(部)名 称:
计算机科学与工程学院
学 生 姓 名:
指导教师姓名:
论文提交时间:
论文答辩时间:
学位授予时间:
北方民族大学教务处制
基于JAVA的打砖块游戏开发
打砖块是一款堪称经典的小游戏,在掌上游戏机上和许多手机上都能发现这个小游戏。游戏基本内容是玩家通过控制一个能够左右移动的挡板,反弹正在运动中弹球,使之改变移动的方向,用小球消除游戏窗口里面的的砖块,然后到达下一关,在障碍物被消除的过程中,可能会产生一些能改变挡板或者小球状态的物品,例如:挡板变长、变短,小球威力加强等等。
本系统是一个基于Java语言平台的打砖块游戏。主要任务是设计打砖块游戏的算法,并使用JAVA语言编写程序,最终完成游戏编程,并使之能够正确运行。主要是小球的碰撞检测和运动轨迹的算法,碰撞部分可以将小球看成一个矩形,当矩形的边界坐标与砖块、挡板、墙壁等一样时,可以判断为进行了碰撞,而运动轨迹只要在碰撞后将X轴或Y轴取反就可以了。
本文第一章阐述了选题目的及Java游戏目前的发展现状。第二章介绍了Java语音的特点和基于Java游戏开发的相关的技术。第三章详细介绍了打砖块游戏,包括游戏的规则和期待的效果等。第四章进行打砖块游戏的具体设计与实现,包括界面的设计,类的设计,算法的设计等等。第五章对游戏进行运行和测试,以期检测游戏中的各种问题。期望通过本游戏实例掌握小型Java游戏开发和Java编程的基础的知识和技巧,使自己具备开发Java游戏基本能力。
关键字:java,游戏设计,测试,打砖块,算法
Arkanoid java-based development
Arkanoid is a small classic games on handheld game consoles and many mobile phones can be found on this little game. The basic content of the game by controlling a player can move around the baffle, the rebound is in motion pinball , making changes in the direction of movement , eliminating the bricks with a small ball inside the game window , then reach the next level , the obstacles process is eliminated , the shutter may be some change in the state of pellets or articles such as : the paddle length , shorter, and so enhance the power of the ball .
This system is a Java-based platform Arkanoid game. The main task is to design algorithms Arkanoid game and using JAVA programming language , the final completion of game programming , and enable it to run correctly. The main collision detection algorithm and the trajectory of the ball , the ball collision portion may be regarded as a rectangle, the coordinates of the boundary rectangle when bricks , baffles , such as a wall , the collision can be judged
正在加载中,请稍后...
54页21页58页130页88页56页61页64页91页58页JAVA课程设计打砖块(含代码)_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
JAVA课程设计打砖块(含代码)
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩57页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢21点小游戏JAVA课程设计_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
21点小游戏JAVA课程设计
&&0.0.0.0.0.0.0.0
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩42页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 经典打砖块 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信