java用java编写小游戏戏

主题信息(必填)
主题描述(最多限制在50个字符)
申请人信息(必填)
申请信息已提交审核,请注意查收邮件,我们会尽快给您反馈。
如有疑问,请联系
你只管努力,剩下的交给时光!
如今的编程是一场程序员和上帝的竞赛,程序员要开发出更大更好、傻瓜都会用到软件。而上帝在努力创造出更大更傻的傻瓜。目前为止,上帝是赢的。个人网站:。个人QQ群:、
个人大数据技术博客:
人生得意须尽欢,莫使金樽空对月。
学习Java的同学注意了!!!
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码: 我们一起学Java!
写在前面技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习。java确实不适合写桌面应用,这里只是 通过这个游戏让大家理解oop面向对象编程的过程 ,纯属娱乐。代码写的很简单,也很容易理解,并且注释写的很清楚了,还有问题,自己私下去补课学习。完整代码敌飞机import java.util.R
敌飞机: 是飞行物,也是敌人
public class Airplane extends FlyingObject implements Enemy {
private int speed = 3;
/** 初始化数据 */
public Airplane(){
this.image = ShootGame.
width = image.getWidth();
height = image.getHeight();
Random rand = new Random();
x = rand.nextInt(ShootGame.WIDTH - width);
/** 获取分数 */
public int getScore() {
/** //越界处理 */
boolean outOfBounds() {
return y&ShootGame.HEIGHT;
/** 移动 */
public void step() {
}分数奖励/**
public interface Award {
int DOUBLE_FIRE = 0;
int LIFE = 1;
/** 获得奖励类型(上面的0或1) */
int getType();
}蜜蜂import java.util.R
/** 蜜蜂 */
public class Bee extends FlyingObject implements Award{
private int xSpeed = 1;
private int ySpeed = 2;
private int awardT
/** 初始化数据 */
public Bee(){
this.image = ShootGame.
width = image.getWidth();
height = image.getHeight();
Random rand = new Random();
x = rand.nextInt(ShootGame.WIDTH - width);
awardType = rand.nextInt(2);
/** 获得奖励类型 */
public int getType(){
return awardT
/** 越界处理 */
public boolean outOfBounds() {
return y&ShootGame.HEIGHT;
/** 移动,可斜着飞 */
public void step() {
if(x & ShootGame.WIDTH-width){
xSpeed = -1;
if(x & 0){
xSpeed = 1;
}子弹类:是飞行物体/**
* 子弹类:是飞行物
public class Bullet extends FlyingObject {
private int speed = 3;
/** 初始化数据 */
public Bullet(int x,int y){
this.image = ShootGame.
/** 移动 */
public void step(){
/** 越界处理 */
public boolean outOfBounds() {
return y&-
}敌人的分数/**
* 敌人,可以有分数
public interface Enemy {
/** 敌人的分数
int getScore();
}飞行物(敌机,蜜蜂,子弹,英雄机)import java.awt.image.BufferedI
* 飞行物(敌机,蜜蜂,子弹,英雄机)
public abstract class FlyingObject {
protected int
protected int
protected int
protected int
protected BufferedI
public int getX() {
public void setX(int x) {
public int getY() {
public void setY(int y) {
public int getWidth() {
public void setWidth(int width) {
this.width =
public int getHeight() {
public void setHeight(int height) {
this.height =
public BufferedImage getImage() {
public void setImage(BufferedImage image) {
this.image =
* 检查是否出界
* true 出界与否
public abstract boolean outOfBounds();
* 飞行物移动一步
public abstract void step();
* 检查当前飞行物体是否被子弹(x,y)击(shoot)中
* Bullet 子弹对象
* true表示被击中了
public boolean shootBy(Bullet bullet){
int x = bullet.x;
int y = bullet.y;
return this.x&x && x&this.x+width && this.y&y && y&this.y+
}英雄机import java.awt.image.BufferedI
* 英雄机:是飞行物
public class Hero extends FlyingObject{
private BufferedImage[] images = {};
private int index = 0;
private int doubleF
private int
/** 初始化数据 */
public Hero(){
doubleFire = 0;
images = new BufferedImage[]{ShootGame.hero0, ShootGame.hero1};
image = ShootGame.hero0;
width = image.getWidth();
height = image.getHeight();
/** 获取双倍火力 */
public int isDoubleFire() {
return doubleF
/** 设置双倍火力 */
public void setDoubleFire(int doubleFire) {
this.doubleFire = doubleF
/** 增加火力 */
public void addDoubleFire(){
doubleFire = 40;
/** 增命 */
public void addLife(){
/** 减命 */
public void subtractLife(){
/** 获取命 */
public int getLife(){
/** 当前物体移动了一下,相对距离,x,y鼠标位置
public void moveTo(int x,int y){
this.x = x - width/2;
this.y = y - height/2;
/** 越界处理 */
public boolean outOfBounds() {
return false;
/** 发射子弹 */
public Bullet[] shoot(){
int xStep = width/4;
int yStep = 20;
if(doubleFire&0){
Bullet[] bullets = new Bullet[2];
bullets[0] = new Bullet(x+xStep,y-yStep);
bullets[1] = new Bullet(x+3*xStep,y-yStep);
Bullet[] bullets = new Bullet[1];
bullets[0] = new Bullet(x+2*xStep,y-yStep);
/** 移动 */
public void step() {
if(images.length&0){
image = images[index++/10%images.length];
/** 碰撞算法 */
public boolean hit(FlyingObject other){
int x1 = other.x - this.width/2;
int x2 = other.x + this.width/2 + other.
int y1 = other.y - this.height/2;
int y2 = other.y + this.height/2 + other.
int herox = this.x + this.width/2;
int heroy = this.y + this.height/2;
return herox&x1 && herox&x2 && heroy&y1 && heroy&y2;
}游戏启动主类import java.awt.F
import java.awt.C
import java.awt.G
import java.awt.event.MouseA
import java.awt.event.MouseE
import java.util.A
import java.util.R
import java.util.T
import java.util.TimerT
import java.awt.image.BufferedI
import javax.imageio.ImageIO;
import javax.swing.ImageI
import javax.swing.JF
import javax.swing.JP
public class ShootGame extends JPanel {
public static final int WIDTH = 400;
public static final int HEIGHT = 654;
/** 游戏的当前状态: START RUNNING PAUSE GAME_OVER */
private int
private static final int START = 0;
private static final int RUNNING = 1;
private static final int PAUSE = 2;
private static final int GAME_OVER = 3;
private int score = 0;
private int intervel = 1000 / 100;
public static BufferedI
public static BufferedI
public static BufferedI
public static BufferedI
public static BufferedI
public static BufferedImage hero0;
public static BufferedImage hero1;
public static BufferedI
public static BufferedI
private FlyingObject[] flyings = {};
private Bullet[] bullets = {};
private Hero hero = new Hero();
background = ImageIO.read(ShootGame.class
.getResource("background.png"));
start = ImageIO.read(ShootGame.class.getResource("start.png"));
airplane = ImageIO
.read(ShootGame.class.getResource("airplane.png"));
bee = ImageIO.read(ShootGame.class.getResource("bee.png"));
bullet = ImageIO.read(ShootGame.class.getResource("bullet.png"));
hero0 = ImageIO.read(ShootGame.class.getResource("hero0.png"));
hero1 = ImageIO.read(ShootGame.class.getResource("hero1.png"));
pause = ImageIO.read(ShootGame.class.getResource("pause.png"));
gameover = ImageIO
.read(ShootGame.class.getResource("gameover.png"));
} catch (Exception e) {
e.printStackTrace();
public void paint(Graphics g) {
g.drawImage(background, 0, 0, null);
paintHero(g);
paintBullets(g);
paintFlyingObjects(g);
paintScore(g);
paintState(g);
/** 画英雄机 */
public void paintHero(Graphics g) {
g.drawImage(hero.getImage(), hero.getX(), hero.getY(), null);
/** 画子弹 */
public void paintBullets(Graphics g) {
for (int i = 0; i & bullets. i++) {
Bullet b = bullets[i];
g.drawImage(b.getImage(), b.getX() - b.getWidth() / 2, b.getY(),
/** 画飞行物 */
public void paintFlyingObjects(Graphics g) {
for (int i = 0; i & flyings. i++) {
FlyingObject f = flyings[i];
g.drawImage(f.getImage(), f.getX(), f.getY(), null);
/** 画分数 */
public void paintScore(Graphics g) {
int x = 10;
int y = 25;
Font font = new Font(Font.SANS_SERIF, Font.BOLD, 22);
g.setColor(new Color(0xFF0000));
g.setFont(font);
g.drawString("SCORE:" + score, x, y);
g.drawString("LIFE:" + hero.getLife(), x, y);
/** 画游戏状态 */
public void paintState(Graphics g) {
switch (state) {
case START:
g.drawImage(start, 0, 0, null);
case PAUSE:
g.drawImage(pause, 0, 0, null);
case GAME_OVER:
g.drawImage(gameover, 0, 0, null);
public static void main(String[] args) {
JFrame frame = new JFrame("Fly");
ShootGame game = new ShootGame();
frame.add(game);
frame.setSize(WIDTH, HEIGHT);
frame.setAlwaysOnTop(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setIconImage(new ImageIcon("images/icon.jpg").getImage());
frame.setLocationRelativeTo(null);
frame.setVisible(true);
game.action();
/** 启动执行代码 */
public void action() {
MouseAdapter l = new MouseAdapter() {
public void mouseMoved(MouseEvent e) {
if (state == RUNNING) {
int x = e.getX();
int y = e.getY();
hero.moveTo(x, y);
public void mouseEntered(MouseEvent e) {
if (state == PAUSE) {
state = RUNNING;
public void mouseExited(MouseEvent e) {
if (state == RUNNING) {
state = PAUSE;
public void mouseClicked(MouseEvent e) {
switch (state) {
case START:
state = RUNNING;
case GAME_OVER:
flyings = new FlyingObject[0];
bullets = new Bullet[0];
hero = new Hero();
score = 0;
state = START;
this.addMouseListener(l);
this.addMouseMotionListener(l);
timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
if (state == RUNNING) {
enterAction();
stepAction();
shootAction();
bangAction();
outOfBoundsAction();
checkGameOverAction();
repaint();
}, intervel, intervel);
int flyEnteredIndex = 0;
/** 飞行物入场 */
public void enterAction() {
flyEnteredIndex++;
if (flyEnteredIndex % 40 == 0) {
FlyingObject obj = nextOne();
flyings = Arrays.copyOf(flyings, flyings.length + 1);
flyings[flyings.length - 1] =
/** 走一步 */
public void stepAction() {
for (int i = 0; i & flyings. i++) {
FlyingObject f = flyings[i];
for (int i = 0; i & bullets. i++) {
Bullet b = bullets[i];
hero.step();
/** 飞行物走一步 */
public void flyingStepAction() {
for (int i = 0; i & flyings. i++) {
FlyingObject f = flyings[i];
int shootIndex = 0;
/** 射击 */
public void shootAction() {
shootIndex++;
if (shootIndex % 30 == 0) {
Bullet[] bs = hero.shoot();
bullets = Arrays.copyOf(bullets, bullets.length + bs.length);
System.arraycopy(bs, 0, bullets, bullets.length - bs.length,
bs.length);
/** 子弹与飞行物碰撞检测 */
public void bangAction() {
for (int i = 0; i & bullets. i++) {
Bullet b = bullets[i];
/** 删除越界飞行物及子弹 */
public void outOfBoundsAction() {
int index = 0;
FlyingObject[] flyingLives = new FlyingObject[flyings.length];
for (int i = 0; i & flyings. i++) {
FlyingObject f = flyings[i];
if (!f.outOfBounds()) {
flyingLives[index++] =
flyings = Arrays.copyOf(flyingLives, index);
index = 0;
Bullet[] bulletLives = new Bullet[bullets.length];
for (int i = 0; i & bullets. i++) {
Bullet b = bullets[i];
if (!b.outOfBounds()) {
bulletLives[index++] =
bullets = Arrays.copyOf(bulletLives, index);
/** 检查游戏结束 */
public void checkGameOverAction() {
if (isGameOver()==true) {
state = GAME_OVER;
/** 检查游戏是否结束 */
public boolean isGameOver() {
for (int i = 0; i & flyings. i++) {
int index = -1;
FlyingObject obj = flyings[i];
if (hero.hit(obj)) {
hero.subtractLife();
hero.setDoubleFire(0);
if (index != -1) {
FlyingObject t = flyings[index];
flyings[index] = flyings[flyings.length - 1];
flyings[flyings.length - 1] =
flyings = Arrays.copyOf(flyings, flyings.length - 1);
return hero.getLife() &= 0;
/** 子弹和飞行物之间的碰撞检查 */
public void bang(Bullet bullet) {
int index = -1;
for (int i = 0; i & flyings. i++) {
FlyingObject obj = flyings[i];
if (obj.shootBy(bullet)) {
if (index != -1) {
FlyingObject one = flyings[index];
FlyingObject temp = flyings[index];
flyings[index] = flyings[flyings.length - 1];
flyings[flyings.length - 1] =
flyings = Arrays.copyOf(flyings, flyings.length - 1);
if (one instanceof Enemy) {
Enemy e = (Enemy)
score += e.getScore();
Award a = (Award)
int type = a.getType();
switch (type) {
case Award.DOUBLE_FIRE:
hero.addDoubleFire();
case Award.LIFE:
hero.addLife();
* 随机生成飞行物
* 飞行物对象
public static FlyingObject nextOne() {
Random random = new Random();
int type = random.nextInt(20);
if (type & 4) {
return new Bee();
return new Airplane();
}写在最后以上就是这个游戏我整理的完整代码,因为图片差不多9张,所以图片没上传,需要图片的友友请简信我,最后,我做了一张思维导图贴出来让大家更好的理解OOP面向对象编程的过程。
学习Java的同学注意了!!!
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码: 我们一起学Java!开源Java小游戏
看到标题可能有人要笑我,用Java写游戏?没办法,毕竟无论学什么语言我们都希望它能做出好玩有趣的应用。对于初学者来说,能做出个小游戏玩玩也是很大的学习动力嘛。下面就给大家介绍十几个开源的Java小游戏,供大家学习交流。下载链接都是我上传的资源,不收取任何资源分,毕竟开源才是我们的宗旨。如果链接坏了给我留言,我会尽快补上新的链接。这些程序都在我的机子上运行过,不要问我为什么你跑不起来,那是因为有些游戏是需要你本地文件的或者你的JDK版本过低或者你的BulidPath没修改,我在下面介绍的时候也会说明。
游戏说明及源代码下载
1.&&&数字彩虹雨
这是我比较喜欢的一个小应用,虽然代码比较简单但是喜欢那种简单的美。下面是运行截图,就是我们在黑客帝国里面见到的那种数字雨,运行时是全屏的。下面说说下载链接里面的东西,除了源程序之外我还把这个程序打包成jar和exe程序,比较实用的是把exe文件后缀改为src就可以当成屏保用(看着挺霸气的哈)。再说说里面的配置文件properties,里面的的colorful可以改为true,这时字体是彩色的,不过我还是喜欢黑底绿字。Music可以自己定义文件名,不过只支持wav格式的,还要注意路径,我没加路径是因为在当前目录下。当然字体大小、行数、速度、字体类型、窗口大小都可以在代码里直接改动。下面是下载链接:
2.愤怒的小鸟
这个没什么特别要说的,只要改一下BuildPath就可以了。下面是下载链接:
先说个常识,先运行服务端再运行客户端,客户端可以多开,支持注册和登陆功能。下面给出主界面和聊天界面的运行图。下面是下载链接:
五子棋也没什么好说的,你可以加上更高级的算法让它更“智能”。下面是下载链接:
5.动态图片转ASCII码动态图片
之前网上比较火的一个有趣的应用。这里有两点需要说明,第一是gif的源文件地址,代码里默认的是该目录下,第二个是生成的jpg文件夹位置,这两个在工程中有例子,已经为你建好。第二个需要注意的是生成的是多个jpg,你在网上找个jpg转Gif的工具即可。当然也有人实现了直接生成Gif的版本,有兴趣的大家自己去找。下面是下载链接:
这个没什么好说的,可以自己添加新的图片。下面是下载链接:
7.潜艇大战
这款游戏没什么好说的。下面是下载链接:
8.坦克大战
不用多说,儿时记忆。下面是下载链接:
这个多经典不用多说。下面是下载链接:
10.飞机大战
经典的腾讯游戏。下面是下载链接:
这是笔者花一晚上整理的,如果转载请注明出处,如果你觉得有用就推荐给其他人吧。
本文已收录于以下专栏:
相关文章推荐
上周是数据库课程设计周,学校为了让我们做出一个真正能用(能看见框体)的东西,同时为毕业设计做准备,找来了培训机构的老师,讲解了两天java-swing图形界面的东西
虽然swing算是过时了的东西...
关注公众号
在公众号里回复“”秘密“”两个字
http://task.csdn.net/m/task/home?task_id=398 领取奖励
提示:根据公众号里的自动回复,完成...
package cn.edu.ahu.RapidS
import java.awt.G
import java.awt.I
import java.awt.R...
开源Java小游戏
看到标题可能有人要笑我,用Java写游戏?没办法,毕竟无论学什么语言我们都希望它能做出好玩有趣的应用。对于初学者来说,能做出个小游戏玩玩也是很大的学习动力嘛。下面就给...
他的最新文章
讲师:AI100
讲师:谢梁
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)鏂囩珷鍒楄〃
缂栫▼璇?█閮界浉褰撳?鐨勫叡鎬э紝鍒嗕韩涓}

我要回帖

更多关于 入门的java游戏小程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信