Untitled
unknown
plain_text
a year ago
12 kB
23
Indexable
import curses from curses import wrapper from curses.textpad import Textbox, rectangle from fractions import Fraction import sys import time import random import cursor cursor.hide() color = {} player_cords = { "x": 0, "y": 0 } grid_map = {} term = "DIM " WIDTH = 660 HEIGHT = 180 player_stats = { "health": 10, "hunger": 0, "level": 1, "defense": 0, "attack": 0, "speed": 0 } player_inv = { "armor": [], "weapons": [], "scrolls": [], "potions": [] } def resize(ro, co): sys.stdout.write("\x1b[8;{rows};{cols}t".format(rows=ro, cols=co)) def set_colors(): global color b = 1 color = {} colors = [ "DIM RED", "DIM GREEN", "DIM YELLOW", "DIM BLUE", "DIM MAGENTA", "DIM TUR", "DIM WHITE", "GREY", "RED", "GREEN", "YELLOW", "BLUE", "MAGENTA", "TUR", "WHITE" ] for i in range(1, 16): curses.init_pair(b, i, curses.COLOR_BLACK) color[colors[b - 1]] = curses.color_pair(b) b += 1 curses.init_pair(b, curses.COLOR_BLACK, curses.COLOR_BLACK) color["BLACK"] = curses.color_pair(b) #curses.init_pair(15, 88, curses.COLOR_BLACK) #color["VERY DIM RED"] = curses.color_pair(b) #curses.init_pair(16, 22, curses.COLOR_BLACK) #color["VERY DIM GREEN"] = curses.color_pair(b) def new_map(WIDTH, HEIGHT): global grid_map for y in range(HEIGHT): for x in range(WIDTH): grid_map[(x, y)] = random.choice(["'", "\"", ".", ".", ".", ".", "S", "S", "S"]) #newgrid = {} for i in range(2): for y in range(HEIGHT): for x in range(WIDTH): n = 0 s =0 for i in [(-1, 0), (1, 0), (-1, 1), (-1, -1), (1, -1), (1, 1), (0, 1), (0 -1)]: try: if grid_map[(x+i[0], y+i[1])] in ["\"", "'"]: n += 1 if grid_map[(x+i[0], y+i[1])] in ["S"]: s += 1 except: pass if s > 3: grid_map[(x, y)] = "S" elif n > 2: grid_map[(x, y)] = random.choice(["\"", "'"]) else: grid_map[(x, y)] = "." #grid_map = newgrid.copy() def main(stdscr): resize(30, 100) header_win = curses.newwin(3, 100, 0, 0) game_map = curses.newpad(HEIGHT + 1, WIDTH + 1) stats_win = curses.newwin(25, 30, 4, 68) des_win = curses.newpad(1000, 66) set_colors() new_map(WIDTH, HEIGHT) first = True ticks = 0 if False: b = 1 for i in range(1, 99): curses.init_pair(b, i, curses.COLOR_BLACK) stdscr.addstr(int(b / 10), (i*2) - (int(b/10) * 20), str(b) if len(str(b)) != 1 else "0" + str(b), curses.color_pair(b)) b += 1 stdscr.getkey() while True: if first: stdscr.clear() header_win.clear() stats_win.clear() rectangle(header_win, 0, 0, 2, 98) rectangle(stdscr, 3, 67, 29, 98) rectangle(stdscr, 3, 0, 20, 66) rectangle(stdscr, 21, 0, 29, 66) header_win.addstr(1, int(50 - len(f"Health: {player_stats['health']} | Level {player_stats['level']} | Hunger: {player_stats['hunger']}")/2), "Health: ") header_win.addstr(f"{player_stats['health']}", color['RED'] | curses.A_BOLD) header_win.addstr(" | Level ", ) header_win.addstr(f"{player_stats['level']}", color['DIM GREEN'] | curses.A_BOLD) header_win.addstr(" | Hunger: ") header_win.addstr(f"{player_stats['hunger']}", color['DIM RED'] | curses.A_BOLD) stats_win.addstr(" Stats\n\n") stats_win.addstr(" You have ") stats_win.addstr(f"{player_stats['defense']}", color["GREY"]) stats_win.addstr(" defense\n") stats_win.addstr(" You have ") stats_win.addstr(f"{player_stats['attack']}", color["DIM MAGENTA"]) stats_win.addstr(" attack\n") stats_win.addstr(" You have ") stats_win.addstr(f"{player_stats['speed']}", color["TUR"]) stats_win.addstr(" speed\n") stdscr.refresh() header_win.refresh() stats_win.refresh() first = False #des_win.clear() toY = player_cords["y"] - 9 fromY = player_cords["y"] + 9 toX = player_cords["x"] - 33 fromX = player_cords["x"] + 33 if player_cords["y"] - 9 < 0: toY = 0 fromY = 18 if player_cords["x"] - 33 < 0: toX = 0 fromX = 66 if fromY-1 >= HEIGHT: toY = HEIGHT - 18 fromY = HEIGHT if fromX-1 >= WIDTH: toX = WIDTH - 66 fromX = WIDTH des_win.addstr("\n") for y in range(toY, fromY): for x in range(toX, fromX): i = (x, y) if i == (player_cords["x"], player_cords["y"]): game_map.addstr(i[1], i[0], "@", curses.A_BOLD | color["YELLOW"]) des_win.addstr(" You are on ") if grid_map[i] in ["\"", "'"]: des_win.addstr("some grass", color["GREEN"]) elif grid_map[i] in ["S"]: des_win.addstr("some stone", color["GREY"]) elif grid_map[i] == ".": des_win.addstr("the ground", color["DIM RED"]) else: dis_x = player_cords['x'] - x dis_y = player_cords['y'] - y #print(dis_x, dis_y) no_light = "" if abs(dis_x) > abs(dis_y): if dis_y != 0: fra = abs(dis_x) / abs(dis_y) #print(fra) spe = fra - int(fra) re = int(fra) #print(spe, re) fra2 = Fraction(spe).limit_denominator(100) #print(fra2) offset = [fra2.numerator, fra2.denominator] else: re = 1 offset = [0, 1] move_tick = 1 fake_cords = list(i) #input("READY? ") while True: #input("GU") for p in range(re): fake_cords[0] += int((dis_x/abs(dis_x)) * 1) if grid_map[tuple(fake_cords)] == "S": no_light = term if grid_map[tuple(fake_cords)] == "S": no_light = term try: fake_cords[1] += int((dis_y/abs(dis_y)) * 1) except: fake_cords[1] += 0 if move_tick == offset[1]: move_tick = 0 for p in range(offset[0]): fake_cords[0] += 1 * (dis_x/abs(dis_x)) if grid_map[tuple(fake_cords)] == "S": no_light = term if grid_map[tuple(fake_cords)] == "S": no_light = term if tuple(fake_cords) == (player_cords["x"], player_cords["y"]): break move_tick += 1 else: if dis_x != 0: fra = abs(dis_y) / abs(dis_x) #print(fra) spe = fra - int(fra) re = int(fra) #print(spe, re) fra2 = Fraction(spe).limit_denominator(100) #print(fra2) offset = [fra2.numerator, fra2.denominator] else: re = 1 offset = [0, 1] move_tick = 1 fake_cords = list(i) #input("READY? ") while True: #input("GU") for p in range(re): fake_cords[1] += int((dis_y/abs(dis_y)) * 1) if grid_map[tuple(fake_cords)] == "S": no_light = term if grid_map[tuple(fake_cords)] == "S": no_light = term try: fake_cords[0] += int((dis_x/abs(dis_x)) * 1) except: fake_cords[0] += 0 if move_tick == offset[1]: move_tick = 0 for p in range(offset[0]): fake_cords[1] += 1 * (dis_y/abs(dis_y)) if grid_map[tuple(fake_cords)] == "S": no_light = term if grid_map[tuple(fake_cords)] == "S": no_light = term if tuple(fake_cords) == (player_cords["x"], player_cords["y"]): break move_tick += 1 if grid_map[i] == "\"" or grid_map[i] == "'": if no_light != "": game_map.addstr(i[1], i[0], grid_map[i], color[no_light + "GREEN"] | curses.A_DIM) else: game_map.addstr(i[1], i[0], grid_map[i], color[no_light + "GREEN"]) elif grid_map[i] == "S": if no_light != "": game_map.addstr(i[1], i[0], grid_map[i], color["GREY"] ) else: game_map.addstr(i[1], i[0], grid_map[i], color["GREY"]) else: if no_light != "": game_map.addstr(i[1], i[0], grid_map[i], color[no_light + "WHITE"] | curses.A_DIM) else: game_map.addstr(i[1], i[0], grid_map[i], color[no_light + "WHITE"]) game_map.refresh(toY, toX, 4, 1, 19, 65) des_win.refresh(max(ticks - 5, 0), 0, 22, 1, 28, 65) key = stdscr.getkey() if key == "q": break if key == "KEY_LEFT": player_cords["x"] -= 1 if key == "KEY_RIGHT": player_cords["x"] += 1 if key == "KEY_UP": player_cords["y"] -= 1 if key == "KEY_DOWN": player_cords["y"] += 1 ticks += 1 wrapper(main)
Editor is loading...
Leave a Comment