java小游戏源码带报告-Java编程经典游戏设计-打砖块游戏源码

Java编程经典游戏设计-打砖块游戏源码

更新时间:2017年11月13日15:27:49 作者:LeoZhan

本文主要介绍经典的Java编程游戏设计——Brickbreaker游戏源码,相当不错,有一定的参考价值。 有需要的同学可以理解。

【程序中使用的数据结构和符号说明】

HitBrick类

GreenBallThread 控制球的路线

xUp、yUp、bouncing 定义变量存储 16 位值

x,y 球坐标

xDx、yDy 坐标增量

MAX_X、MAX_Y坐标最大值

更新初始化

标签 标签

java源码_游戏外挂网源码带采集_java小游戏源码带报告

Rx、Ry 傻瓜坐标

砖[]砖

HitBrick() 定义直拍球和砖块的位置坐标

keyPressd(keyEent) 定义球开始键(按空格键开始)

keyReleased(keyEvent) 接收按键风暴侦听器套接字)

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

油漆(图形)用颜色填充砖块

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

主要主要功能

球螺纹类

通过继承Thread类对Ball类进行线程化,将球的弹跳动作放入Run()中执行

砖类

定义砖块坐标和砖块按钮

球类

定义小球坐标的位置

【程序设计流程】

程序中使用的一些方法的解释

启动命令:空格键

私有JLabel标签; 定义一个标签,label=newJLabel("按空格键开始"); 内容是空格键开始,addKeyListener(this); 定义一个关键错误,

if (e.getKeyCode() ==e.VK_SPACE) {
   if(renew){
    greenBallThread=new BallThread(this);
    bouncing = true;
    greenBallThread.start();
    label.setVisible(false);
   }
   renew=false;
  }

重置并开始游戏

java小游戏源码带报告_游戏外挂网源码带采集_java源码

联通命令:左右方向键

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]=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);
          break;
      case 1 :g.setColor(Color.cyan);
          break;
      case 2 :g.setColor(Color.gray);
          break;
       ……
case 17 :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);

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

if(brick[i].visible==true) 判断砖块是否存在,使用switch语句将砖块一一填充颜色,最后四行代码是球的颜色坐标的定义直拍

小球联通:

java源码_java小游戏源码带报告_游戏外挂网源码带采集

try{
    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=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;
   }

如果判定球的横坐标是递减的java小游戏源码带报告,则球的横坐标=球的原横坐标+球的横坐标的增量,否则球的横坐标=球的原横坐标-球的横坐标的增量球的横坐标; 原因

if(y=MAX_Y-15){
    yDy=(int)(Math.random()*5+2);
    //yUp=false;
    break;
   }

判断小球是否到达屏幕底部(底部纵坐标定义为0),小球被向上拉。 其原理与球、直拍的回调规则相同。 否则,判断小球的纵坐标是否小于MAX_Y-15(垂直坐标最大值-15),改变回调规则,使横坐标不变,纵坐标随机变化

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);
    xUp=false;
   }

java小游戏源码带报告_java源码_游戏外挂网源码带采集

确定球到达屏幕最左侧(右侧横坐标定义为0),并向两侧急剧落下。 落下,大落差规则同上,(if(x>=MAX_X-10)判断小球是否已经到达左侧,球的半径为10)

int i;                     
   for(i=0;i<=17&&brick[i].visible==false;i++){  
   }
   if(i==18){
    break;
   }  

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

renew=true;     //初始化
  bouncing=false;
  for(int i=0;i<=17;i++){
   brick[i].visible=true;
  }
  xUp=true;
  yUp=false;
  xDx=1;
  yDy=1;
  x=150;
  y=450;
  Rx=120;
  Ry=460;       //

