Damage or Heal based on the buttons you press Planned maintenance scheduled April 23, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Road to MVC: the case of Settings Table View ControllerDetermining the number of days from todayImplementing the Hashable Protocol in Swift with the DJB hash functionUsing an Edit box in a table views header section to insert the values into the table using swiftAccessing a UIView's parent UIViewController using the UIResponder chainSettings the height of rows for multiple screens within a TableViewControllerAllow UITextView to resize as the user is typingMaking a TableViewDataSource more independent of the data it utilizesSwift/iOS component for label with clickable text buttonsA quiz to practice some of the notion of the chapter four of app development with swift

Is it possible for SQL statements to execute concurrently within a single session in SQL Server?

What would you call this weird metallic apparatus that allows you to lift people?

Drawing spherical mirrors

Random body shuffle every night—can we still function?

Antipodal Land Area Calculation

How do I find out the mythology and history of my Fortress?

Maximum summed subsequences with non-adjacent items

Semigroups with no morphisms between them

Has negative voting ever been officially implemented in elections, or seriously proposed, or even studied?

Do wooden building fires get hotter than 600°C?

What makes a man succeed?

How to report t statistic from R

How fail-safe is nr as stop bytes?

Why are vacuum tubes still used in amateur radios?

How to compare two different files line by line in unix?

How would a mousetrap for use in space work?

Is it fair for a professor to grade us on the possession of past papers?

Is it possible to force a specific program to remain in memory after closing it?

What are the discoveries that have been possible with the rejection of positivism?

Why weren't discrete x86 CPUs ever used in game hardware?

Is multiple magic items in one inherently imbalanced?

Why does it sometimes sound good to play a grace note as a lead in to a note in a melody?

What order were files/directories output in dir?

How does Belgium enforce obligatory attendance in elections?



Damage or Heal based on the buttons you press



Planned maintenance scheduled April 23, 2019 at 00:00UTC (8:00pm US/Eastern)
Announcing the arrival of Valued Associate #679: Cesar Manara
Unicorn Meta Zoo #1: Why another podcast?Road to MVC: the case of Settings Table View ControllerDetermining the number of days from todayImplementing the Hashable Protocol in Swift with the DJB hash functionUsing an Edit box in a table views header section to insert the values into the table using swiftAccessing a UIView's parent UIViewController using the UIResponder chainSettings the height of rows for multiple screens within a TableViewControllerAllow UITextView to resize as the user is typingMaking a TableViewDataSource more independent of the data it utilizesSwift/iOS component for label with clickable text buttonsA quiz to practice some of the notion of the chapter four of app development with swift



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








0












$begingroup$


If you press the damage button, it will damage armor before health. If you press the heal button, it will heal armor before health.



The project is here: https://github.com/austingaee/DamageHealth-Armor



Are there any improvements I can make?



import UIKit

class ViewController: UIViewController


@IBOutlet weak var armorBarView: UIView!

@IBOutlet weak var healthBarView: UIView!

var damageAmount : Float = 0.0
var healAmount : Float = 0.0

//Maximum Health
var barAmount : Float = 0.0

override func viewDidLoad()
super.viewDidLoad()

damageAmount = Float(self.armorBarView.frame.size.width) * 0.10
healAmount = Float(self.armorBarView.frame.size.width) * 0.05
barAmount = Float(self.armorBarView.frame.size.width)


override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.


@IBAction func damageBar(_ sender: UIButton)
//7.63 came from how much damage was left after 10 hits
if self.armorBarView.frame.size.width > 7.63
self.armorBarView.frame.size.width -= CGFloat(damageAmount)
else if self.healthBarView.frame.size.width > 7.63
self.healthBarView.frame.size.width -= CGFloat(damageAmount)



@IBAction func healBar(_ sender: Any)
if self.armorBarView.frame.size.width < CGFloat(barAmount)
self.armorBarView.frame.size.width += CGFloat(healAmount)
print(self.armorBarView.frame.size.width)
else if self.healthBarView.frame.size.width < CGFloat(barAmount)
self.healthBarView.frame.size.width += CGFloat(healAmount)













share|improve this question











$endgroup$




bumped to the homepage by Community 10 mins ago


This question has answers that may be good or bad; the system has marked it active so that they can be reviewed.














  • $begingroup$
    Is it okay to post a link to my github?
    $endgroup$
    – austingae
    Aug 7 '18 at 23:04










  • $begingroup$
    Yes it is fine.
    $endgroup$
    – Badhan Ganesh
    Aug 9 '18 at 10:48

















