Artician Home
Join Artician Login Search

kman's blog

avatar
  • kman
  • Male
  • Is Offline
  • Status: Administrator
  • Blog Views: 10013
  • Last Seen: 2 weeks ago

Profile

kman's Info
  • Joined: 08/25/06
  • Account: Artician Pro
  • Visits: 10013
  • Total Discussion Posts: 439
  • Portfolio Count: 15 | View
  • Blog Entries Count: 84 | View
  • Favorites Received: 25
  • Watchers: 19
Professional
Personal
Social Networks
Sunday July 29th, 2007


Is something I trully believe, creativity is something that all humans can do. With that being said, I am a huge supporter of user created content, customization, and this brings me to some good news regarding Little Big Planet. It was recently announced that Little Big Planet will not just be "an obstacle course simulator". The enemies ranging from giants to little robots I'm confident that the creators of Kung-Fu will provide plenty of variations, but the question is how much of this will be sandbox and open to user manipulation.

Customizing the materials is fairly given, but what about the AI? Will the user be able to modify stats such as strength, hit points, and maybe even create our own creatures of evil.

Well suffice to say, I'm very excited. Could you imagine a story driven game with free episodic content created by users?
Friday July 27th, 2007

The demo starts off all too familiar. If you've followed gametrailers.com than this is nothing new, but it was extremely satisfying to move through the environment which might I add looks absolutely gorgeous. It hard to put my finger on it but be it the moving of the grass or the colors, it's something I could easily see myself being taken with no matter how many times I see it. So than I start swinging that big sword on my back, the first swing follows a delay and reminds me heavily of devil may cry style game-play. So with that in mind I start looking for a pattern and quickly begin stringing together quick swings followed by a heavy swing. Aside from the familiar there were several things that the game was doing that seemed unfamiliar, and unfamiliar to some is usually regarded as bad but let's not judge too soon. Heavenly Sword does not let you jump easily, in fact there is no jump button and so there is no easy way to escape from being gang banged by dozens of enemies. Now there is a roll button, but quite frankly it's nowhere near as enjoyable as skillfully leaping feet above them and quickly landing behind the front lines. So although at first I abused this feature; I don't like to cheat games. So I begin to look for a more cinematic solution. I find that blocking works pretty well, and quickly the game became very fun. My only real complaint is the fact the demo is un-satisfyingly short.

Category: Computers & Internet - Programming & Web Development Tags: game development
Tuesday July 17th, 2007
I wrote this today in record breaking minute and thirty seconds.
Below is a Doubly Linked List with support for backend and frontend insertion.
This again more C++ code, but someone somewhere might find it useful as it's fully optimized.
Oh yea, this header file also comes with it's own walkie class, or Iterator if you prefer. Basically speaking it allows for indexing.


#ifndef DLLIST_H_
#define DLLIST_H_

// Authored by Michael Kofman
// July 17, 2007

template <typename Type> class DLLIter;

