Problem med getkey()

  • Författare
  • Meddelande

simonwallin89

css-hackare

  • Inlägg: 21
  • Blev medlem: 08 sep 2014, 13:01

Problem med getkey()

Inlägg06 nov 2014, 15:03

Hej,

Jag gör extra uppgifterna till kmom04 och har fått ett ganska konstigt problem. Jag har försökt att göra om "borders" till ett labyrint spel men när jag försöker ladda ett nytt fönster med nya dimensioner så börjar getkey() att fungera annorlunda. Piltangenterna ger (i alla riktningar) tecknet ']' och annars fungerar det bra (att t.ex. spara avsluta osv är inga problem). koden jag använder ser ut som följande:

Kod: Markera allt
        elif key == 'N':
            scr.clear()
            scr.refresh()
            scr = curses.newwin(10, 20, 3, 3)
            scr.border()
            x, y = 5, 5
            y1, x1 = scr.getmaxyx()
            y1 -= 1
            x1 -= 1


Om jag byter "elif key == 'KEY_DOWN'" mot t.ex. "elif key == 's' så funkar det. Men varför ändrar sig getkey() outputen? Måste jag göra någon initialisering?
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10922
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Problem med getkey()

Inlägg06 nov 2014, 17:55

Har du ett program som vi kan testa? Kan du göra ett mindre program som visar på "felet"?
Det låter som felet händer i ett visst skede av programmets flöde. Man behöver på något sätt avgränsa det eller debugga det och se koden i dess sammanhang.

I manualen läser jag vad getkey() returnerar, det är annorlunda returvärde än det som returneras från getch() som används i exempeln. Men du kanske har en anledning till att du använder en annan funktion.
https://docs.python.org/3.4/library/curses.html
...
..:
.... /mos

simonwallin89

css-hackare

  • Inlägg: 21
  • Blev medlem: 08 sep 2014, 13:01

Re: Problem med getkey()

Inlägg07 nov 2014, 08:13

När jag satt igår så upptäckte jag att felet uppstod p.g.a att jag använde funktionen newwin() istället för resize(). Här är ett exempel program
Kod: Markera allt
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
Testing out the curses lib.
"""

import curses


def main(scr):
    """
    Draw a border around the screen, move around using the cursor and leave a
    mark of the latest pressed character on the keyboard.

    Perhaps you could make a nice painting using asciiart?

    Quit using 'q'.
    """
   
    # Clear the screen of any output
    scr.clear()

    # Get screen dimensions
    y1, x1 = scr.getmaxyx()
    y1 -= 1
    x1 -= 1

    y0, x0 = 0, 0
   
    # Get center position
    yc, xc = (y1-y0)//2, (x1-x0)//2


    # Refresh to draw out
    scr.refresh()

    # Main loop
    x = xc
    y = yc
    ch = 'o'


    while True:
        scr.addstr(y, x, 'o')
        scr.move(y1, x1)
        key = scr.getkey()
        scr.addstr(y, x, ' ')
        if key == 'q':
            break
        elif key == 'KEY_UP' and y > 1:
            if chr(scr.inch(y-1, x)) == '#':
                y = y
            else:
                y -= 1
        elif key == 'KEY_DOWN' and y < y1-1:
            if chr(scr.inch(y+1, x)) == '#':
                y = y
            else:
                y += 1
        elif key == 'KEY_LEFT' and x > 1:
            if chr(scr.inch(y, x-1)) == '#':
                x = x
            else:
                x -= 1
        elif key == 'KEY_RIGHT' and x < x1-1:
            if chr(scr.inch(y, x+1)) == '#':
                x = x
            else:
                x += 1
        elif key == 'N':
            scr.clear()
            scr.refresh()
            scr = curses.newwin(10, 20, 3, 3)
            scr.border()
            x, y = 5, 5
            y1, x1 = scr.getmaxyx()
            y1 -= 1
            x1 -= 1
       
        # Redraw all items on the screen
        scr.refresh()


if __name__ == "__main__":
    print(__doc__)
    print(main.__doc__)
    input("Press enter to begin playing...")
    curses.wrapper(main)


Så en bättre ställd fråga kanske är varför getkey() inte kan ta emot strängar i newwin()?
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10922
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Problem med getkey()

Inlägg10 nov 2014, 09:54

Programmet du bifogade gick bra att köra, det blev en ring som flyttade runt på skärmen. Jag såg inget problem med programmet.

Om något är fel, beskriv hur man återskapar felet.
...
..:
.... /mos

simonwallin89

css-hackare

  • Inlägg: 21
  • Blev medlem: 08 sep 2014, 13:01

Re: Problem med getkey()

Inlägg11 nov 2014, 22:17

Svårt att säga jag kunde inte flytta cirkeln efter att ha använt "newscreen". Det skulle ju kunna vara något med min terminal antar jag. funktionen men jag löste det med resize istället.
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10922
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Problem med getkey()

Inlägg12 nov 2014, 13:40

Om du löste det så finemang. Om du fortfarande har problemet så bifoga testprogrammet så kan jag testa i en annan terminal. Sånt kan naturligtvis vara ett bekymmer. Säg isåfall vilken terminal (operativsystem) du använder.

Annars kör på. Eller fråga igen.
...
..:
.... /mos

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 12 gäster