// drNim

//  compile with "swiftc main.swift"

//  run with "./main"

//

//  Created by Coty Ryan Miller on 9/30/17.

//

// code inspired by -- https://www.youtube.com/watch?v=9KABcmczPdg

//

// Download binary for mac -- http://codercat.org/randCode/DrNim/main

// Download Swift file     -- http://codercat.org/randCode/DrNim/main.swift

// Download Gameplay .mov  -- http://codercat.org/randCode/DrNim/DrNim.mov

//

var drNimTurn = false

let numMarbles = 12

var marbles = numMarbles

var marble = 0

var usrIpt: String?


var playerWon = false

var DrNimWon  = false

var GameStart = false

/************************************************************************

 * Clear screen fuction.

 ***********************************************************************/

func clear(times: Int) {

    for _ in 1...times {

        print(" ")

    }

}

/************************************************************************

 * Introduction screen and "cheater" switch.

 ***********************************************************************/

while GameStart == false

{

    //clear() // clear the screen yo!

    print("Welcome to Nim with... Dr Nim!")

    print("Dr Nim has a PhD at playing Nim, so he's gonna win!")

    print(" ")

    print("How would you like to play?")

    print("")

    print("1. Play like a grown up. ;)")

    print("2. DR NIM CHEATS! STOP CHEATING! T_T")

    print("3. ... What is this?")


    clear(times: 16)                   // clear the screen again yo!

    

    print("> ", terminator:"")// terminator says all on the same line

                            // because for some reason we don't just

                            // print and println!

    let cryOption = readLine()

    

    if cryOption == "1"{GameStart = true}

    

    if cryOption == "2" {

        marbles = marbles - 1

        marble = marble + 1

        GameStart = true

    }

    if cryOption == "3" {

        print("Dr Nim soft edition.")

        print(" ")

        print("    Written by Coty R Miller on 30/9/17")

        print(" ")

        print("    - What is this?")

        print("          Nim is a game in where you take turns removing coins or marbles ")

        print("      choosing between 1 and 3 marbles/coins unil the winner removes the")

        print("      until the winner removes the last remain coin.")

        print("")

        print("    - Can I actually beat this on the normal game mode?")

        print("          That's a good question! No... No you cant.")

        print("")

        print("    - Am I alive?")

        print("          I sure hope so!")

        print("")

        print(" ")

        print("")

        print("")

        print("")

        print("")

        print("")

        print("")

        print("                         ...PRESS RETURN TO CONTINUE ...")

        

        let RETURNTOSHIT = readLine()

    }

}

/************************************************************************

 * Actual game loop.

 ***********************************************************************/

repeat {

    // print the number of marbles... using asterisks... because fuck it.

    print("[\(marbles)]", terminator:"")

    for i in 1...marbles {

        print(" *", terminator:"") // terminator says all on the same line

                                  // because for some reason we don't just

                                  // print and println!

    }

    clear(times: 23)               // clear the screen again yo!

    print("[1..3] > ", terminator:"")

    /********************************************************************

     * Read player input and process it.

     *******************************************************************/

    usrIpt = readLine()

    if usrIpt == "1"

    {

        marbles = marbles - 1

        marble = marble + 1

        drNimTurn = true

    }

    if usrIpt == "2"

    {

        marbles = marbles - 2

        marble = marble + 2

        drNimTurn = true

    }

    if usrIpt == "3"

    {

        marbles = marbles - 3

        marble = marble + 3

        drNimTurn = true

    }

    if marble >= 4

    {

        marble = 0

    }

    if(marbles==0)

    {

        playerWon = true

        drNimTurn = false

    }

    /********************************************************************

     * Actuall DR Nim "algorithm"

     *******************************************************************/

    if drNimTurn == true

    {

        marbles = marbles - 1

        marble = marble + 1

        // Loop while marble > 1 && marble < 4

        repeat {

            // Is marble 1? If so exit.

            if marble == 1 {

            drNimTurn = false

            // If marble isn't 1 then...

            } else {

                // Is marble a 4? If so reset the marble counter and exit...

                if marble == 4

                {

                    marble = 0

                    drNimTurn = false

                }

                    // Otherwise take a marble and INC the counter.

                else {

                    marbles = marbles - 1

                    marble = marble + 1

                }

            }

            if(marbles==0)

            {

                DrNimWon = true

            }

        } while drNimTurn == true

        marble = 0

}


} while marbles != 0

/************************************************************************

 * End Game Screen!

 ***********************************************************************/

if DrNimWon == true

{

    print("You lost to Dr Nim!")

}

if playerWon == true

{

    print("You won against Dr Nim! To bad you had to cry to get here...")

}