Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用户相互覆盖';进步_Python_Google App Engine_Jinja2 - Fatal编程技术网

Python 用户相互覆盖';进步

Python 用户相互覆盖';进步,python,google-app-engine,jinja2,Python,Google App Engine,Jinja2,嗨,我正在使用python和google应用程序引擎构建一个基本的战舰应用程序。你可以在这里看到: 我对编码比较陌生,所以如果我缺少一些基本的知识,请原谅,但我已经为同样的问题挣扎了几周了 该应用程序几乎可以与一个用户完美配合,但一旦多个用户(独立)开始玩游戏,他们就会开始覆盖彼此的数据 例如:应用程序要求输入两个名字,但当其他用户开始播放时,这些名字将被新玩家选择的名字覆盖。e、 g, 玩家1选择弗雷德和乔治的名字开始游戏。一切都很好 但随后玩家2开始玩一个完全独立的游戏,并选择安妮和丽塔的名

嗨,我正在使用python和google应用程序引擎构建一个基本的战舰应用程序。你可以在这里看到:

我对编码比较陌生,所以如果我缺少一些基本的知识,请原谅,但我已经为同样的问题挣扎了几周了

该应用程序几乎可以与一个用户完美配合,但一旦多个用户(独立)开始玩游戏,他们就会开始覆盖彼此的数据

例如:应用程序要求输入两个名字,但当其他用户开始播放时,这些名字将被新玩家选择的名字覆盖。e、 g,

玩家1选择弗雷德和乔治的名字开始游戏。一切都很好

但随后玩家2开始玩一个完全独立的游戏,并选择安妮和丽塔的名字。这实际上也覆盖了玩家1游戏中的名字。名称并不是被覆盖的唯一数据位——记录的快照也会被覆盖

我已经实现了谷歌登录,试图为每个用户创建单独的会话来阻止这种情况,但这并没有解决这个问题。我非常感谢你能帮我找出我做错了什么!(请原谅这里的一些低效之处——我只是想在改进代码之前让它正常工作!)

来自google.appengine.api导入用户
进口金玉2
导入操作系统
随机输入
导入webapp2
jinja=jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(_文件,'templates'))
board1=[]
董事会2=[]
def生成板(板):
对于范围(0,5)中的行:
行=['0']*5
board.append(第行)
生成单板(单板1)
生成电路板(电路板2)
船=0
def生成_船(板):
对于范围(5)内的船只:
i=random.randint(0,4)
n=random.randint(0,4)
董事会[i][n]=“1”
船只+=1
生成_船(board1)
生成_船(board2)
def用户快照(板、列快照、行快照):
a=int(col_shot)-1
b=int(第二排放炮)-1
如果电路板[a][b]=“1”:
板[a][b]=“X”
返回真值
其他:
返回错误
i_a=0
i_b=0
t=1.5
s_a=3
s_b=3
h_sunka=[]
h_misseda=[]
h_sunkb=[]
h_missedb=[]
c_a={}
c_b={}
值={}
问候={}
类MainHandler(webapp2.RequestHandler):
def get(自我):
user=users.get\u current\u user()
如果用户:
问候['昵称]]=user.昵称()
问候['url']=用户。创建\u注销\u url('/'))
template0=jinja.get_模板('greeting.html')
self.response.out.write(template0.render(greet))
其他:
问候['link2']=用户。创建\u登录\u url('/'))
template01=jinja.get_模板('greeting2.html'))
self.response.out.write(template01.render(greet))
类GamePage(webapp2.RequestHandler):
def get(自我):
name1=self.request.get(“name1”)
name2=self.request.get(“name2”)
值['name1']=name1
值['name2']=name2
c_a['name1']=name1
c_a['name2']=name2
c_b['name1']=name1
c_b['name2']=name2
template3=jinja.get_模板('game_body.html'))
self.response.out.write(template3.render(值))
def post(自我):
全球i_a
全球证券交易所
全球t
如果int(t)%2=0:
如果t%1==0:
template3=jinja.get_模板('game_body.html'))
self.response.out.write(template3.render(c_a))
t+=0.5
其他:
col_shot=self.request.get(“列”)
row\u shot=self.request.get(“row”)
e='missed'
f='沉没'
如果用户拍摄(board2、col\u shot、row\u shot):
s_a-=1
i_a+=1
self.response.write('kabboom,好球

')) h_sunka.append('a'+str(col_shot)+str(row_shot))
如果你有一大堆问题,你的方法。游戏状态在处理程序中。但是,您没有理由相信任何游戏都将由同一请求处理程序/实例处理。您需要考虑在数据存储中存储游戏状态,并将特定游戏绑定到用户会话。假设您希望一次有一名玩家参与多个游戏。这可能是一个基本练习,您不需要更复杂的功能,但是appengines架构与您的实施策略不匹配。啊,好的,谢谢您的回复。您知道您可以向我提供哪些资源来帮助我了解如何在数据存储中存储游戏状态,以及如何将特定游戏绑定到用户会话?会话和http状态:webapp2中的会话:感谢您的帮助!我会读这些。我还发现了这个Udacity教程,以防其他人在处理数据库问题时遇到很多问题。游戏状态在处理程序中。但是,您没有理由相信任何游戏都将由同一请求处理程序/实例处理。您需要考虑在数据存储中存储游戏状态,并将特定游戏绑定到用户会话。假设您希望一次有一名玩家参与多个游戏。这可能是一个基本练习,您不需要更复杂的功能,但是appengines架构与您的实施策略不匹配。啊,好的,谢谢您的回复。您知道您可以向我提供哪些资源来帮助我了解如何在数据存储中存储游戏状态,以及如何将特定游戏绑定到用户会话?会话和http状态:webapp2中的会话:感谢您的帮助!我将阅读这些我还发现了这个Udacity教程,以防其他人在数据库方面遇到困难
from google.appengine.api import users
import jinja2
import os
import random
import webapp2


jinja = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'templates')))   

