From 227df724778398e0d02007328c72ea7dd22525f4 Mon Sep 17 00:00:00 2001 From: Eunchong Kim Date: Sun, 18 Jul 2021 22:16:45 +0900 Subject: [PATCH] Added BoxText class to create start game btn --- src/index.js | 53 ++++++++++++++++++++++++++++++---------- src/js/bot.js | 3 +-- src/js/box_text.js | 28 +++++++++++++++++++++ src/js/card.js | 4 ++- src/js/room.js | 7 ++++-- src/styles/uno-game.scss | 4 +++ 6 files changed, 81 insertions(+), 18 deletions(-) create mode 100644 src/js/box_text.js diff --git a/src/index.js b/src/index.js index fa73638..aa3b1a3 100644 --- a/src/index.js +++ b/src/index.js @@ -1,33 +1,60 @@ -console.log('Uno Start') - /* Class */ import Room from './js/room.js'; +import BoxText from './js/box_text.js'; /* SCSS */ import './styles/uno-game.scss'; -/* Images */ -//import green_table from './images/green_table.jpg'; - + +const canvas = document.createElement("CANVAS"); +const ctx = canvas.getContext('2d'); +let start_game_box_text; +/* Main view */ document.addEventListener('DOMContentLoaded', () => { + // Add div class const div = document.getElementById('uno-game'); div.classList.add('uno-game-div'); - const canvas = document.createElement("CANVAS"); + // Add canvas + canvas.classList.add('uno-game-canv') canvas.width = 800; canvas.height = 450; div.appendChild( canvas ); - const ctx = canvas.getContext('2d'); - - const room = new Room('room1', ctx); - room.addHuman('newini'); - room.addBot(); - - setTimeout( () => { room.startGame(); }, 1000); + // Add game start button + start_game_box_text = new BoxText(ctx, 300, 300, 200, 100, 'Start Game'); }); +/* Canvas click */ +canvas.addEventListener("click", e => { + const rect = canvas.getBoundingClientRect(); + const point = { + x: e.clientX - rect.left, + y: e.clientY - rect.top + }; + + console.log(point); + if ( start_game_box_text.isClicked(point) ) { + start_game_box_text.clear(); + startGame(); + } +}); + +const room = new Room('room1', ctx); + +/* Game start view */ +function startGame() { + console.info('Game start'); + + room.addHuman('newini'); + room.addBot(); + room.addBot(); + room.addBot(); + + room.startGame(); +} + console.log('Uno End') diff --git a/src/js/bot.js b/src/js/bot.js index 185cedb..47f6119 100644 --- a/src/js/bot.js +++ b/src/js/bot.js @@ -11,9 +11,8 @@ export default class Bot extends Player { if ( top_card.isMatch(card) ) { this._cards.splice(i, 1)[0]; return card; - } else { - return null; } } + return null; } } diff --git a/src/js/box_text.js b/src/js/box_text.js new file mode 100644 index 0000000..3f26efe --- /dev/null +++ b/src/js/box_text.js @@ -0,0 +1,28 @@ +export default class BoxText { + constructor(ctx, x, y, w, h, text) { + this._ctx = ctx; + this._x = x; + this._y = y; + this._w = w; + this._h = h; + this._text = text; + + ctx.lineWidth = 4; + ctx.fillStyle = "#abc"; + ctx.fillRect(x, y, w, h); + ctx.font = "30px Arial"; + ctx.textAlign="center"; + ctx.textBaseline = "middle"; + ctx.fillStyle = "#000000"; + ctx.fillText(text, x+w/2, y+h/2); + } + + isClicked(point) { + return ( (this._x <= point.x && point.x <= this._x + this._w) + && (this._y <= point.y && point.y <= this._y + this._h) ) + } + + clear() { + this._ctx.clearRect(this._x, this._y, this._w, this._h); + } +} diff --git a/src/js/card.js b/src/js/card.js index 0037473..f089b47 100644 --- a/src/js/card.js +++ b/src/js/card.js @@ -18,7 +18,9 @@ export default class Card { } isMatch(card) { - if ( (this._num === card.num) || (this._color_n === card.color_n) ) { + if ( (this._num <= 12 && this._num === card.num) + || (this._num >= 13) + || (this._color_n === card.color_n) ) { return true; } else { return false; diff --git a/src/js/room.js b/src/js/room.js index 9ff3bbc..67a1fa6 100644 --- a/src/js/room.js +++ b/src/js/room.js @@ -36,10 +36,13 @@ export default class Room { initDeck() { for (let x=0; x<14; x++) { for (let y=0; y<8; y++) { - if ( (x === 0) && (y >= 4) ) { + if ( (x === 0) && (y >= 4) ) { // Skip blank card continue; } - const card = new Card(x, y); + if ( (x === 13) && (y >= 4) ) { // +4 cards + x = 14; + } + const card = new Card(x, y%4); this._cards.push(card); } } diff --git a/src/styles/uno-game.scss b/src/styles/uno-game.scss index ccb27ab..5a92b79 100644 --- a/src/styles/uno-game.scss +++ b/src/styles/uno-game.scss @@ -3,3 +3,7 @@ height: 450px; background-image: url('../images/green_table.jpg'); } + +.uno-game-canv { + z-index:1; +}