Merge pull request 'Implemented Library Class' (#8) from kyler/library into master
Reviewed-on: #8
This commit is contained in:
commit
a79ba39ff6
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,83 @@
|
||||||
|
# Kyler Olsen
|
||||||
|
# CS 2450 Final Project
|
||||||
|
# Apr 2025
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
import json
|
||||||
|
import random
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from game import Game
|
||||||
|
|
||||||
|
|
||||||
|
class Library:
|
||||||
|
|
||||||
|
__verses: dict
|
||||||
|
__games: list[Game]
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
with open("data/scripture-frequencies.json", encoding='utf-8') as file:
|
||||||
|
self.__verses = json.load(file)
|
||||||
|
self.__games = []
|
||||||
|
|
||||||
|
def join_game(self, name: str, game_num: int = -1):
|
||||||
|
if game_num == -1:
|
||||||
|
for i, game in enumerate(self.__games):
|
||||||
|
if not game.active:
|
||||||
|
game_num = i
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.__games.append(Game())
|
||||||
|
game_num = len(self.__games) - 1
|
||||||
|
self.__games[game_num].add_player(name)
|
||||||
|
|
||||||
|
def get_verse(self, difficulty: int):
|
||||||
|
url = self.__select_verse(difficulty)
|
||||||
|
text = self.__get_verse_text(url)
|
||||||
|
print(text, end='\n\n')
|
||||||
|
|
||||||
|
def __select_verse(self, difficulty: int) -> str:
|
||||||
|
|
||||||
|
difficulty_verses = self.__get_verses_by_difficulty(difficulty)
|
||||||
|
|
||||||
|
return difficulty_verses[random.randint(0,len(difficulty_verses)-1)]
|
||||||
|
|
||||||
|
def __get_verse_text(self, url: str) -> str:
|
||||||
|
lang = 'eng'
|
||||||
|
volume, book_url, chapter_url, verse_url = url[1:].split('/')
|
||||||
|
|
||||||
|
if volume == 'ot': filename = f"data/{lang}.old-testament.json"
|
||||||
|
elif volume == 'nt': filename = f"data/{lang}.new-testament.json"
|
||||||
|
elif volume == 'bofm': filename = f"data/{lang}.book-of-mormon.json"
|
||||||
|
elif volume == 'dc-testament': filename = f"data/{lang}.doctrine-and-covenants.json"
|
||||||
|
elif volume == 'pgp': filename = f"data/{lang}.pearl-of-great-price.json"
|
||||||
|
|
||||||
|
with open(filename, encoding='utf-8') as file:
|
||||||
|
data = json.load(file)
|
||||||
|
for book in data['books']:
|
||||||
|
if book['lds_slug'] == book_url:
|
||||||
|
for chapter in book['chapters']:
|
||||||
|
if chapter['chapter'] == int(chapter_url):
|
||||||
|
for verse in chapter['verses']:
|
||||||
|
if verse['verse'] == int(verse_url):
|
||||||
|
return verse['text']
|
||||||
|
raise ValueError(f'ERROR: VERSE NOT FOUND ({url})')
|
||||||
|
|
||||||
|
def __get_verses_by_difficulty(self, difficulty: int) -> list[str]:
|
||||||
|
real_difficulty_upper = pow((10-difficulty)/9, 2) * 500
|
||||||
|
real_difficulty_lower = pow((9-difficulty)/9.55, 3) * 500
|
||||||
|
|
||||||
|
difficulty_verses = []
|
||||||
|
for key, value in self.__verses.items():
|
||||||
|
for i, diff in enumerate(value):
|
||||||
|
if real_difficulty_lower <= diff <= real_difficulty_upper:
|
||||||
|
difficulty_verses.append(f"{key}/{i+1}")
|
||||||
|
|
||||||
|
return difficulty_verses
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
lib = Library()
|
||||||
|
for i in range(11): lib.get_verse(i)
|
Loading…
Reference in New Issue