首页>代码>java swing开发FlappyBird游戏—仅供娱乐>/FlappyBird/src/com/tarena/bird/World.java
package com.tarena.bird;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;

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

public class World extends JPanel {
	
	Column column1;
	Column column2;
	Bird bird;
	Ground ground;
	BufferedImage background;
	BufferedImage gameoverImg;
	BufferedImage startImg;
	
	boolean start;
	int score;
	boolean gameOver;

	public World() throws IOException {
		background = ImageIO.read(getClass().getResource("bg.png"));
		gameoverImg = ImageIO.read(getClass().getResource("gameover.png"));
		startImg = ImageIO.read(getClass().getResource("start.png"));
		start();
	}
	public void start(){
		try {
			start = false;
			gameOver = false;
			bird = new Bird();
			ground = new Ground(400); 
			column1 = new Column(320 + 100);
			column2 = new Column(320 + 100 + 180);
			score = 0;
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public void action() throws Exception{		
		addMouseListener(new MouseAdapter() {
			@Override
			public void mousePressed(MouseEvent e) {
				if (gameOver) {
					start();
					return;
				}
				start = true;
				bird.flappy();
			}
		});
		requestFocus();
		addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				if(e.getKeyCode()==KeyEvent.VK_SPACE){
					if(gameOver){
						start();
						return;
					}
					start = true;
					bird.flappy();
				}
			}
		});
		//主循环, 时间间隔是 1/60 秒
		while(true){
			if(start && !gameOver){
				bird.step();
				column1.step();
				column2.step();
				//检查是否通过柱子了
				if(bird.pass(column1, column2)){
					score++;
				}
				if(bird.hit(column1, column2, ground)){
					start = false;
					gameOver = true;
				}
			}
			ground.step();
			repaint();
			Thread.sleep(1000/60);
		}
				
	}
	@Override
	public void paint(Graphics g) {
		//抗锯齿代码
		Graphics2D g2 = (Graphics2D)g;
		RenderingHints qualityHints = new RenderingHints(
				RenderingHints.KEY_ANTIALIASING,
				RenderingHints.VALUE_ANTIALIAS_ON);
		qualityHints.put(RenderingHints.KEY_RENDERING,
				RenderingHints.VALUE_RENDER_QUALITY);
		g2.setRenderingHints(qualityHints);
		//绘制背景
		g.drawImage(background, 0, 0, null);
		//绘制柱子
		column1.paint(g);
		column2.paint(g); 
		//绘制地面
		ground.paint(g);
		//绘制分数
		Font font = new Font(Font.MONOSPACED, Font.BOLD, 30);
		g.setFont(font);
		g.setColor(Color.white);
		g.drawString(score+"", 30, 50);
		//绘制小鸟
		bird.paint(g);
		//绘制结束状态
		if(gameOver){
			//g.drawString("Game Over!", 70 , 190);
			g.drawImage(gameoverImg, 0, 0, null);
			return;
		}
		if(! start){
			//g.drawString("Start >>>", bird.x+35, bird.y);
			g.drawImage(startImg, 0, 0, null);
		}
	}
	public static void main(String[] args) throws Exception {
		JFrame frame = new JFrame("飞扬小鸟");
		World world = new World();
		frame.add(world);
		frame.setSize(325, 505);
		frame.setResizable(false);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
		world.action();
	}
}
最近下载更多
alexcheung  LV3 2022年12月17日
杨少聪  LV5 2021年6月10日
一两天_  LV1 2021年5月27日
675104182  LV14 2020年9月22日
荒唐的羊  LV27 2020年7月1日
java小书童  LV16 2020年6月9日
15966848095  LV22 2020年2月8日
635969151  LV12 2019年12月18日
candice123  LV7 2019年12月11日
qweqweqwe321321233  LV10 2019年11月5日
最近浏览更多
暂无贡献等级
special__tt  LV1 2022年10月28日
szl294  LV1 2022年10月21日
ruifeng  LV4 2022年7月22日
luolihong  LV2 2022年5月29日
maoye520  LV1 2022年5月5日
835512308  LV14 2022年3月10日
枸杞七  LV3 2022年2月15日
xxmora  LV1 2022年1月26日
alexcheung  LV3 2021年12月10日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友