</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);