[KSS-checkins] r50908 - kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo
cryu at codespeak.net
cryu at codespeak.net
Wed Jan 23 12:35:26 CET 2008
Author: cryu
Date: Wed Jan 23 12:35:23 2008
New Revision: 50908
Added:
kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/snake.css
kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/snake.kss
kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/snake.pt
kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/snake.py
kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/snake.zcml
Modified:
kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/config.py
kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/configure.zcml
kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/zopeconfig.py
Log:
added KSS-Snake demo application
Modified: kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/config.py
==============================================================================
--- kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/config.py (original)
+++ kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/config.py Wed Jan 23 12:35:23 2008
@@ -18,6 +18,7 @@
zope_demos = (
KSSDemo('', 'Applications', "addressbook.html", "Addressbook"),
KSSDemo('', 'Applications', "typewriter.html", "Typewriter"),
+ KSSDemo('', 'Applications', "snake.html", "KSS-Snake"),
## KSSDemo('', '', "draganddrop.html", "Scriptaculous drag and drop"),
KSSDemo('', 'Parameter functions', 'pf_forms.html', 'Forms'),
KSSDemo('', 'Selectors', 'selectors.html', 'Parent node selector'),
Modified: kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/configure.zcml
==============================================================================
--- kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/configure.zcml (original)
+++ kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/configure.zcml Wed Jan 23 12:35:23 2008
@@ -551,5 +551,8 @@
<!-- Typewriter -->
<include file="typewriter.zcml" />
+ <!-- CursorTest -->
+ <include file="snake.zcml" />
+
</configure>
Added: kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/snake.css
==============================================================================
--- (empty file)
+++ kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/snake.css Wed Jan 23 12:35:23 2008
@@ -0,0 +1,48 @@
+div.board {
+ border: 1px solid #FF4916;
+}
+
+div.boardRed {
+ background-color: red;
+}
+
+div.snake {
+ position: relative;
+ background-color: red;
+ width: 10px;
+ height: 10px;
+}
+
+div.food {
+ position: relative;
+ background-color: green;
+ width: 10px;
+ height: 10px;
+ display: None;
+}
+
+div.score {
+ float: right;
+ margin-right: 100px;
+}
+
+div.score {
+ float:right;
+ width: 50px;
+ margin-right: 700px;
+}
+
+div.scoreField {
+ font-size: large;
+}
+
+div.lose {
+ position: relative;
+ background-color: white;
+ width: 100px;
+ top: 50px;
+ left: 50px;
+ padding: 5px;
+ color: red;
+ text-align: center;
+}
Added: kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/snake.kss
==============================================================================
--- (empty file)
+++ kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/snake.kss Wed Jan 23 12:35:23 2008
@@ -0,0 +1,18 @@
+html:keydown {
+ action-server: changeDirection;
+ changeDirection-keycode: pass(keycode);
+}
+
+body:load {
+ action-server: initialize;
+}
+
+div.board:timeout {
+ evt-timeout-delay: 200;
+ evt-timeout-repeat: True;
+ action-server: moveSnake;
+}
+
+div.lose:click {
+ action-server: initialize;
+}
Added: kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/snake.pt
==============================================================================
--- (empty file)
+++ kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/snake.pt Wed Jan 23 12:35:23 2008
@@ -0,0 +1,31 @@
+<html tal:define="viewname string:snake">
+
+ <head>
+
+ <title>KSS-Snake</title>
+
+ <metal:header use-macro="context/@@header_macros/header_resources" />
+ <link rel="stylesheet" type="text/css"
+ tal:attributes="href
+ string:${context/@@absolute_url}/++resource++${viewname}.css"/>
+
+ </head>
+
+ <body>
+
+ <p metal:use-macro="context/@@body_macros/header">header</p>
+
+ <h2>KSS-Snake</h2>
+ <div> Use the 'a', 's', 'd', 'w' keys to change the direction of the red square and try to eat up the green squares.</div>
+ <br />
+ <div class="score">
+ <h2>Score</h2>
+ <div class="scoreField">0</div>
+ </div>
+ <div class="board">
+ <div class="snake"
+ style="top:0; left:0;">
+ </div>
+ </div>
+ </body>
+</html>
Added: kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/snake.py
==============================================================================
--- (empty file)
+++ kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/snake.py Wed Jan 23 12:35:23 2008
@@ -0,0 +1,137 @@
+# Copyright (c) 2005-2007
+# Authors: KSS Project Contributors (see docs/CREDITS.txt)
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as published
+# by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+from kss.core import KSSView, force_unicode, KSSExplicitError, kssaction
+from time import time
+from random import randint
+from persistent.list import PersistentList
+
+class KSSSnake(KSSView):
+
+ MINTOP = 90
+ MINLEFT = 90
+ MAXTOP = 200
+ MAXLEFT = 200
+ SCORESTEP = 10
+
+ FOODDIV = '<div class="food"></div>'
+ LOSEDIV = '<div class="lose">GAME OVER<br />Click to play again.</div>'
+
+ def initialize(self):
+ self.removeFoodDiv()
+ self.getCommandSet('core').deleteNode('div.lose')
+ self.getCommandSet('core').removeClass('div.board', 'boardRed')
+ self.request.SESSION['top'] = self.MINTOP
+ self.request.SESSION['left'] = self.MINLEFT
+ self.request.SESSION['dir'] = 'right'
+ self.request.SESSION['score'] = 0
+ # initialize snake
+ self.getCommandSet('core').setStyle('div.snake', 'top', '%spx' % str(self.request.SESSION.get('top', self.MINTOP)))
+ self.getCommandSet('core').setStyle('div.snake', 'left', '%spx' % str(self.request.SESSION.get('left', self.MINLEFT)))
+ # initialize playground
+ self.getCommandSet('core').setStyle('div.board', 'width', '%spx' % str(self.MAXLEFT))
+ self.getCommandSet('core').setStyle('div.board', 'height', '%spx' % str(self.MAXTOP))
+ # initialize food
+ self.setFoodDiv()
+ # set score
+ self.getCommandSet('core').replaceInnerHTML('div.scoreField', '%s' % str(self.request.SESSION['score']))
+ return self.render()
+
+ def setFoodDiv(self):
+ top_rand = randint(0, self.MAXTOP-11)
+ left_rand = randint(0, self.MAXLEFT-10)
+ top_offset = top_rand / 10 * 10
+ left_offset = left_rand / 10 * 10
+ self.getCommandSet('core').insertHTMLAsLastChild('div.board', self.FOODDIV)
+ self.getCommandSet('core').setStyle('div.food', 'top', '%spx' % str(top_offset))
+ self.getCommandSet('core').setStyle('div.food', 'left', '%spx' % str(left_offset))
+ self.getCommandSet('core').setStyle('div.food', 'display', 'block')
+ self.request.SESSION['food_top'] = top_offset
+ self.request.SESSION['food_left'] = left_offset
+
+ def removeFoodDiv(self):
+ self.getCommandSet('core').deleteNode('div.food')
+
+ def increaseScore(self):
+ self.request.SESSION['score'] += self.SCORESTEP
+ self.getCommandSet('core').replaceInnerHTML('div.scoreField', '%s' % str(self.request.SESSION['score']))
+
+ def loseGame(self):
+ self.removeFoodDiv()
+ self.getCommandSet('core').addClass('div.board', 'boardRed')
+ self.getCommandSet('core').insertHTMLAsLastChild('div.board', self.LOSEDIV)
+ self.request.SESSION['dir'] = 'stop'
+
+ def moveSnake(self):
+ dir = self.request.SESSION.get('dir', 'right')
+ currentTop = self.request.SESSION.get('top', self.MINTOP)
+ currentLeft = self.request.SESSION.get('left', self.MINLEFT)
+ if dir == 'stop':
+ return self.render()
+ if dir == 'right':
+ newLeft = currentLeft + 10
+ if newLeft >= self.MAXLEFT:
+ self.loseGame()
+ return self.render()
+ self.getCommandSet('core').setStyle('div.snake', 'left', '%spx' % str(newLeft))
+ self.request.SESSION['left'] = newLeft
+ if dir == 'left':
+ newLeft = currentLeft - 10
+ if newLeft < 0:
+ self.loseGame()
+ return self.render()
+ self.getCommandSet('core').setStyle('div.snake', 'left', '%spx' % str(newLeft))
+ self.request.SESSION['left'] = newLeft
+ if dir == 'up':
+ newTop = currentTop - 10
+ if newTop < 0:
+ self.loseGame()
+ return self.render()
+ self.getCommandSet('core').setStyle('div.snake', 'top', '%spx' % str(newTop))
+ self.request.SESSION['top'] = newTop
+ if dir == 'down':
+ newTop = currentTop + 10
+ if newTop >= self.MAXTOP:
+ self.loseGame()
+ return self.render()
+ self.getCommandSet('core').setStyle('div.snake', 'top', '%spx' % str(newTop))
+ self.request.SESSION['top'] = newTop
+ # check collision
+ self.checkCollision()
+ return self.render()
+
+ def checkCollision(self):
+ if self.request.SESSION['top'] == self.request.SESSION['food_top']+10 and \
+ self.request.SESSION['left'] == self.request.SESSION['food_left']:
+ self.removeFoodDiv()
+ self.increaseScore()
+ self.setFoodDiv()
+
+ def changeDirection(self, keycode):
+ keycode = int(keycode)
+ if keycode not in [ord('w'), ord('a'), ord('d'), ord('s')]:
+ return self.render()
+ if keycode==ord('w'):
+ self.request.SESSION['dir'] = 'up'
+ if keycode==ord('a'):
+ self.request.SESSION['dir'] = 'left'
+ if keycode==ord('s'):
+ self.request.SESSION['dir'] = 'down'
+ if keycode==ord('d'):
+ self.request.SESSION['dir'] = 'right'
+ return self.render()
+
Added: kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/snake.zcml
==============================================================================
--- (empty file)
+++ kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/snake.zcml Wed Jan 23 12:35:23 2008
@@ -0,0 +1,54 @@
+<configure xmlns="http://namespaces.zope.org/zope"
+ xmlns:browser="http://namespaces.zope.org/browser"
+ xmlns:kss="http://namespaces.zope.org/kss"
+ xmlns:zcml="http://namespaces.zope.org/zcml"
+ i18n_domain="kss"
+ >
+
+ <!-- Snake -->
+ <browser:page
+ for="kss.demo.interfaces.ISimpleContent"
+ class=".snake.KSSSnake"
+ template="snake.pt"
+ name="snake.html"
+ permission="zope.View"
+ />
+
+ <browser:resource
+ file="snake.kss"
+ name="snake.kss"
+ />
+
+ <browser:resource
+ file="snake.css"
+ name="snake.css"
+ />
+
+ <browser:page
+ for="kss.demo.interfaces.ISimpleContent"
+ class=".snake.KSSSnake"
+ attribute="changeDirection"
+ name="changeDirection"
+ permission="zope.View"
+ />
+
+ <browser:page
+ for="kss.demo.interfaces.ISimpleContent"
+ class=".snake.KSSSnake"
+ attribute="initialize"
+ name="initialize"
+ permission="zope.View"
+ />
+
+ <browser:page
+ for="kss.demo.interfaces.ISimpleContent"
+ class=".snake.KSSSnake"
+ attribute="moveSnake"
+ name="moveSnake"
+ permission="zope.View"
+ />
+
+
+
+</configure>
+
Modified: kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/zopeconfig.py
==============================================================================
--- kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/zopeconfig.py (original)
+++ kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/zopeconfig.py Wed Jan 23 12:35:23 2008
@@ -20,6 +20,7 @@
demos = (
KSSDemo('', 'Applications', "addressbook.html", "Addressbook"),
KSSDemo('', 'Applications', "typewriter.html", "Typewriter"),
+ KSSDemo('', 'Applications', "snake.html", "KSS-Snake"),
## KSSDemo('', '', "draganddrop.html", "Scriptaculous drag and drop"),
KSSDemo('', 'Parameter functions', 'pf_forms.html', 'Forms'),
KSSDemo('', 'Selectors', 'selectors.html', 'Parent node selector'),
More information about the Kukit-checkins
mailing list