Java实现接月饼小游戏的示例代码

网友投稿 270 2022-08-24


Java实现接月饼小游戏的示例代码

目录前言主要设计功能截图代码实现游戏启动类核心类画面绘制总结

前言

《接月饼小游戏》是一个基于java的自制游戏,不要被月亮砸到,尽可能地多接月饼。

此小项目可用来巩固JAVA基础语法,swing的技巧用法。

主要设计

设计游戏界面,用swing实现设计背景设计得分物体-月饼,碰到加一分设计障碍物-月亮,碰到会死亡监听鼠标的左右键,用来控制篮子左右移动设计积分系统将resource文件夹设为resource(Project Manage中可以设置),因为要用里面的图片

功能截图

游戏开始界面:

代码实现

游戏启动类

public class Start {

public static void main(String[] args) throws URISyntaxException {

new EatGame();

}

}

核心类

public class EatGame extends JFrame implements ActionListener, MouseListener

{

private final int WIDTH = 400;

private final int HEIGHT = 800;

private int score;

private int ticks;

private boolean gameOver = false;

private GameControl control;

private List moons;

private List cakes;

private Timer timer;

private ChangeE changeE;

/**

* Constructor for objects of class FallingGame

*/

public EatGame() throws URISyntaxException {

changeE = new ChangeE(150, 650, "player.jpg", WIDTH);

moons = new ArrayList<>();

cakes = new ArrayList<>();

addMoonAndCake();

control = new GameControl(changeE, moons, cakes);

timer = new Timer(20, this);

//add keybinds

control.addAction("Left", -20, KeyEvent.VK_LEFT);

control.addAction("Right", 20, KeyEvent.VK_RIGHT);

//add components

add(control);

addMouseListener(this);

control.addMouseListener(this);

setTitle("吃月饼");

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setSize(WIDTH, HEIGHT);

setResizable(false);

setVisible(true);

timer.start();

}

/**

* 添加月亮和月饼

*/

public void addMoonAndCake() {

Random r = new Random();

int x, y;

x = 60 + (r.nextInt(35) * 2);

y = r.nextInt(20) + moons.size() * 30;

Moon moon1 = new Moon(x, y, "moon.png");

moons.add(moon1);

x = 190 + r.nextInt(35) * 2;

y = r.nextInt(20) + moons.size() * 30;

Moon moon2 = new Moon(x, y, "moon.png");

moons.add(moon2);

x = 80 + (r.nextInt(35) * 2);

y = r.nextInt(20) + moons.size() * 50;

Cake cake = new Cake(x, y, "cake.png");

cakes.add(cake);

}

/**

* 更新窗口

*/

private void updateFrame() {

ticks++;

for(int i = 0; i < moons.size(); i++)

{

Moon moon = moons.get(i);

if(ticks % 25 == 0 && moon.getSpeed() < 10)

{

moon.setSpeed(moon.getSpeed() + 2);

}

}

Iterator moonIterator = moons.iterator();

while (moonIterator.hasNext()) {

Moon moon = moonIterator.next();

// 超出屏幕

if(moon.getY() > HEIGHT) {

moonIterator.remove();

} else

moon.move();

}

Iterator cakeIterator = cakes.iterator();

while (cakeIterator.hasNext()) {

Cake cake = cakeIterator.next();

// 超出屏幕

if(cake.getY() > HEIGHT) {

cakeIterator.remove();

} else

cake.move();

}

if(moons.size() == 0) {

addMoonAndCake();

}

}

private boolean checkCollision() {

Rectangle rectangle = (Rectangle) changeE.getShape();

for(Moon moon : moons) {

Ellipse2D circle = (Ellipse2D) moon.getShape();

// 判断是否与圆形相撞

if (circle.intersects(rectangle)) {

gameOver = true;

}

}

Iterator cakeIterator = cakes.iterator();

while (cakeIterator.hasNext()) {

Cake cake = cakeIterator.next();

Ellipse2D circle = (Ellipse2D) cake.getShape();

if (circle.intersects(rectangle)) {

score ++; // 得分

cakeIterator.remove();

}

}

return gameOver;

}

public void actionPerformed(ActionEvent e)

{

if(gameOver) {

timer.stop();

control.drawEnd(control.getGraphics(), score);

} else {

//continue with game

updateFrame();

checkCollision();

control.repaint();

}

}

public void mouseClicked(MouseEvent e) {

}

public void mousePressed(MouseEvent e)

{

if(gameOver)

{

//reset game

moons.clear();

control.removeAll();

control.updateUI();

score = 0;

changeE.setX(150);

changeE.setY(650);

addMoonAndCake();

timer.start();

repaint();

gameOver = false;

}

}

public void mouseReleased(MouseEvent e)

{

}

public void mouseEntered(MouseEvent e)

{

}

public void mouseExited(MouseEvent e)

{

}

}

画面绘制

/**

* 画面绘制

*/

public class GameControl extends JPanel

{

private InputMap inputMap;

private ChangeE myChangeE;

private List moons;

private List cakes;

public GameControl(ChangeE changeE, List moons, List cakes)

{

this.myChangeE = changeE;

this.moons = moons;

this.cakes = cakes;

setBackground(Color.white);

inputMap = getInputMap(WHEN_IN_FOCUSED_WINDOW);

}

@Override

protected void paintComponent(Graphics g)

{

super.paintComponent(g);

// 绘制背景

ImageIcon icon=new ImageIcon(Thread.currentThread().getContextClassLoader().getResource("background.png"));

Image img=icon.getImage();

g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);

// 绘制玩家

g.drawImage(myChangeE.getImage(), myChangeE.getX(), myChazsKfxdlXngeE.getY(), this);

// 绘制月亮

for(Moon moon : moons) {

g.drawImage(moon.getImage(), moon.getX(), moon.getY(), this);

}

// 绘制月饼

for (Cake cake : cakes) {

g.drawImage(cake.getImage(), cake.getXzsKfxdlX(), cake.getY(), this);

}

}

public void drawEnd(Graphics g, int score)

{

g.setColor(Color.WHITE);

g.fillRect(50, 200, 300, 300);

g.setColor(Color.RED);

g.drawString("祝你中秋快乐,阖家欢乐!", 100, 300);

g.setColor(Color.BLUE);

g.drawString("您吃的到的月饼个数为:" + score, 100, 350);

g.setColor(Color.BLACK);

g.drawString("鼠标点击重玩", 100, 400);

}

public void addAction(String name, int deltaX, int keyCode) {

MoveAction moveAction = new MoveAction(name, deltaX);

inputMap.put(KeyStroke.getKeyStroke(keyCode, 0), name);

getActionMap().put(name, moveAction);

}

private class MoveAction extends AbstractAction implements ActionListener {

private int myDeltaX;

public MoveAction(String name, int deltaX) {

super(name);

myDeltaX = deltaX;

}

public void actionPerformed(ActionEvent e) {

myChangeE.move(myDeltaX);

}

}

}

总结

通过此次的《接月饼小游戏》实现,让我对JAVA的相关知识有了进一步的了解,对java这门语言也有了比以前更深刻的认识。

java的一些基本语法,比如数据类型、运算符、程序流程控制和数组等,理解更加透彻。java最核心的核心就是面向对象思想,对于这一个概念,终于悟到了一些。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python之查询美国护照状态(美国签证护照查询系统显示几种状态)
下一篇:Python之保存和读取字典(python 字典存入文件)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~