java的shadowdx代码_【原创】纯OO:从设计到编码写一个FlappyBird (二)

第一部分请点这里。

续结前文,本文将实现Game类。

首先是实例变量。由上次的类图可以看出,Game类首先得具有如下实例变量:

0、Judge judge;

1、SimpleDraw draw; // 为什么不是接口类型?因为需要addMouseListener,而DrawBoard接口没有这个方法。。期待下一个版本的改进

2、Bing fang;

3、Obstacle obs;

我们需要控制游戏中帧变换的速度,因此,需要加入一个变量来标示速度:(帧变换的速度是什么?参见这篇文章)

0、private static final int TIME = 10;

最后,我们还需要一个变量来标示得分:

0、private int score;

由于DrawBoard的实现类需要在发生鼠标事件时通知Game类,因此,Game类还应该实现MouseListener接口。

我们也需要一个setup方法,来初始化全部的变量。同时需要一个start方法来开始游戏,最后需要一个end方法来打印游戏结束后的得分。

接下来讲讲start方法和MousePressed方法的实现。

start方法:

public voidstart()

{int flag = 1;while (flag > 0)

{

fang.action();

obs.move();

flag=judge.isGameOver(fang,obs);if (flag == 2)

score++;

draw.draw();try{

Thread.sleep(TIME);

}catch(Exception e)

{}

}

}

很简单,典型的游戏逻辑。judge接口实现的类提供一个判断游戏是否结束的方法,当其返回1时,没死,也没得分;当其返回2时,得分;当其返回0时,方sir就。。了

fang.action();让小鸟开始自己往下掉(摁一下就上升了)。obs.move();让障碍自己动起来,draw.draw();则是将更新后的图像重新画出来。那个try其实就是暂停下程序的运行而已。

然后是mousePressed方法:

public voidmousePressed(MouseEvent e)

{

fang.beginUp();

}

更加简单,也好理解。点一下方sir就飞啦

Game类的全部代码:

import javax.swing.*;import java.awt.*;import java.awt.event.*;public class Game implementsMouseListener {

Judge judge;

SimpleDraw draw;

Bing fang;

Obstacle obs;private static final int TIME = 10;private intscore;publicGame()

{

score= 0;

}public static voidmain(String [] args)

{

Game game= newGame();

game.setup();

game.start();

game.end();

}public voidsetup()

{

JFrame frame= newJFrame();

fang= new SimpleBing(200,200);

obs= new SimpleObstacle(600);

judge= newSimpleJudge(fang,obs);

draw= newSimpleDraw(fang,obs);

frame.getContentPane().add(draw);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

draw.addMouseListener(this);

frame.setSize(600,600);

frame.setVisible(true);

}public voidstart()

{int flag = 1;while (flag > 0)

{

fang.action();

obs.move();

flag=judge.isGameOver(fang,obs);if (flag == 2)

score++;

draw.draw();try{

Thread.sleep(TIME);

}catch(Exception e)

{}

}

}public voidend()

{

System.out.println("Your score is " +score);

}public voidmouseClicked(MouseEvent e)

{

}public voidmouseEntered(MouseEvent e) {}public voidmouseExited(MouseEvent e) {}public voidmousePressed(MouseEvent e)

{

fang.beginUp();

}public voidmouseReleased(MouseEvent e) {}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值