diff --git a/sokoban.py b/sokoban.py new file mode 100644 index 0000000..e7fbc28 --- /dev/null +++ b/sokoban.py @@ -0,0 +1,82 @@ +from locate2 import * +from levels import * + +def move(sx, sy): + global c, n_o + tx = x + sx + ty = y + sy + dest = carte.get_cell(tx, ty) + if dest in "./": + return tx, ty + if dest in "+*": + bx = tx + sx + by = ty + sy + bDest = carte.get_cell(bx, by) + if bDest in "#*+": + return x, y + if dest == "+": + c == "." + carte.locate(tx, ty, ".") + else: + c == "/" + carte.locate(tx, ty, "/") + n_o += 1 + if bDest == ".": + carte.locate(tx+sx, ty+sy, "+") + return tx, ty + if bDest == "/": + carte.locate(tx+sx, ty+sy, "*") + n_o -= 1 + return tx, ty + return x, y + return x, y + + +def load(n): + global carte + w = lvl_dim[n][0] + h = lvl_dim[n][1] + carte = Pad(w, h) + carte.load(levels[n]) + o = 0 + for i in range(w * h): + c = levels[n][i] + if c == "@": + x = i % w + 1 + y = i // w + 1 + elif c == "/": + o += 1 + return x, y, o + +i = 0 +buffer = str() +while 1: + i = int(input("Enter level ID :\n> ")) + x, y, n_o = load(i) + while n_o: + c = carte.get_cell(x, y) + if c == "@": + c = "." + carte.locate(x, y, "@") + e = carte.refresh(x-10, y-2) + carte.locate(x, y, c) + if not e: + e = buffer + else: + e = e[-1] + buffer = e + #action switch + sx = 0 + sy = 0 + if e == "4": + sx = -1 + elif e == "8": + sy = -1 + elif e == "6": + sx = 1 + elif e in "25": + sy = 1 + elif e == "0": + buffer == "" + x, y, n_o = load(i) + x, y = move(sx, sy) \ No newline at end of file