java课程结课后老师要求做一个课程设计,但是本人学艺不精,高级点的不会做,然后又想做些好玩的,于是就产生了做一个球球大作战小游戏的想法,过程中查了很多资料,并且程序功能还不是很完备,但是勉勉强强还是能够入眼并且可以使用的,现在把代码分享给大家,有需要的可以自行摘取,有问题的可以在评论区留言哦,如果有大佬帮我再优化下就更好了【手动狗头】
废话就不多说了,接下来给大家整活了~
可通过键盘上的↑↓←→控制玩家球
有背景音乐和胜利以及失败的音效
玩法和球球大作战是一样的,核心思想就是大球吃小球
运行效果

源代码如下(全部代码)
Ball.java

package ballball;
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.white);//设置字体大小Font font = new Font(Font.DIALOG, Font.BOLD, 15);g.setFont(font);g.drawString("✧٩(ˊωˋ*)و✧", x+d/8, 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;}}
}

BallAndBall.java

package ballball;
public class BallAndBall {//检查是否碰撞上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;}
}

BallJPanel.java

package ballball;
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.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import javax.imageio.ImageIO;
import javax.swing.JOptionPane;
import javax.swing.JPanel;import com.sun.javafx.embed.swing.Disposer;import sun.audio.AudioPlayer;
import sun.audio.AudioStream;/*画小球*/
public class BallJPanel extends JPanel implements KeyListener{//存储小球的集合List<Ball> foodList = new ArrayList<Ball>();List<Ball> ballList = new ArrayList<Ball>();int x1 = 450;int y1 = 450;int d1 = 20;private Color white;//玩家球Ball game = new Ball(x1, y1, d1, 50, white);//小球的数量private int foodNumber = 100;private int ballnumber =4;public BallJPanel(){addBall();startBalls();}//产生小球的方法public void addBall(){for (int i = 0; i < foodNumber; i++) {  //随机产生100个食物int x = (int)(Math.random()*BallMain.SCREEN_WIDTH);int y = (int)(Math.random()*BallMain.SCREEN_HEIGHT);int position = (int)(Math.random()*4);int d = 5;int speed=0;//颜色   三原色 R G Bint red = (int)(Math.random()*255 + 1);int green = (int)(Math.random()*255 + 1);int blue = (int)(Math.random()*255 + 1);Color ballColor = new Color(red, green, blue);Ball a = new Ball(x, y, position, d,speed, ballColor);//将食物添加到集合中foodList.add(a);}for (int i = 0; i < ballnumber; i++) {    //随机产生4个小球int x = (int)(Math.random()*BallMain.SCREEN_WIDTH);int y = (int)(Math.random()*BallMain.SCREEN_HEIGHT);int position = (int)(Math.random()*4);int d = 8;int speed =1;//颜色   三原色 R G Bint red = (int)(Math.random()*255 + 1);int green = (int)(Math.random()*255 + 1);int blue = (int)(Math.random()*255 + 1);Color ballColor = new Color(red, green, blue);Ball b = new Ball(x, y, position, d, speed, ballColor);//将小球添加到集合中ballList.add(b);}}public void paint(Graphics g){super.paint(g);BufferedImage img =null;//添加图片try {img = ImageIO.read(new File("D:\\workspace\\game\\src\\ballball\\素材\\background.png"));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}g.drawImage(img, 0, 0, 1360, 760, this);this.setBackground(Color.white);for (int i = 0; i < foodList.size(); i++) {Ball ball = foodList.get(i);ball.drawBall(g);}for (int i = 0; i < ballList.size(); i++) {Ball ball = ballList.get(i);ball.drawBall(g);}//玩家game.drawBall2(g);}public void startBalls(){//启动线程-----匿名内部类new Thread(){public void run() {//遍历食物集合while(true){for (int i = 0; i < ballList.size(); i++) {//取出小球Ball b=ballList.get(i);//让每一个小球进行移动b.ballMove();}Ball b1;Ball b2;for (int i = 0; i < ballList.size(); i++) {//取小球b1 = ballList.get(i);for (int j = 0; j < foodList.size(); j++) {//取食物b2 = foodList.get(j);//大球吃小球BallAndBall bad = new BallAndBall();if(bad.isBallCrach(b1, b2)){if (b1.d >= b2.d) {b1.d += b2.d/5;foodList.remove(b2);continue;}}if(bad.isBallCrach(b2, game)){if(b2.d < game.d){game.d += b2.d/5;foodList.remove(b2);continue;}}if (bad.isBallCrach(b1, game)) {if (b1.d > game.d) {try {FileInputStream fail=new FileInputStream("D:\\workspace\\game\\src\\ballball\\素材\\失败.wav");AudioStream a=new AudioStream(fail);AudioPlayer.player.start(a);JOptionPane.showMessageDialog(null, "GAME OVER !","游戏失败",1);System.exit(0);} catch (Exception e) {e.printStackTrace();}}else if(b1.d < game.d)game.d+=b1.d/10;ballList.remove(b1);if (ballList.isEmpty()) {try {FileInputStream victory=new FileInputStream("D:\\workspace\\game\\src\\ballball\\素材\\胜利.wav");AudioStream b=new AudioStream(victory);AudioPlayer.player.start(b);JOptionPane.showMessageDialog(null, "GAME VICTORY !","游戏胜利",1);System.exit(0);} catch (Exception e) {e.printStackTrace();}}}}}repaint();//重绘try {Thread.sleep(5);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}};}.start();}@Overridepublic void keyTyped(KeyEvent e) {// TODO Auto-generated method stub}@Overridepublic void keyPressed(KeyEvent e) {// TODO Auto-generated method stubif (e.getKeyCode() == KeyEvent.VK_UP) {game.y -= 20;}if (e.getKeyCode() == KeyEvent.VK_DOWN) {game.y += 20;}if (e.getKeyCode() == KeyEvent.VK_LEFT ) {game.x -= 15;}if (e.getKeyCode() == KeyEvent.VK_RIGHT) {game.x += 15; }if (e.getKeyCode() == KeyEvent.VK_1) {game.x += 10; game.y -= 10;}if (e.getKeyCode() == KeyEvent.VK_2) {game.x -= 10; game.y -= 10;}if (e.getKeyCode() == KeyEvent.VK_3) {game.x -= 10;game.y += 10;}if (e.getKeyCode() == KeyEvent.VK_4) {game.x += 10;game.y += 10;}repaint();}@Overridepublic void keyReleased(KeyEvent e) {// TODO Auto-generated method stub}
}

