经过这几天的深思熟虑我和小明同学将这次作业基本的完整了,可能界面略丑陋,但是基本功能均已实现。我们的服务器端采用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>

homework-05的更多相关文章

  1. Machine Learning, Homework 9, Neural Nets

    Machine Learning, Homework 9, Neural NetsApril 15, 2019ContentsBoston Housing with a Single Layer an ...

  2. STAT UN2102 Homework

    STAT UN2102 Homework 4 [100 pts]Due 11:59pm Monday, May 6th on CanvasYour homework should be submitt ...

  3. Final阶段第1周/共1周 Scrum立会报告+燃尽图 05

    作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2484] 版本控制:https://git.coding.net/liuyy08 ...

  4. 20181009-6 选题 Scrum立会报告+燃尽图 05

    Scrum立会报告+燃尽图(05)选题 此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2195 一.小组介绍 组长:刘莹莹 ...

  5. 20181120-8 Beta阶段第2周/共2周 Scrum立会报告+燃尽图 05

    此作业要求参见[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2413] 版本控制地址    [https://git.coding.ne ...

  6. 20181113-7 Beta阶段第1周/共2周 Scrum立会报告+燃尽图 05

    作业要求https://edu.cnblogs.com/campus/nenu/2018fall/homework/2387 版本控制https://git.coding.net/lglr2018/F ...

  7. 20181016-4 Alpha阶段第2周/共2周 Scrum立会报告+燃尽图 05

    作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2288 Scrum master:王硕 一.小组介绍 组长:王一可 组员:范 ...

  8. C语言|博客作业05

    这个作业属于哪个课程 C语言程序设计II 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/9825 我在这个课程的 ...

  9. day38-IO流05

    JavaIO流05 4.常用的类04 4.4节点流和处理流03 4.4.8打印流-PrintStream和PrintWriter 打印流只有输出流,没有输入流 1.简单介绍及应用 PrintStrea ...

  10. Java学习笔记(05)

    目录: static的用法 主函数的定义 增强for的循环 单例设计模式 封装 一.Static的用法 1.对象的内存分析 对象的引用变量是存在于栈区,而在堆区开辟了一块内存空间,调用对象给成员变量赋 ...

随机推荐

  1. QTP10&QTP11&UFT11.5的安装和破解

    QTP10的安装和破解方法 下载QTP10.0并安装. 安装成功后,在C:\Program Files\Common Files\Mercury Interactive下创建文件夹:License M ...

  2. CardView官方教程

    Create Cards CardView extends the FrameLayout class and lets you show information inside cards that ...

  3. Android中LayoutParams

    LayoutParams are used by views to tell their parents how they want to be laid out. See ViewGroup Lay ...

  4. java开发之匿名内部类,接口的使用

    下面的例子是Java.JDK7学习笔记上的 打算开发多人联机程序,对每个联机客户端,都会建立Client对象封装相关信息 1.Client.java public class Client { pri ...

  5. adb shell settings ....

    Android4.2的源码android-17\com\android\commands目录下较之前的版本多了一个settings命令,查看其中的SettingsCmd.java文件,末尾有命令的帮助 ...

  6. hdu 4973 A simple simulation problem. (线段树)

    题目链接 题意: 给定n长的序列 m个操作 序列默认为 1, 2, 3···n 操作1:D [l,r] 把[l,r]区间增长 :( 1,2,3,4 进行 D [1,3]变成 1,1,2,2,3,3,4 ...

  7. table share

    每个表的表结构会放到table_def_cache中,一个table share对应一个实例 table share 又会实例化为一个对象, 每个进程,每个实例化的对象,

  8. pinyin4j使用示例

    pinyin4j的主页:http://pinyin4j.sourceforge.net/pinyin4j能够根据中文字符获取其对应的拼音,而且拼音的格式可以定制pinyin4j是一个支持将中文转换到拼 ...

  9. HTTP请求头host解析

    Host: 域名 Host表示请求的服务器网址:   request headers中的host字段 例如有user.xiaoqiang.com,hotel.xiaoqiang.com 现在需要登录后 ...

  10. UVA 350 Pseudo-Random Numbers 伪随机数(简单)

    题意:给定Z, I, M,  L,根据随机数产生式k=(Z*L+I)%M.但是L表示的是上一个产生的数,比如根据产生式产生了序列{2,5,4,3}那么5是由L=2算来的,4由L=5算来的..第1个所产 ...