2021-06-06 19:24:15 +00:00
|
|
|
let answer = null;
|
2021-06-06 20:27:14 +00:00
|
|
|
let show_card = false;
|
2021-06-06 19:24:15 +00:00
|
|
|
|
2021-05-31 19:42:33 +00:00
|
|
|
function Sprite(x, y) {
|
2021-06-01 11:24:52 +00:00
|
|
|
this.sprite = PIXI.Sprite.from('/img/sprite.jpg');
|
|
|
|
this.coord_x = x;
|
|
|
|
this.coord_y = y;
|
|
|
|
|
|
|
|
this.getSprite = function () {
|
|
|
|
this.setSize(this.sprite, sprite_size);
|
|
|
|
return this.sprite;
|
|
|
|
}
|
|
|
|
|
|
|
|
this.setSize = function (sprite, size) {
|
|
|
|
sprite.x = this.coord_x * size - size * 0.2;
|
|
|
|
sprite.y = this.coord_y * size - size * 0.2;
|
|
|
|
sprite.width = size * 1.5;
|
|
|
|
sprite.height = size * 1.5;
|
|
|
|
}
|
2021-05-31 19:42:33 +00:00
|
|
|
}
|
2021-05-26 17:34:31 +00:00
|
|
|
|
2021-06-01 11:24:52 +00:00
|
|
|
|
2021-06-05 15:46:31 +00:00
|
|
|
let game = document.getElementById('game');
|
|
|
|
|
2021-06-06 20:27:14 +00:00
|
|
|
let game_board_size = 2000;
|
|
|
|
let size = calculate_size();
|
2021-06-05 15:46:31 +00:00
|
|
|
let sprite_size = Math.floor(game_board_size / 11);
|
|
|
|
|
|
|
|
const app = new PIXI.Application({
|
|
|
|
autoResize: true,
|
|
|
|
resolution: devicePixelRatio,
|
|
|
|
backgroundAlpha: 0,
|
2021-06-06 20:27:14 +00:00
|
|
|
width: size / game_board_size,
|
|
|
|
height: size / game_board_size
|
2021-06-05 15:46:31 +00:00
|
|
|
});
|
|
|
|
document.getElementById('game').appendChild(app.view);
|
|
|
|
|
|
|
|
|
|
|
|
// fields
|
2021-05-31 19:42:33 +00:00
|
|
|
let sprites = {
|
2021-06-01 11:24:52 +00:00
|
|
|
0: new Sprite(1, 1),
|
|
|
|
1: new Sprite(3, 1),
|
|
|
|
2: new Sprite(5, 1),
|
|
|
|
3: new Sprite(7, 1),
|
|
|
|
4: new Sprite(9, 1),
|
|
|
|
|
|
|
|
5: new Sprite(1, 3),
|
|
|
|
6: new Sprite(9, 3),
|
|
|
|
|
|
|
|
7: new Sprite(1, 5),
|
|
|
|
8: new Sprite(9, 5),
|
|
|
|
|
|
|
|
9: new Sprite(1, 7),
|
|
|
|
10: new Sprite(9, 7),
|
|
|
|
|
|
|
|
11: new Sprite(1, 9),
|
|
|
|
12: new Sprite(3, 9),
|
|
|
|
13: new Sprite(5, 9),
|
|
|
|
14: new Sprite(7, 9),
|
|
|
|
15: new Sprite(9, 9),
|
2021-05-31 19:42:33 +00:00
|
|
|
}
|
2021-05-26 17:34:31 +00:00
|
|
|
|
2021-06-05 15:46:31 +00:00
|
|
|
for (let i = 0; i < 16; i++) app.stage.addChild(sprites[i].getSprite());
|
|
|
|
|
2021-05-26 17:34:31 +00:00
|
|
|
|
2021-06-05 15:46:31 +00:00
|
|
|
// Red border
|
|
|
|
let red_border = generate_red_border(new PIXI.Graphics());
|
2021-06-01 11:24:52 +00:00
|
|
|
app.stage.addChild(red_border);
|
|
|
|
|
2021-06-05 15:46:31 +00:00
|
|
|
|
|
|
|
// White circles
|
|
|
|
let first_circle = generate_circle(new PIXI.Graphics(), 3, 9);
|
2021-06-01 11:24:52 +00:00
|
|
|
app.stage.addChild(first_circle);
|
|
|
|
|
2021-06-05 15:46:31 +00:00
|
|
|
let second_circle = generate_circle(new PIXI.Graphics(), 5, 9);
|
2021-06-01 11:24:52 +00:00
|
|
|
app.stage.addChild(second_circle);
|
|
|
|
|
2021-06-05 15:46:31 +00:00
|
|
|
let third_circle = generate_circle(new PIXI.Graphics(), 7, 9);
|
2021-06-01 11:24:52 +00:00
|
|
|
app.stage.addChild(third_circle);
|
2021-05-31 19:42:33 +00:00
|
|
|
|
|
|
|
|
2021-06-05 15:46:31 +00:00
|
|
|
// Card stacks
|
|
|
|
let cards_1 = generate_card_stack(PIXI.Sprite.from('/img/card_stack.png'), 3, 3, function () {
|
2021-06-06 20:27:14 +00:00
|
|
|
if(!show_card) {
|
|
|
|
console.log("1");
|
|
|
|
generate_card("Ein Bäcker möchte eine neue Filiale eröffnen. Wie sollte er das Budget einteilen?", "a1", "a2", "a3", "a4", 1, 1);
|
|
|
|
show_card = true;
|
|
|
|
}});
|
2021-06-05 15:46:31 +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-06 20:27:14 +00:00
|
|
|
if(!show_card) {
|
|
|
|
console.log("2");
|
|
|
|
generate_card("Ein Bäcker möchte eine neue Filiale eröffnen. Wie sollte er das Budget einteilen?", "a1", "a2", "a3", "a4", 1, 1);
|
|
|
|
show_card = true;
|
|
|
|
}});
|
2021-06-05 15:46:31 +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-06 20:27:14 +00:00
|
|
|
if(!show_card) {
|
|
|
|
console.log("3");
|
|
|
|
generate_card("Ein Bäcker möchte eine neue Filiale eröffnen. Wie sollte er das Budget einteilen?", "a1", "a2", "a3", "a4", 1, 1);
|
|
|
|
show_card = true;
|
|
|
|
}
|
2021-06-05 15:46:31 +00:00
|
|
|
});
|
|
|
|
app.stage.addChild(cards_3);
|
2021-05-31 19:42:33 +00:00
|
|
|
|
|
|
|
|
2021-06-05 15:46:31 +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.on('click', onclick);
|
|
|
|
return sprite
|
|
|
|
}
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
function generate_circle(graphics, x, y) {
|
|
|
|
graphics.lineStyle(0);
|
|
|
|
graphics.beginFill(0xffffff, 1);
|
|
|
|
graphics.drawCircle(sprite_size * x - sprite_size * 0.2 + sprite_size * 0.75, sprite_size * y - sprite_size * 0.2 + sprite_size * 0.75, sprite_size / 4);
|
|
|
|
graphics.endFill();
|
|
|
|
return graphics;
|
|
|
|
}
|
|
|
|
|
2021-06-06 19:24:15 +00:00
|
|
|
function generate_card(s, a1, a2, a3, a4, right_a, d) {
|
|
|
|
const style = new PIXI.TextStyle({
|
|
|
|
fontFamily: 'Arial',
|
2021-06-06 20:27:14 +00:00
|
|
|
fontSize: 60,
|
2021-06-06 19:24:15 +00:00
|
|
|
wordWrap: true,
|
|
|
|
wordWrapWidth: game_board_size * 0.5 - 20,
|
|
|
|
});
|
|
|
|
|
|
|
|
const header_style = new PIXI.TextStyle({
|
|
|
|
fontFamily: 'Arial',
|
2021-06-06 20:27:14 +00:00
|
|
|
fontSize: 70,
|
2021-06-06 19:24:15 +00:00
|
|
|
wordWrap: true,
|
|
|
|
wordWrapWidth: game_board_size * 0.5 - 20,
|
|
|
|
});
|
|
|
|
|
2021-06-01 11:24:52 +00:00
|
|
|
const card = new PIXI.Graphics();
|
2021-06-05 15:46:31 +00:00
|
|
|
let start_x = game_board_size * 0.25 + 2.5;
|
|
|
|
let start_y = game_board_size / 2 - game_board_size * 0.72 / 2 + 2.5;
|
2021-06-06 20:27:14 +00:00
|
|
|
card.lineStyle(20, 0x6C9A8B, 1);
|
2021-06-05 15:46:31 +00:00
|
|
|
card.beginFill(0xffffff);
|
|
|
|
card.drawRoundedRect(start_x, start_y, game_board_size * 0.5, game_board_size * 0.72, 10);
|
2021-06-01 11:24:52 +00:00
|
|
|
card.endFill();
|
2021-05-31 19:42:33 +00:00
|
|
|
|
2021-06-06 19:24:15 +00:00
|
|
|
const header = new PIXI.Text("Schwierigkeit " + d, header_style);
|
2021-06-06 20:27:14 +00:00
|
|
|
header.x = start_x + 20 + card.width / 2 - header.width / 2 - 2.5 - 20;
|
|
|
|
header.y = start_y + 20;
|
2021-06-06 19:24:15 +00:00
|
|
|
card.addChild(header);
|
|
|
|
|
2021-05-31 19:42:33 +00:00
|
|
|
const basicText = new PIXI.Text(s, style);
|
2021-06-06 20:27:14 +00:00
|
|
|
basicText.x = start_x + 20;
|
|
|
|
basicText.y = start_y + 50 + header.height;
|
2021-06-01 11:24:52 +00:00
|
|
|
card.addChild(basicText);
|
2021-06-05 15:46:31 +00:00
|
|
|
|
|
|
|
|
2021-06-06 19:24:15 +00:00
|
|
|
// TODO Random answer order
|
|
|
|
let answer_1 = generate_answer_button(new PIXI.Graphics(), 1, start_x, start_y, function () {
|
|
|
|
select_answer(answer_1, answer_2, answer_3, answer_4, start_x, start_y, 1);
|
|
|
|
});
|
|
|
|
let answer_1_text = generate_answer_text(new PIXI.Text(a1, style), answer_1, start_x, start_y);
|
|
|
|
card.addChild(answer_1);
|
|
|
|
card.addChild(answer_1_text);
|
|
|
|
|
|
|
|
let answer_2 = generate_answer_button(new PIXI.Graphics(), 2, start_x, start_y, function () {
|
|
|
|
select_answer(answer_1, answer_2, answer_3, answer_4, start_x, start_y, 2);
|
|
|
|
});
|
|
|
|
let answer_2_text = generate_answer_text(new PIXI.Text(a2, style), answer_2, start_x, start_y);
|
|
|
|
card.addChild(answer_2);
|
|
|
|
card.addChild(answer_2_text);
|
|
|
|
|
|
|
|
let answer_3 = generate_answer_button(new PIXI.Graphics(), 3, start_x, start_y, function () {
|
|
|
|
select_answer(answer_1, answer_2, answer_3, answer_4, start_x, start_y, 3);
|
|
|
|
});
|
|
|
|
let answer_3_text = generate_answer_text(new PIXI.Text(a3, style), answer_3, start_x, start_y);
|
|
|
|
card.addChild(answer_3);
|
|
|
|
card.addChild(answer_3_text);
|
|
|
|
|
|
|
|
let answer_4 = generate_answer_button(new PIXI.Graphics(), 4, start_x, start_y, function () {
|
|
|
|
select_answer(answer_1, answer_2, answer_3, answer_4, start_x, start_y, 4);
|
|
|
|
});
|
|
|
|
let answer_4_text = generate_answer_text(new PIXI.Text("a4", style), answer_4, start_x, start_y);
|
|
|
|
card.addChild(answer_4);
|
|
|
|
card.addChild(answer_4_text);
|
|
|
|
|
|
|
|
|
2021-06-05 15:46:31 +00:00
|
|
|
// OK-Button
|
|
|
|
const ok = new PIXI.Graphics();
|
2021-06-06 20:27:14 +00:00
|
|
|
ok.lineStyle(4, 0x000000, 1);
|
2021-06-05 15:46:31 +00:00
|
|
|
ok.beginFill(0xffffff);
|
2021-06-06 20:27:14 +00:00
|
|
|
ok.drawRect(start_x, start_y, game_board_size * 0.5 - 40, 100);
|
2021-06-05 15:46:31 +00:00
|
|
|
ok.endFill();
|
2021-06-06 20:27:14 +00:00
|
|
|
ok.x = 20;
|
|
|
|
ok.y = game_board_size * 0.72 - 120;
|
2021-06-05 15:46:31 +00:00
|
|
|
card.addChild(ok);
|
|
|
|
|
|
|
|
const ok_text = new PIXI.Text('OK', style);
|
|
|
|
ok_text.x = start_x + ok.x + ok.width / 2 - ok_text.width / 2;
|
|
|
|
ok_text.y = start_y + ok.y + ok.height / 2 - ok_text.height / 2;
|
|
|
|
card.addChild(ok_text);
|
|
|
|
|
|
|
|
ok.interactive = true;
|
|
|
|
ok.on('click', function () {
|
2021-06-06 20:27:14 +00:00
|
|
|
if (right_a === answer) {
|
2021-06-06 19:24:15 +00:00
|
|
|
console.log("Richtig")
|
|
|
|
} else {
|
|
|
|
console.log("Falsch")
|
|
|
|
}
|
2021-06-06 20:27:14 +00:00
|
|
|
show_card = false;
|
2021-06-06 19:24:15 +00:00
|
|
|
card.destroy();
|
2021-06-05 15:46:31 +00:00
|
|
|
});
|
|
|
|
|
2021-06-01 11:24:52 +00:00
|
|
|
app.stage.addChild(card);
|
|
|
|
}
|
|
|
|
|
2021-06-05 15:46:31 +00:00
|
|
|
|
2021-06-06 19:24:15 +00:00
|
|
|
function select_answer(answer_1, answer_2, answer_3, answer_4, start_x, start_y, id) {
|
2021-06-06 20:27:14 +00:00
|
|
|
if (answer === null) {
|
2021-06-06 19:24:15 +00:00
|
|
|
answer = id;
|
2021-06-06 20:27:14 +00:00
|
|
|
switch (answer) {
|
2021-06-06 19:24:15 +00:00
|
|
|
case 1:
|
|
|
|
draw_rect(answer_1, 0xff00ff, start_x, start_y);
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
draw_rect(answer_2, 0xff00ff, start_x, start_y);
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
draw_rect(answer_3, 0xff00ff, start_x, start_y);
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
draw_rect(answer_4, 0xff00ff, start_x, start_y);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
draw_rect(answer_1, 0xffffff, start_x, start_y);
|
|
|
|
draw_rect(answer_2, 0xffffff, start_x, start_y);
|
|
|
|
draw_rect(answer_3, 0xffffff, start_x, start_y);
|
|
|
|
draw_rect(answer_4, 0xffffff, start_x, start_y);
|
|
|
|
answer = null;
|
|
|
|
|
|
|
|
select_answer(answer_1, answer_2, answer_3, answer_4, start_x, start_y, id);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function draw_rect(answer, color, start_x, start_y) {
|
|
|
|
answer.clear();
|
|
|
|
|
2021-06-06 20:27:14 +00:00
|
|
|
answer.lineStyle(4, 0x000000, 1);
|
2021-06-06 19:24:15 +00:00
|
|
|
answer.beginFill(color);
|
2021-06-06 20:27:14 +00:00
|
|
|
answer.drawRect(start_x, start_y, game_board_size * 0.5 - 40, 150);
|
2021-06-06 19:24:15 +00:00
|
|
|
answer.endFill();
|
|
|
|
}
|
|
|
|
|
|
|
|
function generate_answer_button(answer, y, start_x, start_y, onclick) {
|
|
|
|
draw_rect(answer, 0xffffff, start_x, start_y);
|
|
|
|
|
2021-06-06 20:27:14 +00:00
|
|
|
answer.x = 20;
|
|
|
|
answer.y = game_board_size * 0.72 - 120 - 170 * y;
|
2021-06-06 19:24:15 +00:00
|
|
|
|
|
|
|
answer.interactive = true;
|
|
|
|
answer.on('click', onclick);
|
|
|
|
|
|
|
|
return answer;
|
|
|
|
}
|
|
|
|
|
|
|
|
function generate_answer_text(answer_text, rect, start_x, start_y) {
|
|
|
|
answer_text.x = start_x + rect.x + rect.width / 2 - answer_text.width / 2;
|
|
|
|
answer_text.y = start_y + rect.y + rect.height / 2 - answer_text.height / 2;
|
|
|
|
return answer_text
|
|
|
|
}
|
|
|
|
|
2021-06-01 11:24:52 +00:00
|
|
|
function calculate_size() {
|
|
|
|
if (game.offsetWidth > game.offsetHeight) {
|
|
|
|
return game.offsetHeight;
|
|
|
|
} else {
|
|
|
|
return game.offsetWidth;
|
|
|
|
}
|
2021-05-31 19:42:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Resize
|
2021-06-01 11:24:52 +00:00
|
|
|
window.addEventListener('resize', resize);
|
|
|
|
|
|
|
|
function resize() {
|
2021-06-06 20:27:14 +00:00
|
|
|
let size = calculate_size();
|
|
|
|
app.stage.scale.set(size / game_board_size, size / game_board_size);
|
2021-06-06 19:24:15 +00:00
|
|
|
|
2021-06-06 20:27:14 +00:00
|
|
|
app.renderer.resize(size, size)
|
2021-06-01 11:24:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
resize();
|