BallMain.java

package ballball;
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.AudioPlayer;
import sun.audio.AudioStream;/*创建窗体*/
public class BallMain extends JFrame{//窗体的宽高public static final int SCREEN_WIDTH = 900;public static final int SCREEN_HEIGHT = 600;//全屏Dimension d = Toolkit.getDefaultToolkit().getScreenSize();int width = (int)d.getWidth();int height = (int)d.getHeight();public BallMain(){this.setTitle("球球大作战");//设置位置this.setBounds(0,0,SCREEN_WIDTH,SCREEN_HEIGHT);//添加小球到窗体BallJPanel bj = new BallJPanel();getContentPane().add(bj);//添加键盘的监听事件this.addKeyListener(bj);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);   }//主方法public static void main(String[] args) {BallMain b = new BallMain();//添加音乐try {
FileInputStream f =new FileInputStream("D:\\workspace\\game\\src\\ballball\\素材\\卡农.wav");AudioStream as = new AudioStream(f);AudioPlayer.player.start(as);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

background.png

背景音乐和音效戳这里
提取码:6666

java课程设计之球球大作战相关推荐

  1. Java大作业-考试管理系统(GUI)无数据库-Java课程设计

    Java课程设计-Java大作业-考试管理系统(GUI)无数据库 题目要求 开发环境 : 程序总功能模块 程序详细设计 使用情况 第一次写这东西有不少错误的地方,题目要求的功能也没有完全实现,以上内容 ...

  2. 打怪游戏Java课程设计_java 课程设计大作业 写的一个RPG游戏(代码+文档)

    [实例简介] java 课程设计大作业 写的一个RPG游戏(代码+文档) java 课程设计大作业 写的一个RPG游戏(代码+文档) [实例截图] [核心代码] Rebellion-master ├─ ...

