Смекни!
smekni.com

Обеспечение всемирной трансляции спортивных шахматных соревнований с применением разработанного в ходе проекта законченного программного продукта (стр. 19 из 27)

</tr>

<% end %>

</table>

Модель (model)

---

class Cities < ActiveRecord::Base

end

class City < ActiveRecord::Base

end

class ClockReglament < ActiveRecord::Base

end

class Country < ActiveRecord::Base

end

class CurrentGame < ActiveRecord::Base

def init

@game = Game.find(self.game_id) if @game.nil?

end

def tournament

init

@game.tournament

end

def white

init

@game.white_player

end

def black

init

@game.black_player

end

end

class Game < ActiveRecord::Base

def moves

result = ""

@moves = Move.find_all_by_game_id self.id

@moves.sort { |movea, moveb| movea.number <=> moveb.number }.each do |move|

result += move.to_s + "|"

end

result

end

def tournament

info = GameInfo.find self.game_info_id unless self.game_info_id.nil?

t = Tournament.find info.tournament_id

end

def white_player

player = Player.new

player.id= 1

player.first_name = "Иван"

player.second_name = "Рыков"

player

end

def black_player

player = Player.new

player.id= 1

player.first_name = "Сергей"

player.second_name = "Бедарев"

player

end

end

class GameInfo < ActiveRecord::Base

end

class LastMove < ActiveRecord::Base

end

class Move < ActiveRecord::Base

def to_s

((self.white_move.nil? or self.white_move == "") ? "******" : self.white_move) +

((self.black_move.nil? or self.black_move == "") ? "******" : self.black_move) + ":" +

(self.white_clock.nil? ? "" : self.white_clock) + "-" + (self.black_clock.nil? ? "" : self.black_clock)

end

end

class Player < ActiveRecord::Base

def full_name

return self.second_name + " " + self.first_name

end

def to_s

full_name

end

end

class Tournament < ActiveRecord::Base

def to_s

self.name

end

end

class TournamentView < ActiveRecord::Base

end

require 'digest/md5'

class User < ActiveRecord::Base

validates_presence_of :login

validates_uniqueness_of :login

def self.authenticate(login, password)

user = User.find_by_name(login)

if user

expected_password = encrypted_password(password)

if user.password != expected_password

user = nil

end

end

user

end

def self.encrypted_password(password)

Digest::MD5.hexdigest("sdjkvkjeho2ijij2o3d2kn3dl2kn3dn23dkn2ld3n" + password)

end

end

Миграция (db migration)

---

ActiveRecord::Schema.define(:version => 12) do

create_table "cities", :force => true do |t|

t.column "name", :string, :limit => 30

t.column "country_id", :integer

t.column "description", :text

t.column "image", :binary

end

create_table "clock_reglaments", :force => true do |t|

t.column "title", :string, :limit => 30

t.column "total_time", :integer

t.column "add", :boolean, :limit => nil, :default => false

t.column "add_time", :integer, :default => 0

t.column "desciprion", :text

end

create_table "countries", :force => true do |t|

t.column "name", :string, :limit => 30

t.column "code", :string, :limit => 30

t.column "image", :binary

t.column "description", :text

end

create_table "current_games", :force => true do |t|

t.column "game_id", :integer

t.column "begin", :datetime

t.column "end", :datetime

t.column "description", :text

end

create_table "game_infos", :force => true do |t|

t.column "game_id", :integer

t.column "white_id", :integer

t.column "black_id", :integer

t.column "tournament_id", :integer

t.column "result", :integer

t.column "clock_reglament_id", :integer

t.column "round", :integer

t.column "debut_code", :string, :limit => 30

t.column "description", :text

t.column "status", :string, :limit => 30

end

create_table "games", :force => true do |t|

t.column "game_info_id", :integer

t.column "begin", :datetime

t.column "end", :datetime

t.column "desciption", :text

end

create_table "last_moves", :force => true do |t|

t.column "move_id", :integer

t.column "move_time", :datetime

end

create_table "moves", :force => true do |t|

t.column "number", :integer

t.column "game_id", :integer

t.column "white_move", :string, :limit => 6

t.column "black_move", :string, :limit => 6

t.column "white_clock", :float

t.column "black_clock", :float

t.column "white_comment", :text

t.column "black_comment", :text

end

create_table "players", :force => true do |t|

t.column "first_name", :string, :limit => 30

t.column "second_name", :string, :limit => 30

t.column "country_id", :integer

