Итак, читая книгу "Программист-прагматик" я натолкнулся на совет смысл которого в следующем: "Всё, что вы пишите, засовывайте в систему контроля версий".
Я и раньше пользовался VCS(юзал git), но это было как то не системно + под Windows в VS это ещё и неудобно(ну неудобно мне каждый раз VS Command Promt вызывать и вбивать команды), поэтому я недавно стал использовать вместо Git Mercurial.
Основным доводам стало то, что для него существует GUI в виде TortoiseHg + плагин для VS VisualHG.
Всё это стояло, работало потихоньку, но сегодня я решил несколько более систематизировать и формализовать упр. своими сорцами.
Поэтому сделал в итоге следующее:
1) В корне диска W создал папку CODEBASE, в которой создал пустой репозиторий.
*весь код у меня находится на отдельном лог. диске
2) В важных для меня солюшенах создал репозитории и протолкнул их в репозиторий CODEBASE
*веткам в репозиториях солюшенов следует давать уникальные имена, иначе их не протолкнуть в общий реп.
3) Протолкнул CODEBASE на свой реп. в codeplex.
имхо, получилось довольно неплохо))
p.s. ну и в конце ссылочка на серию статей про Mercurial.
p.s.s. хотя наверно стоить сделать в итоге 2 репозитория общих... один - для расшаривания кода в нете, а 2й - локальное хранилище всего и вся.
четверг, 2 сентября 2010 г.
воскресенье, 29 августа 2010 г.
"Кости" в консоли на F#
небольшая "игрушка" написанная на F# с применением ООП...
написанная правда фигово с точки зрения того же ООП:)
смысл - посмотреть, как юзаются классы с F#)
написанная правда фигово с точки зрения того же ООП:)
смысл - посмотреть, как юзаются классы с F#)
module BoneGame open System open System.Collections.Generic #light type UserInterface () = member x.Roll : bool = printfn "Вы будете бросать кубик?" x.QuestYN member x.PrintState (data : list) : unit = for e in data do printfn "%s" <| e member x.QuestYN : bool = printf "Ваше решениие(Y или N): " match Console.ReadLine() with | "Y" | "y" -> true | "N" | "n" -> false | _ -> x.QuestYN member x.Win : unit = printfn "Поздравляем, Вы выйграли!!!" Console.ReadKey () |> ignore member x.Louse (name : string) : unit = printfn "Вы проиграли! Выйграл %s." name Console.ReadKey () |> ignore member x.GeneratePlayerList : list = printf "Введите имя игрока: " let name = Console.ReadLine() printfn "Будут ещё игроки?" if x.QuestYN then name :: x.GeneratePlayerList else [name] type Player (name : string, score : int, UI : UserInterface) = let name = name let ui = UI let mutable score = score member x.Name with get () = name member x.UI with get () = ui member x.Score with get () = score and set v = score <- v + score member x.Roll : bool = ui.Roll type Game () = let intrf = UserInterface () let mutable Players = new Queue () do let p_name = intrf.GeneratePlayerList for e in p_name do Players.Enqueue ( new Player (e, 0, intrf)) let max_score = 100 let bone_roll = (new Random (int(DateTime.Now.Ticks))).Next(1, 6) member x.Start : unit = let mutable end_flag = true while end_flag do // выбираем игрока, чья очередь бросать кости let current_player = Players.Dequeue () let mutable sum = 0 let mutable flag = true Console.Clear () // !!!!!!!!!!!!!! // выводим данные о игровой ситуации current_player.UI.PrintState ["Бросает " + current_player.Name; "Очков у игрока: " + current_player.Score.ToString (); "--------------------";] for e in Players do current_player.UI.PrintState ["Противник " + e.Name; "Очков " + e.Score.ToString ()] current_player.UI.PrintState ["--------------------"] Console.ReadKey () |> ignore Console.Clear () // бросок игрока current_player.UI.PrintState ["Будете бросать?"] while flag && current_player.Roll do let r = (new Random (int(DateTime.Now.Ticks))).Next(1, 6) current_player.UI.PrintState ["Вы выбросили " + r.ToString () + " очков"] if r <> 1 then sum <- sum + r current_player.UI.PrintState ["За ход вы набрали " + sum.ToString () + " очков"] else flag <- false sum <- 0 current_player.UI.PrintState ["К сожалению ваши очки, набранные за ход обнуляются"] Console.ReadKey () |> ignore current_player.Score <- sum // обрабатываем результаты броска if current_player.Score < max_score then Players.Enqueue (current_player) // продолжаем игру else current_player.UI.Win |> ignore for e in Players do e.UI.Louse |> ignore end_flag <- false [ ] let main _ = printfn "Приветствуем вас в игре Кости!" let G = new Game () G.Start Console.ReadKey() |> ignore 0
Подписаться на:
Сообщения (Atom)