重启java小游戏源码带报告,初始化,小球静止,所有砖块可见,小球为横坐标方向,可与直拍连接。 在游戏打开之前,纵坐标无法更改。 定义球的横坐标和纵坐标增量为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 greenBallThread;
	//控制小球的线程
	private Boolean xUp,yUp,bouncing;
	private int x,y,xDx,yDy;
	//小球坐标,增量
	private final int MAX_X=300,MAX_Y=500;
	private Boolean renew;
	private JLabel label;
	private int Rx,Ry;
	//横板坐标
	private Brick brick[]=new Brick[18];
	//砖块
	private Ball ball;
	//小球
	public HitBrick(){
		super("打砖块");
		Container pane=getContentPane();
		//设置空白面板容器
		label=new JLabel("按空格键开始");
		//标签
		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]=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 = 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(Rx300){
					Rx=220;
				}
			} else{
				if(Rx+80>300){
					Rx=220;
				} else{
					x=x+20;
					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);
						break;
						case 1 :g.setColor(Color.cyan);
						break;
						case 2 :g.setColor(Color.gray);
						break;
						case 3 :g.setColor(Color.green);
						break;
						case 4 :g.setColor(Color.magenta);
						break;
						case 5 :g.setColor(Color.yellow);
						break;
						case 6 :g.setColor(Color.white);
						break;
						case 7 :g.setColor(Color.black);
						break;
						case 8 :g.setColor(Color.orange);
						break;
						case 9 :g.setColor(Color.pink);
						break;
						case 10 :g.setColor(Color.darkGray);
						break;
						case 11 :g.setColor(Color.red);
						break;
						case 12 :g.setColor(Color.blue);
						break;
						case 13 :g.setColor(Color.cyan);
						break;
						case 14 :g.setColor(Color.gray);
						break;
						case 15 :g.setColor(Color.green);
						break;
						case 16 :g.setColor(Color.magenta);
						break;
						case 17 :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 (int i=0;i<=17;i++){
				switch(i){
					case 0 :g.setColor(Color.blue);
					break;
					case 1 :g.setColor(Color.cyan);
					break;
					case 2 :g.setColor(Color.gray);
					break;
					case 3 :g.setColor(Color.green);
					break;
					case 4 :g.setColor(Color.magenta);
					break;
					case 5 :g.setColor(Color.yellow);
					break;
					case 6 :g.setColor(Color.white);
					break;
					case 7 :g.setColor(Color.black);
					break;
					case 8 :g.setColor(Color.orange);
					break;
					case 9 :g.setColor(Color.pink);
					break;
					case 10 :g.setColor(Color.darkGray);
					break;
					case 11 :g.setColor(Color.red);
					break;
					case 12 :g.setColor(Color.blue);
					break;
					case 13 :g.setColor(Color.cyan);
					break;
					case 14 :g.setColor(Color.gray);
					break;
					case 15 :g.setColor(Color.green);
					break;
					case 16 :g.setColor(Color.magenta);
					break;
					case 17 :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);
		}
	}
	public void move(){
		while(true){
			try{
				Thread.currentThread().sleep(25);
			}
			catch(InterruptedException exception){
				System.err.println(exception.toString());
			}
			for (int i=0;iRx&&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=MAX_Y-15){
				yDy=(int)(Math.random()*5+2);
				//yUp=false;
				break;
			}
			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);
				xUp=false;
			}
			ball.rect.setLocation(ball.ball_x,ball.ball_y);
			repaint();
			int i;
			//如果所有砖块都不可见
			for (i=0;i<=17&&brick[i].visible==false;i++){
				//则重新玩
			}
			if(i==18){
				break;
			}
			//
		}
		renew=true;
		//初始化
		bouncing=false;
		for (int i=0;i<=17;i++){
			brick[i].visible=true;
		}
		xUp=true;
		yUp=false;
		xDx=1;
		yDy=1;
		x=150;
		y=450;
		Rx=120;
		Ry=460;
		//
		repaint();
		repaint();
		label.setVisible(true);
	}
	public static void main(String[] args) {
		HitBrick mar=new HitBrick();
	}
}
class BallThread extends Thread{
	private HitBrick m;
	BallThread(HitBrick a){
		//super();
		m=a;
	}
	public void run(){
		m.move();
		m.repaint();
	}
}
class Brick{
	Rectangle rect=null;
	//长方形对象,砖块按钮的位置和宽高
	int brick_x,brick_y;
	//按扭的左上角坐标
	int brick_width,brick_height;
	//按扭的宽和高
	Boolean visible;
	public Brick(int x,int y,int w,int h)
	   {
		brick_x=x;
		brick_y=y;
		brick_width=w;
		brick_height=h;
		visible=true;
		rect=new Rectangle(x,y,w,h);
		//创建长方形对象---砖块按钮的位置和宽高。
	}
}
class Ball{
	Rectangle rect=null;
	int ball_x,ball_y;
	int ball_width,ball_height;
	public Ball(int x,int y,int w,int h){
		ball_x=x;
		ball_y=y;
		ball_width=w;
		ball_height=h;
		rect=new Rectangle(x,y,w,h);
	}
}

运行结果:

空格键开始,方向键控制左右,死亡再次开始。

虽然系统的基本功能已经实现,但仍然存在系统不稳定等诸多Bug有待解决。 在搭建系统的过程中,我遇到了很多问题,有的是知识储备不足,有的是考虑不够周到,所以学习之路永远不会结束。 作为一名程序程序员,你必须保持清醒的头脑,立足实际,让你的每一行代码都能实现自己的意义。

总结

以上就是本文关于Java编程经典游戏设计——打砖块游戏源码的全部内容,希望对您有所帮助。 有兴趣的同学可以继续参考本站:JavaWeb项目中dll文件的动态加载方法分析(详细步骤)、Python基础练习的几个简单游戏等,如有疑问可以留言随时回复,编辑会及时回复您。 感谢同学们对本站的支持!