黄金点游戏
一、项目描述:黄金点游戏
黄金点游戏是一个数字小游戏,其游戏规则是:
N个同学(N通常大于10),每人写一个0-100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。玩了几天以后,大家发现了一些很有意思的现象,比如黄金点在逐渐地往下移动。
根据游戏规则,编一个可以多人一起玩的小游戏程序
二、团队合作:
队员介绍:
队员博客链接:http://www.cnblogs.com/rycq/p/5970751.html
思考问题很有逻辑,学习能力强,认真对待合作项目,不拖延,互相帮助共同进步。
分工介绍:
孙(本人):需求分析,整体设计,代码开发,编写文档
高(队友):查阅资料,学习技术,部分编码 ,测试
队员总结:
认真分析项目的需求,做好总体设计之后开始编程
在编程过程中按照规范的格式进行编写,有缩进,并做好注释
对函数或变量进行合理的命名,容易理解
进行部分测试,在完成功能的前提下尽可能提高运行效率
体会总结:
在项目开发过程中应用了一门新技术,通过多天的学习克服了技术难点,就是时间太紧,学的并不扎实,在这个项目结束后我打算再系统学习一下,从基础学起。
三、环境搭建:
系统:elementary OS (14.04.1-Ubuntu)
Node.js:v0.10.25
技术:nodejs + express + ejs + mysql + sequelize
Mysql:
安装mysql(用户名和密码!!!)
$ sudo apt-get install mysql-server $ apt-get isntall mysql-client $ sudo apt-get install libmysqlclient-dev
登录mysql
mysql -u root -p
常用mysql命令
查看当前的数据库:mysql> show databases;
选择mysql数据库:mysql> use mysql
显示当前数据库的表单:mysql> show tables;
执行sql语句:mysql> select * from games;
Nodejs:
安装nvm
安装nodejs
安装 express
新建express项目
express -e game
cd game
npm install //安装依赖
bin:可执行文件
model:自定义的模板
node_modules: 执行npm install后安装的文件
public:(放置 images,js,.css文件)相对于views文件夹中文件的路径 "/stylesheets/xxx.css"
routs:路由文件
views:模版文件(ejs.html...)
app.js:启动文件
package.json:包含各种所需模块以及项目的配置信息(名称、版本、许可证等)meta 信息。
安装 sequelize 和 mysql模板
$ save sequelize
$ save mysql
运行
> game@0.0.0 start /home/jiali/my > node ./bin/www Executing (default): CREATE TABLE IF NOT EXISTS `games` (`id` INTEGER auto_increment , `turn` INTEGER(5), `name` VARCHAR(30), `input` TEXT, `score` INTEGER(5), `number` INTEGER(5), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB; Executing (default): SHOW INDEX FROM `games` Executing (default): SELECT `id`, `turn`, `name`, `input`, `score`, `number`, `createdAt`, `updatedAt` FROM `games` AS `game`; GET / 304 35.614 ms - - GET /stylesheets/bootstrap.min.css 304 3.504 ms - - GET /javascripts/main.js 304 3.938 ms - - GET /stylesheets/style.css 304 3.750 ms - - GET /javascripts/jquery.min.js 304 3.643 ms - - GET /javascripts/bootstrap.min.js 304 3.265 ms - - GET /javascripts/jquery.validate.min.js 304 3.095 ms - - GET /javascripts/myValidate.js 304 3.052 ms - - Executing (default): SELECT `id`, `turn`, `name`, `input`, `score`, `number`, `createdAt`, `updatedAt` FROM `games` AS `game`;
四、程序设计:(代码托管)
概要设计:
- 输入玩家人数,生成游戏界面,
- 提交表单,在后台处理数据, 添加到数据库
- 从数据库获取 姓名,本轮得分显示到页面
- 重复提交
- 显示历史记录,将数据库中数据显示到页面
详细设计:
game.js
// 连接数据库 var Sequelize = require('sequelize'); var sequelize = new Sequelize( ... ); //定义表的模型 var Game = sequelize.define('game', { ...}); Game.sync(); module.exports = Game;
index.js
var express = require('express'); var router = express.Router(); var Game = require('../model/game'); /* GET home page. */ //查找 router.get('/', function(req, res, next) { Game.findAll().then(function(g) { ... }); }); module.exports = router;
index.ejs
<form method="post" action="/add" id="subForm" class="form form-horizontal"> <div class="row col-lg-12"> <%var a =0 if(games.length==0){a=0 } else{a = (parseInt(games[games.length-1].turn)-1)*parseInt(games[0].number)} for(var i = a;i< games.length; i++) {%> <div class="form-group col-lg-6"> <div class="col-lg-offset-1 col-lg-1"> <label class="control-label" name="id" style="text-align: right;" ><%=i-a+1%></label> </div> <div class="col-lg-offset-1 col-lg-3"> <input type="text" class="form-control" name="name" value= "<%=games[i].name%>" > </div> <div class="col-lg-3"> <input type="text" class="form-control" name="input" > </div> <div class="col-lg-3"> <input type="text" class="form-control" name="score" value="<%=games[i].score%>"> </div> <div> <input type="text" class="form-control" name="number" value="<%=games[0].number%>" style="display: none"> <input type="text" class="form-control" name="turn" value= "<%=games[i].turn+1%>" style="display:none" > </div> </div> <% } %> </div> <div class="row col-lg-12" ><div class="col-lg-2 pull-right" > <input type="submit" class="form-control btn btn-info" id="submit" value="提交""> </div></div> </form>