t.column "burn_date", :datetime

t.column "fide_rating", :integer

t.column "photo", :binary

t.column "description", :text

end

create_table "tournament_views", :force => true do |t|

t.column "name", :string, :limit => 30

t.column "system", :string, :limit => 30

t.column "is_match", :boolean, :limit => nil, :default => false

t.column "is_command", :boolean, :limit => nil, :default => false

t.column "total_games", :integer, :default => 0

t.column "total_rounds", :integer, :default => 0

t.column "description", :text

end

create_table "tournaments", :force => true do |t|

t.column "name", :string, :limit => 30

t.column "category", :integer

t.column "city_id", :integer

t.column "begin_date", :datetime

t.column "end_date", :datetime

t.column "tournament_view_id", :integer

t.column "status", :string, :limit => 30

t.column "description", :text

end

create_table "users", :force => true do |t|

t.column "login", :string, :limit => 30

t.column "password", :string, :limit => 50

t.column "name", :string, :limit => 30

t.column "is_admin", :boolean, :limit => nil, :default => false

t.column "email", :string, :limit => 30

t.column "webpage", :string, :limit => 30

t.column "desciption", :text

end

end

Javascript (javascript) – осуществляют демонстрацию шахматной партии, при помощи технологии AJAX обращаясь за обновлениями позиции на rDGT сервер.

game.js

---

var images = 'http://localhost:3000/images/classic/';

var moves_url = '/main/game_moves/1';

// Фигура

function figure(id, color, type, current_field, last_field, alive, board) {

this.id = id;

this.color = color;

this.type = type;

this.current_field = current_field;

this.last_field = last_field;

this.alive = alive;

this.set_field = set_field;

this.do_move = do_move;

this.reload = reload;

this.img = document.createElement('img');

this.img.id = this.id;

this.board = board;

this.reload();

//trace('create figure [' + this.id + ']');

}

// Поле

function field(id, color, vertical, horizontal, figure, board) {

this.id = id;

this.color = color;

this.vertical = vertical;

this.horizontal = horizontal;

this.figure = figure;

this.board = board;

this.repaint = repaint;

//trace('create field [' + this.id + ']');

}

// Ход

function move(number, color, from_field, to_field, figure, alive_figure, is_short_castling, is_long_castling, prev_move, next_move, board, time) {

this.number = number;

this.color = color;

this.from_field = from_field;

this.to_field = to_field;

this.figure = figure;

this.alive_figure = alive_figure;

this.forward = forward;

this.backward = backward;

this.is_short_castling = is_short_castling;

this.is_long_castling = is_long_castling;

this.prev_move = prev_move;

this.next_move = next_move;

this.board = board;

this.white_time = white_time;

this.black_time = black_time;

}

// Коллекция ходов

function move_collection(board) {

this.board = board;

this.get_move = function(color, number) {

return color == 'white' ? this.moves[(number * 2) - 1] : this.moves[number * 2];

}

this.exists_move = function(color, number) {

return get_move(color, number) != null;

}

this.get_current_move = function() {

return this.current_move;

}

this.add_move = function(move) {

trace('add move: ' + move.number + " " + moveBy.color);

if(current_move == null) {

this.first_move = move;

this.current_move = move;

} else {

move.prev_move = this.current_move;

this.current_move.next_move = move;

this.current_move = move;

}

this.moves.push(move);

}

this.first_move = null;

this.current_move = null;

this.moves = new Array();

}

// Коллекция фигур

