Java球球大作战小游戏源码(完整版)

球球大作战小游戏完整源码分享,可以当作Java入门课程设计作品

涉及知识点:文件IO流、多线程、面向对象、Java基础语法等知识

一、游戏设计思想:

(1)在一张地图上生成若干个小球以及玩家小球,有若干个地图可供选择。

(2)玩家通过移动鼠标进行移动,可停止移动,吐孢子,

(3)游戏期间通过Ranking排行榜实时更新小球排名,

(4)所有Ai小球都会想着吃掉其他小球,成为唯一的胜利者。

(5)当玩家小球被吃掉即游戏结束,但是可以通过重新开始,继续进行游戏。

(6)ai自动追逐算法 (自动追逐比自己小的球,自动躲避比自己大的球)

结尾附完整可直接运行代码百度网盘

二、 类及部分代码展示:

Ball.java------小球类

ballfight.java------游戏主实现类------启动类

Enemy.java------敌人小球类

MyMouse.java------鼠标控制类

Name.java------名字类

Particle.java------绘制辅助类

Player.java------玩家类

PlayMusic.java------音乐播放

Ranking.java------排名类

Spore.java------吐孢子类

2.1背景音乐播放代码

java 复制代码
package ballf;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import java.io.File;
import java.io.IOException;
import java.net.URL;

import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;

public class PlayMusic {