0












$begingroup$


If you press the damage button, it will damage armor before health. If you press the heal button, it will heal armor before health.



The project is here: https://github.com/austingaee/DamageHealth-Armor



Are there any improvements I can make?



import UIKit

class ViewController: UIViewController


@IBOutlet weak var armorBarView: UIView!

@IBOutlet weak var healthBarView: UIView!

var damageAmount : Float = 0.0
var healAmount : Float = 0.0

//Maximum Health
var barAmount : Float = 0.0

override func viewDidLoad()
super.viewDidLoad()

damageAmount = Float(self.armorBarView.frame.size.width) * 0.10
healAmount = Float(self.armorBarView.frame.size.width) * 0.05
barAmount = Float(self.armorBarView.frame.size.width)


override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.


@IBAction func damageBar(_ sender: UIButton)
//7.63 came from how much damage was left after 10 hits
if self.armorBarView.frame.size.width > 7.63
self.armorBarView.frame.size.width -= CGFloat(damageAmount)
else if self.healthBarView.frame.size.width > 7.63
self.healthBarView.frame.size.width -= CGFloat(damageAmount)



@IBAction func healBar(_ sender: Any)
if self.armorBarView.frame.size.width < CGFloat(barAmount)
self.armorBarView.frame.size.width += CGFloat(healAmount)
print(self.armorBarView.frame.size.width)
else if self.healthBarView.frame.size.width < CGFloat(barAmount)
self.healthBarView.frame.size.width += CGFloat(healAmount)













share|improve this question











$endgroup$




bumped to the homepage by Community 10 mins ago


This question has answers that may be good or bad; the system has marked it active so that they can be reviewed.














  • $begingroup$
    Is it okay to post a link to my github?
    $endgroup$
    – austingae
    Aug 7 '18 at 23:04










  • $begingroup$
    Yes it is fine.
    $endgroup$
    – Badhan Ganesh
    Aug 9 '18 at 10:48













0












0








0





$begingroup$


If you press the damage button, it will damage armor before health. If you press the heal button, it will heal armor before health.



The project is here: https://github.com/austingaee/DamageHealth-Armor



Are there any improvements I can make?



import UIKit

class ViewController: UIViewController


@IBOutlet weak var armorBarView: UIView!

@IBOutlet weak var healthBarView: UIView!

var damageAmount : Float = 0.0
var healAmount : Float = 0.0

//Maximum Health
var barAmount : Float = 0.0

override func viewDidLoad()
super.viewDidLoad()

damageAmount = Float(self.armorBarView.frame.size.width) * 0.10
healAmount = Float(self.armorBarView.frame.size.width) * 0.05
barAmount = Float(self.armorBarView.frame.size.width)


override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.


@IBAction func damageBar(_ sender: UIButton)
//7.63 came from how much damage was left after 10 hits
if self.armorBarView.frame.size.width > 7.63
self.armorBarView.frame.size.width -= CGFloat(damageAmount)
else if self.healthBarView.frame.size.width > 7.63
self.healthBarView.frame.size.width -= CGFloat(damageAmount)



@IBAction func healBar(_ sender: Any)
if self.armorBarView.frame.size.width < CGFloat(barAmount)
self.armorBarView.frame.size.width += CGFloat(healAmount)
print(self.armorBarView.frame.size.width)
else if self.healthBarView.frame.size.width < CGFloat(barAmount)
self.healthBarView.frame.size.width += CGFloat(healAmount)













share|improve this question











$endgroup$




If you press the damage button, it will damage armor before health. If you press the heal button, it will heal armor before health.



The project is here: https://github.com/austingaee/DamageHealth-Armor



Are there any improvements I can make?



import UIKit

class ViewController: UIViewController


@IBOutlet weak var armorBarView: UIView!

@IBOutlet weak var healthBarView: UIView!

var damageAmount : Float = 0.0
var healAmount : Float = 0.0

//Maximum Health
var barAmount : Float = 0.0

override func viewDidLoad()
super.viewDidLoad()

damageAmount = Float(self.armorBarView.frame.size.width) * 0.10
healAmount = Float(self.armorBarView.frame.size.width) * 0.05
barAmount = Float(self.armorBarView.frame.size.width)


override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.


