热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java实现简单窗体小游戏球球大作战

java,实现,简单,窗体,小游

java实现简单窗体小游戏----球球大作战
需求分析
1、分析小球的属性:

​ 坐标、大小、颜色、方向、速度

2、抽象类:Ball

​ 设计类:BallMain—创建窗体

​ BallJPanel—画小球

​ BallAndBall—处理小球之间的关系

3、流程:

​ 1)小球的绘制

​ 2)产生小球,让一个小球进行运动,多个小球的运动

​ 3)小球进行碰撞

​ 4)实现大球吃小球

源代码如下:
Ball.java

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;

public class Ball {

/* 小球的基本属性 */ int x, y;//定义x, y坐标 int d;//直径 Color ballColor;//小球的颜色 int speed;//小球的运动速度 int position;//小球的运动方向 /*小球的运动方向*/ public static final int LEFT_UP = 0;//左上 public static final int RIGHT_UP = 1;//右上 public static final int LEFT_DOWN = 2;//左下 public static final int RIGHT_DOWN = 3;//右下 /*构造方法*/ public Ball(int x, int y, int position, int d, int speed, Color ballColor){ this.x = x; this.y = y; this.position = position; this.d = d; this.speed = speed; this.ballColor = ballColor; } //构造玩家球 public Ball(int x, int y, int d, int speed, Color ballColor){ this.x = x; this.y = y; this.d = d; this.speed = speed; this.ballColor = ballColor; } //画小球 public void drawBall(Graphics g){ g.setColor(ballColor); g.fillOval(x, y, d, d); } public void drawBall2(Graphics g){ g.setColor(ballColor); g.fillOval(x, y, d, d); //球加文字 g.setColor(Color.RED); //设置字体大小 Font fOnt= new Font(Font.DIALOG, Font.BOLD, 14); g.setFont(font); g.drawString("^_^", x+d/2, y+d/2); } 

//小球的运动方向
public void ballMove(){

switch (this.position) { case LEFT_UP: x -= speed; y -= speed; if (x <= 0) { this.position = RIGHT_UP; }else if (y <= 0) { this.position = LEFT_DOWN; } break; case RIGHT_UP: x += speed; y -= speed; if (x >= BallMain.SCREEN_WIDTH - d) { this.position = LEFT_UP; }else if (y <= 0) { this.position = RIGHT_DOWN; } break; case LEFT_DOWN: x -= speed; y += speed; if (x <= 0) { this.position = RIGHT_DOWN; }else if (y >= BallMain.SCREEN_HEIGHT - d) { this.position = LEFT_UP; } break; case RIGHT_DOWN: x += speed; y += speed; if (x >= BallMain.SCREEN_WIDTH - d) { this.position = LEFT_DOWN; }else if (y >= BallMain.SCREEN_HEIGHT - d) { this.position = RIGHT_UP; } break; } }

}

BallMain.java

import java.awt.Dimension;
import java.awt.Toolkit;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.swing.JFrame;

import sun.audio.AudioData;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;
import sun.audio.ContinuousAudioDataStream;

/创建窗体/
public class BallMain extends JFrame{

//窗体的宽高 public static final int SCREEN_WIDTH = 1360; public static final int SCREEN_HEIGHT = 760; //全屏 Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); int width = (int)d.getWidth(); int height = (int)d.getHeight(); public BallMain(){ this.setTitle("V1.0"); //设置位置 this.setBounds(0,0,SCREEN_WIDTH,SCREEN_HEIGHT); //添加小球到窗体 BallJPanel bj = new BallJPanel(); this.add(bj); //添加键盘的监听事件 this.addKeyListener(bj); /*frame.addKeyListener(tj); tj.addKeyListener(tj); */ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public static void main(String[] args) { BallMain b = new BallMain(); //添加音乐 try { FileInputStream f =new FileInputStream("music/yyyy.wav"); AudioStream as = new AudioStream(f); AudioPlayer.player.start(as); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }

}

BallJPanel.java

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.imageio.ImageIO;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

