首页>代码>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小书童  LV17 2020年6月9日
15966848095  LV22 2020年2月8日
635969151  LV12 2019年12月18日
candice123  LV7 2019年12月11日
qweqweqwe321321233  LV10 2019年11月5日
最近浏览更多
陈小灏  LV14 2023年12月15日
微信网友_6699076084797440  LV7 2023年10月30日
jiemomo  LV12 2023年10月19日
yangxb2  LV10 2023年7月11日
hougui  LV1 2023年6月20日
17683946472  LV9 2023年6月8日
泓鼎168  LV19 2023年5月10日
微信网友_6444139264921600  LV6 2023年4月27日
香菇肉饼汤  LV8 2023年4月13日
想把它染成绿色 2023年3月1日
暂无贡献等级
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友