Problem med moment 3-5 i kmom04-spelet

  • Författare
  • Meddelande

david_andersson

javascriptare

  • Inlägg: 37
  • Blev medlem: 05 sep 2014, 14:05

Problem med moment 3-5 i kmom04-spelet

Inlägg06 nov 2014, 18:23

Hej,

Jag har försökt fram och tillbaka med olika metoder för att lyckas lagra och öppna spelplanen utan framgång.
Förstår inte riktigt det här med att skapa en array och lagra spelplanen i denna. Har väldigt svårt att visualisera
hur exakt funktionerna i programmet fungerar, även om jag förstår vad de utför. Försökte mig till en början på en variant där spelplanen såg ut som följande:

game_board = [[' ' for y in range y1-1] for x in range x-1]

men vet inte riktigt hur jag ska gå vidare med att placera ut koordinaterna...
Sedan provade jag att använda en inbyggd funktion i curses och lade till följande kod:

elif key == 's':
f = open('game_board.txt', 'w')
scr.putwin('game_board.txt')
f.close()
elif key == 'o':
scr.clear()
scr.refresh()
scr.getwin('game_board.txt')

Men detta resulterade bara i ett felmeddelande... Skulle någon kunna hjälpa mig i rätt riktning? Känner inte alls igen mig i den här uppgiften jämfört med tidigare utförda moment.

Mvh

David
Online
Användarvisningsbild

mos

dbwebb

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

Re: Problem med moment 3-5 i kmom04-spelet

Inlägg06 nov 2014, 21:32

Har du kikat i denna tråden som pratar om curses och som visar hur en matris fungerar?
viewtopic.php?t=2987

Om du får ett felmeddelande, visa gärna hela felmeddelandet, det ger ledtrådar till vad felet beror på.
...
..:
.... /mos

david_andersson

javascriptare

  • Inlägg: 37
  • Blev medlem: 05 sep 2014, 14:05

Re: Problem med moment 3-5 i kmom04-spelet

Inlägg06 nov 2014, 21:41

Hej,

Jag har kikat igenom den tråden, men kommer ändå inte fram till någon helt fungerande lösning.. Efter mycket om och men har jag nu följande kod som fungerar, men som inte ställer cursor på rätt position efter att ha sparat och öppnat med 's' och 'o'. Detta tror jag beror på att min funktion printar alla rader och sedan förmodar jag, ställer sig i slutet av den sista raden den har skrivit ut. Jag funderar därför på om jag skulle kunna använda mig av exempelvis scr.getyx() för att på något sätt hitta tillbaka till rätt position.

Kod ( länk till min folder med filen http://www.student.bth.se/~daan14/dbweb ... m04/game1/ ):

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
testing curses module
"""

import curses
import pickle

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 asciart?

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

# Draw a border
scr.border()

# Move cursor to center
scr.move(yc, xc)

# Refresh to draw out
scr.refresh()

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


board = []
while True:
key = scr.getkey()
if key == 'q':
break
elif key == 's':
for y in range(y1-1):
board.append(list(scr.instr(y+1, 1, x1-1)))
scr.move(y1-1, x1-1)
pickle.dump(board, open("pickled.txt", "wb"))
elif key == 'o':
board = []
board = pickle.load(open("pickled.txt", "rb"))
scr.clear()
for y in range(y1-1):
for x in range(x1-1):
scr.addstr(y+1, x+1, chr(board[y][x]))
scr.border()
scr.move(0, 0)
scr.refresh()

elif key == 'KEY_UP' and y > y0+1:
y -= 1
elif key == 'KEY_DOWN' and y < y1-1:
y += 1
elif key == 'KEY_LEFT' and x > x0+1:
x -= 1
elif key == 'KEY_RIGHT' and x < x1-1:
x += 1
else:
ch = 'o'

# Draw out the char at cursor positino
scr.addstr(ch)

# Move cursor to new position
scr.move(y, x)

# 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)
Online
Användarvisningsbild

mos

dbwebb

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

Re: Problem med moment 3-5 i kmom04-spelet

Inlägg06 nov 2014, 21:59

Du har en del i koden som ställer markören i center, pröva att anropa den när du läst in filen.
Kod: Markera allt
# Move cursor to center
scr.move(yc, xc)
...
..:
.... /mos

david_andersson

javascriptare

  • Inlägg: 37
  • Blev medlem: 05 sep 2014, 14:05

Re: Problem med moment 3-5 i kmom04-spelet

Inlägg06 nov 2014, 22:17

mos skrev:Du har en del i koden som ställer markören i center, pröva att anropa den när du läst in filen.
Kod: Markera allt
# Move cursor to center
scr.move(yc, xc)


Hej igen,

okej, jag provade att anropa den kodraden. Tyvärr blir resultatet detsamma som innan eftersom yc och xc antagligen är omdefinierade på något sätt?
Dessutom fungerar bara save en gång, därefter öppnar den från samma punkt även om jag trycker 's' igen, alltså första save punkten.

Jag lyckades lösa uppgiften en gång så att den fungerade helt och hållet, dock använde jag mig inte av en
tvådimensionell array vid det tillfället utan curses.getwin(file) och curses.putwin(file) vilket jag antog var otillåtet.

Vet inte hur jag ska gå vidare.

Mvh
David
Online
Användarvisningsbild

mos

dbwebb

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

Re: Problem med moment 3-5 i kmom04-spelet

Inlägg06 nov 2014, 22:27

I din kod så har du med:
Kod: Markera allt
# Get center position
yc, xc = (y1-y0)//2, (x1-x0)//2

# Draw a border
scr.border()

# Move cursor to center
scr.move(yc, xc)

# Refresh to draw out
scr.refresh()


Det ligger innan huvudloopen.

Om du kan räkna ut var mitten är så kan du också placera ut markören där genom att använda ovanstående kod. Du behöver flytta markören och rita om screenen med refresh.

Det står inte uttalat i uppgiften att det var förbjudet att lösa uppgiften utan en två dimensionell array. Så du hade klarat dig undan med det. I allafall några dagar till - sen borde jag nog ändra det så att det krävs en 2 dimensionell array... getwin() o putwin() blir lite väl enkelt, när man väl lärt sig använda dem...
...
..:
.... /mos

Vilka är online

Användare som besöker denna kategori: Stefan och 13 gäster