Java王者火柴人

2023-12-25 13:16:31

前言

基于Java的飞翔小鸟游戏,本代码来自b站up主分享。本游戏所需的图片素材需要自己获取并下载,在此视频下,视频链接:【Java经典小游戏项目之飞翔的小鸟】 https://www.bilibili.com/video/BV1ou411o7br/?p=10&share_source=copy_web&vd_source=4611ec45767280678018f593c547e388。

启动入口

package com.bird.app;

import com.bird.main.GameFrame;

public class GameApp {

? ? public static void main(String[] args) {

? ? ? ? new GameFrame();

? ? }

}

主类

游戏主窗口类

package com.bird.main;

import static com.bird.util.Constant.*;

import java.awt.*;

import java.awt.event.*;

import java.awt.image.BufferedImage;

/**

?* 游戏的主窗口类,所有的关于游戏中绘制的内容都在此类中完成。

?*/

public class GameFrame extends Frame {

? ? //实例化gamebackGround类

? ? private GameBackGround gameBackGround;

? ? //实例化Bird类

? ? private Bird bird;

? ? //实例化GameBarrierLayer类

? ? private GameBarrierLayer gameBarrierLayer;

? ? //实例化GameFrontGround类

? ? private GameFrontGround gameFrontGround;

? ? //存放图片的图片

? ? private BufferedImage buffimg = new BufferedImage(FRAM_WIDTH,FRAM_HEIGNT,BufferedImage.TYPE_4BYTE_ABGR);

? ? //构造方法中初始化一些参数

? ? public GameFrame(){

? ? ? ? //窗口是否可见

? ? ? ? setVisible(true);

? ? ? ? //窗口的大小

? ? ? ? setSize(FRAM_WIDTH,FRAM_HEIGNT);

? ? ? ? //窗口的标题

? ? ? ? setTitle(FRAM_TITLE);

? ? ? ? //窗口的初始化位置

? ? ? ? setLocation(FRAM_X,FRAM_Y);

? ? ? ? //窗口的大小不可改变

? ? ? ? setResizable(false);

? ? ? ? //窗口的关闭事件

? ? ? ? addWindowListener(new WindowAdapter() {

? ? ? ? ? ? @Override

? ? ? ? ? ? public void windowClosing(WindowEvent e) {

? ? ? ? ? ? ? ? System.exit(0);//结束程序

? ? ? ? ? ? }

? ? ? ? });

? ? ? ? //初始化游戏对象

? ? ? ? initGamg();

? ? ? ? new run().start();

? ? ? ? //添加按键监听

? ? ? ? addKeyListener(new KeyAdapter() {

? ? ? ? ? ? @Override

? ? ? ? ? ? public void keyPressed(KeyEvent e) {

? ? ? ? ? ? ? ? add(e);

? ? ? ? ? ? }

? ? ? ? ? ? @Override

? ? ? ? ? ? public void keyReleased(KeyEvent e) {

? ? ? ? ? ? ? ? minu(e);

? ? ? ? ? ? }

? ? ? ? });

? ? }

? ? //对游戏中的对象初始化

? ? public void initGamg(){

? ? ? ? gameBackGround = new GameBackGround();

? ? ? ? bird = new Bird();

? ? ? ? gameFrontGround = new GameFrontGround();

? ? ? ? gameBarrierLayer = new GameBarrierLayer();

? ? }

? ? class run extends Thread{

? ? ? ? @Override

? ? ? ? public void run() {

? ? ? ? ? ? while (true) {

? ? ? ? ? ? ? ? repaint();

? ? ? ? ? ? ? ? try {

? ? ? ? ? ? ? ? ? ? Thread.sleep(33);

? ? ? ? ? ? ? ? } catch (InterruptedException e) {

? ? ? ? ? ? ? ? ? ? e.printStackTrace();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? }

? ? /**

? ? ?* 所有的我们需要绘制的内容都在此方法中进行调用绘制

? ? ?*/

? ? @Override

? ? public void update(Graphics g) {

? ? ? ? if(bird.life){

? ? ? ? ? ? //得到图片的画笔

? ? ? ? ? ? Graphics graphics = buffimg.getGraphics();

? ? ? ? ? ? gameBackGround.draw(graphics);

? ? ? ? ? ? bird.draw(graphics);

? ? ? ? ? ? gameFrontGround.draw(graphics);

? ? ? ? ? ? gameBarrierLayer.draw(graphics,bird);

? ? ? ? ? ? //一次性的将图片绘制到屏幕中

? ? ? ? ? ? g.drawImage(buffimg,0,0,null);

? ? ? ? }else {

? ? ? ? ? ? String over = "游戏结束";

? ? ? ? ? ? g.setColor(Color.red);

? ? ? ? ? ? g.setFont(new Font("微软雅黑",1,60));

? ? ? ? ? ? g.drawString(over,180,250);

? ? ? ? ? ? String reset = "Space Reset Game";

? ? ? ? ? ? g.drawString(reset,25,350);

? ? ? ? }

? ? }

? ? //按键

? ? public void add(KeyEvent e){

? ? ? ? switch (e.getKeyCode()){

? ? ? ? ? ? case KeyEvent.VK_UP:

? ? ? ? ? ? ? ? bird.fly(1);

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? case KeyEvent.VK_SPACE:

? ? ? ? ? ? ? ? if (bird.life == false) {

? ? ? ? ? ? ? ? ? ? restart();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? break;

? ? ? ? }

? ? }

? ? //抬键

? ? public void minu(KeyEvent e){

? ? ? ? switch (e.getKeyCode()){

? ? ? ? ? ? case KeyEvent.VK_UP:

? ? ? ? ? ? ? ? bird.fly(5);

? ? ? ? ? ? ? ? break;

? ? ? ? }

? ? }

? ? /**

? ? ?* 重置游戏

? ? ?*/

? ? public void restart(){

? ? ? ? gameBarrierLayer.restant();

? ? ? ? bird.restartDraw();

? ? }}

游戏前景类

package com.bird.main;

import com.bird.util.Constant;

import com.bird.util.GameUtil;

import java.awt.*;

import java.awt.image.BufferedImage;

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

/**

?* 游戏的前景类

?*/

public class GameFrontGround {

? ? //云彩的个数

? ? private static final int CLOUND_COUNT = 2;

? ? //存放云彩的容器

? ? private List<Cloud> clouds;

? ? //云彩的飞行速度

? ? private static final int CLOUNG_SPEED = 1;

? ? //使用到图片资源

? ? private BufferedImage[] img;

? ? //用于产生随机数

? ? private Random random;

? ? // 构造器初始化数据

? ? public GameFrontGround() {

? ? ? ? clouds = new ArrayList<>();

? ? ? ? img = new BufferedImage[CLOUND_COUNT

文章来源:https://blog.csdn.net/2302_76546999/article/details/135183232
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。