Posted: Mon Feb 25, 2008 1:24 pm Post subject: A simple Hangman Implementation (Игра Виселица)
Code:
report zexp_hangman no standard page heading.title
***********************************************************
* A simple game: Hangman
*
*
*history
* 1.00 29th February 2000 rnr downloaded from internet
* 1.10 1th March 2000 rnr minor changes, layout, error corr
*
***********************************************************
* Put correct UNIX Words file on the next line.
data unix_dict_file(80)
" value '/usr/share/lib/dict/words'.
value 'd:\dict\web2.txt'.
include <icon>.
data:
dict_tab(20) occurs 10000 with header line,
giveup(20),
line(80),
guesses occurs 10 with header line,
correct_guesses occurs 10 with header line,
mesg(60),
len type i,
num_words type i,
num_trys type i,
num_fails type i,
num_bads type i,
num_goods type i,
letter,
runt type i,
sec type i,
begin of fig occurs 10,
x(2),
y(2),
l,
end of fig.
* P B O ( )
initialization.
append '6006|' to fig.
append '60070' to fig.
append '6008|' to fig.
append '5908/' to fig.
append '5909/' to fig.
append '6109\' to fig.
append '6108\' to fig.
open dataset unix_dict_file for input in text mode.
if sy-subrc is initial.
do.
read dataset unix_dict_file into line length len.
if sy-subrc = 0.
if len < 20.
append line to dict_tab.
endif.
else.
exit.
endif.
enddo.
close dataset unix_dict_file.
else.
message e208(00) with 'No Dictionary found. Inform Administrator'.
endif.
describe table dict_tab lines num_words.
* write: 'Number of words in dict:',num_words.
perform print_out.
data abcde like sy-abcde.
form print_out.
data:
word_mask like dict_tab,
index type i.
abcde = sy-abcde.
sy-lsind = 0.
uline: at /(16), at 18(16), at 35(15), at 51(13).
format color col_key.
write:/ '|',icon_activate as icon no-gap, ' New Word ' hotspot,
'|' no-gap ,space no-gap color col_background,
'|', icon_failure as icon no-gap, ' Give Up! ' hotspot,
'|' no-gap ,space no-gap color col_background,
'|',icon_system_help as icon no-gap,' Help Me ' hotspot,
'|' no-gap ,space no-gap color col_background,
'|',icon_breakpoint as icon no-gap,' Exit! ' hotspot,'|'.
format reset.
uline: at /(16), at 18(16), at 35(15), at 51(13).
write /.
if not dict_tab is initial.
* print the word mask
len = strlen( dict_tab ).
do.
index = sy-index - 1.
letter = dict_tab+index(1).
search correct_guesses for letter.
if sy-subrc = 0.
word_mask+index = letter.
else.
word_mask+index = '_'.
endif.
if len = sy-index .
exit.
endif.
enddo.
* found the word
if word_mask = dict_tab.
add 1 to num_goods.
write:/ 'Got it!. Correct word is',dict_tab,
/ 'It took ' ,num_trys,'tries.'.
clear: num_trys, num_fails, dict_tab.
else.
write / 'Guess the Word:'.
do len times.
index = sy-index - 1.
letter = word_mask+index.
write letter.
enddo.
* check max failures
if num_fails < 7.
* print keyboard
uline at /(55).
do 26 times.
letter = abcde.
if sy-index = 14 or sy-index = 1. write / space. endif.
write: (3)letter centered hotspot color col_key .
shift abcde.
enddo.
write / mesg.
else.
write:/ 'Correct Word was',dict_tab.
write / 'Pick a new word'.
add 1 to num_bads.
clear dict_tab.
endif.
perform draw_fig.
endif.
elseif not giveup is initial.
write:/ 'Correct Word was',giveup.
clear giveup.
endif.
skip to line 11.
uline at /(64).
write:/'|',
(20) 'Words fully guessed', (7)num_goods,'| ',
(20) 'Words not guessed',(7)num_bads,'|'.
* write:/'Letter Guesses', num_trys, 'Failed Guesses',num_fails.
uline at /(64).
endform.
form random.
get run time field runt.
get time.
sec = sy-uzeit mod 60.
runt = runt mod 100000.
multiply runt by sec.
get time.
runt = runt mod 100000.
add sec to runt.
endform.
at line-selection.
data: field(30),value(50).
get cursor field field value value.
if field = 'ICON_ACTIVATE' or value = ' New Word'.
perform new_word.
elseif field = 'ICON_FAILURE' or value = ' Give Up!'.
perform give_up.
elseif field = 'ICON_SYSTEM_HELP' or value = ' Help Me'.
perform print_help.
elseif field = 'ICON_BREAKPOINT' or value = ' Exit!'.
leave program.
elseif field = 'LETTER' and not value is initial.
perform try_word using value+1(1).
endif.
form new_word.
if not dict_tab is initial.
add 1 to num_bads.
endif.
do.
perform random.
runt = runt mod num_words.
read table dict_tab index runt.
if not dict_tab(1) co sy-abcde and dict_tab na '0123456789'.
exit.
endif.
enddo.
translate dict_tab to upper case.
clear: num_trys, num_fails.
refresh: guesses, correct_guesses.
perform print_out.
endform.
form try_word using p_value type c.
sy-lsind = 0.
search guesses for p_value.
if sy-subrc = 0.
concatenate 'Letter' p_value 'already guessed'
into mesg separated by space.
else.
append p_value to guesses.
if dict_tab cs p_value.
concatenate 'Letter' p_value 'matches'
into mesg separated by space.
append p_value to correct_guesses .
else.
concatenate 'Letter' p_value 'does not match'
into mesg separated by space.
add 1 to num_fails.
endif.
add 1 to num_trys.
endif.
perform print_out.
endform.
at pf8.
perform new_word.
form give_up.
add 1 to num_bads.
giveup = dict_tab.
clear dict_tab.
perform print_out.
endform.
form draw_fig.
* |
* 0
* /|\
* / \
*
back.
skip 4.
write: /55 ' -------'.
write: /55 ' |'.
write: /55 ' |'.
write: /55 ' |'.
write: /55 ' |'.
write: /55 ' |'.
write: /55 '---------'.
loop at fig to num_fails.
back.
skip to line fig-y.
write at fig-x fig-l.
endloop.
back.
endform.
form print_help.
uline at /(55).
write:
/'What Is "Hangman?"',
/,
/'"Hangman" is an old schoolkid game where the',
/'computer picks a word or a phrase, and you',
/'try to reconstruct it by picking letters.',
/'You have a certain number of chances to win.',
/'Each time you pick an incorrect letter, you ',
/'lose a chance.',/,
/'Loss of a chance is traditionally depicted by adding',
/'more body parts to a picture of a hanging man.',
/'Once the man is complete, the game is over and you lose.'.
uline at /(55).
write:/ 'Click Green Back Arrow or press F3 to continue...'.
uline at /(55).
endform.
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.