	public static void playBackgroundMusic() {
        try {
            // 获取音频文件的URL
            URL url = PlayMusic.class.getResource("/Music/bgmusic.wav");
            // 打开音频输入流
            AudioInputStream audioIn = AudioSystem.getAudioInputStream(url);
            // 获取一个音频剪辑
            Clip clip = AudioSystem.getClip();
            // 打开剪辑并加载样本
            clip.open(audioIn);
            // 设置剪辑循环播放
            clip.loop(Clip.LOOP_CONTINUOUSLY);
        } catch (UnsupportedAudioFileException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (LineUnavailableException e) {
            e.printStackTrace();
        }
    }
}

2.2UI界面绘制代码

java 复制代码
public void paint(Graphics g){
    super.paint(g);
      if (this.state == 0){
      g.drawImage(this.mainui, -30, 0, (int)(windowWidth * 1.2D), (int)(windowHeight * 1.1D), null);
      g.setColor(Color.BLACK);
      g.setFont(new Font("楷体", 1, 50));
      g.drawString("开始游戏", windowWidth / 2 - 155, windowHeight / 2);
      g.drawRect(windowWidth / 2 - 155, windowHeight / 2 - 45, 210, 50);
    }
    if (this.state == 1){
      g.drawImage(this.waiting, 0, 0, (int)(windowWidth * 1.1D), windowHeight, null);
      g.setColor(Color.magenta);
      g.setFont(new Font("Comic Sans MS", 0, 90));
      g.drawString("Loading......", 500, 600);
      if (this.pause > 320){
        this.state = 2;
        this.choosemap = 0;
        for (int i = 0; i < 7; i++) {
          if (this.choosemap == i) {
            this.map[i] = Color.red;
          } else {
            this.map[i] = Color.blue;
          }
        }
      }
      else if (this.pause == 10){
        Loadbg loadbg = new Loadbg();
        new Thread(loadbg).start();
        this.pause += 1;
      }else{
        this.pause += 1;
      }
    }

2.3小球类

java 复制代码
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;

public class Ball {
	private double x;			//绘制横坐标
	private double y;			//绘制纵坐标
	private double d;			//直径
	private double real_x;		//中心横坐标
	private double real_y;		//中心纵坐标
	private double speed;		//速度
	private double degree;		//角度
	private double m;			//质量
	private String name;		//昵称
	private boolean alive;		//存活
	private Color owncolor;		//颜色
	private BufferedImage flag;	//国家国旗

	public Ball(double x, double y, double d) {
		this.setX(x);
		this.setY(y);
		this.setD(d);
		this.setOwncolor(randomcolor());
		this.real_x = x + d / 2;
		this.real_y = y + d / 2;
		this.alive = true;
	}

	public Ball(double x, double y, double speed, double degree, double m) {
		this.setX(x);
		this.setY(y);
		this.speed = speed;
		this.degree = degree;
		this.m = m;
		FreshD();
		this.alive = true;
	}

	public Ball(double x, double y, double speed, double degree, double m, String name) {
		super();
		this.x = x;
		this.y = y;
		this.speed = speed;
		this.degree = degree;
		this.m = m;
		this.name = name;
		this.setOwncolor(randomcolor());
		FreshD();
		this.alive = true;
	}
	
	public BufferedImage getFlag() {
		return flag;
	}

	public void setFlag(BufferedImage flag) {
		this.flag = flag;
	}

	public boolean isAlive() {
		return alive;
	}

	public void setAlive(boolean alive) {
		this.alive = alive;
	}

	public double getSpeed() {
		return speed;
	}

	public void setSpeed(double speed) {
		this.speed = speed;
	}

	public double getDegree() {
		return degree;
	}

	public void setDegree(double degree) {
		this.degree = degree;
	}

	public double getM() {
		return m;
	}

	public void setM(double m) {
		this.m = m;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public double getX() {
		return x;
	}

	public void setX(double x) {
		this.x = x;
	}

	public double getY() {
		return y;
	}

	public void setY(double y) {
		this.y = y;
	}

	public double getD() {
		return d;
	}

	public void setD(double d) {
		this.d = d;
	}

	public double getReal_x() {
		return real_x;
	}

	public void setReal_x(double real_x) {
		this.real_x = real_x;
	}

	public double getReal_y() {
		return real_y;
	}

	public void setReal_y(double real_y) {
		this.real_y = real_y;
	}

	public Color getOwncolor() {
		return owncolor;
	}

	public void setOwncolor(Color owncolor) {
		this.owncolor = owncolor;
	}

	public void draw(Graphics g) {
		Color c = g.getColor();
		g.setColor(Color.cyan);
		g.fillOval((int) x, (int) y, (int) d, (int) d);
		g.setColor(c);
	}

	public void draw(Graphics g, int windowx, int windowy) {	//绘制自身
		Color c = g.getColor();
		g.setColor(Color.cyan);
		g.fillOval((int) (x - windowx), (int) (y - windowy), (int) d, (int) d);
		g.setColor(c);
	}

	public void move() {	
		if(ballfight.state!=4) return;//移动小球
		if (x > ballfight.Width || x < 0)
			degree = Math.PI - degree;
		if (y > ballfight.Height || y < 0)
			degree = -degree;
		while (degree < 0)
			degree += 2 * Math.PI;
		while (degree > 2 * Math.PI)
			degree -= 2 * Math.PI;
		if (speed > 0) {
			x += speed * Math.cos(degree);
			y += speed * Math.sin(degree);
		}
	}

	public void eat(Ball b) {				//吃掉别的Ball类
		m += b.m;
		FreshD();
	}

	public void FreshD() {					//刷新小球中心位置
		d = 30 + Math.sqrt(m) * 4;
		real_x = x + d / 2;
		real_y = y + d / 2;
	}

	public Color randomcolor() {			
		Random rand = new Random();
		float r = rand.nextFloat();
		float s = rand.nextFloat();
		float t = rand.nextFloat();
		return (new Color(r, s, t));
	}
}

2.4Spore类

java 复制代码
package ballf;


import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.PrintStream;

public class Spore
  extends Ball{
  public Spore(double x, double y, double speed, double degree, double m){
    super(x, y, speed, degree, m);
  }
  
  public void draw(Graphics g){
    Color c = g.getColor();
    g.setColor(Color.green);
    g.fillOval((int)getX(), (int)getY(), (int)getD(), (int)getD());
    g.setColor(c);
  }
  
  public BufferedImage getFlag(){
    return super.getFlag();
  }
  
  public void setFlag(BufferedImage flag){
    super.setFlag(flag);
  }
  
  public boolean isAlive() {
    return super.isAlive();
  }
  
  public void setAlive(boolean alive){
    super.setAlive(alive);
  }
  
  public double getSpeed(){
    return super.getSpeed();
  }
  
  public void setSpeed(double speed){
    super.setSpeed(speed);
  }
  
  public double getDegree(){
    return super.getDegree();
  }
  
  public void setDegree(double degree){
    super.setDegree(degree);
  }
  
  public double getM(){
    return super.getM();
  }
  
  public void setM(double m){
    super.setM(m);
  }
  
  public String getName(){
    return super.getName();
  }
  
  public void setName(String name){
    super.setName(name);
  }
  
  public double getX(){
    return super.getX();
  }
  
  public void setX(double x){
    super.setX(x);
  }
  
  public double getY(){
    return super.getY();
  }
  
  public void setY(double y){
    super.setY(y);
  }
  
  public double getD(){
    return super.getD();
  }
  
  public void setD(double d){
    super.setD(d);
  }
  
  public double getReal_x(){
    return super.getReal_x();
  }
  
  public void setReal_x(double real_x){
    super.setReal_x(real_x);
  }
  
  public double getReal_y(){
    return super.getReal_y();
  }
  
  public void setReal_y(double real_y){
    super.setReal_y(real_y);
  }
  
  public Color getOwncolor(){
    return super.getOwncolor();
  }
  
  public void setOwncolor(Color owncolor){
    super.setOwncolor(owncolor);
  }
  
  public void eat(Ball b){
    super.eat(b);
  }
  
  public void FreshD(){
    super.FreshD();
  }
  
  public Color randomcolor(){
    return super.randomcolor();
  }
  
  public int hashCode(){
    return super.hashCode();
  }
  
  public boolean equals(Object obj){
    return super.equals(obj);
  }
  
  protected Object clone()
    throws CloneNotSupportedException{
    return super.clone();
  }
  
  public String toString(){
    return super.toString();
  }
  
  protected void finalize()
    throws Throwable{
    super.finalize();
  }
  
  public void draw(Graphics g, int windowx, int windowy) {
    Color c = g.getColor();
    g.setColor(Color.green);
    g.fillOval((int)(getX() - windowx), (int)(getY() - windowy), (int)getD(), (int)getD());
    g.setColor(c);
  }
  
  public void move(){
    super.move();
    if (getSpeed() > 0.0D) {
      setSpeed(getSpeed() - 0.1D);
    }
  }
  
  public boolean can_eat(){
    System.out.println(getSpeed() < 1.0D);
    return getSpeed() < 1.0D;
  }
}

百度网盘链接:https://pan.baidu.com/s/1MIwhVQYLT1QAwUl20-AA_g?pwd=wgf8

提取码:wgf8

相关推荐
全貌2 分钟前
C++笔记 --基本语法(命名空间/函数重载/缺省参数/引用/inline/nulltpr)
开发语言·c++·笔记
百成Java4 分钟前
基于springboot的旅游网站
java·spring boot·后端·mysql·spring·智能家居·旅游
斯派的曼6 分钟前
学习C++的第七天!
开发语言·c++·学习
街 三 仔7 分钟前
【C语言零基础入门篇 - 15】:单链表
c语言·开发语言
苏格拉没有底1117 分钟前
数据结构——顺序表、链表
c语言·开发语言·数据结构·笔记·学习·算法·链表
昭著14 分钟前
优先级队列(堆)
java·数据结构
cc77521022 分钟前
【常见框架漏洞】ThinkPHP、struts2、Spring、Shiro
java·struts·spring
Pandaconda25 分钟前
【计算机网络 - 基础问题】每日 3 题(二十三)
开发语言·网络·笔记·后端·计算机网络·面试·职场和发展
界面开发小八哥28 分钟前
如何用LightningChart Python实现地震强度数据可视化应用程序?
开发语言·python·信息可视化
野生派蒙28 分钟前
IDEA 关闭自动补全功能(最新版本)
java·开发语言·ide·后端·学习·intellij-idea