java课程设计题,游戏界面采用swing图形界面,游戏运行时会有背景音乐。

Bird类

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;public class Bird {BufferedImage image;int x,y;//坐标int width,height;double t=0.25;//时间间隔double v0=10;//初速度double speed;//当前速度int g=2;//重力加速度public Bird(){try {image= ImageIO.read(new File("D:\\" +"Photos\\FlyingBird\\bird.png"));} catch (IOException e) {e.printStackTrace();}x=50;y=0;speed=v0;width=image.getWidth();height=image.getHeight();}public void fly(){v0=speed;y=y-(int)(v0*t+0.5*g*t*t);speed=v0-g*t;}//正常飞行public void flyUp(){v0=10;speed=10;}//监听鼠标,向上飞行//碰撞检测public boolean isHitGround(Ground ground){return y+height>=ground.y;}public boolean isHitColumn(Column column){if(x+width<column.x||x>column.x+column.width)return false;else if(y>column.y1+column.height&&y+height< column.y2)return false;return true;}public boolean isHitColumn(Column[] columns){for (Column column:columns){if(isHitColumn(column))return true;}return false;}
}

Column柱子类

为了实现柱子间隙随机,我把柱子分为上下两段,纵坐标分别为y1,y2.

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;public class Column {Random random=new Random();BufferedImage image;int bg_height;int gr_height;int x,y1,y2;int width,height;//两个柱子间距int distance;//上下间隙int gap;public Column(){try {image=ImageIO.read(new File("D:\\Photos\\FlyingBird\\halfColumn0.png"));} catch (IOException e) {e.printStackTrace();}try {bg_height=ImageIO.read(new File("D:\\Photos\\FlyingBird\\bg0.png")).getHeight();gr_height=ImageIO.read(new File("D:\\Photos\\FlyingBird\\Ground0.png")).getHeight();} catch (IOException e) {e.printStackTrace();}x=1550;y1=0;y2=0;width=image.getWidth();height=image.getHeight();gap=random.nextInt((bg_height- gr_height)/2-90)+90;distance=300;}/*初始化第n个柱子*/public Column(int n){this();x=1550+n*distance;y1=random.nextInt(460)-height;y2=y1+height+gap;}public void step(){x--;if(x<=-width){x=1500-width;y1=random.nextInt(460)-height;y2=y1+height+gap;gap=random.nextInt((bg_height- gr_height)/2-90)+90;}}//柱子左移动
}

Ground地面类

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;public class Ground {BufferedImage image;int x,y;int height,width;public Ground(){try {image= ImageIO.read(new File("D:\\Photos\\FlyingBird\\Ground0.png"));} catch (IOException e) {e.printStackTrace();}height=image.getHeight();width=image.getWidth();x=0;y=1500-height;}//地面左移public void step(){x--;if(x==-width/2)x=0;}
}

BirdGame类

