package com.lemon.flappybird;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 初始世界,包含背景图片,开始图片
* @author D
*
*/
public class World extends JPanel{
BufferedImage backgroud;//背景图片
BufferedImage startImg,startImg2;//开始图片
Column column1;Column column2;boolean start;
Bird bird;
Ground ground;//地板
boolean gameover;
int score=1;; int game=1;;int score_ji;int game_ji;
public World() throws IOException{//在构造方法中对图片进行加载
backgroud = ImageIO.read(getClass().getResource("bg.png"));
startImg = ImageIO.read(getClass().getResource("start.png"));
startImg2 = ImageIO.read(getClass().getResource("start2.png"));
ground =new Ground();
column1=new Column(388);//柱子开始出现位置
column2=new Column(560);
bird =new Bird(120,225);
}
public void paint(Graphics g) {//绘制背景图片
if (score%3==0&&score!=score_ji) {
score_ji=score;
game++;
}
g.drawImage(backgroud, 0, 0, null);
if (start==true) {
column1.paint(g);
column2.paint(g);
bird.paint(g);
}
g.setFont(new Font(Font.MONOSPACED, Font.BOLD, 20));
g.setColor(Color.WHITE);
g.drawString("关卡:"+game, 30, 20);g.drawString("分数:"+score, 30, 50);
if (gameover) {
try {
BufferedImage end =ImageIO.read(getClass().getResource("gameover.png"));
g.drawImage(end, 38, 210, null);
return;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}if (start==false) {
g.drawImage(startImg, 88, 250, null);
g.drawImage(startImg2, 46, 180, null);
}
ground.paint(g);//绘制地面
}
public void action() throws InterruptedException {//定义一个方法,调用Ground类中的step()方法,让x--,看起来像动
addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
if (gameover==true) {//游戏结束,初始化世界
try {
score =0;
if (game!=1) {
game--;
}
ground =new Ground();
column1=new Column(388);//柱子开始出现位置
column2=new Column(560);
bird =new Bird(120,225);
start = false;
gameover =false;
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
start =true;
bird.flyappy();
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
});
while (true) {
ground.step();
if (start==true) {//游戏开始后绘画
column1.step();
column2.step();
bird.step();
if (bird.hit(column1,column2,ground)) {
start=false;
gameover = true;
}
if (bird.pass(column1, column2)) {
score++;
}
}
repaint();//重绘
Thread.sleep(1000/game*2/60);//每1/60重绘一次
}
}
public static void main(String[] args) throws IOException, InterruptedException {
JFrame frame =new JFrame("FlappyBird游戏");//创建窗口
World world= new World();//创建面板
frame.setSize(288, 512);//对应背景图片大小
frame.setResizable(false);//设置不能调大小
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭时结束游戏
frame.setLocationRelativeTo(null);//让窗口出现在屏幕最中心
frame.add(world);
frame.setVisible(true);
world.action();//加载让地板重绘的方法
}
}
局中棋
- 粉丝: 1
- 资源: 1
最新资源
- 图像识别实战项目-基于深度学习与多种应用领域的图像处理与分析
- golin 扫描工具使用, 检查系统漏洞、web程序漏洞
- 多种编程语言下的算法实现资源及其应用场景
- BGM坏了吗111111
- 高等工程数学试题详解:矩阵分析与最优化方法
- 这是一个以20位中国著名书法家的风格编写的汉字作品的数据集 每个子集中有1000-7000张jpg图像(平均5251张图像)
- 【Academic tailor】学术小裁缝必备知识点:全局注意力机制(GAM)pytorch
- 数据科学领域的主流数据集类型及其应用分析
- 【Academic tailor】学术小裁缝必备知识点:全局注意力机制(GAM)TensorFlow
- Apple MacBook Pro和macOS Monterey用户的全方位使用指南
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