/画小球/
public class BallJPanel extends JPanel implements KeyListener{

//存储小球的集合 List ballList = new ArrayList(); int x1 = 450; int y1 = 450; int d1 = 40; private Color white; //玩家球 Ball game = new Ball(x1, y1, d1, 50, white); //小球的数量 private int ballNumber = 100; public BallJPanel(){ addBall(); startBalls(); } //产生小球的方法 public void addBall(){ for (int i = 0; i = b2.d) { b1.d += b2.d/3; ballList.remove(b2); break; }else if(b1.d  game.d) { System.out.println("GAME OEVR"); JOptionPane.showMessageDialog(null, "GAME OVER"); return; }else{ game.d += b1.d/3; ballList.remove(b1); break; } } } } } repaint();//重绘 try { Thread.sleep(5); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; }.start(); } @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub if (e.getKeyCode() == KeyEvent.VK_UP) { // System.out.println("点击了上方向键"); game.y -= 10; } if (e.getKeyCode() == KeyEvent.VK_DOWN) { // System.out.println("点击了下方向键"); game.y += 10; } if (e.getKeyCode() == KeyEvent.VK_LEFT ) { // System.out.println("点击了左方向键"); game.x -= 15; } if (e.getKeyCode() == KeyEvent.VK_RIGHT) { // System.out.println("点击了右方向键"); game.x += 15; } if (e.getKeyCode() == KeyEvent.VK_1) { // System.out.println("点击了右方向键"); game.x += 10; game.y -= 10; } if (e.getKeyCode() == KeyEvent.VK_2) { // System.out.println("点击了右方向键"); game.x -= 10; game.y -= 10; } if (e.getKeyCode() == KeyEvent.VK_3) { // System.out.println("点击了右方向键"); game.x -= 10; game.y += 10; } if (e.getKeyCode() == KeyEvent.VK_4) { // System.out.println("点击了右方向键"); game.x += 10; game.y += 10; } repaint(); } @Override public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub }

}

BallAndBall.java

/处理小球之间的关系/
public class BallAndBall {

//两小球碰撞 public void ballCrach(Ball b1, Ball b2){ int x1 = b1.x + b1.d/2; int y1 = b1.y + b1.d/2; int x2 = b2.x + b2.d/2; int y2 = b2.y + b2.d/2; double e = Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)); //如果碰撞上 if (e <= b1.d/2 + b2.d/2) { //b1小球 switch (b1.position) { case Ball.LEFT_UP: b1.position = Ball.RIGHT_DOWN; break; case Ball.RIGHT_UP: b1.position = Ball.LEFT_DOWN; break; case Ball.LEFT_DOWN: b1.position = Ball.RIGHT_UP; break; case Ball.RIGHT_DOWN: b1.position = Ball.LEFT_UP; break; } //b2小球 switch (b2.position) { case Ball.LEFT_UP: b2.position = Ball.RIGHT_DOWN; break; case Ball.RIGHT_UP: b2.position = Ball.LEFT_DOWN; break; case Ball.LEFT_DOWN: b2.position = Ball.RIGHT_UP; break; case Ball.RIGHT_DOWN: b2.position = Ball.LEFT_UP; break; } } } //检查是否碰撞上 public boolean isBallCrach(Ball b1, Ball b2){ boolean flag = false; int x1 = b1.x + b1.d/2; int y1 = b1.y + b1.d/2; int x2 = b2.x + b2.d/2; int y2 = b2.y + b2.d/2; //计算圆心距 double e = Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)); if (e <= b1.d/2 + b2.d/2) { return true; } return false; }

}

其中音乐和图片可自行修改,只需要修改路径即可,音乐格式为wav,我个人用的音乐是彩豆森林**https://www.kugou.com/song/#hash=91968197C4524D5D9CDE382E824F0B01&album_id=15251465

下载之后转变格式即可

作者:『诗伯青柠』诗伯@
来源:CSDN
原文:https://blog.csdn.net/qq_40603408/article/details/90145769
版权声明:本文为博主原创文章,转载请附上博文链接!


推荐阅读
author-avatar
手机用户2502921201
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有