ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> pygame-users
pygame-users
Re: [pygame] Ridiculously simple way to seperate game-object code
by Kris Schnee other posts by this author
May 20 2006 5:51AM messages near this date
Re: [pygame] Ridiculously simple way to seperate game-object code | Re: [pygame] Ridiculously simple way to seperate game-object code
James Hofmann wrote:
>  http://people.ucsc.edu/~jhofmann/programmables.py
>  
>  More "inspired by Megazeux" code.

Neat. I remember that in Megazeux the game's "objects" were actual 
things with a location in the game world, to the extent that if you 
wanted a "global function" you'd probably end up putting it inside a 
fake wall in the corner. Programs had ways of interacting that included 
traditional message-passing and physical action; eg. Robot A could 
respond to being shot, and B could shoot to get A to react!

Doesn't Python have a "compile" function that turns a complex statement 
into an executable code block? Something like that could be used for 
if-branches and the like. So could a kludge like turning if/then 
branches into GOTO statements; this could be done by some quick run-time 
parsing, eg:

if health < max_health:
     Cast("Heal")
else:
     Attack()

becomes at run-time something like:

switch( (health < max_health) )
IF:
     Cast("Heal")
ELSE:
     Attack()

...where switch is basically the goto function, and takes up a cycle. I 
can think of variations on this. The point is that you'd have a way to 
treat the if statement as a single statement by itself, and handle the 
resulting branches in seperate cycles.

I'd like to see this hooked up to some standard functions for 
interacting with a game world. When I work again on my tile engine I 
might include support for something like this.

As for security, you probably won't be able to make it perfect, but you 
can easily provide a first line of defense by doing a TestForEvil() 
function on each line before executing it, eg. "skip_line = False. for 
command in FORBIDDEN_COMMANDS: if command in line_to_be_executed: 
skip_line = True; print 'Hacker alert!'" You could also scan the whole 
program in advance for greater efficiency, but since this code would let 
a program change its own code while running (!), there's a big security 
hole there.

Kris
Thread:
James Hofmann
Sami Hangaslammi
James Hofmann
Kamilche
Adeola Bannis
Kris Schnee
Lenard Lindstrom

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved