say I have my base object to represent an abstract monster, with it's corresponding variables
m_N_x
m_N_y
m_N_character
m_N_color
m_N_abstract_previous
m_N_abstract_next
m_N_type
and my concrete object variables for a landmine monster
m_N_life
m_N_concrete_previous
m_N_concrete_next
finally, I need to keep track of two more variable: the first and the last elements of the abstract list, and the first and the last elements of the concrete landmine list.
m_first
m_last
landmine_first
landmine_last
Objects would share a common number between their abstract list and their concrete list
to add a landmine:
set "my_new_landmine" to "('m_last'+1)"
set "m_&my_new_landmine&_x" to 42
set "m_&my_new_landmine&_y" to 42
set "m_&my_new_landmine&_character" to 42
set "m_&my_new_landmine&_color" to 42
set "m_&my_new_landmine&_life" to 100
set "m_&my_new_landmine&_abstract_next" -1
set "m_&my_new_landmine&_concrete_next" -1
set "m_&my_new_landmine&_abstract_previous" to "m_last"
set "m_&my_new_landmine&_concrete_previous" to "landmine_last"
set "m_&m_last&_abstract_next" to "my_new_landmine"
set "m_&landmine_last&_concrete_next" to "my_new_landmine"
set "m_last" to "my_new_landmine"
set "landmine_last" to "my_new_landmine"
to display all the objects on the screen (including, but not specific to, landmines):
: "main_loop"
copy overlay block at "#blank_x" "#blank_y" for 80 by 25 to "#screen_buffer_x" "#screen_buffer_y"
set "iterator" "m_first"
: "loop"
if "iterator" = -1 "end"
goto "#display_character"
set "iterator" "m_&iterator&_abstract_next"
goto "loop"
: "end"
copy overlay block at "#screen_buffer_x" "#screen_buffer_y" for 80 by 25 to "screen_x" "screen_y"
wait 1
goto "main_loop"
: "#display_character"
if "m_&iterator&_x" < "buffer_left_edge" "#return"
if "m_&iterator&_x" >= "buffer_right_edge" "#return"
if "m_&iterator&_y" < "buffer_top_edge" "#return"
if "m_&iterator&_y" >= "buffer_bottom_edge" "#return"
set "vco('m_&iterator&_x'),('m_&iterator&_y')" to "m_&iterator&_color"
set "vch('m_&iterator&_x'),('m_&iterator&_y')" to "m_&iterator&_character"
goto "#return"
to remove dead landmines:
set "iterator" "landmine_first"
: "loop"
if "iterator" = -1 then "end"
set "iterator_next" "m_&iterator&_concrete_next"
goto "#verify"
set "iterator" "iterator_next"
goto "loop"
: "end"
end
: "#verify"
if "m_&iterator&_life" > 0 then "#return"
set "m_('m_&iterator&_concrete_previous')_next" "m_&iterator&_concrete_next"
set "m_('m_&iterator&_abstract_previous')_next" "m_&iterator&_abstract_next"
set "m_&iterator&_x" to 0
set "m_&iterator&_y" to 0
set "m_&iterator&_character" to 0
set "m_&iterator&_color" to 0
set "m_&iterator&_life" to 0
set "m_&iterator&_abstract_next" 0
set "m_&iterator&_concrete_next" 0
set "m_&iterator&_abstract_previous" to 0
set "m_&iterator&_concrete_previous" to 0
goto "#return"
If I'm not mistaken that would allow me to get:
Basic object inheritance (say, multiple specific enemy types all within a single enemy list),
A simple way to loop through any objects in a list,
A relatively simple way to add or remove objects in a list
Hmmm.
edit: whoops, did some basic mistake here.. lemme fix it. There.
This post has been edited by LogiCow: 23 April 2010 - 03:15 AM

Help




The days keep on passing by... And we still chase the same star we once saw.













