2021-06-09 12:11:47 +00:00
/ *
Images
background . jpg : https : //www.lignaushop.de/images/product_images/popup_images/treppenstufe-buecherregal-fensterbank-eiche-country-rustikal-unbehandelt-wuppertal.JPG
card _stack . png : https : //www.google.de/url?sa=i&url=https%3A%2F%2Fwww.pngegg.com%2Fpt%2Fsearch%3Fq%3Drainha%2Bde%2Bcopas&psig=AOvVaw3wwfk87wAXBxqmdXnoGSfe&ust=1623254731054000&source=images&cd=vfe&ved=0CAIQjRxqFwoTCMjUoaG1iPECFQAAAAAdAAAAABA5
dice . svg : https : //www.svgrepo.com/download/198836/gambler-casino.svg
sprite . jpg : https : //media.istockphoto.com/photos/gray-granite-stone-texture-seamless-square-background-tile-ready-picture-id1096464726
* /
2021-06-10 12:05:01 +00:00
let card ;
2021-06-08 13:38:43 +00:00
let answer = null ;
let show _card = false ;
2021-06-09 12:11:47 +00:00
let diced = false ;
let rolled _number = null ;
2021-06-08 13:38:43 +00:00
let game = document . getElementById ( 'game' ) ;
2021-06-08 13:55:33 +00:00
let app ;
2021-06-09 12:11:47 +00:00
let border _card _stack = new PIXI . Graphics ( ) ;
2021-06-08 13:38:43 +00:00
let game _board _size = 2000 ;
let max _size = calculate _size ( ) ;
let sprite _size = Math . floor ( game _board _size / 11 ) ;
2021-06-09 12:11:47 +00:00
const rolled _number _style = new PIXI . TextStyle ( {
fontFamily : 'Arial' ,
fontSize : 140 ,
fontWeight : 'bold' ,
wordWrap : true ,
wordWrapWidth : game _board _size * 0.5 - 20 ,
} ) ;
let rolled _number _text = new PIXI . Text ( "" , rolled _number _style ) ;
// fields
let sprites = [
2021-06-15 15:37:42 +00:00
new Sprite ( 9 , 9 ) ,
new Sprite ( 9 , 7 ) ,
new Sprite ( 9 , 5 ) ,
new Sprite ( 9 , 3 ) ,
2021-06-09 12:11:47 +00:00
new Sprite ( 9 , 1 ) ,
2021-06-15 15:37:42 +00:00
new Sprite ( 7 , 1 ) ,
new Sprite ( 5 , 1 ) ,
new Sprite ( 3 , 1 ) ,
new Sprite ( 1 , 1 ) ,
2021-06-09 12:11:47 +00:00
new Sprite ( 1 , 3 ) ,
new Sprite ( 1 , 5 ) ,
new Sprite ( 1 , 7 ) ,
new Sprite ( 1 , 9 ) ,
new Sprite ( 3 , 9 ) ,
new Sprite ( 5 , 9 ) ,
2021-06-15 15:37:42 +00:00
new Sprite ( 7 , 9 )
2021-06-09 12:11:47 +00:00
] ;
2021-06-08 13:55:33 +00:00
function start _game ( ) {
app = new PIXI . Application ( {
autoResize : true ,
2021-06-11 08:07:38 +00:00
resolution : 1 ,
2021-06-08 13:55:33 +00:00
backgroundAlpha : 0 ,
width : max _size / game _board _size ,
height : max _size / game _board _size
} ) ;
document . getElementById ( 'game' ) . appendChild ( app . view ) ;
sprites . forEach ( sprite => app . stage . addChild ( sprite . getSprite ( ) ) ) ;
// Red border
let red _border = generate _red _border ( new PIXI . Graphics ( ) ) ;
app . stage . addChild ( red _border ) ;
// White circles
2021-06-17 16:51:23 +00:00
let first _circle = generate _circle ( new PIXI . Graphics ( ) , 9 , 9 , 'yellow' , 1 ) ;
2021-06-08 13:55:33 +00:00
app . stage . addChild ( first _circle ) ;
2021-06-17 16:51:23 +00:00
let second _circle = generate _circle ( new PIXI . Graphics ( ) , 9 , 9 , 'blue' , 2 ) ;
2021-06-08 13:55:33 +00:00
app . stage . addChild ( second _circle ) ;
2021-06-17 16:51:23 +00:00
let third _circle = generate _circle ( new PIXI . Graphics ( ) , 9 , 9 , 'green' , 3 ) ;
2021-06-08 13:55:33 +00:00
app . stage . addChild ( third _circle ) ;
2021-06-17 16:51:23 +00:00
let fourth _circle = generate _circle ( new PIXI . Graphics ( ) , 9 , 9 , 'red' , 4 ) ;
app . stage . addChild ( fourth _circle ) ;
2021-06-08 13:55:33 +00:00
// Card stacks
let cards _1 = generate _card _stack ( PIXI . Sprite . from ( '/img/card_stack.png' ) , 3 , 3 , function ( ) {
2021-06-09 12:11:47 +00:00
if ( ! show _card && rolled _number === 1 ) {
2021-06-08 13:55:33 +00:00
console . log ( "1" ) ;
2021-06-08 15:33:59 +00:00
socket . emit ( 'get card' , 1 ) ;
2021-06-08 13:55:33 +00:00
}
} ) ;
app . stage . addChild ( cards _1 ) ;
let cards _2 = generate _card _stack ( PIXI . Sprite . from ( '/img/card_stack.png' ) , 5 , 3 , function ( ) {
2021-06-09 12:11:47 +00:00
if ( ! show _card && rolled _number === 2 ) {
2021-06-08 13:55:33 +00:00
console . log ( "2" ) ;
2021-06-08 15:33:59 +00:00
socket . emit ( 'get card' , 2 ) ;
2021-06-08 13:55:33 +00:00
}
} ) ;
app . stage . addChild ( cards _2 ) ;
let cards _3 = generate _card _stack ( PIXI . Sprite . from ( '/img/card_stack.png' ) , 7 , 3 , function ( ) {
2021-06-09 12:11:47 +00:00
if ( ! show _card && rolled _number === 3 ) {
2021-06-08 13:55:33 +00:00
console . log ( "3" ) ;
2021-06-08 15:33:59 +00:00
socket . emit ( 'get card' , 3 ) ;
2021-06-08 13:55:33 +00:00
}
} ) ;
app . stage . addChild ( cards _3 ) ;
2021-06-09 12:11:47 +00:00
2021-06-17 16:51:23 +00:00
// Die
2021-06-09 12:11:47 +00:00
let diceTexture = PIXI . Texture . from ( '/img/dice.svg' ) ;
let dice = new PIXI . Sprite ( diceTexture ) ;
dice . x = sprite _size * 7 - sprite _size * 0.2 ;
dice . y = sprite _size * 7 - sprite _size * 0.2 ;
dice . width = 200 ;
dice . height = 200 ;
dice . interactive = true ;
dice . buttonMode = true ;
dice . defaultCursor = 'pointer' ;
2021-06-11 08:17:38 +00:00
dice . on ( 'pointerdown' , function ( ) {
2021-06-09 12:11:47 +00:00
if ( ! diced ) {
socket . emit ( 'roll dice' ) ;
}
} ) ;
app . stage . addChild ( dice ) ;
app . stage . addChild ( border _card _stack ) ;
2021-06-09 12:16:08 +00:00
// Logo
let logo = PIXI . Sprite . from ( '/img/logo_2.png' ) ;
logo . x = sprite _size * 3 - sprite _size * 0.2 ;
logo . y = sprite _size * 5.5 - sprite _size * 0.2 ;
logo . width = sprite _size * 3.5 ;
logo . height = sprite _size * 1.5 ;
// logo.rotation -= Math.PI / 8;
app . stage . addChild ( logo ) ;
2021-06-09 12:11:47 +00:00
socket . on ( 'dice' , function ( randomInt ) {
rolled _number = randomInt ;
diced = true ;
border _card _stack . clear ( ) ;
border _card _stack . lineStyle ( 15 , 0x862323 , 1 ) ;
border _card _stack . drawRoundedRect ( sprite _size * ( 1 + 2 * rolled _number ) - sprite _size * 0.2 , sprite _size * 3 - sprite _size * 0.2 , sprite _size * 1.5 , sprite _size * 3 * 0.72 , 10 ) ;
rolled _number _text = new PIXI . Text ( rolled _number , rolled _number _style ) ;
rolled _number _text . x = sprite _size * 7 - sprite _size * 0.2 + dice . width / 2 - rolled _number _text . width / 2 ;
rolled _number _text . y = sprite _size * 6 - sprite _size * 0.2 ;
app . stage . addChild ( rolled _number _text ) ;
2021-06-08 14:02:37 +00:00
} ) ;
socket . on ( 'card' , function ( data ) {
2021-06-10 12:05:01 +00:00
let u = data . username ;
let q = data . card . question ;
let a = data . card . answers ;
let d = data . card . difficulty ;
card = new Card ( game _board _size , q , a [ 0 ] , a [ 1 ] , a [ 2 ] , a [ 3 ] , d , u === username ) ;
card . showCard ( ) ;
2021-06-08 15:33:59 +00:00
show _card = true ;
2021-06-08 14:02:37 +00:00
} ) ;
2021-06-10 12:05:01 +00:00
socket . on ( 'card destroyed' , function ( ) {
2021-06-14 10:29:38 +00:00
diced = false ;
show _card = false ;
2021-06-10 12:05:01 +00:00
card . destroyCard ( ) ;
2021-06-14 10:06:49 +00:00
rolled _number _text . destroy ( ) ;
border _card _stack . clear ( ) ;
2021-06-10 12:05:01 +00:00
} ) ;
2021-06-17 16:51:23 +00:00
socket . on ( 'player moved' , function ( data ) {
let player = data . player ;
let position = data . position ;
console . log ( "player: " + player ) ; // test
console . log ( "position: " + position ) ; // test
let x = 0 ;
let y = 0 ;
switch ( position ) {
case 0 : x = 9 ; y = 9 ; break ;
case 1 : x = 9 ; y = 7 ; break ;
case 2 : x = 9 ; y = 5 ; break ;
case 3 : x = 9 ; y = 3 ; break ;
case 4 : x = 9 ; y = 1 ; break ;
case 5 : x = 7 ; y = 1 ; break ;
case 6 : x = 5 ; y = 1 ; break ;
case 7 : x = 3 ; y = 1 ; break ;
case 8 : x = 1 ; y = 1 ; break ;
case 9 : x = 1 ; y = 3 ; break ;
case 10 : x = 1 ; y = 5 ; break ;
case 11 : x = 1 ; y = 7 ; break ;
case 12 : x = 1 ; y = 9 ; break ;
case 13 : x = 3 ; y = 9 ; break ;
case 14 : x = 5 ; y = 9 ; break ;
case 15 : x = 7 ; y = 9 ; break ;
}
switch ( player ) {
case 0 :
first _circle . clear ( ) ;
first _circle = generate _circle ( new PIXI . Graphics ( ) , y , x , 'yellow' , 1 ) ;
app . stage . addChild ( first _circle ) ;
break ;
case 1 :
second _circle . clear ( ) ;
second _circle = generate _circle ( new PIXI . Graphics ( ) , y , x , 'blue' , 2 ) ;
app . stage . addChild ( second _circle ) ;
break ;
case 2 :
third _circle . clear ( ) ;
third _circle = generate _circle ( new PIXI . Graphics ( ) , y , x , 'green' , 3 ) ;
app . stage . addChild ( third _circle ) ;
break ;
case 3 :
fourth _circle . clear ( ) ;
fourth _circle = generate _circle ( new PIXI . Graphics ( ) , y , x , 'red' , 4 ) ;
app . stage . addChild ( fourth _circle ) ;
break ;
}
} ) ;
2021-06-08 13:55:33 +00:00
resize ( ) ;
}
2021-06-08 13:38:43 +00:00
function generate _card _stack ( sprite , x , y , onclick ) {
sprite . x = sprite _size * x - sprite _size * 0.2 ;
sprite . y = sprite _size * y - sprite _size * 0.2 ;
sprite . width = sprite _size * 1.5 ;
sprite . height = sprite _size * 3 * 0.72 ;
sprite . interactive = true ;
sprite . buttonMode = true ;
sprite . defaultCursor = 'pointer' ;
2021-06-11 08:17:38 +00:00
sprite . on ( 'pointerdown' , onclick ) ;
2021-06-09 12:11:47 +00:00
return sprite ;
2021-06-08 13:38:43 +00:00
}
function generate _red _border ( graphics ) {
graphics . lineStyle ( sprite _size * 0.10 , 0x862323 , 1 ) ;
graphics . drawRect ( sprite _size * 9 - sprite _size * 0.2 , sprite _size * 9 - sprite _size * 0.2 , sprite _size * 1.5 , sprite _size * 1.5 ) ;
return graphics ;
}
2021-06-17 16:51:23 +00:00
function generate _circle ( graphics , x , y , color , offset ) {
2021-06-08 13:38:43 +00:00
graphics . lineStyle ( 0 ) ;
2021-06-17 16:51:23 +00:00
switch ( color ) {
case 'yellow' : graphics . beginFill ( 0xFFDDA1 , 1 ) ; break ;
case 'red' : graphics . beginFill ( 0xF47A93 , 1 ) ; break ;
case 'green' : graphics . beginFill ( 0x6C9A8B , 1 ) ; break ;
case 'blue' : graphics . beginFill ( 0x4169E1 , 1 ) ; break ;
}
switch ( offset ) {
case 1 : graphics . drawCircle ( sprite _size * x - 65 - sprite _size * 0.2 + sprite _size * 0.75 , sprite _size * y + 65 - sprite _size * 0.2 + sprite _size * 0.75 , sprite _size / 4 ) ; break ; // upper left
case 2 : graphics . drawCircle ( sprite _size * x + 65 - sprite _size * 0.2 + sprite _size * 0.75 , sprite _size * y + 65 - sprite _size * 0.2 + sprite _size * 0.75 , sprite _size / 4 ) ; break ; // upper right
case 3 : graphics . drawCircle ( sprite _size * x - 65 - sprite _size * 0.2 + sprite _size * 0.75 , sprite _size * y - 65 - sprite _size * 0.2 + sprite _size * 0.75 , sprite _size / 4 ) ; break ; // lower left
case 4 : graphics . drawCircle ( sprite _size * x + 65 - sprite _size * 0.2 + sprite _size * 0.75 , sprite _size * y - 65 - sprite _size * 0.2 + sprite _size * 0.75 , sprite _size / 4 ) ; break ; // lower right
}
2021-06-08 13:38:43 +00:00
graphics . endFill ( ) ;
return graphics ;
}
function calculate _size ( ) {
2021-06-10 09:27:51 +00:00
let width ;
let height ;
if ( game . offsetWidth > window . innerWidth ) {
width = window . innerWidth - document . getElementById ( 'chat' ) . offsetWidth ;
2021-06-08 13:38:43 +00:00
} else {
2021-06-10 09:27:51 +00:00
width = game . offsetWidth ;
}
if ( game . offsetHeight > window . innerHeight ) {
height = window . innerHeight - document . getElementsByTagName ( 'header' ) [ 0 ] . offsetHeight ;
} else {
height = game . offsetHeight ;
}
if ( width > height ) {
return height ;
2021-06-08 13:38:43 +00:00
} else {
2021-06-10 09:27:51 +00:00
return width ;
2021-06-08 13:38:43 +00:00
}
}
// Resize
2021-05-26 17:34:31 +00:00
window . addEventListener ( 'resize' , resize ) ;
function resize ( ) {
2021-06-08 13:38:43 +00:00
let size = calculate _size ( ) ;
app . stage . scale . set ( size / game _board _size , size / game _board _size ) ;
2021-06-09 12:11:47 +00:00
app . renderer . resize ( size , size ) ;
2021-06-17 16:51:23 +00:00
}