2010-03-21 2 views
2

Я пишу приложение для оценки мостов (карточная игра) как практика в javascript, и я ищу предложения о том, как настроить мои объекты. Я довольно новичок в OO в целом и хотел бы узнать, как и почему люди будут структурировать программу для этого («опрос» порождает знак CW. Кроме того, я буду счастлив закрыть это, если он выходит за пределы допустимого диапазона типичного обсуждения SO).Какие объекты будут определены в приложении для подсчета мостов (Javascript)

Платформа будет веб-приложением для webkit на iPhone, поэтому локальное хранилище является опцией. Моя основная структура такова:

var Team = { 
    player1: , 
    player2: , 
    vulnerable: , //this is a flag for whether or 
        //not you've lost a game yet, affects scoring 
    scoreAboveLine: , 
    scoreBelowLine: 
    gamesWon: 
}; 

var Game = { 
    init: ,//function to get old scores and teams from DB 
    currentBid: , 
    score: , //function to accept whether bid was made and apply to Teams{} 
    save: //auto-run that is called after each game to commit to DB 
}; 

Поэтому в основном я инстанцирует две команды, а затем запустить петли game.currentBid() и game.score. Функционально скоринг работает нормально, но мне интересно, может ли это так, как кто-то другой захочет разбить счет Моста, и если есть какие-то недочеты, которые я сделал в отношении OO-ness и как я отвлекся игра.

Спасибо!

+0

Помогло бы, если бы вы дали краткое резюме о том, как работает скоринга моста. Хотя из того, что у меня есть стадо, и мост не часто идут вместе :) –

ответ

1

Прежде всего, немного расслабитесь, если ваш код работает, то вы явно не сделали этого неправильно, но ваш код может не быть OO в том смысле, в котором вы хотели этого. Я предполагаю, что то, что вы хотите достичь, это нечто вроде стиля Java OO.

JavaScript позволяет использовать практически любой стиль кодирования, в частности, объекты JavaScript могут использоваться многими способами, я полагаю, вы знакомы с наиболее простым способом добавления и изменения полей динамически. Я не знаю вашего уровня, но вы не должны пытаться писать OO-код, прежде чем у вас будут основы.

var foo={} //Create a new object and assign it to the identifier foo 
foo.bar=5 //Add a property by giving it a value 

Другое дело, что важно для понимания JavaScript OO мудры является то, что любой объект также является переменной сфера, и любая переменная сфера также является объектом. Действительно, можно изменить текущую область действия на область объекта.

with(foo){ 
    alert(bar) //If bar is a property of foo, it's value will be shown 
} 

Обратите внимание, что обычно не рекомендуется использовать инструкцию типа с этим, это просто демонстрация концепции.

OO-ness обычно достигается с помощью функции в качестве конструктора. В рамках типичной функции конструктора возводятся два объекта/области действия: один для частных переменных и методов и один для общедоступных переменных и методов. Мы можем просто использовать собственные возможности функций для частной области (в отличие от любого другого языка, который я знаю, область функций будет сохраняться после завершения функции). Для общего объема мы просто создадим новый объект.

function Team(player1,player2){ 
    var pub={} //The public object 
    var vulnerable=false //A private field declaration 
    pub.gamesWon=0 //A public field declaration 
    pub.makeVulnerable=function(){ //A public method 
     vulnerable=true 
    } 
    var methodname=function(){ 
     //A private method 
    } 
    pub.teamName=player1+" and "+palyer2 //Code that is run when the object is created 
    return pub //Return the public object so that it may be used from outside the function 
} 

Теперь мы можем возвести новый член класса Team просто путем вызова функции.

teams=[] 
teams[0]=Team("Joe","Johanna") 
teams[1]=Team("Mike","George") 
//etc. 

Вы, вероятно, также сделать класс игры, принимая две команды и счет игры в качестве аргументов, он может обновить классы команды сразу и сохранить все детали для последующего использования.

 Смежные вопросы

  • Нет связанных вопросов^_^