@IBAction func damageBar(_ sender: UIButton)
//7.63 came from how much damage was left after 10 hits
if self.armorBarView.frame.size.width > 7.63
self.armorBarView.frame.size.width -= CGFloat(damageAmount)
else if self.healthBarView.frame.size.width > 7.63
self.healthBarView.frame.size.width -= CGFloat(damageAmount)



@IBAction func healBar(_ sender: Any)
if self.armorBarView.frame.size.width < CGFloat(barAmount)
self.armorBarView.frame.size.width += CGFloat(healAmount)
print(self.armorBarView.frame.size.width)
else if self.healthBarView.frame.size.width < CGFloat(barAmount)
self.healthBarView.frame.size.width += CGFloat(healAmount)










swift ios cocoa






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Aug 8 '18 at 0:27









200_success

131k17157422




131k17157422










asked Aug 7 '18 at 23:03









austingaeaustingae

575115




575115





bumped to the homepage by Community 10 mins ago


This question has answers that may be good or bad; the system has marked it active so that they can be reviewed.







bumped to the homepage by Community 10 mins ago


This question has answers that may be good or bad; the system has marked it active so that they can be reviewed.













  • $begingroup$
    Is it okay to post a link to my github?
    $endgroup$
    – austingae
    Aug 7 '18 at 23:04










  • $begingroup$
    Yes it is fine.
    $endgroup$
    – Badhan Ganesh
    Aug 9 '18 at 10:48
















  • $begingroup$
    Is it okay to post a link to my github?
    $endgroup$
    – austingae
    Aug 7 '18 at 23:04










  • $begingroup$
    Yes it is fine.
    $endgroup$
    – Badhan Ganesh
    Aug 9 '18 at 10:48















$begingroup$
Is it okay to post a link to my github?
$endgroup$
– austingae
Aug 7 '18 at 23:04




$begingroup$
Is it okay to post a link to my github?
$endgroup$
– austingae
Aug 7 '18 at 23:04












$begingroup$
Yes it is fine.
$endgroup$
– Badhan Ganesh
Aug 9 '18 at 10:48




$begingroup$
Yes it is fine.
$endgroup$
– Badhan Ganesh
Aug 9 '18 at 10:48










1 Answer
1






active

oldest

votes


















0












$begingroup$

not so much but some tiny changes:



DRY



i just would avoid all the self.healthBarView.frame.size.width



and make methods:



  • getWidth


  • setWidth(or updateWidth because you set the diff)

Constants



the magic numbers like 0.1 0.05 10 i would define as constants so it can changed only at one place. 7.63 i would calculate



Naming



rename barAmount to maxAmount



create minAmount



Float/CGFloat



the Float / CGFloat is realy needed? just put them also into getWidth and updateWidth



else if



the else if block is not needed (same condition)



7.63



this is an value depending on your setup - it should also calculated so it not changes when you init it with different width



Resulting Code



import UIKit

class ViewController: UIViewController


@IBOutlet weak var armorBarView: UIView!

@IBOutlet weak var healthBarView: UIView!

var damageAmount : Float = 0.0
var healAmount : Float = 0.0

// Min/Maximum Health
var minAmount: Float = 0.00
var maxAmount : Float = 0.0

// how much damage was left after this number of hits
let minAmountHits:Float = 10

let demageFactor: Float = 0.10
let healFactor: Float = 0.05

override func viewDidLoad()
super.viewDidLoad()

initAmount()


override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()


func initAmount()
damageAmount = getWidth() * demageFactor
healAmount = getWidth() * healFactor
maxAmount = getWidth()
minAmount = maxAmount - minAmountHits * damageAmount


@IBAction func damageBar(_ sender: UIButton)
if getWidth() > minAmount
updateWidth(-damageAmount)



@IBAction func healBar(_ sender: Any)
if getWidth() < maxAmount
updateWidth(healAmount)



func getWidth() -> Float
return Float(self.armorBarView.frame.size.width)


func updateWidth(_ amount: Float)
self.healthBarView.frame.size.width += CGFloat(amount)
print(self.armorBarView.frame.size.width)







share|improve this answer











