[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