CarController.java
作成: JBuilder
package matsubara.carcontroller;

/**
 * 

タイトル: Car Controller

*

説明: クルマの制御・トランスミッションなどを制御する

*

著作権: Copyright (c) 2002 m.matsubara

* @author m.matsubara * @version 1.0.2 */ public abstract class CarController { String m_sShiftPosition; boolean m_bParkingBrake; double m_rOdoMeter = 0; // オドメーター(リセット不可) double m_rTripMeter = 0; // トリップメーター(リセット可) double m_rAcceleration = 0; // 加速度 double m_rFuel = 50; // 燃料残量(仮の値なので派生クラスでオーバーライドしたほうが良い) double m_rFuelEfficiency = 0; public CarController() { m_sShiftPosition = "N"; // Nポジションならたいていの車についているだろう(牽引しなきゃいけないから)。派生クラスで上書き推奨。 m_bParkingBrake = false; } /** * シフトポジション * ShiftPosition の値として実際にどのような値があるかはサブクラスに依存する * "P","R","N","D","3","2","L" や "1","2","3","4","5","R","N" など * @return シフトポジション */ public String getShiftPosition() { return m_sShiftPosition; } /** * シフトポジションの設定 * @param sShiftPosition シフトポジション */ public void setShiftPosition(String sShiftPosition) { m_sShiftPosition = sShiftPosition; } /** * パーキングブレーキの状態を取得 * @return パーキングブレーキを使用している間 true */ public boolean isParkingBrake() { return m_bParkingBrake; } /** * パーキングブレーキの状態を設定 * @param bParkingBrake */ public void setParkingBkare(boolean bParkingBrake) { m_bParkingBrake = bParkingBrake; } /** * 燃料残量を取得 * @return 燃料残量(L) */ public double getFuel() { return m_rFuel; } /** * 燃料残量を設定 * @param rFuel 燃料残量(L) */ public void setFuel(double rFuel) { m_rFuel = rFuel; } /** * 車の状態をシミュレートする * オドメーター、トリップメーター、燃料消費量もここで計算される * @param rMilliSec 経過秒数 * @param nAccel アクセルの踏み込み量(%) * @param nBrake ブレーキの踏み込み量(%) */ final public void drive(double rMilliSec, int nAccel, int nBrake) { double rLastSpeed = getSpeed(); // 派生クラスでの実装を呼び出す driveInternal(rMilliSec, nAccel, nBrake); // オドメーターとトリップメーター double rSpeed = Math.abs(getSpeed()); m_rOdoMeter += rSpeed * rMilliSec / (1000 * 60 * 60); m_rTripMeter += rSpeed * rMilliSec / (1000 * 60 * 60); m_rAcceleration = (getSpeed() - rLastSpeed) * 1000 / 3600 / (rMilliSec / 1000); // m/s2 // 燃費計算 double rUseFuel = getUseFuel(rMilliSec); if (rSpeed != 0) { if (rUseFuel != 0) m_rFuelEfficiency = (Math.abs(getSpeed()) / 3600 / 1000 * rMilliSec) / rUseFuel; else m_rFuelEfficiency = Double.POSITIVE_INFINITY; if (m_rFuelEfficiency > 99.9) m_rFuelEfficiency = java.lang.Double.POSITIVE_INFINITY; } else m_rFuelEfficiency = 0; // 燃料残量 m_rFuel -= rUseFuel; if (m_rFuel < 0) m_rFuel = 0; } /** * drive メソッドより呼び出される * 各サブクラスで実際に車の動作をシミュレートする * @param rMilliSec 経過秒数 * @param nAccel アクセルの踏み込み量(%) * @param nBrake ブレーキの踏み込み量(%) */ protected abstract void driveInternal(double rMilliSec, int nAccel, int nBrake); /** * 車速を取得する * @return 車速(km/h) */ public abstract double getSpeed(); /** * エンジン回転数を取得する * @return エンジン回転数(rpm) */ public abstract double getEngineRpm(); /** * 前の drive メソッドで消費された燃料(L) * サブクラスで実装されるべき * 燃費計算のサポートは不要なら実装しなくても良いが、可能ならサブクラスでオーバーライドするべき * @param rMilliSec * @return 燃料使用量(L) */ protected double getUseFuel(double rMilliSec) { return 0; // } /** * オドメーター値を取得する * @return オドメーター値(km) */ public int getOdoMeter() { return (int)m_rOdoMeter; } /** * トリップメーター値を取得する * @return トリップメーター値(km) */ public double getTripMeter() { return m_rTripMeter; } /** * トリップメーターをリセットする */ public void resetTripMeter() { m_rTripMeter = 0; } /** * 直前のdriveメソッドで呼び出されたときの加速度(m/s2)を取得する * @return 加速度(m/s2)・・・1秒間に加速した速度(m/s) */ public double getAcceleration() { return m_rAcceleration; } /** * 直前のdriveメソッドで呼び出されたときの燃費(km/L)を取得する * このメソッドが正しく動作するには getUseFuel がきちんと実装されていなければならない * @return 燃費(km/L) */ public double getFuelEfficiency() { return m_rFuelEfficiency; } }
CarController.java
作成: JBuilder








aaa