java编写游戏_java编写小游戏-大球吃小球

游戏界面:

点击火箭开始游戏

点击Exit退出游戏

左上角显示当前成绩和历史最高分

退出自动保存最高成绩

c170b408a021b3302540fdee265c6405.png

0db81a757a1eda82c6c2d7ef84e8901f.png

代码获取

扫码关注微信公众号【程序猿声】

在后台回复【EBG】不包括【】即可获取。

玩法:

玩家通过鼠标控制小球所处位置

进度条缓慢减少,吃小球进度条增加

吃到黄球玩家变回初始大小

吃药进度条大幅增加,吃到炸弹游戏结束

难度等级每十份增加一级

8ecfb5148cc8076b787a42852a385952.png

0ae20cae07ca8a651e65a71c48ce7f1e.png

项目包含文件:

Circle.java

GUI.java

Game.java

MyUtils.java

PaintPanel.java

PlayerCircle.java

ProgressUI.java

代码解析:

Circle.java

该文件定义了一个Circle类,用以生成每个球的对象。

属性有圆的半径、x坐标、y坐标、x方向的偏移量、y方向的偏移量、id。

方法有移动和获取每个属性的接口

package com.hust.game;

import java.awt.*;

import java.util.Random;

public class Circle {

protected int radius,x,y,dx,dy;

private int id;

protected GUI gui;

String color;

public Circle(int X,int Y,int R,int id,String color,GUI gui,int dx,int dy){

x = X;

y = Y;

radius = R;

Random random = new Random();

this.dx = random.nextBoolean() ? dx : -dx;

this.dy = random.nextBoolean() ? dy : -dy;

this.gui = gui;

this.id = id;

this.color = color;

draw();

}

public Circle(int X,int Y,int R,int id,String color,GUI gui){

x = X;

y = Y;

radius = R;

this.gui = gui;

this.id = id;

this.color = color;

}

public void draw(){

gui.updateCircle(this);

}

public void move(){

// clearcircle()

x += dx;

y += dy;

if(x + radius > gui.graphWidth || x - radius < 0){

dx = -dx;

}

if(y + radius > gui.graphHeight || y - radius < GUI.PROGRESSWIDTH){

dy = -dy;

}

draw();

}

public int getX(){

return x;

}

public int getY(){

return y;

}

public int getR(){

return radius;

}

public int getD(){

return radius << 1;

}

public int getID(){

return id;

}

}

PlayerCircle.java

该文件是用户控制的小球类。继承于Circle类,重构了移动的方法,由自动移动改为获取鼠标坐标,使用户可以通过鼠标控制小球。另外新增了Max属性用以限制用户小球的大小,避免发生小球过大以至于没有威胁的情况,增强可玩性。

package com.hust.game;

public class PlayerCircle extends Circle{

private int Max;

public PlayerCircle(int X,int Y,int R,int id,String color,GUI gui,int Maxsize){

super(X,Y,R,id,color,gui);

Max = Maxsize;

draw();

}

public void resize(int plusSize){

if(radius < Max){

radius += plusSize;

draw();

}

}

public void move(){

// clearcircle

x = gui.mouseX;

y = gui.mouseY;

draw();

}

public int getMax(){

return Max;

}

}

GUI.java

该文件是整个游戏的界面,主要功能有:游戏界面的设置、球的绘制、成绩显示等等一且UI控件的显示和设计。

package com.hust.game;

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseMotionListener;

import java.util.ArrayList;

public class GUI {

public final int graphWidth;

public final int graphHeight;

public final int STARTX = 180;

public final int STARTY = 500;

public final int buttonwidth = 100;

public final int buttonheight = 60;

public final int EXITX = 330;

public final int EXITY = 500;

public static final int PROGRESSWIDTH = 40;

public static final int BOTTOM = 70;

public int mouseX;

public int mouseY;

public Circle[] willPaint = new Circle[Game.CIRCLECOUNT+3];

public PaintPanel conn = new PaintPanel(willPaint,"paintPanel");

public JFrame jf;

public JButton start;

public JButton exit;

public JLabel currentScoreLabel;

public JLabel maxScoreLabel;

public JLabel gameLevelLabel;

public JLabel eatYourBalls;

public ProgressUI jProBar;

public GUI(){

jf = new JFrame("Big ball eat Small ball");

Toolkit kit = Toolkit.getDefaultToolkit();

graphWidth = kit.getScreenSize().width;

graphHeight = kit.getScreenSize().height-BOTTOM;

jf.setBounds(graphWidth/2-300, graphHeight/2-400, 600, 800);

jf.setLayout(null);

jf.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

conn.setLayout(null);

start = new JButton();

start.setBounds(STARTX,STARTY,64,64);

exit = new JButton();

exit.setBounds(EXITX,EXITY,64,64);

start.setIcon(new ImageIcon("./res

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值