template <typename Type>
class DLList
{
private:
friend class DLLIter<Type>;
struct Node
{
Type m_data;
Node * pNext;
Node * pPrev;
};
Node * pHead;
Node * pTail;

public:
// DLList : constructor.
DLList ()
{
pHead = pTail = 0;
}

// ~DLList : destructor.
virtual ~DLList ()
{
clear();
}

// addHead : append a new item to the front of the list.
void addHead (const Type &v)
{
Node * temp = new Node;
temp->m_data = v;
temp->pPrev = 0;

if(!pTail && !pHead)
{
temp->pNext = 0;
pHead = pTail = temp;
}else
{
temp->pNext = pHead;
pHead->pPrev = temp;
pHead = temp;
}
}

// addTail : append a new item to the back of the list.
void addTail (const Type &v)
{
Node * temp = new Node;
temp->m_data = v;

temp->pNext = 0;

if(!pTail && !pHead)
{
temp->pPrev = 0;
pHead = pTail = temp;
}else
{
temp->pPrev = pTail;
pTail->pNext = temp;
pTail = temp;
}

}

// clear : clear out the list
void clear ()
{
Node * temp;
while(pHead)
{
temp = pHead;
pHead = pHead->pNext;
delete temp;
}
pTail = 0;
}

// insert : place a new item directly before the index
// passed in. Do nothing on a bad iterator.
// Note : iterator will point at the newly inserted
// item after the function call.
void insert (DLLIter<Type> &index, const Type &v)
{
if(index.curPos)
{
Node * temp = new Node;
temp->m_data = v;

temp->pPrev = index.prevPos;
temp->pNext = index.curPos;
index.curPos->pPrev = temp;
index.prevPos->pNext = temp;

index.curPos = temp;

if(!temp->pNext)
pTail = temp;

if(!temp->pPrev)
pHead = temp;
}
}

// remove : remove (and delete) the item at the index
// passed in. Do nothing on a bad iterator.
// Note : iterator will point at the item after the one
// removed after the function call, or NULL (bad) if
// the tail is the one removed.
void remove (DLLIter<Type> &index)
{
if(index.curPos)
{
Node * temp = index.curPos;

if(!index.curPos->pNext) // Removing Tail
{
if(index.curPos->pPrev)
{
index.list->pTail = index.prevPos;
index.prevPos->pNext = 0;
}else // Removing last item in List
{
index.list->pHead = index.list->pTail = 0;
}

}else if(!index.curPos->pPrev) // Removing Head
// Did not include extra empty list check due to presedence
{
index.curPos = temp->pNext;
index.curPos->pPrev = 0;
index.list->pHead = index.curPos;
}else
{
index.curPos->pNext->pPrev = index.prevPos;
index.curPos->pPrev->pNext = index.curPos->pNext;
}

delete temp;
}
}
};

template <typename Type>
class DLLIter
{
private:
friend class DLList<Type>;
DLList<Type> * list;
typename DLList<Type>::Node *curPos;
typename DLList<Type>::Node *prevPos;

public:
// DLLIter : constructor.
DLLIter (DLList<Type> &listToIterate)
{
list = &listToIterate;
curPos = prevPos = 0;
}

// ~DLLIter : destructor.
virtual ~DLLIter ()
{
delete curPos;
delete prevPos;
}

// beginHead : start the location at the head of the list
void beginHead ()
{
curPos = list->pHead;
prevPos = 0;
}

// beginTail : start the location at the tail of the list
void beginTail ()
{
if(list->pTail)
{
curPos = list->pTail;
prevPos = curPos->pPrev;
}
}

// end : only return true when iterator is NULL
bool end()
{
if(curPos)
return false;
return true;
}

// operator++ : prefix ++ operator for incrementing
// iterator to the next node in the list.
DLLIter<Type> &operator++ ()
{
prevPos = curPos;
curPos = curPos->pNext;
return *this;
}

// operator-- : prefix -- operator for decrementing
// iterator to the previous node in the list.
DLLIter<Type> &operator-- ()
{
curPos = prevPos;
if(prevPos)
prevPos = prevPos->pPrev;
else
prevPos = 0;
return *this;
}

// current : extract the element at the current location.
Type &current ()
{
return curPos->m_data;
}
};
#endif
Category: News & Media - Current Events Tags: google code , code , google
Sunday July 15th, 2007
So Google is always coming up with new and innovative ideas. I recently noticed Google Patents, a search engine for over 7 million patents. Wow does that make life easier for some, but this latest feature really struck a chord with me Googe Code.
Saturday July 14th, 2007
My top pick from this year's E3

Sunday July 1st, 2007
So lately I've been hearing rumors of things like Vista becoming the official OS for FullSail laptops, an upgrade to DirectX 10, and now the news of NaturalMotion coming I am trully thrilled. You can read more on this announcement at Gamasutra.com.
Sunday July 1st, 2007


Another big promise from the great Peter Molyneux : )