homework-05

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

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>

 

posted on 2013-11-03 23:45  wwtbuaa  阅读(136)  评论(1编辑  收藏  举报