homework-05

时间:2023-03-09 23:47:20
homework-05
   经过这几天的深思熟虑我和小明同学将这次作业基本的完整了,可能界面略丑陋,但是基本功能均已实现。我们的服务器端采用python编写,因为服务器端是这次作业的难点,而python中有一个叫做web.py的轻量级框架使用效果极好,并且不用编写配置文件,其对URL的处理很简练。对于客户端我采用了python编写小明选择了ruby,但是由于我的客户端有一些bug需要再交互模式下使用,所以我们将它抛弃而选择使用小明的客户端。由于代码编写的我身心疲惫,我就简略说一下我们本次编写过程中遇到的困难点:
      1.第一次使用web.py 花费不少时间来学习
          2.客户端并发较多,导致部分客户端崩溃,由于这个不是这次的重点,并没有对其进行处理。
                 3.不熟悉写网页,图表部分使用canvas写的,调试很麻烦
                 4.咱能换个博客吗 ,这个博客没有自动保存啊 我之前写的都没了。。。。写短点算了
这是运行结果的截图部分
homework-05
homework-05
然后是我们的代码部分

import web
import thread
import time
import data
import string
from web import form render=web.template.render('templates/')
urls=(
'/','index',
'/attend','attend',
'/register','register'
) registerform=form.Form(
form.Textbox("id",form.notnull)
) attendform=form.Form(
form.Textbox("id",form.notnull),
form.Textbox("num",form.notnull)
) def index_page():
for i in list(data.db.select('users')):
print i['id']
time.sleep(10)
for i in list(data.db.select('users')):
data.users[i['id']]=0.0
while True:
start=time.time()
data.thisturn={}
data.num=0
data.total=0
time.sleep(0.9)
if data.num!=0:
average=data.total/data.num*0.618
print average
data.thisturn['winner']=score(data.thisturn,data.users,average)
data.winner=data.thisturn['winner']
data.winnernumber=data.thisturn[data.winner]
data.thisturn['result']=average
data.goldpoint.append(average)
t=1-(time.time()-start)
time.sleep(t)
print data.num
data.turn+=1 def score(thisturn,users,average):
value_max=0
value_min=100
for i in thisturn:
a=abs(thisturn[i]-average)
if a>value_max:
value_max=a
max_num=i
if a<value_min:
value_min=a
winner=i
for i in list(data.db.select('users')):
if i['id'] not in thisturn and i['id']!=winner:
users[i['id']]-=5
elif i['id']==winner:
users[i['id']]+=10
elif i['id']==max_num:
users[i['id']]-=1
return winner class index:
def GET(self):
return render.index(data.turn,data.winnernumber,data.users,data.goldpoint) class attend:
def GET(self):
form=attendform()
return render.attend(form)
def POST(self):
form=attendform()
if not form.validates():
return render.attend(form)
else:
i=web.input()
i.num=string.atof(i.num)
data.num+=1
data.total+=i.num
data.thisturn[i.id]=i.num
return 0 class register:
def GET(self):
form=registerform()
return render.register(form)
def POST(self):
form=registerform()
if not form.validates():
return render.register(form)
else:
i=web.input()
data.db.insert('users',id=i.id,pd=0)
data.users[i.id]=0.0
return 0 if __name__=="__main__":
thread.start_new_thread(index_page,())
app=web.application(urls,globals())
app.run()
$def with(turn,number,users,goldpoint)
<html>
<head>
<meta http-equiv="refresh" content="1">
<script type="text/javascript">
function draw(){
var canvas=document.getElementById("cv");
var a=$goldpoint
if(canvas.getContext){
var ctx=canvas.getContext("2d");
ctx.beginPath();
ctx.moveTo(0,a[0]);
for(i=1;i<=$turn-1;i++){
ctx.lineTo(10*i,a[i]);
}
ctx.stroke();
ctx.endPath();
}
}
</script>
</head>
<body onload="draw();">
<p>现在是第$turn轮</p>
<p>上一轮获胜数字$number</p>
<p>选手得分</p>
<table border="1">
<tr>
$for i in users:
<td><b> $i </b></td>
</tr>
<tr>
$for i in users:
<td><b> $users[i] </b></td>
</tr>
</table>
<canvas id="cv" width="1500" height="150">
</canvas>
</body>
</html>