Minor cleanup, comments.

This commit is contained in:
Simon Forman 2024-04-15 11:51:41 -07:00
parent 8109192d7f
commit 5ebcb27009
3 changed files with 31 additions and 8 deletions

View File

@ -238,3 +238,12 @@ sentient species that's 1% of those, eh?
Population can move around. Planets, space stations, ships, where else?
Just a note: I'm not happy with the Poisson layout of the star systems,
too uniform, I know I've said that elsewhere. I'm also not happy with
the radiuseses of the stars, the little ones are hard to click on. It's
not so bad because you can click on the labels, but still. It would be
neat to have a scattering of stars on the background, just tiny points of
light, cosmetic only, no game function. Then the "real" stars could all
be several pixels uh radius for clickability eh?

View File

@ -17,11 +17,8 @@
# You should have received a copy of the GNU General Public License
# along with game. If not see <http://www.gnu.org/licenses/>.
#
'''
'''
from random import sample
# Database stuff. SQL, etc.
TABLES = [
'''\
@ -36,21 +33,27 @@ TABLES = [
INITIAL_POP = 1000
INITIAL_NUMBER_OF_SENTIENT_PEOPLES = 12
def init_db(conn):
print('Generating population data.')
# Find the not-too-crappy planets.
c = conn.cursor()
c.execute('''\
select id, bio, industrial_capacity
from planets
where bio > 10000 and industrial_capacity > 10000
''')
home_worlds = sample(list(c.fetchall()), 12)
# Note that bio is initialized to full capacity whereas industry is 0.
# Select some and set initial population and industry.
home_worlds = sample(list(c.fetchall()), INITIAL_NUMBER_OF_SENTIENT_PEOPLES)
for planet_id, bio, industrial_capacity in home_worlds:
bio -= INITIAL_POP # We know bio is above 10000 from the query above.
ind = min(INITIAL_POP, industrial_capacity)
people_name = get_name_of_planets_star(c, planet_id)
people_name += 'ians'
people_name = get_name_of_planets_star(c, planet_id) + 'ians'
c.execute('update planets set bio = ?, industry = ? where id = ?', (bio, ind, planet_id))
c.execute('insert into populations(species, pop, planet) values (?, ?, ?)', (people_name, INITIAL_POP, planet_id))
print(planet_id, bio, industrial_capacity)
@ -59,6 +62,7 @@ def init_db(conn):
def get_name_of_planets_star(db_cursor, planet_id):
# My first ever JOIN statement! Squeeeee!
db_cursor.execute('''\
select stars.name from stars
join planets
@ -68,4 +72,3 @@ def get_name_of_planets_star(db_cursor, planet_id):
(planet_id,)
)
return db_cursor.fetchone()[0]

View File

@ -149,6 +149,10 @@ def get_planets_for_star_named(conn, name):
# about to happen (drawing these planet data into the GUI) so it
# would be daft to worry about it (after working this all out, that
# is.)
#
# Now that I can do JOIN's I could write a mighty SQL statement that
# did all the work in the DB! I could be like the old programmers of
# yore!
for ordo, bio_capacity, industrial_capacity in c.fetchall():
assert bio_capacity >= 0
@ -168,11 +172,15 @@ def generate_stars(width, height, minimum_distance_between_stars):
name = generate_name()
while name in unique_names:
name = generate_name()
# I did get a name collision early on!
unique_names.add(name)
yield x, y, round(1 + expovariate(1)), name
def how_many_planets():
'''
Return a non-negative integer, the number of planets a star should have.
'''
n = round(gauss(5, 5))
while n < 0:
n = round(gauss(5, 5))
@ -180,9 +188,12 @@ def how_many_planets():
def has_life():
return random() < 0.1 # Ten percent chance of life
# Ten percent chance of life
return random() < 0.1
def generate_planets_for_star(c):
# Only call this just after creating a star.
star_id = c.lastrowid
for ordo in range(1, how_many_planets() + 1):
bio_capacity = round(lognormvariate(10, 5))