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.
Currently only implements the login portion.
Usage
================
@ -13,21 +11,12 @@ python fallout.py
```
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
```
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
================

View file

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

View file

@ -6,7 +6,7 @@ LETTER_PAUSE = 5
INPUT_PAUSE = 500 # ms
TYPE_DELAY = 30
TYPE_DELAY = 40
HIDDEN_MASK = '*'
@ -59,3 +59,11 @@ def upperInput(window, hidden = False, can_newline = True):
elif can_newline:
window.addch(NEWLINE)
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
from fallout_functions import slowWrite
from fallout_functions import centeredWrite
################## text strings ######################
@ -25,10 +26,10 @@ def runLocked(scr):
# set screen to initial position
scr.erase()
curses.curs_set(0)
scr.move(height / 2 - 1, width / 2 - len(LOCKED_1) / 2)
slowWrite(scr, LOCKED_1)
scr.move(height / 2 + 1, width / 2 - len(LOCKED_2) / 2)
slowWrite(scr, LOCKED_2)
scr.move(height / 2 - 1, 0)
centeredWrite(scr, LOCKED_1)
scr.move(height / 2 + 1, 0)
centeredWrite(scr, LOCKED_2)
scr.refresh()
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