From 2fad09120159800d900968784651f30ceb872807 Mon Sep 17 00:00:00 2001 From: MohammadHossein Date: Thu, 27 May 2021 12:33:26 +0430 Subject: [PATCH] feat: Add increasing score by getting bouns Fixes #1 --- backend/index.js | 328 ++++++++++------ {server => backend}/package.json | 0 backend/src/setup/config.js | 4 +- {server => backend}/yarn.lock | 0 frontend/7475741651600002657.svg | 1 - frontend/GameAnalytics.js | 5 - frontend/Vazir-FD.ttf | Bin 92596 -> 0 bytes frontend/assets/123.png | Bin 12269 -> 0 bytes frontend/assets/i-demand-attention-244.mp3 | Bin 25912 -> 0 bytes frontend/assets/line2.mp3 | Bin 12873 -> 0 bytes ...1dl3IxvAXhsWiAOeGnHXCJGS1XmY9IPajl3OAB.png | Bin 6686 -> 0 bytes frontend/assets/what-302.mp3 | Bin 6686 -> 0 bytes frontend/data.js | 80 ---- .../src/components/rectangle/rectangle.js | 25 +- frontend/game/src/scenes/_slice/game.slice.js | 8 + frontend/gameRender.js | 365 ------------------ frontend/gameStyle.css | 295 -------------- frontend/icon.jpg | Bin 6529 -> 0 bytes frontend/index.html | 58 --- frontend/index.js | 49 --- frontend/logic.js | 93 ----- frontend/router.js | 137 ------- frontend/send-svgrepo-com.svg | 49 --- frontend/weblite.manifest.json | 14 - server/index.js | 298 -------------- server/src/setup/config.js | 25 -- 26 files changed, 244 insertions(+), 1590 deletions(-) rename {server => backend}/package.json (100%) rename {server => backend}/yarn.lock (100%) delete mode 100644 frontend/7475741651600002657.svg delete mode 100644 frontend/GameAnalytics.js delete mode 100644 frontend/Vazir-FD.ttf delete mode 100644 frontend/assets/123.png delete mode 100644 frontend/assets/i-demand-attention-244.mp3 delete mode 100644 frontend/assets/line2.mp3 delete mode 100644 frontend/assets/o61dl3IxvAXhsWiAOeGnHXCJGS1XmY9IPajl3OAB.png delete mode 100644 frontend/assets/what-302.mp3 delete mode 100644 frontend/data.js delete mode 100644 frontend/gameRender.js delete mode 100644 frontend/gameStyle.css delete mode 100644 frontend/icon.jpg delete mode 100644 frontend/index.html delete mode 100644 frontend/index.js delete mode 100644 frontend/logic.js delete mode 100644 frontend/router.js delete mode 100644 frontend/send-svgrepo-com.svg delete mode 100644 frontend/weblite.manifest.json delete mode 100644 server/index.js delete mode 100644 server/src/setup/config.js diff --git a/backend/index.js b/backend/index.js index 2872ceb..61d3403 100644 --- a/backend/index.js +++ b/backend/index.js @@ -1,183 +1,289 @@ const app = require('express')() const http = require('http').createServer(app) -const io = require('socket.io')(http) -const config = require('./src/setup/config') -let rooms = [] -const createRoom = (roomId) => ({ - id: roomId, - users: [], - subscribers: [], - history: [], - turn: 'red', - end: false, -}) - -const createUser = (userId, userSocket) => ({ - id: userId, - name: '', - score: '', - room: '', - color: '', - isTurn: false, - role: '', - connection: false, - socket: userSocket, +const io = require('socket.io')(http, { + cors: { + origin: 'http://localhost:3000', + methods: ['GET', 'POST'], + }, }) - -const getRoom = (roomId) => { - const room = createRoom(roomId) +const config = require('./src/setup/config') +const rooms = [] +const users = [] +const createRoom = (roomId, socketId) => { + const room = { + id: roomId, + userIds: [], + subscriberIds: [], + history: {}, + turn: 'red', + isEnded: false, + socketIds: [socketId], + lastMove: {}, + } rooms.push(room) return room } -const findRoom = (roomId) => { - for (let i = 0; i < rooms.length; i++) - if (rooms[i].id === roomId) return rooms[i] - return false +const createUser = (userId, socketId) => { + const user = { + id: userId, + score: '', + roomIds: [], + color: '', + hasPermission: false, + role: '', + connection: false, + socketId, + } + users.push(user) + return user } -const searchBySocket = (socket, kind) => { - for (let i = 0; i < rooms.length; i++) - for (let j = 0; j < rooms[i].users.length; j++) - if (rooms[i].users[j].socket === socket) { - if (kind === 'user') return rooms[i].users[j] - else return rooms[i] - } - return false -} +// const getUserById = id => -const findUser = (room, userId) => { - for (let i = 0; i < room.users.length; i++) - if (room.users[i].id === userId) return room.users[i] - return false -} +const findRoomById = (roomId) => rooms.find((room) => room.id === roomId) +const findUserById = (userId, roomId) => + users.find((user) => { + const result = !!(user.id === userId && user.roomIds.includes(roomId)) + return result + }) -const configUser = (user, room, color, isTurn, role, connection, socket) => { - user.room = room +const findUserBySocketId = (socketId) => + users.find((user) => user.socketId === socketId) +const findRoomBySocketId = (socketId) => + rooms.find((room) => room.socketIds.includes(socketId)) + +const configUser = ({ + user, + room, + color, + hasPermission, + role, + connection, + socketId, +}) => { + user.roomIds.push(room.id) user.color = color - user.isTurn = isTurn + user.hasPermission = hasPermission user.role = role user.connection = connection - user.socket = socket + user.socketId = socketId } +const configRoom = {} + const hostFirstUser = (room, user, socket) => { - configUser(user, room, 'red', true, 'player', true, socket) + console.log( + `hosting first user with userId: ${user.id} in room with roomId: ${room.id}` + ) + configUser({ + user, + room, + color: 'red', + hasPermission: true, + role: 'player', + connection: true, + socketId: socket.id, + }) room.turn = 'red' - room.users.push(user) + room.userIds.push(user.id) + room.socketIds.push(socket.id) + socket.emit('hasPermission', user.hasPermission) socket.join(room.id) socket.emit('color', 'red') - socket.emit('wait', 'wait') + socket.emit('mustWait', true) } const hostSecondUser = (room, user, socket) => { - configUser(user, room, undefined, undefined, 'player', true, socket) - const secondUser = - room.users[0].id === user.id ? room.users[1] : room.users[0] + console.log( + `hosting second user with userId: ${user.id} in room with roomId: ${room.id}` + ) + + configUser({ + user, + room, + color: undefined, + hasPermission: false, + role: 'player', + connection: true, + socketId: socket.id, + }) + const secondUser = findUserById( + room.userIds[0] === user.id ? room.userIds[1] : room.userIds[0], + room.id + ) + console.log('roomTurn: ', room.turn) if (secondUser && secondUser.color === 'red') user.color = 'blue' else user.color = 'red' - if (room.turn !== user.color) user.isTurn = false - else user.isTurn = true - room.users.push(user) + user.hasPermission = room.turn === user.color + console.log('user has permission? ', user.hasPermission) + if (!room.userIds.includes(user.id)) room.userIds.push(user.id) + if (!room.socketIds.includes(socket.id)) room.socketIds.push(socket.id) + socket.emit('color', user.color) - socket.emit('permission', user.isTurn) + socket.emit('hasPermission', user.hasPermission) socket.emit('watch', room.history) - socket.broadcast.to(room.id).emit('wait', 'play') socket.join(room.id) + io.to(room.id).emit('mustWait', false) io.to(room.id).emit('introduce', 'hello') } const hostSubscriber = (room, user, socket) => { - configUser(user, room, undefined, undefined, 'subscriber', true, socket) - room.subscribers.push(user) + console.log( + `hosting subscriber with userId: ${user.id} in room with roomId: ${room.id}` + ) + configUser({ + user, + room, + color: undefined, + hasPermission: false, + role: 'subscriber', + connection: true, + socketId: socket.id, + }) + room.subscriberIds.push(user.id) socket.join(room.id) socket.emit('role', 'subscriber', room.turn) socket.emit('watch', room.history) } -const directToRoom = (roomId, userId, socket) => { - const room = findRoom(roomId) || getRoom(roomId) - const user = findUser(room, userId) || createUser(userId, socket) - switch (room.users.length) { - case 0: - hostFirstUser(room, user, socket) - break - case 1: - hostSecondUser(room, user, socket) - break - default: - if (findUser(room, userId)) hostSecondUser(room, user, socket) - else hostSubscriber(room, user, socket) - break +const directUserToRoom = (roomId, userId, socket) => { + const room = findRoomById(roomId) || createRoom(roomId, socket.id) + const user = findUserById(userId, roomId) || createUser(userId, socket.id) + if (room.userIds.includes(user.id)) { + console.log('direct to room', room, user) + socket.emit('warning', 'multiple device') + socket.disconnect(true) + } else { + switch (room.userIds.length) { + case 0: + hostFirstUser(room, user, socket) + break + case 1: + hostSecondUser(room, user, socket) + break + default: + if (!!findUserById(userId, roomId)) hostSecondUser(room, user, socket) + else hostSubscriber(room, user, socket) + break + } } } const checkValidation = (room, user, type) => { - const result = user.connection && !room.end && user.role === 'player' - if (type === 'change') - return user.isTurn && room.turn === user.color && result - else return !user.isTurn && room.turn !== user.color && result + const result = + user && room && user.connection && !room.end && user.role === 'player' + if (type === 'change') { + console.log( + `check validation user id: ${user.id} hasPermission is: ${user.hasPermission}` + ) + return user.hasPermission && room.turn === user.color && result + } else { + console.log( + `check validation user id: ${user.id}`, + !user.hasPermission, + room.turn !== user.color, + result + ) + return !user.hasPermission && room.turn !== user.color && result + } } -const changeTurn = (room) => { - if (room.turn === 'red') room.turn = 'blue' - else if (room.turn === 'blue') room.turn = 'red' - for (let i = 0; i < room.users.length; i++) - room.users[i].isTurn = !room.users[i].isTurn +const changeTurn = (room, userId) => { + if (room && room.turn === 'red') room.turn = 'blue' + else if (room && room.turn === 'blue') room.turn = 'red' + for (let i = 0; i < room.userIds.length; i++) { + const user = findUserById(room.userIds[i], room.id) + if (user.id === userId) user.hasPermission = false + else user.hasPermission = true + } return true } const check = (room, user, type) => { - if (checkValidation(room, user, type)) return changeTurn(room) + if (checkValidation(room, user, type)) return changeTurn(room, user.id) return false } io.on('connection', (socket) => { socket.emit('handshake', 'welcome! give me your room id!') - socket.on('handshake', (roomId, userId) => { - directToRoom(roomId, userId, socket) - }) - socket.on('introduce', (userId, roomId, name) => { - const room = findRoom(roomId) - const user = findUser(room, userId) - user.name = name - socket.broadcast.to(room.id).emit('name', name) + socket.on('handshake', (input) => { + const { roomId, userId } = input + directUserToRoom(roomId, userId, socket) }) + socket.on('introduce', (userId, roomId) => + socket.broadcast.to(roomId).emit('name', userId) + ) socket.on('disconnect', () => { - const room = searchBySocket(socket, 'room') - const user = searchBySocket(socket, 'user') - user.connection = false - if (user.role === 'player') - socket.broadcast.to(room.id).emit('wait', 'wait') + const user = findUserBySocketId(socket.id) + const room = findRoomBySocketId(socket.id) + console.log( + `user with ${user ? 'user' : 'socket'}id ${ + user ? user.id : socket.id + } disconnected` + ) + if (user) user.connection = false + if (user && user.role === 'player') { + room.userIds.splice(room.userIds.indexOf(user.id), 1) + socket.broadcast.to(room.id).emit('mustWait', true) + } }) - socket.on('change', (userId, roomId, change) => { - const room = findRoom(roomId) - const user = findUser(room, userId) + socket.on('change', (userId, roomId, line) => { + const room = findRoomById(roomId) + const user = findUserById(userId, roomId) + console.log('new line arrived: ', line) if (check(room, user, 'change')) { - change.color = user.color - room.history.push(change) - socket.broadcast.to(room.id).emit('change', change, user.color) + const { i, j, color } = line + line.color = user.color + room.lastMove = line + room.history[i] = { ...room.history[i] } + room.history[i][j] = color + socket.broadcast.to(room.id).emit('change', line, color) } else socket.emit('warning', 'warning') }) + socket.on('bouns', (roomId, userId, bouns) => { + const room = findRoomById(roomId) + const user = findUserById(userId, roomId) + if (user && user.color === bouns.color) { + const { i, j, color } = bouns + if (room.history[i] && room.history[i][j]) { + } else { + console.log(`new bouns arrived:`, bouns, `from user:`, user.id) + room.history[i] = { ...room.history[i] } + room.history[i][j] = color + + // sending gift! + if (room) room.turn = user.color + for (let i = 0; i < room.userIds.length; i++) { + const user = findUserById(room.userIds[i], room.id) + if (user.id === userId) user.hasPermission = true + else user.hasPermission = false + } + io.to(roomId).emit('gift', userId) + } + } + }) socket.on('gift', (userId, roomId) => { - const room = findRoom(roomId) - const user = findUser(room, userId) + const room = findRoomById(roomId) + const user = findUserById(userId, roomId) + console.log('new gift request arrived by user id:', userId) + if (check(room, user, 'gift')) io.to(room.id).emit('gift') else socket.emit('warning', 'warning') }) socket.on('resign', (userId, roomId) => { - const room = findRoom(roomId) - const user = findRoom(room, userId) + const room = findRoomById(roomId) + const user = findUserById(userId, roomId) room.end = true user.connection = false socket.broadcast.to(room.id).emit('resign', 'salam') }) socket.on('getname', (roomId) => { - const room = findRoom(roomId) + const room = findRoomById(roomId) let redName, blueName - for (let i = 0; i < room.users.length; i++) { - const element = room.users[i] + for (let i = 0; i < room.userIds.length; i++) { + const element = room.userIds[i] if (element.color === 'red') redName = element.name else blueName = element.name } @@ -185,7 +291,7 @@ io.on('connection', (socket) => { }) socket.on('message', (roomId, message) => { - const room = findRoom(roomId) + const room = findRoomById(roomId) socket.broadcast.to(room.id).emit('message', message) }) }) diff --git a/server/package.json b/backend/package.json similarity index 100% rename from server/package.json rename to backend/package.json diff --git a/backend/src/setup/config.js b/backend/src/setup/config.js index 3e1264b..862877c 100644 --- a/backend/src/setup/config.js +++ b/backend/src/setup/config.js @@ -6,14 +6,14 @@ const production = process.env.NODE_ENV === 'production' const defaultConfig = { server: { host: production ? 'localhost' : undefined, // all IPs - port: 3000, + port: 13797, }, } const getLocalConfig = () => { try { const config = fse.readJsonSync(process.env.WEBLITE_CONFIG_PATH)[ - 'نقطه‌بازی' + 'dots-and-boxes' ] if (!R.is(Object, config) || R.is(Array, config)) throw new TypeError() return config diff --git a/server/yarn.lock b/backend/yarn.lock similarity index 100% rename from server/yarn.lock rename to backend/yarn.lock diff --git a/frontend/7475741651600002657.svg b/frontend/7475741651600002657.svg deleted file mode 100644 index 4e9fcf8..0000000 --- a/frontend/7475741651600002657.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/frontend/GameAnalytics.js b/frontend/GameAnalytics.js deleted file mode 100644 index e8a3714..0000000 --- a/frontend/GameAnalytics.js +++ /dev/null @@ -1,5 +0,0 @@ -(function(scope){ -var CryptoJS=CryptoJS||function(o){function t(){}var e={},n=e.lib={},i=n.Base={extend:function(e){t.prototype=this;var n=new t;return e&&n.mixIn(e),n.hasOwnProperty("init")||(n.init=function(){n.$super.init.apply(this,arguments)}),(n.init.prototype=n).$super=this,n},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var n in e)e.hasOwnProperty(n)&&(this[n]=e[n]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},u=n.WordArray=i.extend({init:function(e,n){e=this.words=e||[],this.sigBytes=null!=n?n:4*e.length},toString:function(e){return(e||s).stringify(this)},concat:function(e){var n=this.words,t=e.words,i=this.sigBytes;if(e=e.sigBytes,this.clamp(),i%4)for(var r=0;r>>2]|=(t[r>>>2]>>>24-r%4*8&255)<<24-(i+r)%4*8;else if(65535>>2]=t[r>>>2];else n.push.apply(n,t);return this.sigBytes+=e,this},clamp:function(){var e=this.words,n=this.sigBytes;e[n>>>2]&=4294967295<<32-n%4*8,e.length=o.ceil(n/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var n=[],t=0;t>>2]>>>24-i%4*8&255;t.push((r>>>4).toString(16)),t.push((15&r).toString(16))}return t.join("")},parse:function(e){for(var n=e.length,t=[],i=0;i>>3]|=parseInt(e.substr(i,2),16)<<24-i%8*4;return new u.init(t,n/2)}},a=r.Latin1={stringify:function(e){var n=e.words;e=e.sigBytes;for(var t=[],i=0;i>>2]>>>24-i%4*8&255));return t.join("")},parse:function(e){for(var n=e.length,t=[],i=0;i>>2]|=(255&e.charCodeAt(i))<<24-i%4*8;return new u.init(t,n)}},d=r.Utf8={stringify:function(e){try{return decodeURIComponent(escape(a.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return a.parse(unescape(encodeURIComponent(e)))}},c=n.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new u.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=d.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(e){var n=this._data,t=n.words,i=n.sigBytes,r=this.blockSize,s=i/(4*r);if(e=(s=e?o.ceil(s):o.max((0|s)-this._minBufferSize,0))*r,i=o.min(4*e,i),e){for(var a=0;a>>7)^(v<<14|v>>>18)^v>>>3)+m[l-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+m[l-16]}v=c+((o<<26|o>>>6)^(o<<21|o>>>11)^(o<<7|o>>>25))+(o&u^~o&d)+f[l]+m[l],g=((i<<30|i>>>2)^(i<<19|i>>>13)^(i<<10|i>>>22))+(i&r^i&s^r&s),c=d,d=u,u=o,o=a+v|0,a=s,s=r,r=i,i=v+g|0}t[0]=t[0]+i|0,t[1]=t[1]+r|0,t[2]=t[2]+s|0,t[3]=t[3]+a|0,t[4]=t[4]+o|0,t[5]=t[5]+u|0,t[6]=t[6]+d|0,t[7]=t[7]+c|0},_doFinalize:function(){var e=this._data,n=e.words,t=8*this._nDataBytes,i=8*e.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(64+i>>>9<<4)]=r.floor(t/4294967296),n[15+(64+i>>>9<<4)]=t,e.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=i.clone.call(this);return e._hash=this._hash.clone(),e}});n.SHA256=i._createHelper(s),n.HmacSHA256=i._createHmacHelper(s)}(Math),function(){var d=CryptoJS.enc.Utf8;CryptoJS.algo.HMAC=CryptoJS.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=d.parse(n));var t=e.blockSize,i=4*t;n.sigBytes>i&&(n=e.finalize(n)),n.clamp();for(var r=this._oKey=n.clone(),s=this._iKey=n.clone(),a=r.words,o=s.words,u=0;u>>2]>>>24-r%4*8&255)<<16|(n[r+1>>>2]>>>24-(r+1)%4*8&255)<<8|n[r+2>>>2]>>>24-(r+2)%4*8&255,a=0;a<4&&r+.75*a>>6*(3-a)&63));if(n=i.charAt(64))for(;e.length%4;)e.push(n);return e.join("")},parse:function(e){var n=e.length,t=this._map;!(i=t.charAt(64))||-1!=(i=e.indexOf(i))&&(n=i);for(var i=[],r=0,s=0;s>>6-s%4*2;i[r>>>2]|=(a|o)<<24-r%4*8,r++}return u.create(i,r)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){var n,t,i,r,s,a,o,u,d,c;(n=e.EGAErrorSeverity||(e.EGAErrorSeverity={}))[n.Undefined=0]="Undefined",n[n.Debug=1]="Debug",n[n.Info=2]="Info",n[n.Warning=3]="Warning",n[n.Error=4]="Error",n[n.Critical=5]="Critical",(t=e.EGAProgressionStatus||(e.EGAProgressionStatus={}))[t.Undefined=0]="Undefined",t[t.Start=1]="Start",t[t.Complete=2]="Complete",t[t.Fail=3]="Fail",(i=e.EGAResourceFlowType||(e.EGAResourceFlowType={}))[i.Undefined=0]="Undefined",i[i.Source=1]="Source",i[i.Sink=2]="Sink",r=e.http||(e.http={}),(s=r.EGAHTTPApiResponse||(r.EGAHTTPApiResponse={}))[s.NoResponse=0]="NoResponse",s[s.BadResponse=1]="BadResponse",s[s.RequestTimeout=2]="RequestTimeout",s[s.JsonEncodeFailed=3]="JsonEncodeFailed",s[s.JsonDecodeFailed=4]="JsonDecodeFailed",s[s.InternalServerError=5]="InternalServerError",s[s.BadRequest=6]="BadRequest",s[s.Unauthorized=7]="Unauthorized",s[s.UnknownResponseCode=8]="UnknownResponseCode",s[s.Ok=9]="Ok",s[s.Created=10]="Created",a=e.events||(e.events={}),(o=a.EGASdkErrorCategory||(a.EGASdkErrorCategory={}))[o.Undefined=0]="Undefined",o[o.EventValidation=1]="EventValidation",o[o.Database=2]="Database",o[o.Init=3]="Init",o[o.Http=4]="Http",o[o.Json=5]="Json",(u=a.EGASdkErrorArea||(a.EGASdkErrorArea={}))[u.Undefined=0]="Undefined",u[u.BusinessEvent=1]="BusinessEvent",u[u.ResourceEvent=2]="ResourceEvent",u[u.ProgressionEvent=3]="ProgressionEvent",u[u.DesignEvent=4]="DesignEvent",u[u.ErrorEvent=5]="ErrorEvent",u[u.InitHttp=9]="InitHttp",u[u.EventsHttp=10]="EventsHttp",u[u.ProcessEvents=11]="ProcessEvents",u[u.AddEventsToStore=12]="AddEventsToStore",(d=a.EGASdkErrorAction||(a.EGASdkErrorAction={}))[d.Undefined=0]="Undefined",d[d.InvalidCurrency=1]="InvalidCurrency",d[d.InvalidShortString=2]="InvalidShortString",d[d.InvalidEventPartLength=3]="InvalidEventPartLength",d[d.InvalidEventPartCharacters=4]="InvalidEventPartCharacters",d[d.InvalidStore=5]="InvalidStore",d[d.InvalidFlowType=6]="InvalidFlowType",d[d.StringEmptyOrNull=7]="StringEmptyOrNull",d[d.NotFoundInAvailableCurrencies=8]="NotFoundInAvailableCurrencies",d[d.InvalidAmount=9]="InvalidAmount",d[d.NotFoundInAvailableItemTypes=10]="NotFoundInAvailableItemTypes",d[d.WrongProgressionOrder=11]="WrongProgressionOrder",d[d.InvalidEventIdLength=12]="InvalidEventIdLength",d[d.InvalidEventIdCharacters=13]="InvalidEventIdCharacters",d[d.InvalidProgressionStatus=15]="InvalidProgressionStatus",d[d.InvalidSeverity=16]="InvalidSeverity",d[d.InvalidLongString=17]="InvalidLongString",d[d.DatabaseTooLarge=18]="DatabaseTooLarge",d[d.DatabaseOpenOrCreate=19]="DatabaseOpenOrCreate",d[d.JsonError=25]="JsonError",d[d.FailHttpJsonDecode=29]="FailHttpJsonDecode",d[d.FailHttpJsonEncode=30]="FailHttpJsonEncode",(c=a.EGASdkErrorParameter||(a.EGASdkErrorParameter={}))[c.Undefined=0]="Undefined",c[c.Currency=1]="Currency",c[c.CartType=2]="CartType",c[c.ItemType=3]="ItemType",c[c.ItemId=4]="ItemId",c[c.Store=5]="Store",c[c.FlowType=6]="FlowType",c[c.Amount=7]="Amount",c[c.Progression01=8]="Progression01",c[c.Progression02=9]="Progression02",c[c.Progression03=10]="Progression03",c[c.EventId=11]="EventId",c[c.ProgressionStatus=12]="ProgressionStatus",c[c.Severity=13]="Severity",c[c.Message=14]="Message"}(gameanalytics=gameanalytics||{});var gameanalytics,EGAErrorSeverity=gameanalytics.EGAErrorSeverity,EGAProgressionStatus=gameanalytics.EGAProgressionStatus,EGAResourceFlowType=gameanalytics.EGAResourceFlowType;!function(e){!function(e){var t,n;(n=t=t||{})[n.Error=0]="Error",n[n.Warning=1]="Warning",n[n.Info=2]="Info",n[n.Debug=3]="Debug";var i=(r.setInfoLog=function(e){r.instance.infoLogEnabled=e},r.setVerboseLog=function(e){r.instance.infoLogVerboseEnabled=e},r.i=function(e){if(r.instance.infoLogEnabled){var n="Info/"+r.Tag+": "+e;r.instance.sendNotificationMessage(n,t.Info)}},r.w=function(e){var n="Warning/"+r.Tag+": "+e;r.instance.sendNotificationMessage(n,t.Warning)},r.e=function(e){var n="Error/"+r.Tag+": "+e;r.instance.sendNotificationMessage(n,t.Error)},r.ii=function(e){if(r.instance.infoLogVerboseEnabled){var n="Verbose/"+r.Tag+": "+e;r.instance.sendNotificationMessage(n,t.Info)}},r.d=function(e){if(r.debugEnabled){var n="Debug/"+r.Tag+": "+e;r.instance.sendNotificationMessage(n,t.Debug)}},r.prototype.sendNotificationMessage=function(e,n){switch(n){case t.Error:console.error(e);break;case t.Warning:console.warn(e);break;case t.Debug:"function"==typeof console.debug?console.debug(e):console.log(e);break;case t.Info:console.log(e)}},r.instance=new r,r.Tag="GameAnalytics",r);function r(){r.debugEnabled=!1}e.GALogger=i}(e.logging||(e.logging={}))}(gameanalytics=gameanalytics||{}),function(e){var n,d,t;function c(){}n=e.utilities||(e.utilities={}),d=e.logging.GALogger,c.getHmac=function(e,n){var t=CryptoJS.HmacSHA256(n,e);return CryptoJS.enc.Base64.stringify(t)},c.stringMatch=function(e,n){return!(!e||!n)&&n.test(e)},c.joinStringArray=function(e,n){for(var t="",i=0,r=e.length;i>2,r=(3&n)<<4|(t=e.charCodeAt(d++))>>4,s=(15&t)<<2|(o=e.charCodeAt(d++))>>6,u=63&o,isNaN(t)?s=u=64:isNaN(o)&&(u=64),a=a+c.keyStr.charAt(i)+c.keyStr.charAt(r)+c.keyStr.charAt(s)+c.keyStr.charAt(u),n=t=o=0,i=r=s=u=0,de)return u.w(s+" validation failed: array cannot exceed "+e+" values. It has "+r.length+" values."),!1;for(var a=0;av.MaxNumberOfEntries},v.select=function(e,n,t,i){void 0===n&&(n=[]),void 0===t&&(t=!1),void 0===i&&(i=0);var r=v.getStore(e);if(!r)return null;for(var s=[],a=0;ai&&(s=s.slice(0,i+1)),s},v.update=function(e,n,t){void 0===t&&(t=[]);var i=v.getStore(e);if(!i)return!1;for(var r=0;r=d.MaxCount)){var s=o.getHmac(i,t),a=new XMLHttpRequest;a.onreadystatechange=function(){if(4===a.readyState){if(!a.responseText)return;if(200!=a.status)return void u.w("sdk error failed. response code not 200. status code: "+a.status+", description: "+a.statusText+", body: "+a.responseText);d.countMap[n]=d.countMap[n]+1}},a.open("POST",e,!0),a.setRequestHeader("Content-Type","application/json"),a.setRequestHeader("Authorization",s);try{a.send(t)}catch(e){console.error(e)}}},d.MaxCount=10,d.countMap={},d.timestampMap={},t=d,n.SdkErrorTask=t}(gameanalytics=gameanalytics||{}),function(e){var c,E,S,l,h,y,v,g,f,m,n;function A(){this.protocol="https",this.hostName="api.gameanalytics.com",this.version="v2",this.remoteConfigsVersion="v1",this.baseUrl=this.protocol+"://"+this.hostName+"/"+this.version,this.remoteConfigsBaseUrl=this.protocol+"://"+this.hostName+"/remote_configs/"+this.remoteConfigsVersion,this.initializeUrlPath="init",this.eventsUrlPath="events",this.useGzip=!1}c=e.http||(e.http={}),E=e.state.GAState,S=e.logging.GALogger,l=e.utilities.GAUtilities,h=e.validators.GAValidator,y=e.tasks.SdkErrorTask,v=e.events.EGASdkErrorCategory,g=e.events.EGASdkErrorArea,f=e.events.EGASdkErrorAction,m=e.events.EGASdkErrorParameter,A.prototype.requestInit=function(e,n){var t=E.getGameKey(),i=this.remoteConfigsBaseUrl+"/"+this.initializeUrlPath+"?game_key="+t+"&interval_seconds=0&configs_hash="+e,r=E.getInitAnnotations(),s=JSON.stringify(r);if(s){var a=this.createPayloadData(s,this.useGzip),o=[];o.push(s),A.sendRequest(i,a,o,this.useGzip,A.initRequestCallback,n)}else n(c.EGAHTTPApiResponse.JsonEncodeFailed,null)},A.prototype.sendEventsInArray=function(e,n,t){if(0!=e.length){var i=E.getGameKey(),r=this.baseUrl+"/"+i+"/"+this.eventsUrlPath,s=JSON.stringify(e);if(s){var a=this.createPayloadData(s,this.useGzip),o=[];o.push(s),o.push(n),o.push(e.length.toString()),A.sendRequest(r,a,o,this.useGzip,A.sendEventInArrayRequestCallback,t)}else t(c.EGAHTTPApiResponse.JsonEncodeFailed,null,n,e.length)}},A.prototype.sendSdkErrorEvent=function(e,n,t,i,r,s,a){if(E.isEventSubmissionEnabled()&&h.validateSdkErrorEvent(s,a,e,n,t)){var o,u=this.baseUrl+"/"+s+"/"+this.eventsUrlPath,d="",c=E.getSdkErrorEventAnnotations(),l=A.sdkErrorCategoryString(e);d+=c.error_category=l;var v=A.sdkErrorAreaString(n);d+=":"+(c.error_area=v);var g=A.sdkErrorActionString(t);c.error_action=g;var f=A.sdkErrorParameterString(i);if(0A.MAX_ERROR_MESSAGE_LENGTH&&(m=r.substring(0,A.MAX_ERROR_MESSAGE_LENGTH)),c.reason=m}var p=[];p.push(c),(o=JSON.stringify(p))?y.execute(u,d,o,a):S.w("sendSdkErrorEvent: JSON encoding failed.")}},A.sendEventInArrayRequestCallback=function(e,n,t,i){void 0===i&&(i=null),i[0],i[1];var r,s,a=i[2],o=parseInt(i[3]);r=e.responseText,s=e.status;var u=A.instance.processRequestResponse(s,e.statusText,r,"Events");if(u==c.EGAHTTPApiResponse.Ok||u==c.EGAHTTPApiResponse.Created||u==c.EGAHTTPApiResponse.BadRequest){var d=r?JSON.parse(r):{};if(null==d)return t(c.EGAHTTPApiResponse.JsonDecodeFailed,null,a,o),void A.instance.sendSdkErrorEvent(v.Http,g.EventsHttp,f.FailHttpJsonDecode,m.Undefined,r,E.getGameKey(),E.getGameSecret());c.EGAHTTPApiResponse.BadRequest,t(u,d,a,o)}else t(u,null,a,o)},A.sendRequest=function(e,n,t,i,r,s){var a=new XMLHttpRequest,o=E.getGameSecret(),u=l.getHmac(o,n),d=[];for(var c in d.push(u),t)d.push(t[c]);if(a.onreadystatechange=function(){4===a.readyState&&r(a,e,s,d)},a.open("POST",e,!0),a.setRequestHeader("Content-Type","application/json"),a.setRequestHeader("Authorization",u),i)throw new Error("gzip not supported");try{a.send(n)}catch(e){console.error(e.stack)}},A.initRequestCallback=function(e,n,t,i){var r,s;void 0===i&&(i=null),i[0],i[1],r=e.responseText,s=e.status;var a=r?JSON.parse(r):{},o=A.instance.processRequestResponse(s,e.statusText,r,"Init");if(o==c.EGAHTTPApiResponse.Ok||o==c.EGAHTTPApiResponse.Created||o==c.EGAHTTPApiResponse.BadRequest){if(null==a)return t(c.EGAHTTPApiResponse.JsonDecodeFailed,null,"",0),void A.instance.sendSdkErrorEvent(v.Http,g.InitHttp,f.FailHttpJsonDecode,m.Undefined,r,E.getGameKey(),E.getGameSecret());if(o!==c.EGAHTTPApiResponse.BadRequest){var u=h.validateAndCleanInitRequestResponse(a,o===c.EGAHTTPApiResponse.Created);u?t(o,u,"",0):t(c.EGAHTTPApiResponse.BadResponse,null,"",0)}else t(o,null,"",0)}else t(o,null,"",0)},A.prototype.createPayloadData=function(e,n){if(n)throw new Error("gzip not supported");return e},A.prototype.processRequestResponse=function(e,n,t,i){return t?200===e?c.EGAHTTPApiResponse.Ok:201===e?c.EGAHTTPApiResponse.Created:0===e||401===e?c.EGAHTTPApiResponse.Unauthorized:400===e?c.EGAHTTPApiResponse.BadRequest:500===e?c.EGAHTTPApiResponse.InternalServerError:c.EGAHTTPApiResponse.UnknownResponseCode:c.EGAHTTPApiResponse.NoResponse},A.sdkErrorCategoryString=function(e){switch(e){case v.EventValidation:return"event_validation";case v.Database:return"db";case v.Init:return"init";case v.Http:return"http";case v.Json:return"json"}return""},A.sdkErrorAreaString=function(e){switch(e){case g.BusinessEvent:return"business";case g.ResourceEvent:return"resource";case g.ProgressionEvent:return"progression";case g.DesignEvent:return"design";case g.ErrorEvent:return"error";case g.InitHttp:return"init_http";case g.EventsHttp:return"events_http";case g.ProcessEvents:return"process_events";case g.AddEventsToStore:return"add_events_to_store"}return""},A.sdkErrorActionString=function(e){switch(e){case f.InvalidCurrency:return"invalid_currency";case f.InvalidShortString:return"invalid_short_string";case f.InvalidEventPartLength:return"invalid_event_part_length";case f.InvalidEventPartCharacters:return"invalid_event_part_characters";case f.InvalidStore:return"invalid_store";case f.InvalidFlowType:return"invalid_flow_type";case f.StringEmptyOrNull:return"string_empty_or_null";case f.NotFoundInAvailableCurrencies:return"not_found_in_available_currencies";case f.InvalidAmount:return"invalid_amount";case f.NotFoundInAvailableItemTypes:return"not_found_in_available_item_types";case f.WrongProgressionOrder:return"wrong_progression_order";case f.InvalidEventIdLength:return"invalid_event_id_length";case f.InvalidEventIdCharacters:return"invalid_event_id_characters";case f.InvalidProgressionStatus:return"invalid_progression_status";case f.InvalidSeverity:return"invalid_severity";case f.InvalidLongString:return"invalid_long_string";case f.DatabaseTooLarge:return"db_too_large";case f.DatabaseOpenOrCreate:return"db_open_or_create";case f.JsonError:return"json_error";case f.FailHttpJsonDecode:return"fail_http_json_decode";case f.FailHttpJsonEncode:return"fail_http_json_encode"}return""},A.sdkErrorParameterString=function(e){switch(e){case m.Currency:return"currency";case m.CartType:return"cart_type";case m.ItemType:return"item_type";case m.ItemId:return"item_id";case m.Store:return"store";case m.FlowType:return"flow_type";case m.Amount:return"amount";case m.Progression01:return"progression01";case m.Progression02:return"progression02";case m.Progression03:return"progression03";case m.EventId:return"event_id";case m.ProgressionStatus:return"progression_status";case m.Severity:return"severity";case m.Message:return"message"}return""},A.instance=new A,A.MAX_ERROR_MESSAGE_LENGTH=256,n=A,c.GAHTTPApi=n}(gameanalytics=gameanalytics||{}),function(v){var g,f,m,p,E,S,h,d,y,A,e;function C(){}g=v.events||(v.events={}),f=v.store.GAStore,m=v.store.EGAStore,p=v.store.EGAStoreArgsOperator,E=v.state.GAState,S=v.logging.GALogger,h=v.utilities.GAUtilities,d=v.http.EGAHTTPApiResponse,y=v.http.GAHTTPApi,A=v.validators.GAValidator,C.addSessionStartEvent=function(){if(E.isEventSubmissionEnabled()){var e={};e.category=C.CategorySessionStart,E.incrementSessionNum(),f.setItem(E.getGameKey(),E.SessionNumKey,E.getSessionNum().toString()),C.addDimensionsToEvent(e),C.addEventToStore(e),S.i("Add SESSION START event"),C.processEvents(C.CategorySessionStart,!1)}},C.addSessionEndEvent=function(){if(E.isEventSubmissionEnabled()){var e=E.getSessionStart(),n=E.getClientTsAdjusted()-e;n<0&&(S.w("Session length was calculated to be less then 0. Should not be possible. Resetting to 0."),n=0);var t={};t.category=C.CategorySessionEnd,t.length=n,C.addDimensionsToEvent(t),C.addEventToStore(t),S.i("Add SESSION END event."),C.processEvents("",!1)}},C.addBusinessEvent=function(e,n,t,i,r,s){if(void 0===r&&(r=null),E.isEventSubmissionEnabled()){var a=A.validateBusinessEvent(e,n,r,t,i);if(null==a){var o={};E.incrementTransactionNum(),f.setItem(E.getGameKey(),E.TransactionNumKey,E.getTransactionNum().toString()),o.event_id=t+":"+i,o.category=C.CategoryBusiness,o.currency=e,o.amount=n,o[E.TransactionNumKey]=E.getTransactionNum(),r&&(o.cart_type=r),C.addDimensionsToEvent(o),C.addFieldsToEvent(o,E.validateAndCleanCustomFields(s)),S.i("Add BUSINESS event: {currency:"+e+", amount:"+n+", itemType:"+t+", itemId:"+i+", cartType:"+r+"}"),C.addEventToStore(o)}else y.instance.sendSdkErrorEvent(a.category,a.area,a.action,a.parameter,a.reason,E.getGameKey(),E.getGameSecret())}},C.addResourceEvent=function(e,n,t,i,r,s){if(E.isEventSubmissionEnabled()){var a=A.validateResourceEvent(e,n,t,i,r,E.getAvailableResourceCurrencies(),E.getAvailableResourceItemTypes());if(null==a){e===v.EGAResourceFlowType.Sink&&(t*=-1);var o={},u=C.resourceFlowTypeToString(e);o.event_id=u+":"+n+":"+i+":"+r,o.category=C.CategoryResource,o.amount=t,C.addDimensionsToEvent(o),C.addFieldsToEvent(o,E.validateAndCleanCustomFields(s)),S.i("Add RESOURCE event: {currency:"+n+", amount:"+t+", itemType:"+i+", itemId:"+r+"}"),C.addEventToStore(o)}else y.instance.sendSdkErrorEvent(a.category,a.area,a.action,a.parameter,a.reason,E.getGameKey(),E.getGameSecret())}},C.addProgressionEvent=function(e,n,t,i,r,s,a){if(E.isEventSubmissionEnabled()){var o=C.progressionStatusToString(e),u=A.validateProgressionEvent(e,n,t,i);if(null==u){var d,c={};d=t?i?n+":"+t+":"+i:n+":"+t:n,c.category=C.CategoryProgression,c.event_id=o+":"+d;var l=0;s&&e!=v.EGAProgressionStatus.Start&&(c.score=r),e===v.EGAProgressionStatus.Fail&&E.incrementProgressionTries(d),e===v.EGAProgressionStatus.Complete&&(E.incrementProgressionTries(d),l=E.getProgressionTries(d),c.attempt_num=l,E.clearProgressionTries(d)),C.addDimensionsToEvent(c),C.addFieldsToEvent(c,E.validateAndCleanCustomFields(a)),S.i("Add PROGRESSION event: {status:"+o+", progression01:"+n+", progression02:"+t+", progression03:"+i+", score:"+r+", attempt:"+l+"}"),C.addEventToStore(c)}else y.instance.sendSdkErrorEvent(u.category,u.area,u.action,u.parameter,u.reason,E.getGameKey(),E.getGameSecret())}},C.addDesignEvent=function(e,n,t,i){if(E.isEventSubmissionEnabled()){var r=A.validateDesignEvent(e);if(null==r){var s={};s.category=C.CategoryDesign,s.event_id=e,t&&(s.value=n),C.addDimensionsToEvent(s),C.addFieldsToEvent(s,E.validateAndCleanCustomFields(i)),S.i("Add DESIGN event: {eventId:"+e+", value:"+n+"}"),C.addEventToStore(s)}else y.instance.sendSdkErrorEvent(r.category,r.area,r.action,r.parameter,r.reason,E.getGameKey(),E.getGameSecret())}},C.addErrorEvent=function(e,n,t){if(E.isEventSubmissionEnabled()){var i=C.errorSeverityToString(e),r=A.validateErrorEvent(e,n);if(null==r){var s={};s.category=C.CategoryError,s.severity=i,s.message=n,C.addDimensionsToEvent(s),C.addFieldsToEvent(s,E.validateAndCleanCustomFields(t)),S.i("Add ERROR event: {severity:"+i+", message:"+n+"}"),C.addEventToStore(s)}else y.instance.sendSdkErrorEvent(r.category,r.area,r.action,r.parameter,r.reason,E.getGameKey(),E.getGameSecret())}},C.processEvents=function(e,n){if(E.isEventSubmissionEnabled())try{var t=h.createGuid();n&&(C.cleanupEvents(),C.fixMissingSessionEndEvents());var i=[];i.push(["status",p.Equal,"new"]);var r=[];r.push(["status",p.Equal,"new"]),e&&(i.push(["category",p.Equal,e]),r.push(["category",p.Equal,e]));var s=[];s.push(["status",t]);var a=f.select(m.Events,i);if(!a||0==a.length)return S.i("Event queue: No events to send"),void C.updateSessionStore();if(a.length>C.MaxEventCount){if(!(a=f.select(m.Events,i,!0,C.MaxEventCount)))return;var o=a[a.length-1].client_ts;if(i.push(["client_ts",p.LessOrEqual,o]),!(a=f.select(m.Events,i)))return;r.push(["client_ts",p.LessOrEqual,o])}if(S.i("Event queue: Sending "+a.length+" events."),!f.update(m.Events,s,r))return;for(var u=[],d=0;dCy>Bx>7|z1*Az)x`={^ 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 diff --git a/frontend/assets/123.png b/frontend/assets/123.png deleted file mode 100644 index db239ccd827674fb87309a0be9d296b6cb945f62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12269 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 diff --git a/frontend/assets/i-demand-attention-244.mp3 b/frontend/assets/i-demand-attention-244.mp3 deleted file mode 100644 index d6808e85d8420a1a72b3d4d83d09511016739b9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25912 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 XaNl_<%h1kQ?M)@i(B5$WUrzlUHHlw9 diff --git a/frontend/assets/line2.mp3 b/frontend/assets/line2.mp3 deleted file mode 100644 index 5d6e88df739dedf5b9ac7b9bff882ce6e8877aa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12873 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 UFG{N>7Q6v;H~xpu{(GDLAG#fT2><{9 diff --git a/frontend/assets/o61dl3IxvAXhsWiAOeGnHXCJGS1XmY9IPajl3OAB.png b/frontend/assets/o61dl3IxvAXhsWiAOeGnHXCJGS1XmY9IPajl3OAB.png deleted file mode 100644 index bd36601a86cf255bbc87b075b885969c67666edc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6686 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 diff --git a/frontend/assets/what-302.mp3 b/frontend/assets/what-302.mp3 deleted file mode 100644 index 936ad439e530fac647cc5b500ee06aff2e66d7a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6686 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 e|HU)^mv8^i7*e6>13=}cnn>-#rx)cHdI diff --git a/frontend/data.js b/frontend/data.js deleted file mode 100644 index b2cc33d..0000000 --- a/frontend/data.js +++ /dev/null @@ -1,80 +0,0 @@ -import { showTurn, render, showEnd } from './gameRender.js' - -const create2DArray = (rows) => { - let arr = [] - for (let i = 0; i < rows; i++) arr[i] = [] - return arr -} - -const dataCreator = (rowCount, columnCount) => ({ - roomId: undefined, - userId: undefined, - score: 0, - opponentScore: 0, - row: rowCount, - column: columnCount, - name: 'نامشخص', - opponentName: 'نامشخص', - letter: undefined, - role: undefined, - color: 'red', - opponentColor: 'blue', - end: false, - permission: false, - waiting: false, - gift: false, - language: 'persian', - table: { - lines: [], - squares: [], - }, -}) - -var data = dataCreator(6, 6) - -export const get = (key) => data[key] - -export const set = (key, value) => { - data[key] = value - showTurn() -} -export const reset = () => { - render() - showTurn() -} -const initializeArray = (array, type, length) => { - if (type == 'lines') - for (let i = 1; i <= length; i++) get('table').lines[i] = 0 - else if (type == 'squares') - for (let i = 0; i < length; i++) - for (let j = 0; j < length; j++) array[i][j] = 0 -} - -get('table').squares = create2DArray(get('row')) -initializeArray(get('table').squares, 'squares', get('table').squares.length) -initializeArray(get('table').lines, 'lines', 2 * get('row') * (get('row') - 1)) - -export const addCondition = (i, j) => { - get('table').squares[i][j] = get('table').squares[i][j] + 1 -} - -export const messages = { - english: { - waiting: 'waiting for opponent...', - languageButton: 'english', - resignButton: 'resign', - header: 'Dots and Boxes', - winner: 'winner', - loser: 'loser', - subscriber: 'subscriber', - }, - persian: { - waiting: 'در انتظار حریف...', - languageButton: 'فارسی', - resignButton: 'تسلیم', - header: 'نقطه‌بازی', - winner: 'برنده', - loser: 'بازنده', - subscriber: 'تماشاچی', - }, -} diff --git a/frontend/game/src/components/rectangle/rectangle.js b/frontend/game/src/components/rectangle/rectangle.js index b8079a0..2dd6962 100644 --- a/frontend/game/src/components/rectangle/rectangle.js +++ b/frontend/game/src/components/rectangle/rectangle.js @@ -4,12 +4,16 @@ import useStyle from './rectangle.style' // localiztion import t from './rectangle.local' import { + addNewLine, elementColorView, getPlayerHasPermission, + increaseOpponentScore, + increasePlayerScore, playerColorView, } from '../../scenes/_slice/game.slice' import { useSelector } from 'react-redux' import { requestGift, sendBouns } from '../../services/backend/backend.service' +import { dispatch } from '../../setup/store/store' export default function Rectangle({ i, j, lastMove }) { const classes = useStyle() @@ -29,14 +33,16 @@ export default function Rectangle({ i, j, lastMove }) { if (i + 1 === lastI && j === lastJ) lastLineColor = downLineColor || '' if (i === lastI && j - 1 === lastJ) lastLineColor = leftLineColor || '' if (i === lastI && j + 1 === lastJ) lastLineColor = rightLineColor || '' - // if (i === 2 && j === 10) console.log(lastLineColor) const backgroundColor = background - ? `dark${background}` + ? background : !!topLineColor && !!rightLineColor && !!leftLineColor && !!downLineColor - ? `dark${lastLineColor}` + ? lastLineColor : '' - + if (!background && backgroundColor) { + console.log({ backgroundColor }) + dispatch(addNewLine({ i, j, color: backgroundColor })) + } if ( ((i - 1 === lastI && j === lastJ) || (i + 1 === lastI && j === lastJ) || @@ -47,10 +53,13 @@ export default function Rectangle({ i, j, lastMove }) { !!rightLineColor && !!leftLineColor && !!downLineColor && - playerColor === lastColor + !playerHasPermission ) { - // console.log({ playerColor, lastColor, lastLineColor }) - sendBouns(i, j, playerColor) + console.log({ playerColor, lastColor, background }) + if (playerColor === lastColor) { + dispatch(increasePlayerScore()) + sendBouns(i, j, playerColor) + } else dispatch(increaseOpponentScore()) } return (
diff --git a/frontend/game/src/scenes/_slice/game.slice.js b/frontend/game/src/scenes/_slice/game.slice.js index ed13e57..2acf7f4 100644 --- a/frontend/game/src/scenes/_slice/game.slice.js +++ b/frontend/game/src/scenes/_slice/game.slice.js @@ -91,6 +91,12 @@ const gameSlice = createSlice({ const { history } = action.payload state.room.history = history }, + increasePlayerScore: (state, aciton) => { + state.player.score += 1 + }, + increaseOpponentScore: (state, aciton) => { + state.opponent.score += 1 + }, }, }) @@ -109,6 +115,8 @@ export const { setPlayerLastMove, setOpponentLastMove, setRoomLastMove, + increasePlayerScore, + increaseOpponentScore, } = actions export default reducer diff --git a/frontend/gameRender.js b/frontend/gameRender.js deleted file mode 100644 index 88987ba..0000000 --- a/frontend/gameRender.js +++ /dev/null @@ -1,365 +0,0 @@ -import { get, set, messages } from './data.js' -import { - addLineToSquare, - checkCondition, - findSpace, - checkEnd, - markLine, - checkah, - getNumberOfLine, -} from './logic.js' -import { send, requestGift, sendMessage } from './router.js' -import { getUserFirstName } from './index.js' - -const oddScale = 1 -const evenScale = 4 -const paper = document.getElementById('paper') -const header = document.getElementById('header') -const xlines = document.getElementsByClassName('xline') -const ylines = document.getElementsByClassName('yline') -const input = document.getElementById('input') -const sendButton = document.getElementsByClassName('send-button')[0] -const sendPanel = document.getElementById('send-panel') -const buttonContainer = document.getElementById('button-container') -const yourMessage = document.getElementsByClassName('your-message')[0] -const blue = document.getElementsByClassName('blue')[0] -const red = document.getElementsByClassName('red')[0] -const infoContainer = document.getElementById('info-container') -const fullInformation = document.getElementsByClassName('full-information')[0] - -const audio = new Audio('./assets/line2.mp3') -const sendAudio = new Audio('./assets/i-demand-attention-244.mp3') - -let timeout -const sendMessageInitializer = () => { - sendButton.addEventListener('click', () => { - if (input.value) { - clearTimeout(timeout) - sendAudio.play() - yourMessage.style.display = 'block' - yourMessage.innerHTML = input.value - sendMessage(input.value) - input.value = '' - setTimeout(() => (yourMessage.style.display = 'none'), 20000) - } - }) - input.addEventListener('keypress', (e) => { - if (e.key === 'Enter') { - if (input.value) { - clearTimeout(timeout) - sendAudio.play() - yourMessage.style.display = 'block' - yourMessage.innerHTML = input.value - sendMessage(input.value) - input.value = '' - timeout = setTimeout(() => (yourMessage.style.display = 'none'), 20000) - } - } - }) -} - -export const render = () => { - createElements() - stylePaperBy('row') - stylePaperBy('column') - lineInitializer(xlines, 'click') - lineInitializer(ylines, 'click') - lineInitializer(xlines, 'touch') - lineInitializer(ylines, 'touch') - changeLanguage('click') - changeLanguage('touch') - sendMessageInitializer() - show('touch', header, infoContainer) - show('click', header, infoContainer) - show('touch', buttonContainer, sendPanel) - show('click', buttonContainer, sendPanel) - // show('click', red, fullInformation, 'red') - // show('click', blue, fullInformation, 'blue') -} - -const show = (event, key, value, className) => { - key.addEventListener(event, () => { - if (value.style.display === 'flex') value.style.display = 'none' - else value.style.display = 'flex' - if (className) { - value.classList.remove(`${className === 'red' ? 'blue' : 'red'}-info`) - value.classList.add(`${className}-info`) - } - }) -} - -const lineInitializer = (array, event) => { - for (let i = 0; i < array.length; i++) - array[i].addEventListener(event, () => { - hitLine(array[i], get('color')) - if (get('gift')) requestGift() - set('gift', false) - }) -} - -export const canHit = (line, color) => { - return ( - (get('permission') || color === get('opponentColor')) && - get('role') !== 'subscriber' && - !get('waiting') && - !get('end') && - get('table').lines[getNumberOfLine(line)] !== 1 - ) -} - -export const helpLine = (line, color) => { - colorLine(line, color) - addLineToSquare(line) - markLine(line) - checkCondition(color) - checkEnd() -} - -export const hitLine = (line, color) => { - if (canHit(line, color)) { - helpLine(line, checkah()) - audio.play() - send(line) - set('permission', false) - } -} - -export const colorLine = (line, color) => { - line.style.backgroundColor = color -} - -const createElements = () => { - for (let i = 1; i <= 2 * get('row') - 1; i++) - for (let j = 1; j <= 2 * get('column') - 1; j++) { - const div = document.createElement('div') - div.setAttribute('class', 'grid-item') - div.setAttribute('i', i) - div.setAttribute('j', j) - paper.appendChild(div) - alignStyle(div, i, j) - } -} -const stylePaperBy = (orientation) => { - let template = '' - for (let k = 0; k < 2 * get('row') - 1; k++) - if (k % 2 === 0) template += oddScale + 'fr ' - else template += evenScale + 'fr ' - if (orientation === 'row') paper.style.gridTemplateRows = template - else if (orientation === 'column') paper.style.gridTemplateColumns = template -} - -const dotsData = { - green: { - count: 0, - nextColor: 'orange', - message: 'احسنت! یه مورد ویژگی جدید پیدا کردی', - }, - orange: { - count: 36, - nextColor: 'rebeccapurple', - message: 'رنگ تغییر یافت به بنفش', - }, - rebeccapurple: { - count: 0, - nextColor: 'green', - message: 'رنگ تغییر یافت به سبز', - }, -} - -const clickDot = (div) => { - const currentColor = div.style.backgroundColor - console.log(currentColor) - const { nextColor, message } = dotsData[currentColor] - console.log(dotsData[currentColor]) - div.style.backgroundColor = nextColor - - dotsData[currentColor].count -= 1 - dotsData[nextColor].count += 1 - if (dotsData[nextColor].count === 36) { - showMessage(message) - buttonContainer.style.backgroundColor = nextColor - header.style.backgroundColor = nextColor - nextColor !== 'orange' - ? (header.style.color = 'white') - : (header.style.color = 'black') - dotsData[nextColor].count = 0 - } else - get('waiting') - ? (header.innerHTML = 'در انتظار حریف...') - : (header.innerHTML = 'نقطه‌بازی') -} - -const initializeDot = (div) => { - div.style.backgroundColor = 'orange' - div.addEventListener('click', () => clickDot(div)) -} - -const alignStyle = (div, i, j) => { - if ((i * j) % 2 === 1) setDivStyle(div, `${j}`, `${i}`, 'dot') - else if (i % 2 === 1 && j % 2 !== 1) - setDivStyle(div, `${j - 1} / ${j + 2}`, `${i}`, 'xline') - else if (i % 2 !== 1 && j % 2 === 1) - setDivStyle(div, `${j}`, `${i - 1} / ${i + 2}`, 'yline') - else setDivStyle(div, `${j - 1} / ${j + 2}`, `${i - 1} / ${i + 2}`, 'space') -} - -const setDivStyle = (div, col, row, styleClass) => { - div.style.gridColumn = col - div.style.gridRow = row - div.setAttribute('class', styleClass) - if (styleClass === 'space') div.setAttribute('line', 0) - if (styleClass === 'dot') initializeDot(div) -} - -export const updateScoreBoard = () => { - const myElement = document.getElementsByClassName(get('color'))[0] - const oppElement = document.getElementsByClassName(get('opponentColor'))[0] - myElement.innerHTML = get('name') + ': ' + get('score') - oppElement.innerHTML = get('opponentName') + ': ' + get('opponentScore') -} - -export const updateScore = (color) => { - if (get('color') === color) set('score', get('score') + 1) - else if (get('opponentColor') === color) - set('opponentScore', get('opponentScore') + 1) - updateScoreBoard() -} - -export const showTurn = () => { - const isMyTurn = get('permission') - const myColor = get('color') - const oppColor = get('opponentColor') - const myElement = document.getElementsByClassName(get('color'))[0] - const oppElement = document.getElementsByClassName(get('opponentColor'))[0] - myElement.classList.toggle(`active-${myColor}`, isMyTurn) - oppElement.classList.toggle(`active-${oppColor}`, !isMyTurn) - myElement.innerHTML = get('name') + ': ' + get('score') - oppElement.innerHTML = get('opponentName') + ': ' + get('opponentScore') -} - -export const showEnd = (winner) => { - const myColor = get('color') - document.body.style.backgroundColor = 'dark' + winner - if (winner === myColor) { - showMessage('winner') - gameanalytics.GameAnalytics.addProgressionEvent( - gameanalytics.EGAProgressionStatus.Fail, - 'main', - 'main', - 'main', - get('score') - ) - gameanalytics.GameAnalytics.addProgressionEvent( - gameanalytics.EGAProgressionStatus.Complete, - 'main', - 'main', - 'main', - get('opponentScore') - ) - } else showMessage('loser') - set('end', true) -} - -export const colorBox = (i, j, color) => { - const space = findSpace(i, j) - space.style.backgroundColor = 'dark' + color - if (color === 'red') space.innerHTML = 'ق' - else space.innerHTML = 'آ' -} - -export const getMesaageOfLanguge = (type) => { - if (get('language') === 'english') { - switch (type) { - case 'waiting': - header.innerHTML = messages.english.waiting - break - case 'header': - header.innerHTML = messages.english.header - break - case 'winner': - header.innerHTML = messages.english.winner - break - case 'loser': - header.innerHTML = messages.english.loser - break - case 'resign': - document.getElementById('resign').innerHTML = messages.english.resign - break - case 'language': - document.getElementById('language').innerHTML = - messages.english.language - break - case 'subscriber': - header.innerHTML = messages.english.subscriber - break - } - } else if (get('language') === 'persian') { - switch (type) { - case 'waiting': - header.innerHTML = messages.persian.waiting - break - case 'header': - header.innerHTML = messages.persian.header - break - case 'winner': - header.innerHTML = messages.persian.winner - break - case 'loser': - header.innerHTML = messages.persian.loser - break - case 'resign': - document.getElementById('resign').innerHTML = messages.persian.resign - break - case 'language': - document.getElementById('language').innerHTML = - messages.persian.language - break - case 'subscriber': - header.innerHTML = messages.persian.subscriber - break - default: - header.innerHTML = type - } - } -} - -export const showMessage = (message) => { - if (message !== 'header') header.style.fontSize = '25px' - else header.style.fontSize = '40px' - getMesaageOfLanguge(message) -} - -export const initializeTurn = () => { - const myColor = get('color') - if (myColor === 'red') { - set('permission', true) - set('opponentColor', 'blue') - } else { - set('permission', false) - set('opponentColor', 'red') - } - set('name', getUserFirstName()) -} - -export const changeLanguage = (event) => { - const language = document.getElementById('language') - if (language !== null) { - language.addEventListener(event, () => { - if (get('language') === 'persian') { - header.innerHTML = messages.english.header - document.getElementById('resign').innerHTML = - messages.english.resignButton - document.getElementById('language').innerHTML = - messages.english.languageButton - set('language', 'english') - } else { - header.innerHTML = messages.persian.header - document.getElementById('resign').innerHTML = - messages.persian.resignButton - document.getElementById('language').innerHTML = - messages.persian.languageButton - set('language', 'persian') - } - }) - } -} diff --git a/frontend/gameStyle.css b/frontend/gameStyle.css deleted file mode 100644 index c8cc4a6..0000000 --- a/frontend/gameStyle.css +++ /dev/null @@ -1,295 +0,0 @@ -@font-face { - font-family: Vazir; - src: url('./Vazir-FD.ttf') format('truetype'); - font-weight: normal; - font-style: normal; -} -* { - font-family: Vazir; -} -body { - width: 100vw; - height: 100vh; - margin: 0; - background-color: gray; - display: flex; - flex-direction: column; - user-select: none; -} - -#root-container { - margin: auto; - display: flex; - flex-direction: column; - grid-template-columns: 1fr 1fr; - box-shadow: 15px 10px 20px 0 #00000073; - border-radius: 50px 50px 50px 50px; -} -#header { - direction: rtl; - display: flex; - justify-content: center; - align-items: center; - color: black; - cursor: pointer; - grid-area: header; - font-size: 40px; - height: 80px; - text-align: center; - border-radius: 50px 50px 0 0; - background-color: orange; -} -#info-container { - grid-area: info-container; - display: none; - height: 40px; - justify-content: center; - align-items: center; - background-color: wheat; -} -#github { - height: 30px; - margin-top: 10px; -} -#github:hover { - height: 35px; -} - -#paper { - grid-area: paper; - padding: 30px; - display: grid; - width: 65vmin; - height: 65vmin; - background-color: rgb(46, 46, 46); -} - -.score-board { - display: flex; - width: 100%; -} - -.score { - text-align: center; - text-shadow: thistle; - color: white; - font-size: 20px; - margin-bottom: 0; - width: 50%; -} - -.blue { - padding: auto; - - background-color: rgb(0, 0, 80); - box-shadow: 0 5px rgb(0, 0, 80); - transition: 2s; - - margin-bottom: 6px; -} -.active-blue { - background-color: rgb(0, 0, 235) !important; - box-shadow: 0 5px rgb(0, 0, 180) !important; - transition: 2s; -} - -.red { - padding: auto; - - background-color: rgb(100, 0, 0); - box-shadow: 0 5px rgb(100, 0, 0); - transition: 2s; - - margin-bottom: 6px; -} - -.active-red { - background-color: red !important; - box-shadow: 0 5px rgb(200, 0, 0) !important; - transition: 2s; -} - -.full-information { - flex-grow: 1; - width: 100%; - height: 100px; - display: none; - color: white; -} - -.red-info { - background-color: rgb(100, 0, 0); - direction: rtl; -} - -.blue-info { - background-color: rgb(0, 0, 100); - direction: ltr; -} - -.facts { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - padding: 5px; - width: 100%; -} - -.full-name { - font-size: 20px; -} - -.avatar { - width: 80px; - height: 80px; - border-radius: 100%; - padding: 10px; - transition: all 0.35s ease; -} - -.your-message { - background-color: yellowgreen; - position: absolute; - right: 10px; - top: 10px; - padding: 5px; - border-radius: 5px 5px 0 5px; - transition: all 0.35s ease-in-out; - display: none; - direction: rtl; -} -.opponent-message { - background-color: rgb(227, 255, 65); - position: absolute; - left: 10px; - top: 10px; - padding: 5px; - border-radius: 5px 5px 5px 0; - transition: all 0.35s ease-in-out; - display: none; - direction: rtl; -} - -#send-panel { - display: none; - grid-area: message; - width: 100%; - height: 40px; - background-color: wheat; -} -.send-button { - background-color: orange; - border: 2px solid wheat; - width: 50px; - cursor: pointer; - border-radius: 10px; -} - -#send:active { - background-color: rgb(255, 145, 0); -} - -.send-button > img { - transform: scaleX(-1); - height: 100%; - width: 100%; -} -#input { - direction: rtl; - background-color: wheat; - border: 2px solid wheat; - flex-grow: 4; -} - -#input:focus { - outline: none; -} - -#button-container { - grid-area: buttons; - height: 50px; - display: flex; - align-items: center; - justify-content: center; - background-color: orange; - border-radius: 0 0 50px 50px; - cursor: pointer; -} -#buttons { - display: flex; - flex-direction: row; - justify-content: center; - grid-area: area; -} - -.button { - color: black; - font-size: 20px; - cursor: pointer; - - margin: 5px; - padding: 10px; - border-radius: 30px; - border-bottom: solid orangered; - border-top: solid orangered; - - display: flex; - justify-content: center; - align-items: center; -} -.button:hover { - font-size: 25px; -} -.grid-item { - width: 100%; - height: 100%; - display: flex; -} -.xline { - position: relative; - height: 60%; - width: 90%; - transition: all 0.5s; - border-radius: 15px; - margin: auto; -} -.xline:hover { - background-color: rgb(65, 65, 65); -} -.yline { - position: relative; - height: 90%; - width: 60%; - border-radius: 15px; - margin: auto; - transition: all 0.5s; -} -.yline:hover { - background-color: rgb(65, 65, 65); -} -.dot { - z-index: 1000; - width: 100%; - height: 100%; - border-radius: 99999999px; - background-color: yellow; - margin: auto; - box-shadow: 10px purple; -} -.dot:hover { - background-color: orange; -} -.space { - display: flex; - justify-content: center; - align-items: center; - font-size: 180%; - color: white; - text-align: center; - height: 90%; - width: 90%; - border-radius: 15px; - margin: auto; - transition: all 0.5s ease-in; -} diff --git a/frontend/icon.jpg b/frontend/icon.jpg deleted file mode 100644 index 7e05c7cf2a45f956106aea415bd6d3ba6ce1ba10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6529 zcmV-{8Gh!8P)l2+R>LfC?IT3L#bo4S#Af9~lkfw>qhb*9gF*GL)tcN3gYBa~5IhA!JZc`RRHW^n%AUiJ?BpwgMphMZQNMuV6!ImVO zb{(=HIam)H%^yVA#K(&nFj62bg(NqUhH{2URJISv6f3e{P4(%>N zCO>{a1a7AP``KTT$-{360BUja*V)$l|02W*$OuH$bCzz3D~H_+_Q---Ue>-0wiZ}9Oy@rSo7Yu^+AuEn27gYyUI`T3n* ze?;&Z*@Yhev~B4VJUzgAk^#)Vf8|QP`O~OBV*B)#+U4Dc4a@AF9sp|b8+xPPzxnMo zPk)vC<=U`R@aX}9sD1xDN^PYu{q8#b#){CwKB}L#0e-X|NPLy3#3pL^?E*k;KJtEJ z0P8N-AOG>^pYJ%Wk6zw=MjhR%`x^s5wK)05%aOjCU~JupUW#4FC`I zQm_~B>ch`(e)#2|@APHr^*?|4;qwPP(D)h_SY+PT!aQ~@eLmm9{Nmi)9Jsc`0aHuz z)ysc;{`A+cACdg{>#u+P_UZG>SIo_K9eI2U@Lg{(==OL#TU&DeDAD;jk9*AfX$|0; z+uA!^Uq3!x2RT1@j%4Hc2FU*Y>Gq4GqodU&Jpkiad9|{X6!eEzE-o%0h5ggh(``s$ ze-q2e=E274{>H`ej%NgdeSrC$lZ_*!1d=5zCaO+ClFUTOkNMg_gFv*=Ib*9FZ{wJe{QcNaDRJSO^!*?QxwP$)=5 zs?~VD3V-DDQh`W=O1Uf*-~tdyDx4LY^?I#VtJmwrV)5##aRyTCi5dn*l-w|lUDyKf z?QHP%7w#kJ(2QFAGdc+=g3rqWN75m!q^lLGc(m84HLn|uW+#J>oSHcfb^v^PM;fhF zfA$GtfN|iwkEI!D}1eM4H2|@)CB^e#W z)MgE(uOYkS^Br#KwgIq*^^bO%XZc-nThj5m$jnjOog6^A11UDs`ooyZb;NCqMgw^E zac#ZYh4QSVS)nBIDv(GdQu3EuO`O>&uO^QK@Zli7 zP*1bu{HbS&M4;R6F%xvBr>6t5Oizcy%15L};u)0``XP8KKs8~g0hX3f1}GIsG?Aib zc5}EbI^mdLBtQ@wpu-A^pC&%tt92vy)(dpjt>fDhI(OF|EWnUhArd3O4@o;DlqUqx0Dz(X=raru#{d`O1Dq$7I*`yM-Of!GK;i=6GUSho zj{@jia!Sy2t1?-DJ{JI+z&XG=t~|Yn1%TL}5Wq0XX@!sp!1{R%usJ@!9V9Xg91sNdSZ9Swt+8#ui7yEpEY=HUy#$N_E>6z}v z3|zEy*>oxiB*9U<2bIu9AzEuIwJO{y=UlRE8y(|O0KWer^x1q`3lL!bz>VGmv`<5< z#{8XBoB2qUa=RN2BVVC4EO(-c{;s3(0lfS4yQS-Nm~*>O9oR*lrrNa%g}5f6krmEK z=9%sGn4-~Kt=VkW29=C9)WwO$j{<=HhAP=o}wZ@XpG>Z)>9*;+MFL!q@ zk+j?GT`KS~t(8_99Yd!gyOBsN7DHc*=kp{Ec3pCrOEl^XAoxO^NVZdJ)@q$fE*n*D z4G9^Fy$X^J{OfdbNbp}bH#HJ|gMUbFkf8JETrStkW->Se8MTZn66sy%oB_fr4glu&VSpudIQB&)2OnkeW}|R)K?k+bYEjIT zvZ%yC!2(NXYt8HHT1EM;i0U4+)YYgXfCc0e3;CHyQP&>0#6cl1K`66Sj>jeGj7UM2 zv$LyWv4~55k^E6_g20C>cC92y@mM4R^&M6HI2igS9hwezAFB0ANzC*rwMMnwh0zdp zX;zJ)t&sp=fkr5lmTEl(A)2jK)2R7_M8%k2jzQ~NO-nJfvUtQcNT=uk0wJ|qUFhp% zfaUQ4=Aa+IE^&HTuJyp?xlXe>RPIVNKI5mMDRoRy6KTXhFI$|?Y5loZelIf{R#!vWP5H0US?8lfWtfMQ5DWB~!E zEG9YvzzOkF*Ab&oC``VmO=IHDx{AckdsaU za9|5ZMh#k`oAw0&&P)L^jsRfl9VKc40Cy!C_j9rwTl_@DXu%M@Atz@dXr#n>#Lf;t z^a%k(i35N`Lr_B;0Bj)uu`u)H0a9NQKr#b}WH7)aCJ6i_coj7TfLWTQ9cKV}05G&} zGJtB<1GV)D)J=?X;gP$QNNX=kQGh(ho{s`pMgVbWMY#Z39YFVPP{~yWcMq2O2io`e zvfH8Z&1bAvF$Jj5HBx+lMJ%x9V^J;hYt{fg80ski!vS#}gu&3FSPh$OlD5=*U{;U; zOp6cz94;*C1g4mfOnI=tER#lpI}E^>E=m^6ssfPxWTe{AtQdvwRGy@h!kTs>1PQLXv#&uJH&;F&W|K!Xt&5ILTU?4 z5Fjx_0caOz3!sbR19VD(OtKBaR7ul*9Rpl`d4Qq12nqZ;fa?jHl6dI~<&fR?1_~n;|773}88&HXjR_0YFcjiE&4x8~}tcyuH8ecgLT2MJ_e~pu9`~ zuuD1qXjB2<6`@#34*=1ek)vrY0I~qY`OE=C#{eaB0PI6e#G#=8*@y`MiOh}fk--C7 z*$5W^jUREtC+VjzodOgvfN|XZsL&z+^h^Qb;>27^)QrO8HYhI(00+TcSQ4Kz2f)Ey z&gjK4K#m81!zxYzmMDPnHYXUsM4}Q10H!c1yPPl?uEf$K0Cr6PaH1lw-H;`$5o>_F zfb-(S`5p;S!2pI-DFC=4|+d+1u?i%T_r)v}dPOJP#0Fz2g zyB-DL;oiZ7GIRc+Cq@8SOA9#Z$QS_ECzjLzI+xO})B^JD5OA+=1>j&P!74EqATO!` z^Z^rll9T;`f|&(yKakHj1~9h(aY1PD3U@|pI~pLuFRWyB#1{sbhy~06N{)upBLFgL zfO|&(6`KIqBO4z8IZlSoStZ8HG`IjbHtNu&JhZd`2FOzYZEV!8 z2zM;CuK|GP6=eVtHXKvr7*T2zK+iFNiAM$&$l_Toc5av%AK;daB@jT=1OPvQA8{7g zvIdB00lJN`Ye9}Z<{D0gs87ssooocQ=7_l6a~fG(mjO)Y$O=l9t#Mn@=$-0`lmdxL z@O(c8u)a8_6E9KOY@fNH1pvyD0m$dt+3^6byQDUHkoUwyjN#MyHKArDmLmRg}=8aga!})B=Pb{?DcjvUgo=YB4JS zT)-SWJ8cO-!zw!KJTz?)h`O~y)Si|AFN_<3*a@$j0X)M1nTY;e_tpl1*w;niQ>ikI99IambbwgfP(0}P?tzaI2Nyjx7~ z=K8K}{xll8&6gblV6ecW08WWnc}fOmMgf38sCTFj<(dOrg$!*PDMB#Ve&K8t69M4O z{9ph>Kj26xfXfU3N2eVOCFVA;SuFs169Y)!xbSn@d;o{RUA%$=Ke@|$BA9xylK@B{ zfZCS;fQ^8!`2N6jibkg=0)UEn-3ma;I0EopSOEA7WV+wZL_)np1tdWMI2IuO zfWzqY)Mx-SRyCWeC(7cbGKMXAltn^hF)Q7F1X+MP8YKYZ2X|ouPICbIgb(DYy1Qg? zE!!xGzqS>GoKT(D1F+jdq7sh)sG9(UFhCWSsM0m6WQi&jSmAbg*=n_5Q7b-+P7^^V zR4ZKBStvq-NIDS+cOTku>8#N>tF}=Oo_NFqPk19^86ezk$H`W4)w`-xF2V{$0oJVI z1*(;7mMl;e#SBQcm#b7dbO9?_!rIG%^w0@(yiVnYorMS1#7gbDaoz0nM7)#{jsI%5 zQVb~&djvp@tYYfM8-t3d+OyBme1K+nYA=Oot{B5Rpg93JrU0RKd{BC{#!f}3;Vtx> z0u0hKY3aryc5d8FF>1cX)v(#3@_maOD)7MR(fB>_)H(WICmk<}=1CVD@-kLQ7P_Pr zNux;QjBcn%j$aj<}>_*;W`U}~?b-7wC-=Z7C z5=9OT-g=Jpu5^i~X2q&`U!WGh3?Nh_7Pkn8yTfZ%`J4i zv6ClwH$2|1Z{Y3JT$XDo%>l?RVVyK51kJXK6eqOJ7T!#bJ^i5)yw6z?&W*o{Ney6( z>C>k>IGe*clA#HJ92*sk@BSJIu(r&K5a($L`fP-7HW>gs&u;|4VU;w5@{`8*?u-Q3 zA^^EGFL-iC0Zf)1jw`rb77T3~_UU(_zB#eL7TI(<%biF93jjlLG61Ab>Dn~1=W7V> zsg`sA;5jADXrA-zD{h5=p*k6WFs{W>O=@h{T_{0Lo)?;$CodI?o*4ncLpmBN8Mml( zCZum4sFF*NL3s%8yW*%Hz>j-C_YyKx0{o~hUJW^^-4;n15^m-6nEq+fTsR2sPE7^L zd-Vp!-4@vjbU_-mho5aB!?_Y2T*;e%hswkucj6CBEgX<`6rTJ`u?=>>KM6IcSC)&B z4et_6XkacukEr(Pkt3st1lynopO^0mE-AuQ0Ji;>_byLUhlaQHw~fu?$*VCl5)KYM z3nZAg7^jQljk~?;T}2uORfR^u|MIIYU=dRK)ZKMRz42bGNdqEBoR<*T03f@^<1#d( zD0Tq6&xxkRcpC4j7((iIl;XR4rz(7B7n3s+}SJRXCX^Df?9 z@iN^e5ofyDB6;72Dj2PfWwY%T@qUYEjUsPPJJf<6^Iu0}?=2{M>)5FsDELE{$2I{6B3gd?JRPd)z{cu)NZ z`3_*?8+_%y0}%NRVB;Hn<-P+D`L_p{9|OQ_ipeNJTh|0fUgLIqM_uBzaZPZ<6ca~m zTw>=MTUpt-h;Ec;HpOHVJJ%Q%Lpi&~xTwlh9a^C96w`>ZYqJiFx@KWAb-?#cSK@#B nR_Hr`jc@Rk`wl>441oU!aYBVg_b!w)00000NkvXXu0mjfZgk^r diff --git a/frontend/index.html b/frontend/index.html deleted file mode 100644 index 237a963..0000000 --- a/frontend/index.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - Dots and Boxes - - - - - - - - - - -
- -
- github -
-
-
-
آبی: 0
-
قرمز: 0
-
-
- avatar -
- محمدحسین دولت‌آبادی - -
-
-
-
- فرستادن -
- -
-
- - - -
-
-
شما: چه حرکت خفنی! احسنت
-
محمدحسین: قربون شما!
- -