Author: hhubner Date: 2007-10-04 17:34:36 -0400 (Thu, 04 Oct 2007) New Revision: 2211
Added: branches/trunk-reorg/bknr/projects/scrabble/ branches/trunk-reorg/bknr/projects/scrabble/scrabble_05.jpg branches/trunk-reorg/bknr/projects/scrabble/src/ branches/trunk-reorg/bknr/projects/scrabble/src/load.lisp branches/trunk-reorg/bknr/projects/scrabble/src/make-html.lisp branches/trunk-reorg/bknr/projects/scrabble/src/make-letters.lisp branches/trunk-reorg/bknr/projects/scrabble/src/package.lisp branches/trunk-reorg/bknr/projects/scrabble/src/scrabble-test.lisp branches/trunk-reorg/bknr/projects/scrabble/src/scrabble.asd branches/trunk-reorg/bknr/projects/scrabble/src/scrabble.lisp branches/trunk-reorg/bknr/projects/scrabble/src/setup-registry.lisp branches/trunk-reorg/bknr/projects/scrabble/website/ branches/trunk-reorg/bknr/projects/scrabble/website/de/ branches/trunk-reorg/bknr/projects/scrabble/website/de/A.png branches/trunk-reorg/bknr/projects/scrabble/website/de/B.png branches/trunk-reorg/bknr/projects/scrabble/website/de/C.png branches/trunk-reorg/bknr/projects/scrabble/website/de/D.png branches/trunk-reorg/bknr/projects/scrabble/website/de/E.png branches/trunk-reorg/bknr/projects/scrabble/website/de/F.png branches/trunk-reorg/bknr/projects/scrabble/website/de/G.png branches/trunk-reorg/bknr/projects/scrabble/website/de/H.png branches/trunk-reorg/bknr/projects/scrabble/website/de/I.png branches/trunk-reorg/bknr/projects/scrabble/website/de/J.png branches/trunk-reorg/bknr/projects/scrabble/website/de/K.png branches/trunk-reorg/bknr/projects/scrabble/website/de/L.png branches/trunk-reorg/bknr/projects/scrabble/website/de/LATIN_CAPITAL_LETTER_A_WITH_DIAERESIS.png branches/trunk-reorg/bknr/projects/scrabble/website/de/LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS.png branches/trunk-reorg/bknr/projects/scrabble/website/de/LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS.png branches/trunk-reorg/bknr/projects/scrabble/website/de/M.png branches/trunk-reorg/bknr/projects/scrabble/website/de/N.png branches/trunk-reorg/bknr/projects/scrabble/website/de/NIL.png branches/trunk-reorg/bknr/projects/scrabble/website/de/O.png branches/trunk-reorg/bknr/projects/scrabble/website/de/P.png branches/trunk-reorg/bknr/projects/scrabble/website/de/Q.png branches/trunk-reorg/bknr/projects/scrabble/website/de/R.png branches/trunk-reorg/bknr/projects/scrabble/website/de/S.png branches/trunk-reorg/bknr/projects/scrabble/website/de/T.png branches/trunk-reorg/bknr/projects/scrabble/website/de/U.png branches/trunk-reorg/bknr/projects/scrabble/website/de/V.png branches/trunk-reorg/bknr/projects/scrabble/website/de/W.png branches/trunk-reorg/bknr/projects/scrabble/website/de/X.png branches/trunk-reorg/bknr/projects/scrabble/website/de/Y.png branches/trunk-reorg/bknr/projects/scrabble/website/de/Z.png branches/trunk-reorg/bknr/projects/scrabble/website/de/double-letter.png branches/trunk-reorg/bknr/projects/scrabble/website/de/double-word.png branches/trunk-reorg/bknr/projects/scrabble/website/de/scrabble.css branches/trunk-reorg/bknr/projects/scrabble/website/de/standard.png branches/trunk-reorg/bknr/projects/scrabble/website/de/test.html branches/trunk-reorg/bknr/projects/scrabble/website/de/triple-letter.png branches/trunk-reorg/bknr/projects/scrabble/website/de/triple-word.png Log: Add Scrabble project
Added: branches/trunk-reorg/bknr/projects/scrabble/scrabble_05.jpg =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/scrabble_05.jpg ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/src/load.lisp =================================================================== --- branches/trunk-reorg/bknr/projects/scrabble/src/load.lisp 2007-10-04 21:08:36 UTC (rev 2210) +++ branches/trunk-reorg/bknr/projects/scrabble/src/load.lisp 2007-10-04 21:34:36 UTC (rev 2211) @@ -0,0 +1,5 @@ +(in-package :cl-user) + +(load (merge-pathnames #p"../thirdparty/asdf.lisp" *load-truename*)) + +(load (merge-pathnames #p"setup-registry.lisp" *load-truename*)) \ No newline at end of file
Added: branches/trunk-reorg/bknr/projects/scrabble/src/make-html.lisp =================================================================== --- branches/trunk-reorg/bknr/projects/scrabble/src/make-html.lisp 2007-10-04 21:08:36 UTC (rev 2210) +++ branches/trunk-reorg/bknr/projects/scrabble/src/make-html.lisp 2007-10-04 21:34:36 UTC (rev 2211) @@ -0,0 +1,16 @@ + +(in-package :scrabble) + +(defun make-playfield-html () + (format t "<div id='playfield'>~%") + (dotimes (x 15) + (dotimes (y 15) + (format t " <div id='field-~A-~A'/><img src='A.png'/></div>~%" + x y))) + (format t "</div>~%")) + +(defun make-playfield-css () + (dotimes (x 15) + (dotimes (y 15) + (format t "#playfield #field-~A-~A { background-image: url(~(~A.png~)); left: ~A; top: ~A }~%" + x y (field-type x y) (* 44 x) (* 44 y))))) \ No newline at end of file
Added: branches/trunk-reorg/bknr/projects/scrabble/src/make-letters.lisp =================================================================== --- branches/trunk-reorg/bknr/projects/scrabble/src/make-letters.lisp 2007-10-04 21:08:36 UTC (rev 2210) +++ branches/trunk-reorg/bknr/projects/scrabble/src/make-letters.lisp 2007-10-04 21:34:36 UTC (rev 2211) @@ -0,0 +1,72 @@ + +(in-package :scrabble.graphics) + +(defparameter *special-tile-texts* (make-hash-table)) + +(setf (gethash :de *special-tile-texts*) + '(:double-letter "DOPPELTER\nBUCHSTABEN\nWERT" + :double-word "DOPPELTER\nWORT\nWERT" + :triple-letter "DREIFACHER\nBUCHSTABEN\nWERT" + :triple-word "DREIFACHER\nWORT\nWERT")) + +(defparameter *special-tile-colors* + '(:double-letter (0.53 0.8 0.94) + :double-word (0.97 0.67 0.6) + :triple-letter (0.0 0.62 0.87) + :triple-word (0.93 0.11 0.18) + :standard (0.0 0.59 0.57))) + +(defparameter *bold-font* #.(merge-pathnames #p"../fonts/DIN/DINMd___.ttf" *default-pathname-defaults*)) +(defparameter *regular-font* #.(merge-pathnames #p"../fonts/DIN/DINRg___.ttf" *default-pathname-defaults*)) + +(defun make-letter-tile (char score) + (with-canvas (:width 34 :height 34) + (let ((bold-font (get-font *bold-font*)) + (regular-font (get-font *regular-font*)) + (char-string (make-string 1 :initial-element char))) + (set-rgb-fill 1.0 0.98 0.8) + (rounded-rectangle 0 0 34 34 4 4) + (fill-path) + (set-rgb-fill 0 0 0) + (set-font bold-font 27) + (draw-centered-string 13 7 char-string) + (set-font regular-font 11) + (draw-centered-string 26 3 (princ-to-string score)) + (save-png (make-pathname :name char-string :type "png"))))) + +(defun make-letter-tile-set (language) + (dolist (entry (gethash language *tile-sets*)) + (destructuring-bind (letter score count) entry + (declare (ignore count)) + (make-letter-tile letter score)))) + +(defun make-special-tile (name color &key text star) + (with-canvas (:width 40 :height 40) + (let ((regular-font (get-font *regular-font*))) + (apply #'set-rgb-fill color) + (rounded-rectangle 0 0 40 40 5 5) + (fill-path) + (set-rgb-fill 0 0 0) + (cond + (text + (set-font regular-font 6) + (draw-centered-string 26 3 text)) + (star + )) + (save-png (make-pathname :name (string-downcase (symbol-name name)) :type "png"))))) + +(defun make-special-tile-set (language) + (dolist (tile-name '(:double-letter :double-word :triple-letter :triple-word)) + (make-special-tile tile-name + (getf *special-tile-colors* tile-name) + :text (getf (gethash language *special-tile-texts*) tile-name))) + (make-special-tile :standard (getf *special-tile-colors* :standard) :star t)) + + +(defun make-tile-set (language) + (let ((*default-pathname-defaults* (merge-pathnames + (make-pathname :directory (list :relative + (string-downcase (symbol-name language))))))) + (ensure-directories-exist *default-pathname-defaults*) + (make-letter-tile-set language) + (make-special-tile-set language))) \ No newline at end of file
Added: branches/trunk-reorg/bknr/projects/scrabble/src/package.lisp =================================================================== --- branches/trunk-reorg/bknr/projects/scrabble/src/package.lisp 2007-10-04 21:08:36 UTC (rev 2210) +++ branches/trunk-reorg/bknr/projects/scrabble/src/package.lisp 2007-10-04 21:34:36 UTC (rev 2211) @@ -0,0 +1,11 @@ + +(defpackage :scrabble + (:use :cl :alexandria :anaphora) + (:export "*BOARD-SCORING*" + "*TILE-SETS*" + "FIELD-TYPE")) + +(defpackage :scrabble.graphics + (:use :cl :alexandria :vecto :scrabble) + (:shadowing-import-from :vecto "ROTATE")) + \ No newline at end of file
Added: branches/trunk-reorg/bknr/projects/scrabble/src/scrabble-test.lisp =================================================================== --- branches/trunk-reorg/bknr/projects/scrabble/src/scrabble-test.lisp 2007-10-04 21:08:36 UTC (rev 2210) +++ branches/trunk-reorg/bknr/projects/scrabble/src/scrabble-test.lisp 2007-10-04 21:34:36 UTC (rev 2211) @@ -0,0 +1,23 @@ + +(defun test-adjacent () + (let ((board (make-array '(15 15) :initial-element nil))) + (check-adjacent board 7 7) + (handler-case + (check-adjacent board 0 0) + (not-touching-other-tile (e) + (declare (ignore e)))) + (setf (aref board 7 7) t) + (handler-case + (check-adjacent board 7 7) + (tile-placed-on-occupied-field (e) + (declare (ignore e)))) + (check-adjacent board 6 7) + (check-adjacent board 7 6) + (check-adjacent board 8 7) + (check-adjacent board 7 8) + (setf (aref board 0 0) t) + (check-adjacent board 0 1) + (check-adjacent board 1 0) + (setf (aref board 14 14) t) + (check-adjacent board 14 13) + (check-adjacent board 13 14)))
Added: branches/trunk-reorg/bknr/projects/scrabble/src/scrabble.asd =================================================================== --- branches/trunk-reorg/bknr/projects/scrabble/src/scrabble.asd 2007-10-04 21:08:36 UTC (rev 2210) +++ branches/trunk-reorg/bknr/projects/scrabble/src/scrabble.asd 2007-10-04 21:34:36 UTC (rev 2211) @@ -0,0 +1,18 @@ +;;;; -*- lisp -*- + +(in-package :cl-user) + +(defpackage :scrabble.system + (:use :cl :asdf)) + +(in-package :scrabble.system) + +(defsystem :scrabble + :name "Scrabble" + :licence "BSD" + :depends-on (:bknr-datastore :vecto :alexandria :anaphora) + :serial t + :components ((:file "package") + (:file "scrabble") + (:file "make-html") + (:file "make-letters")))
Added: branches/trunk-reorg/bknr/projects/scrabble/src/scrabble.lisp =================================================================== --- branches/trunk-reorg/bknr/projects/scrabble/src/scrabble.lisp 2007-10-04 21:08:36 UTC (rev 2210) +++ branches/trunk-reorg/bknr/projects/scrabble/src/scrabble.lisp 2007-10-04 21:34:36 UTC (rev 2211) @@ -0,0 +1,293 @@ +(in-package :scrabble) + +(defparameter *board-scoring* + #2A((:triple-word nil nil :double-letter nil nil nil :triple-word nil nil nil :double-letter nil nil :triple-word) + (nil :double-word nil nil nil :triple-letter nil nil nil :triple-letter nil nil nil :double-word nil) + (nil nil :double-word nil nil nil :double-letter nil :double-letter nil nil nil :double-word nil nil) + (:double-letter nil nil :double-word nil nil nil :double-letter nil nil nil :double-word nil nil :double-letter) + (nil nil nil nil :double-word nil nil nil nil nil :double-word nil nil nil nil) + (nil :triple-letter nil nil nil :triple-letter nil nil nil :triple-letter nil nil nil :triple-letter nil) + (nil nil :double-letter nil nil nil :double-letter nil :double-letter nil nil nil :double-letter nil nil) + (:triple-word nil nil :double-letter nil nil nil :triple-word nil nil nil :double-letter nil nil :triple-word) + (nil nil :double-letter nil nil nil :double-letter nil :double-letter nil nil nil :double-letter nil nil) + (nil :triple-letter nil nil nil :triple-letter nil nil nil :triple-letter nil nil nil :triple-letter nil) + (nil nil nil nil :double-word nil nil nil nil nil :double-word nil nil nil nil) + (:double-letter nil nil :double-word nil nil nil :double-letter nil nil nil :double-word nil nil :double-letter) + (nil nil :double-word nil nil nil :double-letter nil :double-letter nil nil nil :double-word nil nil) + (nil :double-word nil nil nil :triple-letter nil nil nil :triple-letter nil nil nil :double-word nil) + (:triple-word nil nil :double-letter nil nil nil :triple-word nil nil nil :double-letter nil nil :triple-word))) + +(defun field-type (x y) + (or (aref *board-scoring* x y) + :standard)) + +(defparameter *tile-sets* (make-hash-table)) + +(setf (gethash :de *tile-sets*) + '((#\A 1 5) + (#\B 3 2) + (#\C 4 2) + (#\D 1 4) + (#\E 1 15) + (#\F 4 2) + (#\G 2 3) + (#\H 2 4) + (#\I 1 6) + (#\J 6 1) + (#\K 4 2) + (#\L 2 3) + (#\M 3 4) + (#\N 1 9) + (#\O 2 3) + (#\P 4 1) + (#\Q 10 1) + (#\R 1 6) + (#\S 1 7) + (#\T 1 6) + (#\U 1 6) + (#\V 6 1) + (#\W 3 1) + (#\X 8 1) + (#\Y 10 1) + (#\Z 3 1) + #-cmu (#\LATIN_CAPITAL_LETTER_A_WITH_DIAERESIS 6 1) + #-cmu (#\LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS 8 1) + #-cmu (#\LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS 6 1) + (nil 0 2))) + +(define-condition invalid-move (simple-error) + () + (:report (lambda (c stream) + (format stream "Invalid move: ~A" (type-of c))))) + +(defun seq (from to) + (loop for i from from upto to + collect i)) + +(defun positions-between (start-position end-position) + (if (= (first start-position) + (first end-position)) + (mapcar (lambda (y) (list (first start-position) y)) + (seq (second start-position) (second end-position))) + (mapcar (lambda (x) (list x (second start-position))) + (seq (first start-position) (first end-position))))) + +(defclass tile-placement () + ((x :reader x-of :initarg :x) + (y :reader y-of :initarg :y) + (tile :reader tile-of :initarg :tile)) + (:documentation "Represents placement of a letter tile on the board")) + +(defun make-tile-placement (x y tile) + (make-instance 'tile-placement :x x :y y :tile tile)) + +(defun make-tile-placements (list-of-moves) + (mapcar (curry #'apply 'make-tile-placement) list-of-moves)) + +(defmethod equal-position ((tile-placement-1 tile-placement) (tile-placement-2 tile-placement)) + (and (= (x-of tile-placement-1) (x-of tile-placement-2)) + (= (y-of tile-placement-1) (y-of tile-placement-2)))) + +(defmethod position-equal ((position list) (tile-placement tile-placement)) + "Return non-nil if the given POSITION is at the position of PLACED-TILE" + (and (= (first position) (x-of tile-placement)) + (= (second position) (y-of tile-placement)))) + +(defmethod position-< ((a tile-placement) (b tile-placement)) + "Compare positions of placements, for sorting" + (or (< (x-of a) (x-of b)) + (< (y-of a) (y-of b)))) + +(defclass board () + ((placed-tiles :accessor placed-tiles-of :initform (make-array '(15 15) :initial-element nil)))) + +(defmethod print-object ((board board) stream) + (print-unreadable-object (board stream :type t :identity t) + (terpri stream) + (dotimes (x 15) + (dotimes (y 15) + (format stream "~C " (aif (at-xy board x y) (char-of it) #.))) + (terpri stream)))) + +(defmethod at-xy ((board board) x y) + (aref (placed-tiles-of board) x y)) + +(defmethod at-placement ((board board) tile-placement) + (at-xy board (x-of tile-placement) (y-of tile-placement))) + +(defmethod put-letter ((board board) tile x y) + (setf (aref (placed-tiles-of board) x y) tile)) + +(defclass tile () + ((char :reader char-of :initarg :char) + (value :reader value-of :initarg :value))) + +(defmethod print-object ((tile tile) stream) + (print-unreadable-object (tile stream :type t :identity nil) + (with-slots (char value) tile + (format stream "~A (~A)" char value)))) + +(defun make-tile (char value) + (make-instance 'tile :char char :value value)) + +(defclass tile-bag () + ((tiles :initarg :tiles :accessor tiles-of))) + +(defmethod remaining-tile-count ((tile-bag tile-bag)) + (fill-pointer (tiles-of tile-bag))) + +(defmethod print-object ((tile-bag tile-bag) stream) + (print-unreadable-object (tile-bag stream :type t :identity t) + (format stream "~A letters remaining" (remaining-tile-count tile-bag)))) + +(defun make-tile-bag (language) + (let ((tiles (make-array 102 :adjustable t :fill-pointer 0))) + (mapcar (lambda (entry) + (destructuring-bind (char value count) entry + (dotimes (i count) + (vector-push-extend (make-tile char value) tiles)))) + (or (gethash language *tile-sets*) + (error "language ~A not defined" language))) + (dotimes (i (fill-pointer tiles)) + (let ((tmp (aref tiles i)) + (random-index (random (fill-pointer tiles)))) + (setf (aref tiles i) (aref tiles random-index)) + (setf (aref tiles random-index) tmp))) + (make-instance 'tile-bag :tiles tiles))) + +(define-condition no-tiles-remaining (simple-error) + ()) + +(defmethod draw-tile ((tile-bag tile-bag)) + (unless (plusp (remaining-tile-count tile-bag)) + (error 'no-tiles-remaining)) + (with-slots (tiles) tile-bag + (prog1 + (aref tiles (1- (fill-pointer tiles))) + (decf (fill-pointer tiles))))) + +(defmethod placed-tile-adjacent ((board board) (tile-placement tile-placement)) + "Check whether the given TILE-PLACEMENT on the board is adjacent to +another tile or if it is the start position." + (with-accessors ((x x-of) (y y-of)) + tile-placement + (or (and (eql x 7) + (eql y 7)) + (and (plusp x) + (at-xy board (1- x) y)) + (and (plusp y) + (at-xy board x (1- y))) + (and (< x 14) + (at-xy board (1+ x) y)) + (and (< y 14) + (at-xy board x (1+ y)))))) + +(defun placed-or-being-placed (board placed-tiles position) + (or (at-xy board (first position) (second position)) + (awhen (find position placed-tiles :test #'position-equal) + (values (tile-of it) t)))) + +(define-condition not-touching-other-tile (invalid-move) ()) +(define-condition not-in-a-row (invalid-move) ()) +(define-condition placed-on-occupied-field (invalid-move) ()) +(define-condition no-tile-placed (invalid-move) ()) +(define-condition multiple-letters-placed-on-one-field (invalid-move) ()) +(define-condition placement-with-holes (invalid-move) ()) + +(defun check-move-legality (board placed-tiles) + "Verify that placing the PLACED-TILES on BOARD is a legal Scrabble +move. If the move is not valid, a specific INVALID-MOVE condition is +signalled. Otherwise, t is returned." + (unless placed-tiles + (error 'no-tile-placed)) + + (unless (or (apply #'= (mapcar #'x-of placed-tiles)) + (apply #'= (mapcar #'y-of placed-tiles))) + (error 'not-in-a-row)) + + (when (some (curry #'at-placement board) placed-tiles) + (error 'tile-placed-on-occupied-field)) + + (unless (equal placed-tiles + (remove-duplicates placed-tiles :test #'equal-position)) + (error 'multiple-letters-placed-on-one-field)) + + (let* ((placed-tiles (sort (copy-list placed-tiles) #'position-<)) + (start-of-placement (first placed-tiles)) + (end-of-placement (first (last placed-tiles)))) + (unless (every (curry 'placed-or-being-placed board placed-tiles) + (positions-between (list (x-of start-of-placement) (y-of start-of-placement)) + (list (x-of end-of-placement) (y-of end-of-placement)))) + (error 'placement-with-holes))) + + (unless (or (find '(7 7) placed-tiles :test #'position-equal) + (some (curry #'placed-tile-adjacent board) placed-tiles)) + (error 'not-touching-other-tile)) + + t) + +(defun words-formed% (board placed-tiles verticalp) + "Scan for words that would be formed by placing PLACED-TILES on +BOARD. VERTICALP determines the scan order, if nil, the board is +scanned horizontally, else vertically. This is called by WORDS-FORMED +below, see there for a description of the return value format." + (let (words) + (dotimes (x 15) + (when (find x placed-tiles :key (if verticalp #'y-of #'x-of) :test #'=) + (let (word is-new-word) + (dotimes (y 15) + (multiple-value-bind (placed-tile being-placed) (placed-or-being-placed board placed-tiles (if verticalp (list y x) (list x y))) + (when (and word (null placed-tile)) + (when (and (cdr word) is-new-word) + (push (nreverse word) words)) + (setf word nil is-new-word nil)) + (when placed-tile + (push (list placed-tile (and being-placed (field-type x y))) word) + (when being-placed + (setf is-new-word t))))) + (when (and (cdr word) is-new-word) + (push (nreverse word) words))))) + (nreverse words))) + +(defun words-formed (board placed-tiles) + "Return list of all words formed by placing the tiles in +PLACED-TILES on the BOARD. Returns each word as a list, with each +letter of the word represented by a list (TILE FIELD-TYPE). TILE is +the tile for the letter, FIELD-TYPE is either the field type of the +field that the letter has been placed on, or NIL if the tile was +already on the board." + (append (words-formed% board placed-tiles nil) + (words-formed% board placed-tiles t))) + +(defun word-score (word-result) + "Process one word result from WORDS-FORMED and calculate the score +for the word." + (let ((factor 1) + (value 0)) + (dolist (entry word-result) + (destructuring-bind (tile field-type) entry + (incf value (value-of tile)) + (case field-type + ((:double-letter) (incf value (value-of tile))) + ((:triple-letter) (incf value (* 2 (value-of tile)))) + ((:double-word) (setf factor (* factor 2))) + ((:triple-word) (setf factor (* factor 3)))))) + (* value factor))) + +(defun word-text (word-result) + "Convert the letter in a word result returned by WORDS-FORMED to a +string." + (coerce (mapcar (compose #'char-of #'car) word-result) 'string)) + +(defun make-move (board placed-tiles) + "Actually perform a move. BOARD contains the already placed tiles, +PLACED-TILES contains the letters for the move to make. BOARD is +modified to include the tiles placed. Returns the two values that +CALCULATE-SCORE returns for the move." + (check-move-legality board placed-tiles) + (prog1 + (mapcar (lambda (word-result) + (list (word-text word-result) (word-score word-result))) + (words-formed board placed-tiles)) + (dolist (placed-tile placed-tiles) + (put-letter board (tile-of placed-tile) (x-of placed-tile) (y-of placed-tile)))))
Added: branches/trunk-reorg/bknr/projects/scrabble/src/setup-registry.lisp =================================================================== --- branches/trunk-reorg/bknr/projects/scrabble/src/setup-registry.lisp 2007-10-04 21:08:36 UTC (rev 2210) +++ branches/trunk-reorg/bknr/projects/scrabble/src/setup-registry.lisp 2007-10-04 21:34:36 UTC (rev 2211) @@ -0,0 +1,14 @@ +(in-package :cl-user) + +(defun setup-registry (directory-path) + (format t "; adding components under ~A to asdf registry~%" directory-path) + (mapc #'(lambda (asd-pathname) + (pushnew (make-pathname :name nil + :type nil + :version nil + :defaults asd-pathname) + asdf:*central-registry* + :test #'equal)) + (directory (merge-pathnames #p"**/*.asd" directory-path)))) + +(setup-registry (merge-pathnames #p"../thirdparty/" *load-truename*)) \ No newline at end of file
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/A.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/A.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/B.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/B.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/C.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/C.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/D.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/D.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/E.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/E.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/F.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/F.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/G.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/G.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/H.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/H.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/I.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/I.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/J.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/J.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/K.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/K.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/L.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/L.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/LATIN_CAPITAL_LETTER_A_WITH_DIAERESIS.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/LATIN_CAPITAL_LETTER_A_WITH_DIAERESIS.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/M.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/M.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/N.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/N.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/NIL.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/NIL.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/O.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/O.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/P.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/P.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/Q.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/Q.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/R.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/R.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/S.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/S.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/T.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/T.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/U.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/U.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/V.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/V.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/W.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/W.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/X.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/X.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/Y.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/Y.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/Z.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/Z.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/double-letter.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/double-letter.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/double-word.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/double-word.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/scrabble.css =================================================================== --- branches/trunk-reorg/bknr/projects/scrabble/website/de/scrabble.css 2007-10-04 21:08:36 UTC (rev 2210) +++ branches/trunk-reorg/bknr/projects/scrabble/website/de/scrabble.css 2007-10-04 21:34:36 UTC (rev 2211) @@ -0,0 +1,228 @@ +#playfield { position: absolute } +#playfield div { position: absolute; width: 40px; height: 40px } +#playfield img { position: absolute; top: 3px; left: 3px } +#playfield #field-0-0 { background-image: url(triple-word.png); left: 0; top: 0 } +#playfield #field-0-1 { background-image: url(standard.png); left: 0; top: 44 } +#playfield #field-0-2 { background-image: url(standard.png); left: 0; top: 88 } +#playfield #field-0-3 { background-image: url(double-letter.png); left: 0; top: 132 } +#playfield #field-0-4 { background-image: url(standard.png); left: 0; top: 176 } +#playfield #field-0-5 { background-image: url(standard.png); left: 0; top: 220 } +#playfield #field-0-6 { background-image: url(standard.png); left: 0; top: 264 } +#playfield #field-0-7 { background-image: url(triple-word.png); left: 0; top: 308 } +#playfield #field-0-8 { background-image: url(standard.png); left: 0; top: 352 } +#playfield #field-0-9 { background-image: url(standard.png); left: 0; top: 396 } +#playfield #field-0-10 { background-image: url(standard.png); left: 0; top: 440 } +#playfield #field-0-11 { background-image: url(double-letter.png); left: 0; top: 484 } +#playfield #field-0-12 { background-image: url(standard.png); left: 0; top: 528 } +#playfield #field-0-13 { background-image: url(standard.png); left: 0; top: 572 } +#playfield #field-0-14 { background-image: url(triple-word.png); left: 0; top: 616 } +#playfield #field-1-0 { background-image: url(standard.png); left: 44; top: 0 } +#playfield #field-1-1 { background-image: url(double-word.png); left: 44; top: 44 } +#playfield #field-1-2 { background-image: url(standard.png); left: 44; top: 88 } +#playfield #field-1-3 { background-image: url(standard.png); left: 44; top: 132 } +#playfield #field-1-4 { background-image: url(standard.png); left: 44; top: 176 } +#playfield #field-1-5 { background-image: url(triple-letter.png); left: 44; top: 220 } +#playfield #field-1-6 { background-image: url(standard.png); left: 44; top: 264 } +#playfield #field-1-7 { background-image: url(standard.png); left: 44; top: 308 } +#playfield #field-1-8 { background-image: url(standard.png); left: 44; top: 352 } +#playfield #field-1-9 { background-image: url(triple-letter.png); left: 44; top: 396 } +#playfield #field-1-10 { background-image: url(standard.png); left: 44; top: 440 } +#playfield #field-1-11 { background-image: url(standard.png); left: 44; top: 484 } +#playfield #field-1-12 { background-image: url(standard.png); left: 44; top: 528 } +#playfield #field-1-13 { background-image: url(double-word.png); left: 44; top: 572 } +#playfield #field-1-14 { background-image: url(standard.png); left: 44; top: 616 } +#playfield #field-2-0 { background-image: url(standard.png); left: 88; top: 0 } +#playfield #field-2-1 { background-image: url(standard.png); left: 88; top: 44 } +#playfield #field-2-2 { background-image: url(double-word.png); left: 88; top: 88 } +#playfield #field-2-3 { background-image: url(standard.png); left: 88; top: 132 } +#playfield #field-2-4 { background-image: url(standard.png); left: 88; top: 176 } +#playfield #field-2-5 { background-image: url(standard.png); left: 88; top: 220 } +#playfield #field-2-6 { background-image: url(double-letter.png); left: 88; top: 264 } +#playfield #field-2-7 { background-image: url(standard.png); left: 88; top: 308 } +#playfield #field-2-8 { background-image: url(double-letter.png); left: 88; top: 352 } +#playfield #field-2-9 { background-image: url(standard.png); left: 88; top: 396 } +#playfield #field-2-10 { background-image: url(standard.png); left: 88; top: 440 } +#playfield #field-2-11 { background-image: url(standard.png); left: 88; top: 484 } +#playfield #field-2-12 { background-image: url(double-word.png); left: 88; top: 528 } +#playfield #field-2-13 { background-image: url(standard.png); left: 88; top: 572 } +#playfield #field-2-14 { background-image: url(standard.png); left: 88; top: 616 } +#playfield #field-3-0 { background-image: url(double-letter.png); left: 132; top: 0 } +#playfield #field-3-1 { background-image: url(standard.png); left: 132; top: 44 } +#playfield #field-3-2 { background-image: url(standard.png); left: 132; top: 88 } +#playfield #field-3-3 { background-image: url(double-word.png); left: 132; top: 132 } +#playfield #field-3-4 { background-image: url(standard.png); left: 132; top: 176 } +#playfield #field-3-5 { background-image: url(standard.png); left: 132; top: 220 } +#playfield #field-3-6 { background-image: url(standard.png); left: 132; top: 264 } +#playfield #field-3-7 { background-image: url(double-letter.png); left: 132; top: 308 } +#playfield #field-3-8 { background-image: url(standard.png); left: 132; top: 352 } +#playfield #field-3-9 { background-image: url(standard.png); left: 132; top: 396 } +#playfield #field-3-10 { background-image: url(standard.png); left: 132; top: 440 } +#playfield #field-3-11 { background-image: url(double-word.png); left: 132; top: 484 } +#playfield #field-3-12 { background-image: url(standard.png); left: 132; top: 528 } +#playfield #field-3-13 { background-image: url(standard.png); left: 132; top: 572 } +#playfield #field-3-14 { background-image: url(double-letter.png); left: 132; top: 616 } +#playfield #field-4-0 { background-image: url(standard.png); left: 176; top: 0 } +#playfield #field-4-1 { background-image: url(standard.png); left: 176; top: 44 } +#playfield #field-4-2 { background-image: url(standard.png); left: 176; top: 88 } +#playfield #field-4-3 { background-image: url(standard.png); left: 176; top: 132 } +#playfield #field-4-4 { background-image: url(double-word.png); left: 176; top: 176 } +#playfield #field-4-5 { background-image: url(standard.png); left: 176; top: 220 } +#playfield #field-4-6 { background-image: url(standard.png); left: 176; top: 264 } +#playfield #field-4-7 { background-image: url(standard.png); left: 176; top: 308 } +#playfield #field-4-8 { background-image: url(standard.png); left: 176; top: 352 } +#playfield #field-4-9 { background-image: url(standard.png); left: 176; top: 396 } +#playfield #field-4-10 { background-image: url(double-word.png); left: 176; top: 440 } +#playfield #field-4-11 { background-image: url(standard.png); left: 176; top: 484 } +#playfield #field-4-12 { background-image: url(standard.png); left: 176; top: 528 } +#playfield #field-4-13 { background-image: url(standard.png); left: 176; top: 572 } +#playfield #field-4-14 { background-image: url(standard.png); left: 176; top: 616 } +#playfield #field-5-0 { background-image: url(standard.png); left: 220; top: 0 } +#playfield #field-5-1 { background-image: url(triple-letter.png); left: 220; top: 44 } +#playfield #field-5-2 { background-image: url(standard.png); left: 220; top: 88 } +#playfield #field-5-3 { background-image: url(standard.png); left: 220; top: 132 } +#playfield #field-5-4 { background-image: url(standard.png); left: 220; top: 176 } +#playfield #field-5-5 { background-image: url(triple-letter.png); left: 220; top: 220 } +#playfield #field-5-6 { background-image: url(standard.png); left: 220; top: 264 } +#playfield #field-5-7 { background-image: url(standard.png); left: 220; top: 308 } +#playfield #field-5-8 { background-image: url(standard.png); left: 220; top: 352 } +#playfield #field-5-9 { background-image: url(triple-letter.png); left: 220; top: 396 } +#playfield #field-5-10 { background-image: url(standard.png); left: 220; top: 440 } +#playfield #field-5-11 { background-image: url(standard.png); left: 220; top: 484 } +#playfield #field-5-12 { background-image: url(standard.png); left: 220; top: 528 } +#playfield #field-5-13 { background-image: url(triple-letter.png); left: 220; top: 572 } +#playfield #field-5-14 { background-image: url(standard.png); left: 220; top: 616 } +#playfield #field-6-0 { background-image: url(standard.png); left: 264; top: 0 } +#playfield #field-6-1 { background-image: url(standard.png); left: 264; top: 44 } +#playfield #field-6-2 { background-image: url(double-letter.png); left: 264; top: 88 } +#playfield #field-6-3 { background-image: url(standard.png); left: 264; top: 132 } +#playfield #field-6-4 { background-image: url(standard.png); left: 264; top: 176 } +#playfield #field-6-5 { background-image: url(standard.png); left: 264; top: 220 } +#playfield #field-6-6 { background-image: url(double-letter.png); left: 264; top: 264 } +#playfield #field-6-7 { background-image: url(standard.png); left: 264; top: 308 } +#playfield #field-6-8 { background-image: url(double-letter.png); left: 264; top: 352 } +#playfield #field-6-9 { background-image: url(standard.png); left: 264; top: 396 } +#playfield #field-6-10 { background-image: url(standard.png); left: 264; top: 440 } +#playfield #field-6-11 { background-image: url(standard.png); left: 264; top: 484 } +#playfield #field-6-12 { background-image: url(double-letter.png); left: 264; top: 528 } +#playfield #field-6-13 { background-image: url(standard.png); left: 264; top: 572 } +#playfield #field-6-14 { background-image: url(standard.png); left: 264; top: 616 } +#playfield #field-7-0 { background-image: url(triple-word.png); left: 308; top: 0 } +#playfield #field-7-1 { background-image: url(standard.png); left: 308; top: 44 } +#playfield #field-7-2 { background-image: url(standard.png); left: 308; top: 88 } +#playfield #field-7-3 { background-image: url(double-letter.png); left: 308; top: 132 } +#playfield #field-7-4 { background-image: url(standard.png); left: 308; top: 176 } +#playfield #field-7-5 { background-image: url(standard.png); left: 308; top: 220 } +#playfield #field-7-6 { background-image: url(standard.png); left: 308; top: 264 } +#playfield #field-7-7 { background-image: url(triple-word.png); left: 308; top: 308 } +#playfield #field-7-8 { background-image: url(standard.png); left: 308; top: 352 } +#playfield #field-7-9 { background-image: url(standard.png); left: 308; top: 396 } +#playfield #field-7-10 { background-image: url(standard.png); left: 308; top: 440 } +#playfield #field-7-11 { background-image: url(double-letter.png); left: 308; top: 484 } +#playfield #field-7-12 { background-image: url(standard.png); left: 308; top: 528 } +#playfield #field-7-13 { background-image: url(standard.png); left: 308; top: 572 } +#playfield #field-7-14 { background-image: url(triple-word.png); left: 308; top: 616 } +#playfield #field-8-0 { background-image: url(standard.png); left: 352; top: 0 } +#playfield #field-8-1 { background-image: url(standard.png); left: 352; top: 44 } +#playfield #field-8-2 { background-image: url(double-letter.png); left: 352; top: 88 } +#playfield #field-8-3 { background-image: url(standard.png); left: 352; top: 132 } +#playfield #field-8-4 { background-image: url(standard.png); left: 352; top: 176 } +#playfield #field-8-5 { background-image: url(standard.png); left: 352; top: 220 } +#playfield #field-8-6 { background-image: url(double-letter.png); left: 352; top: 264 } +#playfield #field-8-7 { background-image: url(standard.png); left: 352; top: 308 } +#playfield #field-8-8 { background-image: url(double-letter.png); left: 352; top: 352 } +#playfield #field-8-9 { background-image: url(standard.png); left: 352; top: 396 } +#playfield #field-8-10 { background-image: url(standard.png); left: 352; top: 440 } +#playfield #field-8-11 { background-image: url(standard.png); left: 352; top: 484 } +#playfield #field-8-12 { background-image: url(double-letter.png); left: 352; top: 528 } +#playfield #field-8-13 { background-image: url(standard.png); left: 352; top: 572 } +#playfield #field-8-14 { background-image: url(standard.png); left: 352; top: 616 } +#playfield #field-9-0 { background-image: url(standard.png); left: 396; top: 0 } +#playfield #field-9-1 { background-image: url(triple-letter.png); left: 396; top: 44 } +#playfield #field-9-2 { background-image: url(standard.png); left: 396; top: 88 } +#playfield #field-9-3 { background-image: url(standard.png); left: 396; top: 132 } +#playfield #field-9-4 { background-image: url(standard.png); left: 396; top: 176 } +#playfield #field-9-5 { background-image: url(triple-letter.png); left: 396; top: 220 } +#playfield #field-9-6 { background-image: url(standard.png); left: 396; top: 264 } +#playfield #field-9-7 { background-image: url(standard.png); left: 396; top: 308 } +#playfield #field-9-8 { background-image: url(standard.png); left: 396; top: 352 } +#playfield #field-9-9 { background-image: url(triple-letter.png); left: 396; top: 396 } +#playfield #field-9-10 { background-image: url(standard.png); left: 396; top: 440 } +#playfield #field-9-11 { background-image: url(standard.png); left: 396; top: 484 } +#playfield #field-9-12 { background-image: url(standard.png); left: 396; top: 528 } +#playfield #field-9-13 { background-image: url(triple-letter.png); left: 396; top: 572 } +#playfield #field-9-14 { background-image: url(standard.png); left: 396; top: 616 } +#playfield #field-10-0 { background-image: url(standard.png); left: 440; top: 0 } +#playfield #field-10-1 { background-image: url(standard.png); left: 440; top: 44 } +#playfield #field-10-2 { background-image: url(standard.png); left: 440; top: 88 } +#playfield #field-10-3 { background-image: url(standard.png); left: 440; top: 132 } +#playfield #field-10-4 { background-image: url(double-word.png); left: 440; top: 176 } +#playfield #field-10-5 { background-image: url(standard.png); left: 440; top: 220 } +#playfield #field-10-6 { background-image: url(standard.png); left: 440; top: 264 } +#playfield #field-10-7 { background-image: url(standard.png); left: 440; top: 308 } +#playfield #field-10-8 { background-image: url(standard.png); left: 440; top: 352 } +#playfield #field-10-9 { background-image: url(standard.png); left: 440; top: 396 } +#playfield #field-10-10 { background-image: url(double-word.png); left: 440; top: 440 } +#playfield #field-10-11 { background-image: url(standard.png); left: 440; top: 484 } +#playfield #field-10-12 { background-image: url(standard.png); left: 440; top: 528 } +#playfield #field-10-13 { background-image: url(standard.png); left: 440; top: 572 } +#playfield #field-10-14 { background-image: url(standard.png); left: 440; top: 616 } +#playfield #field-11-0 { background-image: url(double-letter.png); left: 484; top: 0 } +#playfield #field-11-1 { background-image: url(standard.png); left: 484; top: 44 } +#playfield #field-11-2 { background-image: url(standard.png); left: 484; top: 88 } +#playfield #field-11-3 { background-image: url(double-word.png); left: 484; top: 132 } +#playfield #field-11-4 { background-image: url(standard.png); left: 484; top: 176 } +#playfield #field-11-5 { background-image: url(standard.png); left: 484; top: 220 } +#playfield #field-11-6 { background-image: url(standard.png); left: 484; top: 264 } +#playfield #field-11-7 { background-image: url(double-letter.png); left: 484; top: 308 } +#playfield #field-11-8 { background-image: url(standard.png); left: 484; top: 352 } +#playfield #field-11-9 { background-image: url(standard.png); left: 484; top: 396 } +#playfield #field-11-10 { background-image: url(standard.png); left: 484; top: 440 } +#playfield #field-11-11 { background-image: url(double-word.png); left: 484; top: 484 } +#playfield #field-11-12 { background-image: url(standard.png); left: 484; top: 528 } +#playfield #field-11-13 { background-image: url(standard.png); left: 484; top: 572 } +#playfield #field-11-14 { background-image: url(double-letter.png); left: 484; top: 616 } +#playfield #field-12-0 { background-image: url(standard.png); left: 528; top: 0 } +#playfield #field-12-1 { background-image: url(standard.png); left: 528; top: 44 } +#playfield #field-12-2 { background-image: url(double-word.png); left: 528; top: 88 } +#playfield #field-12-3 { background-image: url(standard.png); left: 528; top: 132 } +#playfield #field-12-4 { background-image: url(standard.png); left: 528; top: 176 } +#playfield #field-12-5 { background-image: url(standard.png); left: 528; top: 220 } +#playfield #field-12-6 { background-image: url(double-letter.png); left: 528; top: 264 } +#playfield #field-12-7 { background-image: url(standard.png); left: 528; top: 308 } +#playfield #field-12-8 { background-image: url(double-letter.png); left: 528; top: 352 } +#playfield #field-12-9 { background-image: url(standard.png); left: 528; top: 396 } +#playfield #field-12-10 { background-image: url(standard.png); left: 528; top: 440 } +#playfield #field-12-11 { background-image: url(standard.png); left: 528; top: 484 } +#playfield #field-12-12 { background-image: url(double-word.png); left: 528; top: 528 } +#playfield #field-12-13 { background-image: url(standard.png); left: 528; top: 572 } +#playfield #field-12-14 { background-image: url(standard.png); left: 528; top: 616 } +#playfield #field-13-0 { background-image: url(standard.png); left: 572; top: 0 } +#playfield #field-13-1 { background-image: url(double-word.png); left: 572; top: 44 } +#playfield #field-13-2 { background-image: url(standard.png); left: 572; top: 88 } +#playfield #field-13-3 { background-image: url(standard.png); left: 572; top: 132 } +#playfield #field-13-4 { background-image: url(standard.png); left: 572; top: 176 } +#playfield #field-13-5 { background-image: url(triple-letter.png); left: 572; top: 220 } +#playfield #field-13-6 { background-image: url(standard.png); left: 572; top: 264 } +#playfield #field-13-7 { background-image: url(standard.png); left: 572; top: 308 } +#playfield #field-13-8 { background-image: url(standard.png); left: 572; top: 352 } +#playfield #field-13-9 { background-image: url(triple-letter.png); left: 572; top: 396 } +#playfield #field-13-10 { background-image: url(standard.png); left: 572; top: 440 } +#playfield #field-13-11 { background-image: url(standard.png); left: 572; top: 484 } +#playfield #field-13-12 { background-image: url(standard.png); left: 572; top: 528 } +#playfield #field-13-13 { background-image: url(double-word.png); left: 572; top: 572 } +#playfield #field-13-14 { background-image: url(standard.png); left: 572; top: 616 } +#playfield #field-14-0 { background-image: url(triple-word.png); left: 616; top: 0 } +#playfield #field-14-1 { background-image: url(standard.png); left: 616; top: 44 } +#playfield #field-14-2 { background-image: url(standard.png); left: 616; top: 88 } +#playfield #field-14-3 { background-image: url(double-letter.png); left: 616; top: 132 } +#playfield #field-14-4 { background-image: url(standard.png); left: 616; top: 176 } +#playfield #field-14-5 { background-image: url(standard.png); left: 616; top: 220 } +#playfield #field-14-6 { background-image: url(standard.png); left: 616; top: 264 } +#playfield #field-14-7 { background-image: url(triple-word.png); left: 616; top: 308 } +#playfield #field-14-8 { background-image: url(standard.png); left: 616; top: 352 } +#playfield #field-14-9 { background-image: url(standard.png); left: 616; top: 396 } +#playfield #field-14-10 { background-image: url(standard.png); left: 616; top: 440 } +#playfield #field-14-11 { background-image: url(double-letter.png); left: 616; top: 484 } +#playfield #field-14-12 { background-image: url(standard.png); left: 616; top: 528 } +#playfield #field-14-13 { background-image: url(standard.png); left: 616; top: 572 } +#playfield #field-14-14 { background-image: url(triple-word.png); left: 616; top: 616 }
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/standard.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/standard.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/test.html =================================================================== --- branches/trunk-reorg/bknr/projects/scrabble/website/de/test.html 2007-10-04 21:08:36 UTC (rev 2210) +++ branches/trunk-reorg/bknr/projects/scrabble/website/de/test.html 2007-10-04 21:34:36 UTC (rev 2211) @@ -0,0 +1,268 @@ +<head> + <link rel="stylesheet" type="text/css" href="scrabble.css" /> +</head> +<body bgcolor="#004B36"> +<img src="A.png"/> +<img src="B.png"/> +<img src="C.png"/> +<img src="D.png"/> +<img src="E.png"/> +<img src="F.png"/> +<img src="G.png"/> +<img src="H.png"/> +<img src="I.png"/> +<img src="J.png"/> +<img src="K.png"/> +<img src="L.png"/> +<img src="M.png"/> +<img src="N.png"/> +<img src="O.png"/> +<img src="P.png"/> +<img src="Q.png"/> +<img src="R.png"/> +<img src="S.png"/> +<img src="T.png"/> +<img src="U.png"/> +<img src="V.png"/> +<img src="W.png"/> +<img src="X.png"/> +<img src="Y.png"/> +<img src="Z.png"/> +<img src="�.png"/> +<img src="�.png"/> +<img src="�.png"/> +<br> +<img src="double-letter.png"/> +<img src="double-word.png"/> +<img src="triple-letter.png"/> +<img src="triple-word.png"/> +<img src="standard.png"/> +<br/> +<div id='playfield'> + <div id='field-0-0'/></div> + <div id='field-0-1'/></div> + <div id='field-0-2'/></div> + <div id='field-0-3'/></div> + <div id='field-0-4'/></div> + <div id='field-0-5'/></div> + <div id='field-0-6'/></div> + <div id='field-0-7'/></div> + <div id='field-0-8'/></div> + <div id='field-0-9'/></div> + <div id='field-0-10'/></div> + <div id='field-0-11'/></div> + <div id='field-0-12'/></div> + <div id='field-0-13'/></div> + <div id='field-0-14'/></div> + <div id='field-1-0'/></div> + <div id='field-1-1'/></div> + <div id='field-1-2'/></div> + <div id='field-1-3'/></div> + <div id='field-1-4'/></div> + <div id='field-1-5'/></div> + <div id='field-1-6'/></div> + <div id='field-1-7'/></div> + <div id='field-1-8'/></div> + <div id='field-1-9'/></div> + <div id='field-1-10'/></div> + <div id='field-1-11'/></div> + <div id='field-1-12'/></div> + <div id='field-1-13'/></div> + <div id='field-1-14'/></div> + <div id='field-2-0'/><img src="I.png"/></div> + <div id='field-2-1'/><img src="C.png"/></div> + <div id='field-2-2'/><img src="H.png"/></div> + <div id='field-2-3'/></div> + <div id='field-2-4'/></div> + <div id='field-2-5'/></div> + <div id='field-2-6'/></div> + <div id='field-2-7'/></div> + <div id='field-2-8'/></div> + <div id='field-2-9'/></div> + <div id='field-2-10'/></div> + <div id='field-2-11'/></div> + <div id='field-2-12'/></div> + <div id='field-2-13'/></div> + <div id='field-2-14'/></div> + <div id='field-3-0'/></div> + <div id='field-3-1'/></div> + <div id='field-3-2'/><img src="L.png"/></div> + <div id='field-3-3'/><img src="I.png"/></div> + <div id='field-3-4'/><img src="E.png"/></div> + <div id='field-3-5'/><img src="B.png"/></div> + <div id='field-3-6'/><img src="E.png"/></div> + <div id='field-3-7'/></div> + <div id='field-3-8'/></div> + <div id='field-3-9'/></div> + <div id='field-3-10'/></div> + <div id='field-3-11'/></div> + <div id='field-3-12'/></div> + <div id='field-3-13'/></div> + <div id='field-3-14'/></div> + <div id='field-4-0'/></div> + <div id='field-4-1'/></div> + <div id='field-4-2'/><img src="D.png"/></div> + <div id='field-4-3'/><img src="I.png"/></div> + <div id='field-4-4'/><img src="C.png"/></div> + <div id='field-4-5'/><img src="H.png"/></div> + <div id='field-4-6'/></div> + <div id='field-4-7'/></div> + <div id='field-4-8'/></div> + <div id='field-4-9'/></div> + <div id='field-4-10'/></div> + <div id='field-4-11'/></div> + <div id='field-4-12'/></div> + <div id='field-4-13'/></div> + <div id='field-4-14'/></div> + <div id='field-5-0'/></div> + <div id='field-5-1'/></div> + <div id='field-5-2'/></div> + <div id='field-5-3'/></div> + <div id='field-5-4'/></div> + <div id='field-5-5'/></div> + <div id='field-5-6'/></div> + <div id='field-5-7'/></div> + <div id='field-5-8'/></div> + <div id='field-5-9'/></div> + <div id='field-5-10'/></div> + <div id='field-5-11'/></div> + <div id='field-5-12'/></div> + <div id='field-5-13'/></div> + <div id='field-5-14'/></div> + <div id='field-6-0'/></div> + <div id='field-6-1'/></div> + <div id='field-6-2'/></div> + <div id='field-6-3'/></div> + <div id='field-6-4'/></div> + <div id='field-6-5'/></div> + <div id='field-6-6'/></div> + <div id='field-6-7'/></div> + <div id='field-6-8'/></div> + <div id='field-6-9'/></div> + <div id='field-6-10'/></div> + <div id='field-6-11'/></div> + <div id='field-6-12'/></div> + <div id='field-6-13'/></div> + <div id='field-6-14'/></div> + <div id='field-7-0'/></div> + <div id='field-7-1'/></div> + <div id='field-7-2'/></div> + <div id='field-7-3'/></div> + <div id='field-7-4'/></div> + <div id='field-7-5'/></div> + <div id='field-7-6'/></div> + <div id='field-7-7'/></div> + <div id='field-7-8'/></div> + <div id='field-7-9'/></div> + <div id='field-7-10'/></div> + <div id='field-7-11'/></div> + <div id='field-7-12'/></div> + <div id='field-7-13'/></div> + <div id='field-7-14'/></div> + <div id='field-8-0'/></div> + <div id='field-8-1'/></div> + <div id='field-8-2'/></div> + <div id='field-8-3'/></div> + <div id='field-8-4'/></div> + <div id='field-8-5'/></div> + <div id='field-8-6'/></div> + <div id='field-8-7'/></div> + <div id='field-8-8'/></div> + <div id='field-8-9'/></div> + <div id='field-8-10'/></div> + <div id='field-8-11'/></div> + <div id='field-8-12'/></div> + <div id='field-8-13'/></div> + <div id='field-8-14'/></div> + <div id='field-9-0'/></div> + <div id='field-9-1'/></div> + <div id='field-9-2'/></div> + <div id='field-9-3'/></div> + <div id='field-9-4'/></div> + <div id='field-9-5'/></div> + <div id='field-9-6'/></div> + <div id='field-9-7'/></div> + <div id='field-9-8'/></div> + <div id='field-9-9'/></div> + <div id='field-9-10'/></div> + <div id='field-9-11'/></div> + <div id='field-9-12'/></div> + <div id='field-9-13'/></div> + <div id='field-9-14'/></div> + <div id='field-10-0'/></div> + <div id='field-10-1'/></div> + <div id='field-10-2'/></div> + <div id='field-10-3'/></div> + <div id='field-10-4'/></div> + <div id='field-10-5'/></div> + <div id='field-10-6'/></div> + <div id='field-10-7'/></div> + <div id='field-10-8'/></div> + <div id='field-10-9'/></div> + <div id='field-10-10'/></div> + <div id='field-10-11'/></div> + <div id='field-10-12'/></div> + <div id='field-10-13'/></div> + <div id='field-10-14'/></div> + <div id='field-11-0'/></div> + <div id='field-11-1'/></div> + <div id='field-11-2'/></div> + <div id='field-11-3'/></div> + <div id='field-11-4'/></div> + <div id='field-11-5'/></div> + <div id='field-11-6'/></div> + <div id='field-11-7'/></div> + <div id='field-11-8'/></div> + <div id='field-11-9'/></div> + <div id='field-11-10'/></div> + <div id='field-11-11'/></div> + <div id='field-11-12'/></div> + <div id='field-11-13'/></div> + <div id='field-11-14'/></div> + <div id='field-12-0'/></div> + <div id='field-12-1'/></div> + <div id='field-12-2'/></div> + <div id='field-12-3'/></div> + <div id='field-12-4'/></div> + <div id='field-12-5'/></div> + <div id='field-12-6'/></div> + <div id='field-12-7'/></div> + <div id='field-12-8'/></div> + <div id='field-12-9'/></div> + <div id='field-12-10'/></div> + <div id='field-12-11'/></div> + <div id='field-12-12'/></div> + <div id='field-12-13'/></div> + <div id='field-12-14'/></div> + <div id='field-13-0'/></div> + <div id='field-13-1'/></div> + <div id='field-13-2'/></div> + <div id='field-13-3'/></div> + <div id='field-13-4'/></div> + <div id='field-13-5'/></div> + <div id='field-13-6'/></div> + <div id='field-13-7'/></div> + <div id='field-13-8'/></div> + <div id='field-13-9'/></div> + <div id='field-13-10'/></div> + <div id='field-13-11'/></div> + <div id='field-13-12'/></div> + <div id='field-13-13'/></div> + <div id='field-13-14'/></div> + <div id='field-14-0'/></div> + <div id='field-14-1'/></div> + <div id='field-14-2'/></div> + <div id='field-14-3'/></div> + <div id='field-14-4'/></div> + <div id='field-14-5'/></div> + <div id='field-14-6'/></div> + <div id='field-14-7'/></div> + <div id='field-14-8'/></div> + <div id='field-14-9'/></div> + <div id='field-14-10'/></div> + <div id='field-14-11'/></div> + <div id='field-14-12'/></div> + <div id='field-14-13'/></div> + <div id='field-14-14'/></div> +</div> +</body> \ No newline at end of file
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/triple-letter.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/triple-letter.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
Added: branches/trunk-reorg/bknr/projects/scrabble/website/de/triple-word.png =================================================================== (Binary files differ)
Property changes on: branches/trunk-reorg/bknr/projects/scrabble/website/de/triple-word.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream