[bknr-cvs] r2211 - in branches/trunk-reorg/bknr/projects: . scrabble scrabble/src scrabble/website scrabble/website/de
bknr at bknr.net
bknr at bknr.net
Thu Oct 4 21:34:38 UTC 2007
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
More information about the Bknr-cvs
mailing list