LinuxQuestions.org
Visit Jeremy's Blog.
Go Back   LinuxQuestions.org > Blogs > ghostdog74
User Name
Password

Notices

Rating: 2 votes, 3.00 average.

Simple Hangman Game

Submit "Simple Hangman Game" to Digg Submit "Simple Hangman Game" to del.icio.us Submit "Simple Hangman Game" to StumbleUpon Submit "Simple Hangman Game" to Google Submit "Simple Hangman Game" to LinuxQuestions.org
Posted 09-16-2008 at 07:35 AM by ghostdog74

I was so bored today, that i created this simple hangman game to entertain myself. Makes use of a dictionary file called "english" to get random word to guess. No fancy stuff like drawing the man, only number of tries (set to 10)

Code:
#!/bin/bash

awk  'BEGIN{
    dictfile="english"
    l="abcdefghijklmnopqrstuvwxyz"
    while (1) {
        srand()
        lm=split(l,letters,"")
        if ( ( getline < dictfile) <= 0 ) {
            print "Dictionary file does not exists"
        }else {
            tries=10
            count=getlinecount(dictfile)
            num=int(rand() * count) +  1
            WORD=randomword(dictfile,num)
            gsub(/[[:blank:]]$|[[:space:]]|[0-9]+$/,"",WORD)
            WORD=tolower(WORD)
            m=split(WORD,word,"")
            for(i=1;i<=m;i++){ THEWORD[i] ="_" }
            for(j=1;j<=m;j++){ printf "%s",THEWORD[j] }
            print ""
            while(tries>0){
                flag=0
                printf "Choose a letter (Enter full word to complete): "
                printf "You have "tries" tries\n"
                for(o=1;o<=lm;o++){ printf letters[o] }
                print ""
                getline LETTER < "-"
                if ( LETTER==WORD || join(THEWORD,1,m,SUBSEP) == WORD ) {
                    print "congratulations! "
                    exit
                }
                system("clear")
                for( o=1;o<=m;o++) {
                    if ( word[o] == LETTER ) {
                        flag=1
                        THEWORD[o]=LETTER
                        for(i in letters){
                            if ( letters[i]==LETTER) { delete letters[i] }
                        }
                    }
                }
                if (flag==0){ tries-- }
                for(i=1;i<=m;i++){
                    printf THEWORD[i]
                }
                print ""
            }

            print "You hanged yourself!"
            print "The answer is "WORD
        }
    }
}
function getlinecount(file){
    count=0
    while ( ( getline < file ) > 0 ) count++
    close(file)
    return count
}
function randomword(file,linenumber){
    count=0
    while ( ( getline dictline< file) > 0 ) {
        count++
        if (  count == linenumber) {
            gsub(/[[:punct:]]/,"",dictline)
            gsub(/ +$/,"",dictline)
            m=split(dictline,toguess," ")
            if (m>1){
                num = int(rand() * m) +  1
                return toguess[num]
            }else {
                return dictline
            }
        }
    }
    close(file)
}
function join(array, start, end, sep,    result, i)
{
        if (sep == "")
                sep = " "
        else if (sep == SUBSEP) # magic value
                sep = ""
        result = array[start]
        for (i = start + 1; i <= end; i++)
                result = result sep array[i]
        return result

}
'
Posted in Uncategorized
Views 647 Comments 0 Edit Tags
« Prev     Main     Next »


All times are GMT -5. The time now is 01:49 PM.

Main Menu
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
RSS2  LQ Podcast
RSS2  LQ Radio
Twitter: @linuxquestions
identi.ca: @linuxquestions
Facebook: @linuxquestions
Open Source Consulting | Domain Registration