Python Programming
 
Forums: » Register « |  User CP |  Games |  Calendar |  Members |  FAQs |  Sitemap |  Support | 
User Name:
Password:
Remember me

The Shed is going Social! Join us on FaceBook and Twitter and chime in on the conversation.

Go Back   Dev Shed ForumsProgramming LanguagesPython Programming

Reply
Add This Thread To:
  Del.icio.us   Digg   Google   Spurl   Blink   Furl   Simpy   Y! MyWeb 
Thread Tools Search this Thread Rate Thread Display Modes
 
Unread Dev Shed Forums Sponsor:
  #1  
Old February 6th, 2013, 12:02 PM
swenn swenn is offline
Registered User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Feb 2013
Posts: 4 swenn User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 46 m 49 sec
Reputation Power: 0
Problem with a simple text game

Hey!

I've a problem that I cannot identify. It's hard to describe the situation, but while playing the game, it randomly stops after the user has entered an input...

The game is in Estonian. Firstly it asks for name, then you have to choose a class.
If you want to step into testing then after inputing your name and class, choose (1) so you start wandering. After some time looping 1 + ENTER, the game decides to stop.
I haven't implemented monsters yet just because the game crashes

Thanks in advance!

Code:
Code:
import random


def randUitama():
    global uitama
    uitama = random.randint(1,5)

def uitamine():
    global joud, hp, kuld, kaitse, uitama

    randUitama()

    if uitama == 1:
        special = random.randint(1,10)
        if special == 1:
            print('Söid roiskunud kärbseseene ära, mis taastas kõik su elupunktid!')
            print('Uita edasi(1) | Tagasi külla(2)')
            valik = input()
            if valik == '1':
                uitamine()
            else:
                kyla()
            hp = 10
        elif special == 2:
            spec = random.randint(1,3)
            if spec == 2:
                print('Jõid allikast võluvett ning said 2 jõudu juurde!')
                joud = joud + 2
            else:
                print('Kõndisid mitu kilomeetrit, kuid midagi ei juhtunud...')
            print('Uita edasi(1) | Tagasi külla(2)')
            valik = input()
            if valik == '1':
                uitamine()
            else:
                kyla()
        elif special == 3:
            print('Astusid püünisesse ja kaotasid 4 elupunkti!')
            hp = hp - 4
            print('Uita edasi(1) | Tagasi külla(2)')
            valik = input()
            if valik == '1':
                uitamine()
            else:
                kyla()
        elif special == 4:
            kaitsePluss = random.randint(1,3)
            if kaitsePluss == 2:
                print('Hüppasid langeva puu eest ära ja said 2 kaitsepunkti!')
                kaitse = kaitse + 2
                print('Uita edasi(1) | Tagasi külla(2)')
                valik = input()
                if valik == '1':
                    uitamine()
                else:
                    kyla()
        elif special == 5:
            randomKuld = random.randint(1,15)
            print('Leidsid mahajäetud onnist', randomKuld ,'kulda!')
            kuld = kuld + randomKuld
            print('Uita edasi(1) | Tagasi külla(2)')
            valik = input()
            if valik == '1':
                uitamine()
            else:
                kyla()
        else:
            print('Kõndisid mitu kilomeetrit, kuid midagi ei juhtunud...')
            print('Uita edasi(1) | Tagasi külla(2)')
            valik = input()
            if valik == '1':
                uitamine()
            else:
                kyla()
            
    elif uitama == 2 or uitama == 3:
        print('uitamine 2')
        print('Uita edasi(1) | Tagasi külla(2)')
        valik = input()
        if valik == '1':
            uitamine()
        else:
            kyla()
    elif uitama == 4 or uitama == 5:
        print('Kõndisid mitu kilomeetrit, kuid midagi ei juhtunud...')
        print('Uita edasi(1) | Tagasi külla(2)')
        valik = input()
        if valik == '1':
            uitamine()
        else:
            kyla()