采用鼠标控制小鸟飞行

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;public class BirdGame extends JPanel {BufferedImage background;BufferedImage gameStart;BufferedImage gameOver;Bird bird;Ground ground;Column[] columns;int index=0;int score;//分数int maxScore;//最高分数ArrayList<Integer> arrayList;public final int GAME_START=1;public final int GAME_RUNNING=2;public final int GAME_OVER=3;int state;//状态量public BirdGame(){try {background= ImageIO.read(new File("D:\\Photos\\FlyingBird\\bg0.png"));gameStart=ImageIO.read(new File("D:\\Photos\\FlyingBird\\start.png"));gameOver=ImageIO.read(new File("D:\\Photos\\FlyingBird\\gameover.png"));} catch (IOException e) {e.printStackTrace();}bird=new Bird();ground=new Ground();state=GAME_START;score=0;maxScore=0;arrayList= new ArrayList<>();}public BirdGame(int n){this();creatColumns(n);}//num个柱子public void creatColumns(int num){columns=new Column[num];for(int i=0;i<num;i++){columns[i]=new Column(i);}}@Overridepublic void paint(Graphics g) {g.drawImage(background,0,0,null);g.drawImage(ground.image,ground.x,background.getHeight()-ground.height,null);Font font=new Font(Font.SANS_SERIF,Font.BOLD,40);g.setFont(font);switch (state){case GAME_START -> g.drawImage(gameStart,0,0,null);case GAME_RUNNING -> {g.drawImage(bird.image,bird.x,bird.y,null);for(Column column:columns){g.drawImage(column.image,column.x,column.y1,null);g.drawImage(column.image,column.x,column.y2,null);}g.drawString("得分:"+score,40,60);g.setColor(Color.WHITE);}case GAME_OVER -> {g.drawImage(gameOver,0,0,null);g.drawString("得分:"+score,background.getWidth()/2,background.getHeight()/2-200);g.drawString("目前最高分:"+maxScore,background.getWidth()/2,background.getHeight()/2+200);}}}public void record(String path){try(BufferedWriter bf=new BufferedWriter(new FileWriter(path,true))){arrayList.add(score);score=0;arrayList.sort((o1, o2) -> {if (o1 > o2)return -1;else if (o1 < o2)return 1;return 0;});for (int score:arrayList) {bf.write(" 得分: "+score+'\n');}} catch (IOException e) {e.printStackTrace();}}public void action(){new Play0("C:\\Users\\24809\\Music\\祖海 - 好运来.mp3").start();MouseListener mouseListener=new MouseAdapter() {@Overridepublic void mousePressed(MouseEvent e) {try {switch (state){case GAME_START -> state=GAME_RUNNING;case GAME_RUNNING -> {bird.flyUp();repaint();}case GAME_OVER -> {ground=new Ground();for(int i=0;i<columns.length;i++)columns[i]=new Column(i);bird=new Bird();record("D:\\java-code\\project-test\\Algorithm\\src\\FlipBird\\Testing.txt");state=GAME_START;}}} catch (Exception ex) {ex.printStackTrace();}}};addMouseListener(mouseListener);while (true){if (state==GAME_RUNNING) {ground.step();for(Column column:columns)column.step();bird.fly();if(bird.x==columns[index].x){score++;index=(index+1)%columns.length;}if(bird.isHitGround(ground)||bird.isHitColumn(columns))state=GAME_OVER;}else if(state==GAME_OVER){maxScore= Math.max(score, maxScore);index=0;}try {Thread.sleep(1000/120);} catch (InterruptedException e) {e.printStackTrace();}repaint();}}public static void main(String[] args) {BirdGame birdGame=new BirdGame(5);JFrame frame=new JFrame();frame.add(birdGame);frame.setSize(birdGame.background.getWidth(),birdGame.background.getHeight());frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);frame.setVisible(true);birdGame.action();}
}

Play0类(需要导入外部包)

用于播放背景音乐

import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;class Play0 extends Thread{Player player;String music;public Play0(String file) {this.music = file;}public void run() {try {play();} catch (FileNotFoundException | JavaLayerException e) {e.printStackTrace();}}public void play() throws FileNotFoundException, JavaLayerException {BufferedInputStream buffer = new BufferedInputStream(new FileInputStream(music));player = new Player(buffer);player.play();}
}

百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com/s/15dcWoUFDLCr1KVMBigKnuA

图片资源以及jar文件已上传百度网盘,提取码:krhf

