黄金点游戏

一、项目描述:黄金点游戏

黄金点游戏是一个数字小游戏,其游戏规则是:

      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`;

 

四、程序设计:代码托管

 

概要设计:

    1. 输入玩家人数,生成游戏界面,
    2. 提交表单,在后台处理数据, 添加到数据库
    3. 从数据库获取 姓名,本轮得分显示到页面
    4. 重复提交
    5. 显示历史记录,将数据库中数据显示到页面

详细设计:

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>

测试页面:

posted @ 2016-10-16 19:39  00007  阅读(322)  评论(0编辑  收藏  举报