def pood():
    global kuld
    print('\nHAWKSI pood: Soodsaimad relvad ja turvised kogu GRIMETHORPE\'is!')
    if seisus == '1':
        print('   NIMI\t\t\tHIND\t   NIMI\t\t\t\tHIND')
        print('(1)Vasar(jõud+5)\t10\t(a)Kiiver(kaitse+5)\t\t10')
        print('(2)Pistoda(jõud+10)\t50\t(b)Kilp(kaitse+10)\t\t50')
        print('(3)Mõõk(jõud+25)\t100\t(c)Soomuspüksid(kaitse+25)\t100')
        print('(4)Hellebard(jõud+50)\t500\t(d)Raudrüü(kaitse+50)\t\t500')
    else:
        print('   NIMI\t\t\t\tHIND\t   NIMI\t\t\t\tHIND')
        print('(1)Sirelileht(võlujõud+5)\t10\t(a)Kübar(kaitse+5)\t\t10')
        print('(2)Tammeoks(võlujõud+10)\t50\t(b)Loitsuraamat(kaitse+10)\t50')
        print('(3)Vahtrakaigas(võlujõud+25)\t100\t(c)Nahkpüksid(kaitse+25)\t100')
        print('(4)Mahagonist sau(võlujõud+50)\t500\t(d)Võlukuub(kaitse+50)\t\t500')
    print('\nMida soovite(nr.|täht|lahku(3))?   Soovin: ', end=' ')
    ost = input()
    if seisus == '1' or seisus == '2':
        if ost == '1' and kuld >= 10:
            joud = 15
            kuld = kuld - 10
            ostOnnestus = 1
        elif ost == '2' and kuld >= 50:
            joud = 20
            kuld -= 50
            ostOnnestus = 1
        elif ost == '3' and kuld >= 100:
            joud = 35
            kuld -= 100
            ostOnnestus = 1
        elif ost == '4' and kuld >= 500:
            joud = 60
            kuld -= 500
            ostOnnestus = 1
        elif ost == 'a' and kuld >= 10:
            kaitse = 15
            kuld -= 10
            ostOnnestus = 1
        elif ost == 'b' and kuld >= 50:
            kaitse = 20
            kuld -= 50
            ostOnnestus = 1
        elif ost == 'c' and kuld >= 100:
            kaitse = 35
            kuld -= 100
            ostOnnestus = 1
        elif ost == 'd' and kuld >= 500:
            kaitse = 60
            kuld -= 500
            ostOnnestus = 1
        elif ost == '3':
            kyla()
        else:
            print('Pole piisavalt KULDA!')
            ostOnnestus = 0

    if ostOnnestus == 1:
        print('Ost õnnestus!')
    print('Tagasi GRIMETHORPE\'i(1) | Uuesti ostma(2))', end=' ')
    poodBoolean = input()
    if poodBoolean == '1':
        kyla()
    else:
        pood()


def kyla():
    global kuld, joud, hp, kaitse
    print('\nTervitused, ' + nimi + ', olete saabunud GRIMETHORPE\'i!')
    print('\nKUHU MINNA?\t\tANDMED')
    print('Uitama(1)\t\tKuld:\t    ', kuld, '\nPood(2)\t\t\tJõud:\t    ', joud, '\nPank(3)\t\t\tKaitse:\t    ', kaitse, '\n\t\t\tElupunktid: ', hp)
    kuhuminna = input()

    if kuhuminna == '1':
        uitamine()
    elif kuhuminna == '2':
        pood()
    elif kuhuminna == '3':
        pank()
    else:
        kyla()


global kuld, joud, hp, kaitse, seisus, nimi, uitama
kuld = 0
joud = 10
hp = 10
kaitse = 10

print ('Tegelase nimi:', end=' ')
nimi = input()
print('Vali seisus (Sõdalane(1), Nõid(2)):', end =' ')
seisus = input()
kyla()


Reply With Quote
  #2  
Old February 6th, 2013, 02:52 PM
Marbelous Marbelous is offline
Registered User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Dec 2012
Posts: 20 Marbelous User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 8 h 25 m 27 sec
Reputation Power: 0
It's difficult to analyze this code. Partially due to the language barrier, but mainly, the massive overuse of global variables in every function make it a de-bugging nightmare. Re-factor your functions using proper input arguments and return values and you'll probably spot your problems.

Reply With Quote
  #3  
Old February 6th, 2013, 03:53 PM
swenn swenn is offline
Registered User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Feb 2013
Posts: 4 swenn User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 46 m 49 sec
Reputation Power: 0
Sorry for the global variables. I've been looking everywhere for an explanation on how to get get different variables into functions, so I did my best to just make it work

Anyway. There has to be something wrong with 'input()' thingies. Every time it stops after I input something.

I'll let my brains calm down just a little bit and look it up bit by bit.

Thanks for a suggestion, Marbelous!

Reply With Quote
  #4  
Old February 6th, 2013, 04:45 PM
b49P23TIvg's Avatar
b49P23TIvg b49P23TIvg is offline
Contributing User
Dev Shed Loyal (3000 - 3499 posts)
 
Join Date: Aug 2011
Posts: 3,458 b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level) 
Time spent in forums: 1 Month 2 Weeks 4 Days 6 h 26 m 43 sec
Reputation Power: 403
Run your program in python3 .
(input function works differently in python2 and python3 versions)
__________________
[code]Code tags[/code] are essential for python code!

Reply With Quote
  #5  
Old February 7th, 2013, 12:34 PM
swenn swenn is offline
Registered User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Feb 2013
Posts: 4 swenn User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 46 m 49 sec
Reputation Power: 0
Quote:
Originally Posted by b49P23TIvg
Run your program in python3 .
(input function works differently in python2 and python3 versions)


I am using python 3.3.

Reply With Quote
  #6  
Old February 7th, 2013, 12:43 PM
b49P23TIvg's Avatar
b49P23TIvg b49P23TIvg is offline
Contributing User
Dev Shed Loyal (3000 - 3499 posts)
 
