我正在尝试开发基于网络的文本策略游戏。这个想法包括在太空中,看到雷达屏幕,四处移动,攻击其他玩家,挖掘行星等等。
我尝试过的当前技术是:
- 用于服务器端游戏引擎/数据库查询的 Python
- 用于托管数据库的 Mongodb
- Web.py 用于提供网页。
- Jquery 用于网站上的界面。
- HTML5 W/canvas 用于显示雷达,这将只是对我当前位置附近的简单查询。
目前发展阶段:
Python:
我编写了一个基于文本的命令行游戏,它通过一些扫描和移动数据库周围的玩家对象。
蒙古数据库:
数据库已设置并运行良好。我能够操作对象和查询对象。
网络.py:
目前支持 'localhost:8080('/', '/register', '/game') 当你到达时,它有一个非常简单的登录框,它不使用真正的身份验证,而是一个简单的 db.users.find({})验证用户。稍后我将对此进行扩展,但是对于与朋友进行的简单测试,我还不太担心安全性。如果他们输入了错误的值,它将滚动到 /register,他们可以在其中创建帐户。然后将它们放入 /game 中,我可以从表单('name')中提取用户名并打印一个简单的 Hello %name。
查询:
能够执行 jquery 脚本来操作 div 等等。
HTML5:
还没有真正的开发,但 HTML 是我的强项,所以我现在还不担心。
挑战:
我遇到的真正障碍是试图弄清楚如何向用户提供带有 jquery 的 *.html 页面,并将其发布到我的后端 python 脚本,以对数据库执行查询或更新,或者执行一些战斗代码以及什么不是。
我一直在阅读所有不同的技术和框架,但我还没有真正找到完全符合我需要的东西,或者我缺乏经验使我无法理解如何实现它。
我想知道是否有一种简单的方法可以编写一个 jquery(post) 将数据发布到 python 中,以便我编写的函数可以基于 jquery(post) 执行查询或更新并返回用户请求的数据
我观看了一个发布到 php 的 youtube 教程,它看起来非常简单,但是每当我搜索发布到 python 时,我得到的结果很少,几乎所有人都宣称他们的框架最适合这个。我几乎想知道我是否不应该只切换到 php。
你们能指出我正确的方向吗?我需要废弃 web.py 并切换到 ajax 和 mod_python 吗?
我应该认真阅读 django 的文档吗?
这个周末我的网速非常慢,我希望我能找到正确的研究方向,所以当我周六回到我的位置时,我可以开始研究策略游戏的网络部分。
代码示例:
web.py 脚本:
import web
from web import form
import pymongo
db = pymongo.Connection('localhost', 27017).bbarnes_test
render = web.template.render('templates/')
urls = (
'/', 'index',
'/register', 'register',
'/game', 'game')
app = web.application(urls, globals(), True)
login = form.Form(
form.Textbox("Username",
form.notnull),
form.Password("Password",
form.notnull))
class index:
def GET(self):
form = login()
return render.formtest(form)
def POST(self):
form = login()
if not form.validates():
return render.formtest(form)
else:
uname = db.users.find_one({'name' : form.d.Username, 'pw' : form.d.Password})
if uname != None:
return render.game(uname['name'])
else:
raise web.seeother('/register')
class register:
def GET(self):
form = login()
return render.register(form)
def POST(self):
form = login()
if not form.validates():
return render.register(form)
else:
db.users.insert({'name' : form.d.Username, 'pw' : form.d.Password})
uname = db.users.find_one({'name' : form.d.Username})
raise web.seeother('/')
class game:
def GET(self):
return render.game(form)
if __name__=="__main__":
web.internalerror = web.debugerror
app.run()
~
游戏.html
$def with(uname)
<html>
<!DOCTYPE html>
<head>
<script type="text/javascript" src="../static/jquery.js"></script>
<script type="text/javascript">
J = jQuery;
J(document).ready(function(){
J("p").click(function(){
J(this).hide();
});
});
</script>
<title>The Game</title>
</head
<body>
<p> This is a test of jQuery.</p>
<p> Welcome to the game $uname</p>
</body>
</html>