xxxxxxxxxx
105
let playSelect;
let characterSelect;
let resetButton;
let selectedPlayName = '';
let selectedCharacter = '';
let plays = new Set();
let characters = {};
let characterDialogues = {};
let randomLine = '';
let table;
function preload() {
table = loadTable('Final_Shakespeare_data_.csv', 'csv', 'header');
}
function setup() {
createCanvas(600, 400);
loadData(table);
let dropdownStyle = 'background-color: #F2E8C9; color: #4A2511; font-family: "Times New Roman", Times, serif; font-size: 16px; padding: 5px; border: 2px solid #8B4513; border-radius: 5px;';
// Create a dropdown to select plays
playSelect = createSelect();
playSelect.position(20, 20);
playSelect.option('Select a play');
for (let play of plays) {
playSelect.option(play);
}
playSelect.changed(updateCharacterSelect);
playSelect.style(dropdownStyle);
// Create a dorpdown to slect chars
characterSelect = createSelect();
characterSelect.position(20, 60);
characterSelect.option('Select a character');
characterSelect.changed(generateRandomLine);
characterSelect.style(dropdownStyle);
// reset button
resetButton = createButton('RESET');
resetButton.position(20, 100);
resetButton.mousePressed(reset);
resetButton.style('background-color: #8B4513; color: #F2E8C9; font-family: "Times New Roman", Times, serif; font-size: 16px; padding: 5px 10px; border: none; border-radius: 5px; cursor: pointer;');
}
function draw() {
background('#F2E8C9');
fill('#4A2511');
textAlign(CENTER);
textFont('Times New Roman');
textSize(18);
text(randomLine, 200, 200, 300, 160);
}
function loadData(table) {
for (let row of table.rows) {
let play = row.get('Play');
let character = row.get('Player');
let line = row.get('PlayerLine');
plays.add(play);
if (!characters[play]) {
characters[play] = new Set();
}
characters[play].add(character);
if (!characterDialogues[play]) {
characterDialogues[play] = {};
}
if (!characterDialogues[play][character]) {
characterDialogues[play][character] = [];
}
characterDialogues[play][character].push(line);
}
}
function updateCharacterSelect() {
selectedPlayName = playSelect.value();
characterSelect.remove();
characterSelect = createSelect();
characterSelect.position(20, 60);
characterSelect.option('Select a character');
if (characters[selectedPlayName]) {
for (let character of characters[selectedPlayName]) {
characterSelect.option(character);
}
}
characterSelect.changed(generateRandomLine);
characterSelect.style('background-color: #F2E8C9; color: #4A2511; font-family: "Times New Roman", Times, serif; font-size: 16px; padding: 5px; border: 2px solid #8B4513; border-radius: 5px;');
randomLine = '';
}
function generateRandomLine() {
selectedCharacter = characterSelect.value();
if (selectedPlayName && selectedCharacter && characterDialogues[selectedPlayName][selectedCharacter]) {
let lines = characterDialogues[selectedPlayName][selectedCharacter];
randomLine = random(lines);
}
}
function reset() {
playSelect.value('Select a play');
updateCharacterSelect();
randomLine = '';
}