  3. 简易抽奖系统(Java课程设计/大作业)

    简易抽奖系统(Java课程设计/大作业) package 简易抽奖系统; import java.awt.*; import java.awt.event.ActionEvent; import ja ...

  4. Java课程设计报告--绩效考核信息管理系统

     Java课程设计报告 题目      绩效考核信息管理系统    学生姓名         学    号                   院    系        年级专业计算机科学与技术 班 ...

  5. java课程设计心得体会绪论

      java课程设计心得体会绪论[篇1] 在上学期的最后一周和本学期的第一周,我和同组的学员在学校机房进行了JAVA暑期实训,现在已经结束了. 回首上学期的java学习,重点还是在学习概念等一些常识性 ...

  6. java课程设计---绘图板

    java课程设计-绘图板 一:设计任务书 二:本组课题以及本人任务 本组课题:绘图板:本次任务由本人一人完成.本人主要任务是首先构思绘图板的内容的要求以及其所运用到的知识,开始回想有关联的代码并一一敲 ...

  7. 秒表计时器——Java基础练手项目(Java课程设计)

    前言:鄙人是大二在读学生,大二上学期Java课程设计选了一个秒表计时器的题目,在此把代码和心得分享出来(懒人可以直接看PPT).鄙人资历尚浅,代码中会有许多不当之处,望各位大佬海涵,有更好的建议希望各 ...

  8. java的结课课程设计,java课程设计总结

    java课程设计总结 java语言程序设计是高校计算机相关专业的一门重要课程,小编收集了java课程设计总结,欢迎阅读. java课程设计总结[一]在java课程设计中,要认清楚到底这在我们的生活中的 ...

  9. java设计火车的类,JAVA课程设计--火车票管理系统

    JAVA课程设计--火车票管理系统 ******************* 实践教学实践教学 ******************* 兰州理工大学兰州理工大学 计算机与通信学院 2013 年秋季学期 ...

  10. Java课程设计——挖地雷游戏设计报告

    源文件: 大学生Java课程设计--挖地雷游戏设计报告源文件-其它文档类资源-CSDN文库 目 录 摘 要. 1 一.引言. 2 1.设计任务和基本要求. 2 二.报告正文. 3 1.需求分析. 3 ...

最新文章

  1. NSString类详解
  2. 数据结构与算法 / 排序算法 / 基本概念
  3. golang学习笔记:Interface类型断言详情
  4. java.util.concurrent 编程范例
  5. python判断最小公倍数
  6. python用turtle画彩虹_Python基础实例——绘制彩虹(turtle库的应用)
  7. k-means聚类算法C++实现
  8. Python全栈之路Day22
  9. PRML 1.5 决策论
  10. ios下js复制到粘贴板_js实现复制到剪贴板功能,兼容所有浏览器
  11. “变速齿轮”研究手记
  12. 家里电脑怎么控制公司电脑?电脑远程控制的几种方式
  13. android o壁纸,超实用壁纸应用大合集 - 你想要的壁纸在这里统统都能找到! - Android 应用 - 【最美应用】...
  14. 【期货交易】期货持仓量浅析,持仓是什么?
  15. k倍区间(前缀和+组合)
  16. 九日集训 总结与展望
  17. Radis-哨兵服务
  18. 单片机c语言篮球比分_单片机和C语言的篮球计时计分器设计
  19. 简单归纳一下32位、64位、x86、x64的区别和联系
  20. 易居住房1(搭环境+初始界面)

热门文章

  1. 基于Java毕业设计研究生招生信息管理源码+系统+mysql+lw文档+部署软件
  2. 计算机信息学院运动会入场式,厦门大学信息学院第一届新生运动会成功举办
  3. M1 芯片打开软件提示:“XXXX” 因为出现问题而无法打开 怎么解决?
  4. dhcp服务器可以连接无线网吗,无线网dhcp服务器设置
  5. windows 调试若干知识
  6. DDoS deflate 解决服务器被DDOS攻击的问题
  7. 堡垒机和跳板机的三大区别分析-行云管家
  8. ByteBuffer详解(大概2333)
  9. cocos-creator使用记录5_发布微信小游戏
  10. android kl文件编辑,Android手机固件的简单修改教程