• What Do You Need Help With? V6
    7,544 replies, posted
Is there anyone here who is pretty good with C# and network programming? I need help with my current project and I don't want to clutter up the thread or not get answered. It'd be far easier if I could talk one on one with a person who could help. Hit me up a PM if you can.
[QUOTE=Gnomical;40447356]Is there anyone here who is pretty good with C# and network programming? I need help with my current project and I don't want to clutter up the thread or not get answered. It'd be far easier if I could talk one on one with a person who could help. Hit me up a PM if you can.[/QUOTE] Take a look at [url=https://code.google.com/p/lidgren-network-gen3/]lidgren[/url]
error X4506: ps_4_0_level_9_3 input limit (8) exceeded, shader uses 10 inputs. I have run out of shader inputs on my DirectX 11 project! I want to do multiple lights, normal mapping and things like that. Unfortunately, I cannot compress all the required information down into less than 8 inputs, so I need an alternative. Is there a way of splitting this up into multiple shaders and running one after the other to get the same end result?
[QUOTE=Goz3rr;40448932]Take a look at [url=https://code.google.com/p/lidgren-network-gen3/]lidgren[/url][/QUOTE] I'm using basic socket connections, as my server is being connected to via telnet. Using Lidgren would require me to make a client, and that is not part of my project. The "client" is any telnet capable device. [editline]27th April 2013[/editline] I figured out my major problem. Turns out having two users logged in at the same time under the same account confuses the fuck out of the server. Now it will check if that user is logged in and deny access to the person trying to log in under that user if that user is already connected. Time to fix the many crashes, and the weird backspace bug. Any of you know about that last one? When you type in something, then backspace all the way back to type in something else, it will not remove the characters from before. In the case of my stuff it messes with it so that it doesn't recognize the command entered any further. Is there maybe a way I could see if backspace is being used and then completely delete the input so far? or is that not possible using telnet. It's not a major concern right now, but it's just an annoyance.
[QUOTE=Gnomical;40449669]I'm using basic socket connections, as my server is being connected to via telnet. Using Lidgren would require me to make a client, and that is not part of my project. The "client" is any telnet capable device. [editline]27th April 2013[/editline] I figured out my major problem. Turns out having two users logged in at the same time under the same account confuses the fuck out of the server. Now it will check if that user is logged in and deny access to the person trying to log in under that user if that user is already connected.[/QUOTE] Maybe tie your interaction state to the user and socket? If the backend gets confused you need transactions, you can do that (to some extend) by queueing Tasks with .ContinueWith(...).
[QUOTE=Tamschi;40451989]Maybe tie your interaction state to the user and socket? If the backend gets confused you need transactions, you can do that (to some extend) by queueing Tasks with .ContinueWith(...).[/QUOTE] I currently have a user class that contains user variables, the socket, and the streams. They are referenced in the program by the username (which, along with the password and a few other things come from a database), so it is supposed to be unique anyway. I don't know why I thought logging in two users at the same time was a good idea. It's fixed now though.
I am following [URL="http://roguebasin.roguelikedevelopment.org/index.php?title=Complete_Roguelike_Tutorial,_using_python%2Blibtcod"]this[/URL] tutorial for python, creating a Rouge Like. So far it has gone well. But I have run into a problem: If my "hp" is full, it prints the correct message, but as soon as I use it below "max_hp" it crashes. Weirdest thing is, I even separately ran the copied code from the tutorial and it has the same issue. [CODE]PS C:\Users\Conor\desktop\current\rougey> python ex1.py 24 bits font. key color : 0 0 0 24bits greyscale font. converting to 32bits Traceback (most recent call last): File "ex1.py", line 663, in <module> player_action = handle_keys() File "ex1.py", line 574, in handle_keys chosen_item.use() File "ex1.py", line 190, in use if self.use_function() != 'cancelled': File "ex1.py", line 607, in cast_heal player.fighter.heal(HEAL_AMOUNT) AttributeError: Fighter instance has no attribute 'heal'[/CODE] I'm not really sure what an "instance" is. Code: [CODE]import libtcodpy as libtcod import math import textwrap #actual size of the window SCREEN_WIDTH = 80 SCREEN_HEIGHT = 50 #size of the map MAP_WIDTH = 80 MAP_HEIGHT = 43 #sizes and coordinates relevant for the GUI BAR_WIDTH = 20 PANEL_HEIGHT = 7 PANEL_Y = SCREEN_HEIGHT - PANEL_HEIGHT MSG_X = BAR_WIDTH + 2 MSG_WIDTH = SCREEN_WIDTH - BAR_WIDTH - 2 MSG_HEIGHT = PANEL_HEIGHT - 1 INVENTORY_WIDTH = 50 #parameters for dungeon generator ROOM_MAX_SIZE = 10 ROOM_MIN_SIZE = 6 MAX_ROOMS = 30 MAX_ROOM_MONSTERS = 3 MAX_ROOM_ITEMS = 2 #spell values HEAL_AMOUNT = 4 FOV_ALGO = 0 #default FOV algorithm FOV_LIGHT_WALLS = True #light walls or not TORCH_RADIUS = 10 LIMIT_FPS = 20 #20 frames-per-second maximum color_dark_wall = libtcod.Color(0, 0, 100) color_light_wall = libtcod.Color(130, 110, 50) color_dark_ground = libtcod.Color(50, 50, 150) color_light_ground = libtcod.Color(200, 180, 50) class Tile: #a tile of the map and its properties def __init__(self, blocked, block_sight = None): self.blocked = blocked #all tiles start unexplored self.explored = False #by default, if a tile is blocked, it also blocks sight if block_sight is None: block_sight = blocked self.block_sight = block_sight class Rect: #a rectangle on the map. used to characterize a room. def __init__(self, x, y, w, h): self.x1 = x self.y1 = y self.x2 = x + w self.y2 = y + h def center(self): center_x = (self.x1 + self.x2) / 2 center_y = (self.y1 + self.y2) / 2 return (center_x, center_y) def intersect(self, other): #returns true if this rectangle intersects with another one return (self.x1 <= other.x2 and self.x2 >= other.x1 and self.y1 <= other.y2 and self.y2 >= other.y1) class Object: #this is a generic object: the player, a monster, an item, the stairs... #it's always represented by a character on screen. def __init__(self, x, y, char, name, color, blocks=False, fighter=None, ai=None, item=None): self.x = x self.y = y self.char = char self.name = name self.color = color self.blocks = blocks self.fighter = fighter if self.fighter: #let the fighter component know who owns it self.fighter.owner = self self.item = item if self.item: #let the item component know who owns it self.item.owner = self self.ai = ai if self.ai: #let the ai component know who owns it self.ai.owner = self def move(self, dx, dy): #move by the given amount, if the destination is not blocked if not is_blocked(self.x + dx, self.y + dy): self.x += dx self.y += dy def move_towards(self, target_x, target_y): #vector from this object to the target, and distance dx = target_x - self.x dy = target_y - self.y distance = math.sqrt(dx ** 2 + dy ** 2) #normalize it to length 1 (preserving direction), then round it and #convert to integer so the movement is restricted to the map grid dx = int(round(dx / distance)) dy = int(round(dy / distance)) self.move(dx, dy) def distance_to(self, other): #return the distance to another object dx = other.x - self.x dy = other.y - self.y return math.sqrt(dx ** 2 + dy ** 2) def send_to_back(self): #make this object be drawn first, so all others appear above it if they're in the same tile. global objects objects.remove(self) objects.insert(0, self) def draw(self): #only show if it's visible to the player if libtcod.map_is_in_fov(fov_map, self.x, self.y): #set the color and then draw the character that represents this object at its position libtcod.console_set_default_foreground(con, self.color) libtcod.console_put_char(con, self.x, self.y, self.char, libtcod.BKGND_NONE) def clear(self): #erase the character that represents this object libtcod.console_put_char(con, self.x, self.y, ' ', libtcod.BKGND_NONE) class Fighter: #combat-related properties and methods (monster, player, NPC). def __init__(self, hp, defense, power, death_function=None): self.max_hp = hp self.hp = hp self.defense = defense self.power = power self.death_function = death_function def attack(self, target): #a simple formula for attack damage damage = self.power - target.fighter.defense if damage > 0: #make the target take some damage message(self.owner.name.capitalize() + ' attacks ' + target.name + ' for ' + str(damage) + ' hit points.') target.fighter.take_damage(damage) else: message(self.owner.name.capitalize() + ' attacks ' + target.name + ' but it has no effect!') def take_damage(self, damage): #apply damage if possible if damage > 0: self.hp -= damage #check for death. if there's a death function, call it if self.hp <= 0: function = self.death_function if function is not None: function(self.owner) class Item: #an item that can be picked up and used. def __init__(self, use_function=None): self.use_function = use_function def pick_up(self): #add to the player's inventory and remove from the map if len(inventory) >= 26: message('Your inventory is full, cannot pick up ' + self.owner.name + '.', libtcod.red) else: inventory.append(self.owner) objects.remove(self.owner) message('You picked up a ' + self.owner.name + '!', libtcod.green) def use(self): #just call the "use_function" if it is defined if self.use_function is None: message('The ' + self.owner.name + ' cannot be used.') else: if self.use_function() != 'cancelled': inventory.remove(self.owner) #destroy after use, unless it was cancelled for some reason class BasicMonster: #AI for a basic monster. def take_turn(self): #a basic monster takes its turn. if you can see it, it can see you monster = self.owner if libtcod.map_is_in_fov(fov_map, monster.x, monster.y): #move towards player if far away if monster.distance_to(player) >= 2: monster.move_towards(player.x, player.y) #close enough, attack! (if the player is still alive.) elif player.fighter.hp > 0: monster.fighter.attack(player) def is_blocked(x, y): #first test the map tile if map[x][y].blocked: return True #now check for any blocking objects for object in objects: if object.blocks and object.x == x and object.y == y: return True return False def create_room(room): global map #go through the tiles in the rectangle and make them passable for x in range(room.x1 + 1, room.x2): for y in range(room.y1 + 1, room.y2): map[x][y].blocked = False map[x][y].block_sight = False def create_h_tunnel(x1, x2, y): global map #horizontal tunnel. min() and max() are used in case x1>x2 for x in range(min(x1, x2), max(x1, x2) + 1): map[x][y].blocked = False map[x][y].block_sight = False def create_v_tunnel(y1, y2, x): global map #vertical tunnel for y in range(min(y1, y2), max(y1, y2) + 1): map[x][y].blocked = False map[x][y].block_sight = False def make_map(): global map, player #fill map with "blocked" tiles map = [[ Tile(True) for y in range(MAP_HEIGHT) ] for x in range(MAP_WIDTH) ] rooms = [] num_rooms = 0 for r in range(MAX_ROOMS): #random width and height w = libtcod.random_get_int(0, ROOM_MIN_SIZE, ROOM_MAX_SIZE) h = libtcod.random_get_int(0, ROOM_MIN_SIZE, ROOM_MAX_SIZE) #random position without going out of the boundaries of the map x = libtcod.random_get_int(0, 0, MAP_WIDTH - w - 1) y = libtcod.random_get_int(0, 0, MAP_HEIGHT - h - 1) #"Rect" class makes rectangles easier to work with new_room = Rect(x, y, w, h) #run through the other rooms and see if they intersect with this one failed = False for other_room in rooms: if new_room.intersect(other_room): failed = True break if not failed: #this means there are no intersections, so this room is valid #"paint" it to the map's tiles create_room(new_room) #add some contents to this room, such as monsters place_objects(new_room) #center coordinates of new room, will be useful later (new_x, new_y) = new_room.center() if num_rooms == 0: #this is the first room, where the player starts at player.x = new_x player.y = new_y else: #all rooms after the first: #connect it to the previous room with a tunnel #center coordinates of previous room (prev_x, prev_y) = rooms[num_rooms-1].center() #draw a coin (random number that is either 0 or 1) if libtcod.random_get_int(0, 0, 1) == 1: #first move horizontally, then vertically create_h_tunnel(prev_x, new_x, prev_y) create_v_tunnel(prev_y, new_y, new_x) else: #first move vertically, then horizontally create_v_tunnel(prev_y, new_y, prev_x) create_h_tunnel(prev_x, new_x, new_y) #finally, append the new room to the list rooms.append(new_room) num_rooms += 1 def place_objects(room): #choose random number of monsters num_monsters = libtcod.random_get_int(0, 0, MAX_ROOM_MONSTERS) for i in range(num_monsters): #choose random spot for this monster x = libtcod.random_get_int(0, room.x1+1, room.x2-1) y = libtcod.random_get_int(0, room.y1+1, room.y2-1) #only place it if the tile is not blocked if not is_blocked(x, y): if libtcod.random_get_int(0, 0, 100) < 80: #80% chance of getting an orc #create an orc fighter_component = Fighter(hp=10, defense=0, power=3, death_function=monster_death) ai_component = BasicMonster() monster = Object(x, y, 'o', 'orc', libtcod.desaturated_green, blocks=True, fighter=fighter_component, ai=ai_component) else: #create a troll fighter_component = Fighter(hp=16, defense=1, power=4, death_function=monster_death) ai_component = BasicMonster() monster = Object(x, y, 'T', 'troll', libtcod.darker_green, blocks=True, fighter=fighter_component, ai=ai_component) objects.append(monster) #choose random number of items num_items = libtcod.random_get_int(0, 0, MAX_ROOM_ITEMS) for i in range(num_items): #choose random spot for this item x = libtcod.random_get_int(0, room.x1+1, room.x2-1) y = libtcod.random_get_int(0, room.y1+1, room.y2-1) #only place it if the tile is not blocked if not is_blocked(x, y): #create a healing potion item_component = Item(use_function=cast_heal) item = Object(x, y, '!', 'healing potion', libtcod.violet, item=item_component) objects.append(item) item.send_to_back() #items appear below other objects def render_bar(x, y, total_width, name, value, maximum, bar_color, back_color): #render a bar (HP, experience, etc). first calculate the width of the bar bar_width = int(float(value) / maximum * total_width) #render the background first libtcod.console_set_default_background(panel, back_color) libtcod.console_rect(panel, x, y, total_width, 1, False, libtcod.BKGND_SCREEN) #now render the bar on top libtcod.console_set_default_background(panel, bar_color) if bar_width > 0: libtcod.console_rect(panel, x, y, bar_width, 1, False, libtcod.BKGND_SCREEN) #finally, some centered text with the values libtcod.console_set_default_foreground(panel, libtcod.white) libtcod.console_print_ex(panel, x + total_width / 2, y, libtcod.BKGND_NONE, libtcod.CENTER, name + ': ' + str(value) + '/' + str(maximum)) def get_names_under_mouse(): global mouse #return a string with the names of all objects under the mouse (x, y) = (mouse.cx, mouse.cy) #create a list with the names of all objects at the mouse's coordinates and in FOV names = [obj.name for obj in objects if obj.x == x and obj.y == y and libtcod.map_is_in_fov(fov_map, obj.x, obj.y)] names = ', '.join(names) #join the names, separated by commas return names.capitalize() def render_all(): global fov_map, color_dark_wall, color_light_wall global color_dark_ground, color_light_ground global fov_recompute if fov_recompute: #recompute FOV if needed (the player moved or something) fov_recompute = False libtcod.map_compute_fov(fov_map, player.x, player.y, TORCH_RADIUS, FOV_LIGHT_WALLS, FOV_ALGO) #go through all tiles, and set their background color according to the FOV for y in range(MAP_HEIGHT): for x in range(MAP_WIDTH): visible = libtcod.map_is_in_fov(fov_map, x, y) wall = map[x][y].block_sight if not visible: #if it's not visible right now, the player can only see it if it's explored if map[x][y].explored: if wall: libtcod.console_set_char_background(con, x, y, color_dark_wall, libtcod.BKGND_SET) else: libtcod.console_set_char_background(con, x, y, color_dark_ground, libtcod.BKGND_SET) else: #it's visible if wall: libtcod.console_set_char_background(con, x, y, color_light_wall, libtcod.BKGND_SET ) else: libtcod.console_set_char_background(con, x, y, color_light_ground, libtcod.BKGND_SET ) #since it's visible, explore it map[x][y].explored = True #draw all objects in the list, except the player. we want it to #always appear over all other objects! so it's drawn later. for object in objects: if object != player: object.draw() player.draw() #blit the contents of "con" to the root console libtcod.console_blit(con, 0, 0, MAP_WIDTH, MAP_HEIGHT, 0, 0, 0) #prepare to render the GUI panel libtcod.console_set_default_background(panel, libtcod.black) libtcod.console_clear(panel) #print the game messages, one line at a time y = 1 for (line, color) in game_msgs: libtcod.console_set_default_foreground(panel, color) libtcod.console_print_ex(panel, MSG_X, y, libtcod.BKGND_NONE, libtcod.LEFT, line) y += 1 #show the player's stats render_bar(1, 1, BAR_WIDTH, 'HP', player.fighter.hp, player.fighter.max_hp, libtcod.light_red, libtcod.darker_red) #display names of objects under the mouse libtcod.console_set_default_foreground(panel, libtcod.light_gray) libtcod.console_print_ex(panel, 1, 0, libtcod.BKGND_NONE, libtcod.LEFT, get_names_under_mouse()) #blit the contents of "panel" to the root console libtcod.console_blit(panel, 0, 0, SCREEN_WIDTH, PANEL_HEIGHT, 0, 0, PANEL_Y) def message(new_msg, color = libtcod.white): #split the message if necessary, among multiple lines new_msg_lines = textwrap.wrap(new_msg, MSG_WIDTH) for line in new_msg_lines: #if the buffer is full, remove the first line to make room for the new one if len(game_msgs) == MSG_HEIGHT: del game_msgs[0] #add the new line as a tuple, with the text and the color game_msgs.append( (line, color) ) def player_move_or_attack(dx, dy): global fov_recompute #the coordinates the player is moving to/attacking x = player.x + dx y = player.y + dy #try to find an attackable object there target = None for object in objects: if object.fighter and object.x == x and object.y == y: target = object break #attack if target found, move otherwise if target is not None: player.fighter.attack(target) else: player.move(dx, dy) fov_recompute = True def menu(header, options, width): if len(options) > 26: raise ValueError('Cannot have a menu with more than 26 options.') #calculate total height for the header (after auto-wrap) and one line per option header_height = libtcod.console_get_height_rect(con, 0, 0, width, SCREEN_HEIGHT, header) height = len(options) + header_height #create an off-screen console that represents the menu's window window = libtcod.console_new(width, height) #print the header, with auto-wrap libtcod.console_set_default_foreground(window, libtcod.white) libtcod.console_print_rect_ex(window, 0, 0, width, height, libtcod.BKGND_NONE, libtcod.LEFT, header) #print all the options y = header_height letter_index = ord('a') for option_text in options: text = '(' + chr(letter_index) + ') ' + option_text libtcod.console_print_ex(window, 0, y, libtcod.BKGND_NONE, libtcod.LEFT, text) y += 1 letter_index += 1 #blit the contents of "window" to the root console x = SCREEN_WIDTH/2 - width/2 y = SCREEN_HEIGHT/2 - height/2 libtcod.console_blit(window, 0, 0, width, height, 0, x, y, 1.0, 0.7) #present the root console to the player and wait for a key-press libtcod.console_flush() key = libtcod.console_wait_for_keypress(True) #convert the ASCII code to an index; if it corresponds to an option, return it index = key.c - ord('a') if index >= 0 and index < len(options): return index return None def inventory_menu(header): #show a menu with each item of the inventory as an option if len(inventory) == 0: options = ['Inventory is empty.'] else: options = [item.name for item in inventory] index = menu(header, options, INVENTORY_WIDTH) #if an item was chosen, return it if index is None or len(inventory) == 0: return None return inventory[index].item def handle_keys(): global key; if key.vk == libtcod.KEY_ENTER and key.lalt: #Alt+Enter: toggle fullscreen libtcod.console_set_fullscreen(not libtcod.console_is_fullscreen()) elif key.vk == libtcod.KEY_ESCAPE: return 'exit' #exit game if game_state == 'playing': #movement keys if key.vk == libtcod.KEY_UP: player_move_or_attack(0, -1) elif key.vk == libtcod.KEY_DOWN: player_move_or_attack(0, 1) elif key.vk == libtcod.KEY_LEFT: player_move_or_attack(-1, 0) elif key.vk == libtcod.KEY_RIGHT: player_move_or_attack(1, 0) else: #test for other keys key_char = chr(key.c) if key_char == 'g': #pick up an item for object in objects: #look for an item in the player's tile if object.x == player.x and object.y == player.y and object.item: object.item.pick_up() break if key_char == 'i': #show the inventory; if an item is selected, use it chosen_item = inventory_menu('Press the key next to an item to use it, or any other to cancel.\n') if chosen_item is not None: chosen_item.use() return 'didnt-take-turn' def player_death(player): #the game ended! global game_state message('You died!', libtcod.red) game_state = 'dead' #for added effect, transform the player into a corpse! player.char = '%' player.color = libtcod.dark_red def monster_death(monster): #transform it into a nasty corpse! it doesn't block, can't be #attacked and doesn't move message(monster.name.capitalize() + ' is dead!', libtcod.orange) monster.char = '%' monster.color = libtcod.dark_red monster.blocks = False monster.fighter = None monster.ai = None monster.name = 'remains of ' + monster.name monster.send_to_back() def cast_heal(): #heal the player if player.fighter.hp == player.fighter.max_hp: message('You are already at full health.', libtcod.red) return 'cancelled' message('Your wounds start to feel better!', libtcod.light_violet) player.fighter.heal(HEAL_AMOUNT) ############################################# # Initialization & Main Loop ############################################# libtcod.console_set_custom_font('arial10x10.png', libtcod.FONT_TYPE_GREYSCALE | libtcod.FONT_LAYOUT_TCOD) libtcod.console_init_root(SCREEN_WIDTH, SCREEN_HEIGHT, 'python/libtcod tutorial', False) libtcod.sys_set_fps(LIMIT_FPS) con = libtcod.console_new(MAP_WIDTH, MAP_HEIGHT) panel = libtcod.console_new(SCREEN_WIDTH, PANEL_HEIGHT) #create object representing the player fighter_component = Fighter(hp=30, defense=2, power=5, death_function=player_death) player = Object(0, 0, '@', 'player', libtcod.white, blocks=True, fighter=fighter_component) #the list of objects with just the player objects = [player] #generate map (at this point it's not drawn to the screen) make_map() #create the FOV map, according to the generated map fov_map = libtcod.map_new(MAP_WIDTH, MAP_HEIGHT) for y in range(MAP_HEIGHT): for x in range(MAP_WIDTH): libtcod.map_set_properties(fov_map, x, y, not map[x][y].block_sight, not map[x][y].blocked) fov_recompute = True game_state = 'playing' player_action = None inventory = [] #create the list of game messages and their colors, starts empty game_msgs = [] #a warm welcoming message! message('Welcome stranger! Prepare to perish in the Tombs of the Ancient Kings.', libtcod.red) mouse = libtcod.Mouse() key = libtcod.Key() while not libtcod.console_is_window_closed(): #render the screen libtcod.sys_check_for_event(libtcod.EVENT_KEY_PRESS|libtcod.EVENT_MOUSE,key,mouse) render_all() libtcod.console_flush() #erase all objects at their old locations, before they move for object in objects: object.clear() #handle keys and exit game if needed player_action = handle_keys() if player_action == 'exit': break #let monsters take their turn if game_state == 'playing' and player_action != 'didnt-take-turn': for object in objects: if object.ai: object.ai.take_turn()[/CODE] (we need syntax highlighting for python)
[QUOTE=Chris220;40449511]error X4506: ps_4_0_level_9_3 input limit (8) exceeded, shader uses 10 inputs. I have run out of shader inputs on my DirectX 11 project! I want to do multiple lights, normal mapping and things like that. Unfortunately, I cannot compress all the required information down into less than 8 inputs, so I need an alternative. Is there a way of splitting this up into multiple shaders and running one after the other to get the same end result?[/QUOTE] I don't know the limits of either any more but it could be to do with creating the shader with d3d9.3 compatibility. [url]http://msdn.microsoft.com/en-us/library/windows/desktop/ff819065%28v=vs.85%29.aspx[/url] This is all I could find.
[QUOTE=whatthe;40453272]I am following [URL="http://roguebasin.roguelikedevelopment.org/index.php?title=Complete_Roguelike_Tutorial,_using_python%2Blibtcod"]this[/URL] tutorial for python, creating a Rouge Like. So far it has gone well. But I have run into a problem: If my "hp" is full, it prints the correct message, but as soon as I use it below "max_hp" it crashes. Weirdest thing is, I even separately ran the copied code from the tutorial and it has the same issue. [CODE]PS C:\Users\Conor\desktop\current\rougey> python ex1.py 24 bits font. key color : 0 0 0 24bits greyscale font. converting to 32bits Traceback (most recent call last): File "ex1.py", line 663, in <module> player_action = handle_keys() File "ex1.py", line 574, in handle_keys chosen_item.use() File "ex1.py", line 190, in use if self.use_function() != 'cancelled': File "ex1.py", line 607, in cast_heal player.fighter.heal(HEAL_AMOUNT) AttributeError: Fighter instance has no attribute 'heal'[/CODE] I'm not really sure what an "instance" is. Code: [CODE]#code[/CODE] (we need syntax highlighting for python)[/QUOTE] An instance is an actual manifestation of something memory. So player.fighter is an instance (of the class Fighter). And the problem is, that you're attempting to access a field 'heal', which you did not define in the class or set for the instance.
How do I use a sprite sheet? Currently I only have a picture for each character in my java program " private String craft = "pleft.png";" but I'm not sure how to go about doing it where after responding to a key press the next frame plays. [code]package main; import java.util.ArrayList; import java.awt.Image; import java.awt.event.KeyEvent; import javax.swing.ImageIcon; public class P1 { private String craft = "pleft.png"; private int dx; private int dy; private int x; private int y; private Image image; private ArrayList missiles; private final int CRAFT_SIZE = 20; public P1() { ImageIcon ii = new ImageIcon(this.getClass().getResource(craft)); image = ii.getImage(); missiles = new ArrayList(); x = 50; y = 87; } public void move() { x += dx; y += dy; } public int getX() { return x; } public int getY() { return y; } public Image getImage() { return image; } public ArrayList getMissiles() { return missiles; } public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); if (key == KeyEvent.VK_INSERT) { fire(); } if (key == KeyEvent.VK_LEFT) { dx = -1; } if (key == KeyEvent.VK_RIGHT) { dx = 1; } if (key == KeyEvent.VK_UP) { dy = -1; } if (key == KeyEvent.VK_DOWN) { dy = 1; } } public void fire() { missiles.add(new Gun1(x + CRAFT_SIZE, y + CRAFT_SIZE/2)); } public void keyReleased(KeyEvent e) { int key = e.getKeyCode(); if (key == KeyEvent.VK_LEFT) { dx = 0; } if (key == KeyEvent.VK_RIGHT) { dx = 0; } if (key == KeyEvent.VK_UP) { dy = 0; } if (key == KeyEvent.VK_DOWN) { dy = 0; } } }[/code]
[QUOTE=ZeekyHBomb;40454075]An instance is an actual manifestation of something memory. So player.fighter is an instance (of the class Fighter). And the problem is, that you're attempting to access a field 'heal', which you did not define in the class or set for the instance.[/QUOTE] [CODE]class Fighter: #combat-related properties and methods (monster, player, NPC). def __init__(self, hp, defense, power, heal, death_function=None): self.max_hp = hp self.hp = hp self.defense = defense self.power = power self.heal = cast_heal self.death_function = death_function[/CODE] Ok, so I defined it within the class, but I am not sure what I would put in the instance, which I gather is [CODE]#create object representing the player fighter_component = Fighter(hp=30, defense=2, power=5, death_function=player_death) player = Object(0, 0, '@', 'player', libtcod.white, blocks=True, fighter=fighter_component)[/CODE] before the main loop?
I don't think a member variable would be fit. A method with functionality similar to the take_damage method is probably what you want.
Well I'm working with Alien Swarm engine, and I have found an issue with viewmodels stuff. Viewmodel stuff works fine but ShouldReceiveProjectedTextures doesn't work at all! I have tried to use [url]https://developer.valvesoftware.com/wiki/Env_projectedtexture/fixes#Enabling_shadow_receiving_on_the_view_model[/url] but it doesn't enable projected texture on my viewmodels at all. Maybe someone knows how to fix it?
So can some people help me with Java work? The problem I have is that I have a complete HashSet code but I want to modify it after the iterator is set that it throws off a ConcurrentModificationException.. [code]import java.util.Iterator; import java.util.NoSuchElementException; /** * This class implements a hash set using separate chaining. */ public class HashSet { private Node[] buckets; private int currentSize; /** * Constructs a hash table. * * @param bucketsLength * the length of the buckets array */ public HashSet(int bucketsLength) { buckets = new Node[bucketsLength]; currentSize = 0; } /** * Tests for set membership. * * @param x * an object * @return true if x is an element of this set */ public boolean contains(Object x) { int h = x.hashCode(); if (h < 0) { h = -h; } h = h % buckets.length; Node current = buckets[h]; while (current != null) { if (current.data.equals(x)) { return true; } current = current.next; } return false; } /** * Adds an element to this set. * * @param x * an object * @return true if x is a new object, false if x was already in the set */ public boolean add(Object x) { int h = x.hashCode(); if (h < 0) { h = -h; } h = h % buckets.length; Node current = buckets[h]; while (current != null) { if (current.data.equals(x)) { return false; } // Already in the set current = current.next; } Node newNode = new Node(); newNode.data = x; newNode.next = buckets[h]; buckets[h] = newNode; currentSize++; return true; } /** * Removes an object from this set. * * @param x * an object * @return true if x was removed from this set, false if x was not an element * of this set */ public boolean remove(Object x) { int h = x.hashCode(); if (h < 0) { h = -h; } h = h % buckets.length; Node current = buckets[h]; Node previous = null; while (current != null) { if (current.data.equals(x)) { if (previous == null) { buckets[h] = current.next; } else { previous.next = current.next; } currentSize--; return true; } previous = current; current = current.next; } return false; } /** * Returns an iterator that traverses the elements of this set. * * @return a hash set iterator */ public Iterator iterator() { return new HashSetIterator(); } /** * Gets the number of elements in this set. * * @return the number of elements */ public int size() { return currentSize; } class Node { public Object data; public Node next; } class HashSetIterator implements Iterator { private int bucketIndex; private Node current; /** * Constructs a hash set iterator that points to the first element of the * hash set. */ public HashSetIterator() { current = null; bucketIndex = -1; } /** Need to add ConcurrentModificationException stuff*/ public boolean hasNext() { if (current != null && current.next != null) { return true; } for (int b = bucketIndex + 1; b < buckets.length; b++) { if (buckets[b] != null) { return true; } } return false; } /** Need to add ConcurrentModificationException stuff*/ public Object next() { if (current != null && current.next != null) { current = current.next; // Move to next element in bucket } else // Move to next bucket { do { bucketIndex++; if (bucketIndex == buckets.length) { throw new NoSuchElementException(); } current = buckets[bucketIndex]; } while (current == null); } return current.data; } /** Removes the last object returned by a call to next() in the iterator. At least one call to next() must be made before each call to remove(), otherwise an IllegalStateException is thrown. If the underlying HashSet is modified in any way (directly, or by remove() in another Iterator), thows a ConcurrentModificationException. (This would happen even before the IllegalStateException gets thrown. */ public void remove() { throw new UnsupportedOperationException(); } } } [/code] TESTER [code]import java.util.ConcurrentModificationException; import java.util.Iterator; public class HashSetDraftTester { public static void main(String[] args) { HashSet h = new HashSet(10); h.add("first"); h.add("second"); h.add("third"); Iterator it = h.iterator(); while(it.hasNext()) it.next(); Iterator it2 = h.iterator(); it = h.iterator(); it2.next(); it.next(); it2.next(); it.next(); System.out.println("Made it past no exception cases"); System.out.println("Expected: Made it past no exception cases"); h.add("fourth"); try { it.next(); } catch (ConcurrentModificationException ex) { System.out.println("ConcurrentModificationException"); } System.out.println("Expected: ConcurrentModificationException"); it = h.iterator(); h.remove("ninth"); it.next(); h.remove("second"); try { it.next(); } catch (ConcurrentModificationException ex) { System.out.println("ConcurrentModificationException"); } System.out.println("Expected: ConcurrentModificationException"); } }[/code]
Hi guys! I'm trying to run a Slick2D example in Netbeans on Linux. I have this: [code]package slick2dexperimenting; import org.newdawn.slick.*; public class HelloWorld extends BasicGame { public HelloWorld() { super("Hello World"); } @Override public void init(GameContainer gc) throws SlickException { } @Override public void update(GameContainer gc, int delta) throws SlickException { } @Override public void render(GameContainer gc, Graphics g) throws SlickException { g.drawString("Hello World", 100, 100); } public static void main(String[] args) throws SlickException { AppGameContainer app = new AppGameContainer(new HelloWorld()); app.setDisplayMode(800, 600, false); app.start(); } }[/code] When I try to run it, it gives me this exception: [quote]Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860) at java.lang.Runtime.loadLibrary0(Runtime.java:845) at java.lang.System.loadLibrary(System.java:1084) at org.lwjgl.Sys$1.run(Sys.java:73) at java.security.AccessController.doPrivileged(Native Method) at org.lwjgl.Sys.doLoadLibrary(Sys.java:66) at org.lwjgl.Sys.loadLibrary(Sys.java:95) at org.lwjgl.Sys.<clinit>(Sys.java:112) at org.lwjgl.opengl.Display.<clinit>(Display.java:135) at org.newdawn.slick.AppGameContainer$1.run(AppGameContainer.java:37) at java.security.AccessController.doPrivileged(Native Method) at org.newdawn.slick.AppGameContainer.<clinit>(AppGameContainer.java:34) at slick2dexperimenting.Slick2DExperimenting.main(Slick2DExperimenting.java:32) Java Result: 1[/quote] It took me an hour to try and get the natives to be read so I could actually run the thing, but now it's giving me more exceptions! D: This is what I've got in my VM Options when I run the program: -Djava.library.path=/home/Pilapodapostache/Slick2Dlibs/lwjgl-2.9.0/native/linux/ Any help would be appreciated, Thanks.
super quick question that google wasn't able to answer, for some reason. i'm in C++ so i'm basically writing a program to search a linked list of DVDs (each node has title, genre, actor, supp actor, year it came out, and IMDB rating). I'll display a menu and the user can pick what to search by. I have a feeling I can do all the searches in one function, but the one thing I'm having an issue with is...how. In the interests of not being incredibly redundant, I'm wondering if I could basically just use the same search but change one or two things. Normally I'd search for genre with movPtr->genre or something. Can I do movPtr->[I]variable[/I] and just change variable to genre/actor/title? Or does that not work?
Overload your search method. Have the main body change the search parameter based on a parameter passed to the main body, and your overloads should pass the parameter. Or just have the main method parameterized and explicitly cased, and have methods like "SearchByGenre" that invoke your main search procedure and its search parameter. Your search will still be explicitly coded for each search type, but it will still be consolidated to one main search method. The extra methods just help make it more readable in the main body of your code. i can code an example if you're still confused.
I...uh. Say what now? [editline]30th April 2013[/editline] I'm just passing through intSearch or stringSearch depending on which search they choose and then searching for that via a switch statement. It's clunky but it works.
yeah that's probably the best you're going to get
Guys, I got an opportunity for a job as a Junior~ish level programmer, but they work mostly with C#. I have experience with Python, HTML, and CSS. I have a month or so to try my best to prove myself. Could anyone recommend me some tried and trusted learning resources please?
This is a bit of a broad question, but: What is it called when you store a file inside another file, like mdl files or vtf files inside of a valve gcf, and how do I achieve this in C++? Does anybody know of a tutorial?
[QUOTE=dylanb5123;40478496]This is a bit of a broad question, but: What is it called when you store a file inside another file, like mdl files or vtf files inside of a valve gcf, and how do I achieve this in C++? Does anybody know of a tutorial?[/QUOTE] Archive/archiving Take a look at [url=https://icculus.org/physfs/]PhysicsFS[/url].
[QUOTE=Protocol7;40473185]yeah that's probably the best you're going to get[/QUOTE] i hate myself but i finished it it's bulky and i want to delete it just to purge the world of a shitty file, but it works so fuck it I could have accomplished everything just using more functions, but I wanted to try and do all the searches within one loop and a switch statement. another question about pointers and shit. i asked this already but i don't think you noticed it. say i'm using movPtr to point to movie nodes or something, and each node has title, actor, genre, year, etc. Do i HAVE to do movPtr->genre, movPtr->title, etc, or could I theoretically do like movPtr->variable and then just replace variable with whatever i'm searching for in the node? like variable = genre, then movPtr->variable will be movPtr->genre. I'm trying to make my code more flexible and it seems like that'd certainly help. [editline]30th April 2013[/editline] i should probably explain what i'm doing. so basically i'm writing a code to search through a linked list. I've got a list of like 1000 movies, and then I need to give the option to search by genre, title, actor, rating, or year, and then output to whatever output file they want. the only way i can think to do it is either write the entirety of the search AND the output within the switch statement, which will look completely stupid, or I write a function that will count and output the results and call it. problem with that is i need to pass in what they're looking for so i can use the same function for each option, otherwise it's no different than writing it inside the switch. if i can figure out how to pass through like genre and then have the function search for genre and output it, and then pass through title and have it search for and output titles, etc., then I'll be gold otherwise i don't know what to do help [editline]30th April 2013[/editline] nevermind i'm an idiot there's no limit on number of functions to add, i'll just write one for each search
Sounds like something you'd want to use SQLite for tbh. Anyway, as long as their type matches you can do that. Otherwise you could still fall back to a variant type. And in general, prefer references to pointers (if you're coding in C++ and not C). References have a higher safety guarantee.
I don't really know what those are. :< I'm still learning this.
Anyone got an idea why in SFML.Net (C#) I cannot use the move() function on CircleShapes? Doesn't seem to exist, but in C++ I can do it fine...
[QUOTE=Zinayzen;40481779]I don't really know what those are. :< I'm still learning this.[/QUOTE] [code]void byRef(int &i) { i = 5; } void byPtr(int *i) { *i = 4; } int main() { int a; byPtr(&a); //a is now 4 byRef(a); //a is now 5 }[/code] There is no NULL for reference. You cannot re-assign references (because you will just assign to whatever the reference references).
How do you make a splash screen appear first and then open a different window after a couple of seconds in JAVA?
Alrite, so I am trying to create objects and alter them in a class but I am having trouble getting and setting shit with them, here is an example which I want to do, but the objects don't exist in the part where I try and edit them. [code]class cheese { string name; public cheese(string nm) { name = nm; } } class cheeses { public void Create() { cheese cheese1 = new cheese("Blue"); cheese cheese2 = new cheese("Orange"); cheese cheese3 = new cheese("Cheddar"); object[] cheeseArray = { cheese1, cheese2, cheese3 }; } public void Alter() { foreach (object cheese in cheeseArray) { cheese.name += "Old"; } } }[/code]
[QUOTE=JakeAM;40484345]Alrite, so I am trying to create objects and alter them in a class but I am having trouble getting and setting shit with them, here is an example which I want to do, but the objects don't exist in the part where I try and edit them. [/QUOTE] "cheeseArray" doesn't exist outside of the scope of Create() [code]class cheese { string name; public cheese(string nm) { name = nm; } } class cheeses { public object[] cheeseArray; public void Create() { cheese cheese1 = new cheese("Blue"); cheese cheese2 = new cheese("Orange"); cheese cheese3 = new cheese("Cheddar"); cheeseArray = { cheese1, cheese2, cheese3 }; } public void Alter() { foreach (object cheese in cheeseArray) { cheese.name += "Old"; } } }[/code]
Sorry, you need to Log In to post a reply to this thread.