我的2人游戏,纯文本,基于浏览器的游戏工作正常,但是没有办法让一个玩家知道对方玩家的回合是否完成,除非尝试回合他/她自。在标准的低成本GAE应用程序中可以实现传达(推送)该信息所需的结果?无插槽N玩家游戏
我已经在纯Python中消化了Joran Beasley's fine answer example,但假设套接字将增加GAE应用程序的成本。如果我关于成本的前提不正确,请纠正我,然后你能告诉我如何在GAE中添加套接字吗?但我希望有一个经济的方式来提升我的应用程序的价格低于而不需要插槽。
的Python:
class BaseHandler(webapp2.RequestHandler):
@webapp2.cached_property
def jinja2(self):
return jinja2.get_jinja2(app=self.app)
def render_template(
self,
filename,
template_values,
**template_args
):
template = JINJA_ENVIRONMENT.get_template(filename)
self.response.out.write(template.render(template_values))
class MainPage(BaseHandler):
def get(self):
global player
global players
global scores
global target
global guesses
player = 0
players = ['me','you']
scores = [False , False]
target = random.randrange(10)
initguesses = ['','']
guesses = initguesses
template_values = {'scores':scores}
return webapp2.redirect("/game/%s" % players[0])
class Game(BaseHandler):
def get(self,who_id):
who = players.index(who_id)
template_values = {'scores':scores,'guesses':guesses[who],'players':players,'who_id':who_id}
template = JINJA_ENVIRONMENT.get_template('game.html')
self.response.out.write(template.render(template_values))
def post(self,who_id):
global player
who = players.index(who_id)
if who == player:
guess = self.request.get('guess', None)
guesses[player]=guess+guesses[player]
scores[player]=int(guess)==target
logging.info("target: %s" % target)
next_player = player
player = (1+player)%2
template_values = {'scores':scores}
return webapp2.redirect("/game/%s" % who_id)
game.html
{% extends "base.html" %}
{% block content %}
<h1>{{who_id}}</h1>
<br/>
<form action="" method="post">
Guess an integer here <br />
0 ... 9: <input type="textbox" name="guess" value=></input>
<input type="submit" value="submit" />
</form>
<p> Your previous guess(es): {{ guesses }}</p>
<p> Got target right (yet)?:
{% for score in scores %}
<br />
{% if score %}
<h2>
{% endif %}
{{players[loop.index0] }} {{ score }}
{% if score %}
</h2>
{% endif %}
{% endfor %}
</p>
{% if who_id == players[0] %}
<p> You can start over at the beginning (<a href="/"> here.</a>) but everyone restarts. </p>
{% endif %}
<p>If you see no change above, it's not your turn.</p>
{% endblock content %}
游戏预计通常需要多长时间?我想知道是否将该游戏基于Firebase的实时数据库将给您带来更好的体验?尽管你可能会遇到标准环境的挑战。 Firebase具有慷慨的免费套餐。也许是一个选择? – BrettJ
用户是否可以在应用中注册启用Firebase的功能,然后他们选择支付所涉及的任何费用,但其他不想要该功能的用户不需要付费? – zerowords
这听起来像是你身边的设计选择。我不认为你可以让他们直接支付你的费用。您必须为高级功能设置自己的付款。 – BrettJ