Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
0_Kursoviy_proekt.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
1.85 Mб
Скачать

Лістинг

Json structure:

{

"version": "0.0.1",

"description": "app monopoliya",

"dependencies": {

"body-parser": "^1.13.3",

"connect-ensure-login": "^0.1.1",

"cookie-parser": "^1.3.5",

"ejs": "^2.3.3",

"express": "^4.13.3",

"express-session": "^1.11.3",

"morgan": "^1.6.1",

"passport": "^0.2.2",

"passport-local": "^1.0.0",

"socket.io": "^1.3.7"

}

}

Server:

var express = require('express'),

app = express(),

http = require('http').Server(app),

io = require('socket.io')(http),

port = 8080;

require("./server/autorization.js").init(app, io);

app.use(express.static(__dirname));

var gameInfo = {

fieldsLen: '',

usersLen: '',

usersList: []

};

io.on('connection', function(socket){

require("./server/chat.js").init(socket, io);

require("./server/game.js").init(socket, io, gameInfo);

});

console.log('Running');

http.listen(port);

Chat:

var exports = module.exports = {};

exports.init = function(socket, io) {

socket.broadcast.emit('user connected');

socket.on('chat message', function(msg, user){

io.emit('chat message', msg, user);

});

socket.on('disconnect', function(){

io.emit('user disconnect');

});

};

Game:

var exports = module.exports = {};

exports.init = function(socket, io, gameInfo) {

socket.on('sent static info', function(fields, users, newUserName){

var i, l, userNew = true;

gameInfo.fieldsLen = fields;

gameInfo.usersLen = users;

for (i = 0, l = gameInfo.usersList.length; i < l; i++){

if (gameInfo.usersList[i] === newUserName){

userNew = false;

break;

}

}

if (userNew){

gameInfo.usersList.push(newUserName);

}

io.emit('list of users', gameInfo.usersList);

});

socket.on('get new user place', function(currentUserPos, moveOfPlayer){

var randomResult = Math.floor((Math.random() * 6) + 1);

currentUserPos += randomResult;

if (currentUserPos >= gameInfo.fieldsLen) {

currentUserPos -= gameInfo.fieldsLen;

}

if (++moveOfPlayer === gameInfo.usersLen) {

moveOfPlayer = 0;

}

io.emit('get new user place', {currentUserPos: currentUserPos, moveOfPlayer: moveOfPlayer });

});

};

Authorization:

var exports = module.exports = {},

passport = require('passport'),

Strategy = require('passport-local').Strategy,

db = require('./db');

exports.init = function(app, io){

passport.use(new Strategy(

function(username, password, cb) {

db.users.findByUsername(username, function(err, user) {

if (err) { return cb(err); }

if (!user) { return cb(null, false); }

if (user.password != password) { return cb(null, false); }

return cb(null, user);

});

}

));

passport.serializeUser(function(user, cb) {

cb(null, user.id);

});

passport.deserializeUser(function(id, cb) {

db.users.findById(id, function (err, user) {

if (err) { return cb(err); }

cb(null, user);

});

});

app.use(require('morgan')('combined'));

app.use(require('cookie-parser')());

app.use(require('body-parser').urlencoded({ extended: true }));

app.use(require('express-session')({ secret: 'keyboard cat', resave: false, saveUninitialized: false }));

app.use(passport.initialize());

app.use(passport.session());

app.post('/login', passport.authenticate('local', { failureRedirect: '/login' }), function(req, res) {

io.emit('save static user information', req.user);

res.redirect('/#');

});

};

Game example markup:

<div class="work-area">

<div class="informational-bar">

</div>

<div class="play-area" data-bind="style: { width: width, height: height }" >

<div class="dashboard-top ">

<!-- ko foreach: allTopItems -->

<div class="vertical-block">

<!-- ko foreach: $parent.users -->

<!-- ko if: $data.positionCurrent() === $parent.cellId,-->

<div class="plyaer-position" data-bind="css: $data.imgClass"></div>

<!--/ko-->

<!-- /ko -->

<span class="sysName" data-bind="text: systemName"></span>

</div>

<!-- /ko -->

</div>

<div class="dashboard-left">

<!-- ko foreach: allLeftItems -->

<div class="gorizontal-block">

<!-- ko foreach: $parent.users -->

<!-- ko if: $data.positionCurrent() === $parent.cellId,-->

<div class="plyaer-position" data-bind="css: $data.imgClass"></div>

<!--/ko-->

<!-- /ko -->

<span class="sysName" data-bind="text: systemName"></span>

</div>

<!-- /ko -->

</div>

<div class="dashboard-right">

<!-- ko foreach: allRightItems -->

<div class="gorizontal-block">

<!-- ko foreach: $parent.users -->

<!-- ko if: $data.positionCurrent() === $parent.cellId,-->

<div class="plyaer-position" data-bind="css: $data.imgClass"></div>

<!--/ko-->

<!-- /ko -->

<span class="sysName" data-bind="text: systemName"></span>

</div>

<!-- /ko -->

</div>

<div class="dashboard-bottom ">

<!-- ko foreach: allBotItems -->

<div class="vertical-block">

<!-- ko foreach: $parent.users -->

<!-- ko if: $data.positionCurrent() === $parent.cellId,-->

<div class="plyaer-position" data-bind="css: $data.imgClass"></div>

<!--/ko-->

<!-- /ko -->

<span class="sysName" data-bind="text: systemName"></span>

</div>

<!-- /ko -->

</div>

<div class="dashboard-centr">

<div class="monopoly-logo"></div>

<div class="play-buttons">

<div class="play-button" data-bind="click: changePosition">Кинути кубик

</div>

<div class="play-button">Купити

</div>

<div class="play-button">Покращити

</div>

</div>

<div class="players-information">

<div class="player-info" data-bind="text: userInfo.name + '/' + userInfo.gold ">

</div>

<div class="player-info">

</div>

</div>

</div>

</div>

</div>