added selection script

This commit is contained in:
Josh d'Entremont 2015-06-14 19:31:01 -03:00
parent b672f086d2
commit 1c1215325f
5 changed files with 114 additions and 18 deletions

View file

@ -3,8 +3,6 @@ Fallout Terminal
Simulates a computer terminal from fallout. Simulates a computer terminal from fallout.
Currently only implements the login portion.
Usage Usage
================ ================
@ -13,21 +11,12 @@ python fallout.py
``` ```
or for hard mode where the user must manually enter the correct input in the or for hard mode where the user must manually enter the correct input in the
boot script, boot and login scripts
``` ```
python fallout.py hard python fallout.py hard
``` ```
To only use the login in another program:
```
import fallout_login
# returns true if the correct password is entered, false otherwise
fallout_login.beginLogin()
```
Passwords Passwords
================ ================

View file

@ -3,6 +3,7 @@ import fallout_login as login
import fallout_boot as boot import fallout_boot as boot
import fallout_locked as locked import fallout_locked as locked
import fallout_hack as hack import fallout_hack as hack
import fallout_selection as select
import sys import sys
hard = False hard = False
@ -13,7 +14,7 @@ if boot.beginBoot(hard):
pwd = hack.beginLogin() pwd = hack.beginLogin()
if pwd != None: if pwd != None:
login.beginLogin(hard, 'ADMIN', pwd) login.beginLogin(hard, 'ADMIN', pwd)
print 'Login successful' print select.beginSelection()
else: else:
locked.beginLocked() locked.beginLocked()
print 'Login failed' print 'Login failed'

View file

@ -6,7 +6,7 @@ LETTER_PAUSE = 5
INPUT_PAUSE = 500 # ms INPUT_PAUSE = 500 # ms
TYPE_DELAY = 30 TYPE_DELAY = 40
HIDDEN_MASK = '*' HIDDEN_MASK = '*'
@ -59,3 +59,11 @@ def upperInput(window, hidden = False, can_newline = True):
elif can_newline: elif can_newline:
window.addch(NEWLINE) window.addch(NEWLINE)
return instr return instr
def centeredWrite(window, text, pause = LETTER_PAUSE):
"""
Writes to the current line but centers the text
"""
width = window.getmaxyx()[1]
window.move(window.getyx()[0], width / 2 - len(text) / 2)
slowWrite(window, text, pause)

View file

@ -1,6 +1,7 @@
import curses import curses
from fallout_functions import slowWrite from fallout_functions import slowWrite
from fallout_functions import centeredWrite
################## text strings ###################### ################## text strings ######################
@ -25,10 +26,10 @@ def runLocked(scr):
# set screen to initial position # set screen to initial position
scr.erase() scr.erase()
curses.curs_set(0) curses.curs_set(0)
scr.move(height / 2 - 1, width / 2 - len(LOCKED_1) / 2) scr.move(height / 2 - 1, 0)
slowWrite(scr, LOCKED_1) centeredWrite(scr, LOCKED_1)
scr.move(height / 2 + 1, width / 2 - len(LOCKED_2) / 2) scr.move(height / 2 + 1, 0)
slowWrite(scr, LOCKED_2) centeredWrite(scr, LOCKED_2)
scr.refresh() scr.refresh()
curses.napms(LOCKED_OUT_TIME) curses.napms(LOCKED_OUT_TIME)

97
fallout_selection.py Normal file
View file

@ -0,0 +1,97 @@
import curses
from fallout_functions import slowWrite
from fallout_functions import centeredWrite
from fallout_functions import NEWLINE
####################### text strings ########################
CENTERED_HEADERS = (
'ROBCO INDUSTRIES UNIFIED OPERATING SYSTEM',
'COPYRIGHT 2075-2077 ROBCO INDUSTRIES',
'-SERVER 6-',
''
)
OTHER_HEADERS = (
'\tSoftLock Solutions, Inc',
'"Your Security is Our Security"',
'>\\ Welcome, USER',
''
)
SELECTIONS = (
'Disengage Lock',
'Deactivate Turrets',
'Read Log'
)
###################### Functions ############################
def makeSelection(scr):
"""
ALlow the user to select an option
Returns the line number of the users selection starting at 0
"""
inchar = 0
selection = 0
selection_count = len(SELECTIONS)
selection_start_y = scr.getyx()[0]
width = scr.getmaxyx()[1]
while inchar != NEWLINE:
# move to start of selections and hightlight current selection
scr.move(selection_start_y, 0)
line = 0
for sel in SELECTIONS:
whole_line = '> ' + SELECTIONS[line]
space = width - len(whole_line) % width
whole_line += ' ' * space
if line == selection:
scr.addstr(whole_line, curses.A_REVERSE)
else:
scr.addstr(whole_line)
line += 1
scr.refresh()
inchar = scr.getch()
# move up and down
if inchar == curses.KEY_UP and selection > 0:
selection -= 1
elif inchar == curses.KEY_DOWN and selection < selection_count - 1:
selection += 1
return selection
def runSelection(scr):
"""
Print the selections and allow the user to select one
"""
curses.use_default_colors()
scr.erase()
scr.move(0, 0)
curses.curs_set(0)
curses.noecho()
width = scr.getmaxyx()[1]
for header in CENTERED_HEADERS:
centeredWrite(scr, header + '\n')
for header in OTHER_HEADERS:
slowWrite(scr, header + '\n')
for i in xrange(width):
scr.addch(curses.ACS_BSBS)
scr.refresh()
return makeSelection(scr)
def beginSelection():
"""
Initialize curses and start the boot process
"""
res = curses.wrapper(runSelection)
return res