FlipBird飞翔的小鸟游戏 java实现 课程设计相关推荐

  1. Java SpringMVC+H5飞翔的小鸟游戏微信小程序源码

    源码介绍 Java SpringMVC+H5飞翔的小鸟游戏微信小程序源码 试验性质的一个微信小程序,用canvas做的一个类似flappy-bird的小游戏. 包含一些基本的功能:躲避障碍物.计分.排 ...

  2. H5飞翔的小鸟游戏微信小程序源码

    Java SpringMVC+H5飞翔的小鸟游戏微信小程序源码 试验性质的一个微信小程序,用canvas做的一个类似flappy-bird的小游戏. 包含一些基本的功能:躲避障碍物.计分.排行榜等等. ...

  3. 最新H5开发飞翔的小鸟游戏微信小程序源码

    正文: Java SpringMVC+H5飞翔的小鸟游戏微信小程序源码. 试验性质的一个微信小程序,用canvas做的一个类似flappy-bird的小游戏. 包含一些基本的功能:躲避障碍物.计分.排 ...

  4. C#小项目飞翔的小鸟游戏详细教程(Flying bird),基于Winform框架

    C#小项目飞翔的小鸟游戏详细教程(Flying bird),基于Winform框架 实现效果: 1.空格,鼠标左键控制小鸟跳 2.管道随机大小 3.小鸟与管道碰撞,小鸟碰到地面 4.小鸟煽动翅膀动画 ...

  5. 面向对象程序设计(Java)课程设计——五子棋小游戏

    目录 一.团队成员及任务 二.项目简介 三.功能设计图 四.运行结果截图 五.核心源码 六.课程设计感想与展望 一.团队成员及任务 队长:管俊杰  计科(智能)22-1 202203200037 负责 ...

  6. 面向对象程序设计(Java) 课程设计——三少五子棋(Final)

    背景:设计五子棋游戏背景, 初步猜想: ① 设计一个五子棋小游戏,实现人机对战和双人对战两功能. ② 设计五子棋小游戏,使用Java Swing设计可视化操作界面,并使用GraPhic 2D技术设计图 ...

  7. java记事本课程设计,java记事本课程设计

    java记事本课程设计 一. 设计内容和要求1. 设计一个具有 GUI 界面的记事本 含有简单的文字编辑功能 如 剪切.复制.粘贴.删除 还能实现保存.另存为.设置字体和颜色等功能.2. 本程 ...

  8. 课程设计-毕业设计-JAVA画板课程设计---总之岁月漫长,然而值得等待。

    在校大学生的一份辛苦劳动成果写了一个小画板程序. 任务书... 1 1.1设计内容... 1 1.2设计任务及具体要求... 1 1.3软件开发运行环境.. 1 2  本组课题... 1 2.1课题. ...

  9. Java web课程设计-购物系统

    题目:网上购物系统 网上购物商店的分析与实现 一.实验目的 Java web课程设计是为了是计算机学院的学子深入学习java web应用开发设置的一门实验性的动手性的实践课程.是计算机科学与技术. 网 ...

最新文章

  1. 回归 统计绘图_手把手教绘制回归分析结果的森林图「GraphPad Prism和Excel」
  2. Vue 中的作用域插槽
  3. Managed Metadata Service介绍系列 之三
  4. 你必须知道的Dockerfile
  5. 这个软件真好用,让 iPhone 无线投屏到 Mac 上
  6. 欧姆龙PLC程序 欧姆龙NX系列PLC程序,ST语言和梯形图配合使用,数据处理使用ST语言,逻辑用梯形图
  7. 端口镜像--锐捷交换机
  8. 什么是登录Token
  9. 使用python编写十二进制与十进制转换程序
  10. 计算机网络技术摘要,计算机网络论文摘要
  11. 发现一个提供免费英文软件类书籍的网站[xgluxv]
  12. 没看到能打的,遍历目录并读取目录下的文件列表。(C语言,SDK)
  13. 15年来 那些值得永远铭记的硬件
  14. codeforces 1538G Gift Set
  15. Aluminium cold plate
  16. 机器学习之路一:线性模型、非线性模型、神经网络
  17. 每日一书:《性能测试从零开始loadrunner入门与提升》PDF高清版
  18. SQLServer还原数据库
  19. 混淆矩阵 python实现
  20. 关于《算法(第四版 谢路云译)》标准库In、Out、StdOut和StdIn的正确配置和调用经验分享(以BinarySearch二分查找算法为例)

热门文章

  1. Golang实现Raft一致性算法
  2. 最近开始研究PMD(一款采用BSD协议发布的Java程序代码检查工具)
  3. 【MySQL】全国省市县三级联动SQL语句—区县SQL(三)
  4. 多目标跟踪算法简述——量测-航机关联
  5. Linux hex文件编辑器,全网最全Linux的十大十进制编辑器,要接触Linux的你摆脱不了...
  6. java vector的排序_java Vector排序及用法
  7. MySQL索引的创建与删除
  8. 研究生新生的科研指南
  9. org.springframework.core.type.AnnotationMetadata.introspect(Ljava/lang/Class;)Lorg/springframework/c
  10. CCNP证书的含金量和以前考四科的时候相比并没有下降