Итак, читая книгу "Программист-прагматик" я натолкнулся на совет смысл которого в следующем: "Всё, что вы пишите, засовывайте в систему контроля версий".
Я и раньше пользовался 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)