function figure_collection(board) {

this.board = board;

this.wpA = new figure('wpA', 'white', 'pawn', null, null, true, board);

this.wpB = new figure('wpB', 'white', 'pawn', null, null, true, board);

this.wpC = new figure('wpC', 'white', 'pawn', null, null, true, board);

this.wpD = new figure('wpD', 'white', 'pawn', null, null, true, board);

this.wpE = new figure('wpE', 'white', 'pawn', null, null, true, board);

this.wpF = new figure('wpF', 'white', 'pawn', null, null, true, board);

this.wpG = new figure('wpG', 'white', 'pawn', null, null, true, board);

this.wpH = new figure('wpH', 'white', 'pawn', null, null, true, board);

this.wrA = new figure('wrA', 'white', 'rook', null, null, true, board);

this.wrH = new figure('wrH', 'white', 'rook', null, null, true, board);

this.whB = new figure('whB', 'white', 'horse', null, null, true, board);

this.whG = new figure('whG', 'white', 'horse', null, null, true, board);

this.wbC = new figure('wbC', 'white', 'bishop', null, null, true, board);

this.wbF = new figure('wbF', 'white', 'bishop', null, null, true, board);

this.wq = new figure('wq', 'white', 'queen', null, null, true, board);

this.wk = new figure('wk', 'white', 'king', null, null, true, board);

this.bpA = new figure('bpA', 'black', 'pawn', null, null, true, board);

this.bpB = new figure('bpB', 'black', 'pawn', null, null, true, board);

this.bpC = new figure('bpC', 'black', 'pawn', null, null, true, board);

this.bpD = new figure('bpD', 'black', 'pawn', null, null, true, board);

this.bpE = new figure('bpE', 'black', 'pawn', null, null, true, board);

this.bpF = new figure('bpF', 'black', 'pawn', null, null, true, board);

this.bpG = new figure('bpG', 'black', 'pawn', null, null, true, board);

this.bpH = new figure('bpH', 'black', 'pawn', null, null, true, board);

this.brA = new figure('brA', 'black', 'rook', null, null, true, board);

this.brH = new figure('brH', 'black', 'rook', null, null, true, board);

this.bhB = new figure('bhB', 'black', 'horse', null, null, true, board);

this.bhG = new figure('bhG', 'black', 'horse', null, null, true, board);

this.bbC = new figure('bbC', 'black', 'bishop', null, null, true, board);

this.bbF = new figure('bbF', 'black', 'bishop', null, null, true, board);

this.bq = new figure('bq', 'black', 'queen', null, null, true, board);

this.bk = new figure('bk', 'black', 'king', null, null, true, board);

}

// Коллекция полей шахматной доски

function field_collection(board) {

this.get_field = get_field;

this.board = board;

this.toArray = function() {

return [this.A1, this.A2, this.A3, this.A4, this.A5, this.A6, this.A7, this.A8,

this.B1, this.B2, this.B3, this.B4, this.B5, this.B6, this.B7, this.B8,

this.C1, this.C2, this.C3, this.C4, this.C5, this.C6, this.C7, this.C8,

this.D1, this.D2, this.D3, this.D4, this.D5, this.D6, this.D7, this.D8,

this.E1, this.E2, this.E3, this.E4, this.E5, this.E6, this.E7, this.E8,

this.F1, this.F2, this.F3, this.F4, this.F5, this.F6, this.F7, this.F8,

this.G1, this.G2, this.G3, this.G4, this.G5, this.G6, this.G7, this.G8,

this.H1, this.H2, this.H3, this.H4, this.H5, this.H6, this.H7, this.H8];

}

this.A1 = new field('fieldA1', 'black', 'A', '1', null, board);

this.B1 = new field('fieldB1', 'white', 'B', '1', null, board);

this.C1 = new field('fieldC1', 'black', 'C', '1', null, board);

this.D1 = new field('fieldD1', 'white', 'D', '1', null, board);

this.E1 = new field('fieldE1', 'black', 'E', '1', null, board);

this.F1 = new field('fieldF1', 'white', 'F', '1', null, board);

this.G1 = new field('fieldG1', 'black', 'G', '1', null, board);

this.H1 = new field('fieldH1', 'white', 'H', '1', null, board);

this.A2 = new field('fieldA2', 'white', 'A', '2', null, board);

this.B2 = new field('fieldB2', 'black', 'B', '2', null, board);

this.C2 = new field('fieldC2', 'white', 'C', '2', null, board);

this.D2 = new field('fieldD2', 'black', 'D', '2', null, board);

this.E2 = new field('fieldE2', 'white', 'E', '2', null, board);

this.F2 = new field('fieldF2', 'black', 'F', '2', null, board);

this.G2 = new field('fieldG2', 'white', 'G', '2', null, board);

this.H2 = new field('fieldH2', 'black', 'H', '2', null, board);

this.A3 = new field('fieldA3', 'black', 'A', '3', null, board);

this.B3 = new field('fieldB3', 'white', 'B', '3', null, board);

this.C3 = new field('fieldC3', 'black', 'C', '3', null, board);

this.D3 = new field('fieldD3', 'white', 'D', '3', null, board);

this.E3 = new field('fieldE3', 'black', 'E', '3', null, board);

this.F3 = new field('fieldF3', 'white', 'F', '3', null, board);

this.G3 = new field('fieldG3', 'black', 'G', '3', null, board);

this.H3 = new field('fieldH3', 'white', 'H', '3', null, board);