Join Date: Aug 2011
Posts: 3,458 b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level) 
Time spent in forums: 1 Month 2 Weeks 4 Days 6 h 26 m 43 sec
Reputation Power: 403
OK, I read your message more closely. Obviously you used python 3 or the game would have quit sooner.

I played the game for a while and it crashed with
...
File "p.py", line 171, in kyla
pank()
NameError: global name 'pank' is not defined


What error message do you get?

Reply With Quote
  #7  
Old February 7th, 2013, 01:02 PM
swenn swenn is offline
Registered User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Feb 2013
Posts: 4 swenn User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 46 m 49 sec
Reputation Power: 0
Quote:
Originally Posted by b49P23TIvg
OK, I read your message more closely. Obviously you used python 3 or the game would have quit sooner.

I played the game for a while and it crashed with
...
File "p.py", line 171, in kyla
pank()
NameError: global name 'pank' is not defined


What error message do you get?


Sorry for that! 'Pank' stands for 'Bank' and it is not implemented at the moment. The problem occurs if you just input the first 2 caps and continue to 'Uitama(1)'.

Then spam number '1' + ENTER and the game will just stop after a few inputs.
I'm still trying to solve it myself, too.

Thanks for helping!

Reply With Quote
  #8  
Old February 7th, 2013, 10:55 PM
b49P23TIvg's Avatar
b49P23TIvg b49P23TIvg is offline
Contributing User
Dev Shed Loyal (3000 - 3499 posts)
 
Join Date: Aug 2011
Posts: 3,458 b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level)b49P23TIvg User rank is Major (30000 - 40000 Reputation Level) 
Time spent in forums: 1 Month 2 Weeks 4 Days 6 h 26 m 43 sec
Reputation Power: 403
When I run your program as
$ yes 1 | python3 p.py
is similar to
Code:
import random

def f():
    if random.randint(1,75) < 75:
        f()

f()
because it terminates only when---follow the red highlights
Code:
def uitamine():
    global joud, hp, kuld, kaitse, uitama

    randUitama()

    if uitama == 1: # 1 in 5 chance
        special = random.randint(1,10)
        if special == 1:
            print('Söid roiskunud kärbseseene ära, mis taastas kõik su elupunktid!')
            print('Uita edasi(1) | Tagasi külla(2)')
            valik = input()
            if valik == '1':
                uitamine()
            else:
                kyla()
            hp = 10
        elif special == 2:
            spec = random.randint(1,3)
            if spec == 2:
                print('Jõid allikast võluvett ning said 2 jõudu juurde!')
                joud = joud + 2
            else:
                print('Kõndisid mitu kilomeetrit, kuid midagi ei juhtunud...')
            print('Uita edasi(1) | Tagasi külla(2)')
            valik = input()
            if valik == '1':
                uitamine()
            else:
                kyla()
        elif special == 3:
            print('Astusid püünisesse ja kaotasid 4 elupunkti!')
            hp = hp - 4
            print('Uita edasi(1) | Tagasi külla(2)')
            valik = input()
            if valik == '1':
                uitamine()
            else:
                kyla()
        elif special == 4: # 1 in 10 chance
            kaitsePluss = random.randint(1,3)
            if kaitsePluss == 2:
                print('Hüppasid langeva puu eest ära ja said 2 kaitsepunkti!')
                kaitse = kaitse + 2
                print('Uita edasi(1) | Tagasi külla(2)')
                valik = input()
                if valik == '1': # 2/3 chance that this does NOT happen
                    uitamine()
                else:
                    kyla()

Lesson: don't use recursion to implement a menu. If you had written the code as you intended it would have consumed the stack and exited without grace. Messy.
Instead, write kyla like this
Code:
def kyla():
    global kuld, joud, hp, kaitse
    while True:
        print('\nTervitused, ' + nimi + ', olete saabunud GRIMETHORPE\'i!')
        print('\nKUHU MINNA?\t\tANDMED')
        print('Uitama(1)\t\tKuld:\t    ', kuld, '\nPood(2)\t\t\tJõud:\t    ', joud, '\nPank(3)\t\t\tKaitse:\t    ', kaitse, '\n\t\t\tElupunktid: ', hp)
        kuhuminna = input()

        if kuhuminna == '1':
            uitamine()
        elif kuhuminna == '2':
            pood()
        elif kuhuminna == '3':
            pank()

and call kyla once from only the main module. You must also break the recursion in uitamine .

Your program requires major rewrite.

Reply With Quote
Reply

Viewing: Dev Shed ForumsProgramming LanguagesPython Programming > Problem with a simple text game

Developer Shed Advertisers and Affiliates



Thread Tools  Search this Thread 
Search this Thread:

Advanced Search
Display Modes  Rate This Thread 
Rate This Thread:


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
View Your Warnings | New Posts | Latest News | Latest Threads | Shoutbox
Forum Jump

Forums: » Register « |  User CP |  Games |  Calendar |  Members |  FAQs |  Sitemap |  Support | 
  
 


Powered by: vBulletin Version 3.0.5
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.

© 2003-2013 by Developer Shed. All rights reserved. DS Cluster - Follow our Sitemap