$endgroup$













    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "196"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f201168%2fdamage-or-heal-based-on-the-buttons-you-press%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0












    $begingroup$

    not so much but some tiny changes:



    DRY



    i just would avoid all the self.healthBarView.frame.size.width



    and make methods:



    • getWidth


    • setWidth(or updateWidth because you set the diff)

    Constants



    the magic numbers like 0.1 0.05 10 i would define as constants so it can changed only at one place. 7.63 i would calculate



    Naming



    rename barAmount to maxAmount



    create minAmount



    Float/CGFloat



    the Float / CGFloat is realy needed? just put them also into getWidth and updateWidth



    else if



    the else if block is not needed (same condition)



    7.63



    this is an value depending on your setup - it should also calculated so it not changes when you init it with different width



    Resulting Code



    import UIKit

    class ViewController: UIViewController


    @IBOutlet weak var armorBarView: UIView!

    @IBOutlet weak var healthBarView: UIView!

    var damageAmount : Float = 0.0
    var healAmount : Float = 0.0

    // Min/Maximum Health
    var minAmount: Float = 0.00
    var maxAmount : Float = 0.0

    // how much damage was left after this number of hits
    let minAmountHits:Float = 10

    let demageFactor: Float = 0.10
    let healFactor: Float = 0.05

    override func viewDidLoad()
    super.viewDidLoad()

    initAmount()


    override func didReceiveMemoryWarning()
    super.didReceiveMemoryWarning()


    func initAmount()
    damageAmount = getWidth() * demageFactor
    healAmount = getWidth() * healFactor
    maxAmount = getWidth()
    minAmount = maxAmount - minAmountHits * damageAmount


    @IBAction func damageBar(_ sender: UIButton)
    if getWidth() > minAmount
    updateWidth(-damageAmount)



    @IBAction func healBar(_ sender: Any)
    if getWidth() < maxAmount
    updateWidth(healAmount)



    func getWidth() -> Float
    return Float(self.armorBarView.frame.size.width)


    func updateWidth(_ amount: Float)
    self.healthBarView.frame.size.width += CGFloat(amount)
    print(self.armorBarView.frame.size.width)







    share|improve this answer











    $endgroup$

















      0












      $begingroup$

      not so much but some tiny changes:



      DRY



      i just would avoid all the self.healthBarView.frame.size.width



      and make methods:



      • getWidth


      • setWidth(or updateWidth because you set the diff)

      Constants



      the magic numbers like 0.1 0.05 10 i would define as constants so it can changed only at one place. 7.63 i would calculate



      Naming



      rename barAmount to maxAmount



      create minAmount



      Float/CGFloat



      the Float / CGFloat is realy needed? just put them also into getWidth and updateWidth



      else if



      the else if block is not needed (same condition)



      7.63



      this is an value depending on your setup - it should also calculated so it not changes when you init it with different width



      Resulting Code



      import UIKit

      class ViewController: UIViewController


      @IBOutlet weak var armorBarView: UIView!

      @IBOutlet weak var healthBarView: UIView!

      var damageAmount : Float = 0.0
      var healAmount : Float = 0.0

      // Min/Maximum Health
      var minAmount: Float = 0.00
      var maxAmount : Float = 0.0

      // how much damage was left after this number of hits
      let minAmountHits:Float = 10

      let demageFactor: Float = 0.10
      let healFactor: Float = 0.05

      override func viewDidLoad()
      super.viewDidLoad()

      initAmount()


      override func didReceiveMemoryWarning()
      super.didReceiveMemoryWarning()


      func initAmount()
      damageAmount = getWidth() * demageFactor
      healAmount = getWidth() * healFactor
      maxAmount = getWidth()
      minAmount = maxAmount - minAmountHits * damageAmount


      @IBAction func damageBar(_ sender: UIButton)
      if getWidth() > minAmount
      updateWidth(-damageAmount)



      @IBAction func healBar(_ sender: Any)
      if getWidth() < maxAmount
      updateWidth(healAmount)



      func getWidth() -> Float
      return Float(self.armorBarView.frame.size.width)


      func updateWidth(_ amount: Float)
      self.healthBarView.frame.size.width += CGFloat(amount)
      print(self.armorBarView.frame.size.width)







      share|improve this answer











      $endgroup$















        0












        0








        0





        $begingroup$

        not so much but some tiny changes:



        DRY



        i just would avoid all the self.healthBarView.frame.size.width



        and make methods:



        • getWidth


        • setWidth(or updateWidth because you set the diff)

        Constants



        the magic numbers like 0.1 0.05 10 i would define as constants so it can changed only at one place. 7.63 i would calculate



        Naming



        rename barAmount to maxAmount



        create minAmount



        Float/CGFloat



        the Float / CGFloat is realy needed? just put them also into getWidth and updateWidth



        else if



        the else if block is not needed (same condition)



        7.63



        this is an value depending on your setup - it should also calculated so it not changes when you init it with different width



        Resulting Code



        import UIKit

        class ViewController: UIViewController


        @IBOutlet weak var armorBarView: UIView!

        @IBOutlet weak var healthBarView: UIView!

        var damageAmount : Float = 0.0
        var healAmount : Float = 0.0

        // Min/Maximum Health
        var minAmount: Float = 0.00
        var maxAmount : Float = 0.0

        // how much damage was left after this number of hits
        let minAmountHits:Float = 10

        let demageFactor: Float = 0.10
        let healFactor: Float = 0.05

        override func viewDidLoad()
        super.viewDidLoad()

        initAmount()


        override func didReceiveMemoryWarning()
        super.didReceiveMemoryWarning()


        func initAmount()
        damageAmount = getWidth() * demageFactor
        healAmount = getWidth() * healFactor
        maxAmount = getWidth()
        minAmount = maxAmount - minAmountHits * damageAmount


        @IBAction func damageBar(_ sender: UIButton)
        if getWidth() > minAmount
        updateWidth(-damageAmount)



        @IBAction func healBar(_ sender: Any)
        if getWidth() < maxAmount
        updateWidth(healAmount)



        func getWidth() -> Float
        return Float(self.armorBarView.frame.size.width)


        func updateWidth(_ amount: Float)
        self.healthBarView.frame.size.width += CGFloat(amount)
        print(self.armorBarView.frame.size.width)







        share|improve this answer











        $endgroup$



        not so much but some tiny changes:



        DRY



        i just would avoid all the self.healthBarView.frame.size.width



        and make methods:



        • getWidth


        • setWidth(or updateWidth because you set the diff)

        Constants



        the magic numbers like 0.1 0.05 10 i would define as constants so it can changed only at one place. 7.63 i would calculate



        Naming



        rename barAmount to maxAmount



        create minAmount



        Float/CGFloat



        the Float / CGFloat is realy needed? just put them also into getWidth and updateWidth



        else if



        the else if block is not needed (same condition)



        7.63



        this is an value depending on your setup - it should also calculated so it not changes when you init it with different width



        Resulting Code



        import UIKit

        class ViewController: UIViewController


        @IBOutlet weak var armorBarView: UIView!

        @IBOutlet weak var healthBarView: UIView!

        var damageAmount : Float = 0.0
        var healAmount : Float = 0.0

        // Min/Maximum Health
        var minAmount: Float = 0.00
        var maxAmount : Float = 0.0

        // how much damage was left after this number of hits
        let minAmountHits:Float = 10

        let demageFactor: Float = 0.10
        let healFactor: Float = 0.05

        override func viewDidLoad()
        super.viewDidLoad()

        initAmount()


        override func didReceiveMemoryWarning()
        super.didReceiveMemoryWarning()


        func initAmount()
        damageAmount = getWidth() * demageFactor
        healAmount = getWidth() * healFactor
        maxAmount = getWidth()
        minAmount = maxAmount - minAmountHits * damageAmount


        @IBAction func damageBar(_ sender: UIButton)
        if getWidth() > minAmount
        updateWidth(-damageAmount)



        @IBAction func healBar(_ sender: Any)
        if getWidth() < maxAmount
        updateWidth(healAmount)



        func getWidth() -> Float
        return Float(self.armorBarView.frame.size.width)


        func updateWidth(_ amount: Float)
        self.healthBarView.frame.size.width += CGFloat(amount)
        print(self.armorBarView.frame.size.width)








        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Aug 22 '18 at 20:18

























        answered Aug 22 '18 at 20:04









        mueschamuescha

        1765




        1765



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Code Review Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            Use MathJax to format equations. MathJax reference.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f201168%2fdamage-or-heal-based-on-the-buttons-you-press%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            名間水力發電廠 目录 沿革 設施 鄰近設施 註釋 外部連結 导航菜单23°50′10″N 120°42′41″E / 23.83611°N 120.71139°E / 23.83611; 120.7113923°50′10″N 120°42′41″E / 23.83611°N 120.71139°E / 23.83611; 120.71139計畫概要原始内容臺灣第一座BOT 模式開發的水力發電廠-名間水力電廠名間水力發電廠 水利署首件BOT案原始内容《小檔案》名間電廠 首座BOT水力發電廠原始内容名間電廠BOT - 經濟部水利署中區水資源局

            格濟夫卡 參考資料 导航菜单51°3′40″N 34°2′21″E / 51.06111°N 34.03917°E / 51.06111; 34.03917ГезівкаПогода в селі 编辑或修订