board1 = []
board2 = []

def generate_board(board):
    for row in range(0,5):
        row = ['0']*5
        board.append(row)

generate_board(board1)    
generate_board(board2)     

boats = 0

def generate_boats(board):
    for boats in range(5):
        i = random.randint(0,4)
        n = random.randint(0,4)
        board[i][n] = '1'
        boats += 1

generate_boats(board1)
generate_boats(board2)


def user_shoots(board, col_shot, row_shot):
    a=int(col_shot)-1
    b=int(row_shot)-1
    if board[a][b]=='1':
        board[a][b]='X'
        return True
    else:
        return False

i_a=0
i_b=0
t=1.5
s_a=3
s_b=3
h_sunka = []
h_misseda = []
h_sunkb = []
h_missedb = []
c_a = {}
c_b = {}
values={}
greet={}


class MainHandler(webapp2.RequestHandler):
    def get(self):
        user = users.get_current_user()
        if user:
            greet['nickname'] =  user.nickname()
            greet['url'] = users.create_logout_url('/')
            template0=jinja.get_template('greeting.html')
            self.response.out.write(template0.render(greet))
        else:
            greet['link2'] = users.create_login_url('/')
            template01=jinja.get_template('greeting2.html')
            self.response.out.write(template01.render(greet))


class GamePage(webapp2.RequestHandler):
    def get(self):
        name1=self.request.get("name1")
        name2=self.request.get("name2")
        values['name1']=name1
        values['name2']=name2
        c_a['name1']=name1
        c_a['name2']=name2
        c_b['name1']=name1
        c_b['name2']=name2
        template3 = jinja.get_template('game_body.html')
        self.response.out.write(template3.render(values))

    def post(self):
        global i_a
        global s_a
        global t
        if int(t)%2!=0:
            if t%1==0:
                template3 = jinja.get_template('game_body.html')
                self.response.out.write(template3.render(c_a))
                t+=0.5
            else: 
                col_shot=self.request.get("column")
                row_shot=self.request.get("row")
                e='missed'
                f='sunk'
                if user_shoots(board2, col_shot, row_shot):
                    s_a-=1
                    i_a+=1
                    self.response.write('Kabbooom, good shot <br><br>')
                    h_sunka.append('a'+str(col_shot)+str(row_shot))
                    if s_a<=0:
                        self.response.write('\nAll ships down sir <br><br>')
                        self.response.write(c_a['name1'])
                        self.response.write(" wins! <br>")
                else:
                    self.response.write('You fool! You missed <br><br>')
                    i_a+=1
                    h_misseda.append('a'+str(col_shot)+str(row_shot))
                for miss in h_misseda:
                    c_a[miss]=e 
                for hit in h_sunka:
                    c_a[hit]=f
                template4 = jinja.get_template('changeturns1.html')
                self.response.out.write(template4.render(c_a))  
                t+=0.5
        else:
            if t%1==0:
                template5 = jinja.get_template('game_title2.html')
                self.response.out.write(template5.render(values))
                template6 = jinja.get_template('game_body2.html')
                self.response.out.write(template6.render(c_b))
                t+=0.5
            else: 
                col_shot=self.request.get("column")
                row_shot=self.request.get("row")
                e='missed'
                f='sunk'
                global i_b
                global s_b
                global t
                if user_shoots(board1, col_shot, row_shot):
                    s_b-=1
                    i_b+=1
                    self.response.write('Kabbooom, good shot <br><br>')
                    h_sunkb.append('a'+str(col_shot)+str(row_shot))
                    if s_b<=0:
                        self.response.write('\nAll ships down sir <br><br>')
                        self.response.write(c_b['name2'])
                        self.response.write(" wins! <br>")
                else:
                    self.response.write('You fool! You missed <br><br>')
                    i_b+=1
                    h_missedb.append('a'+str(col_shot)+str(row_shot))
                for miss in h_missedb:
                    c_b[miss]=e 
                for hit in h_sunkb:
                    c_b[hit]=f
                template7 = jinja.get_template('changeturns2.html')
                self.response.out.write(template7.render(c_b))  
                t+=0.5

app = webapp2.WSGIApplication([

('/', MainHandler), ('/game', GamePage)
],  debug=True)