- //Class Vector begin
- //類別宣告
- function Vector(inc)
- {
- if(inc == 0)
- {
- inc = 100;
- }
-
- //屬性宣告,定義
- this.data = new Array(inc);
- this.increment = inc;
- this.size = 0;
-
- //方法宣告
- this.getCapacity = Vector_getCapacity;
- this.getSize = getSize;
- this.isEmpty = Vector_isEmpty;
- this.getLastElement = getLastElement;
- this.getFirstElement = getFirstElement;
- this.getElementAt = Vector_getElementAt;
- this.addElement = addElement;
- this.insertElementAt = insertElementAt;
- this.removeElementAt = removeElementAt;
- this.removeAllElements = removeAllElements;
- this.indexOf = indexOf;
- this.contains = contains
- this.resize = resize;
- this.toString = toString;
- this.sort = sort;
- this.trimToSize = trimToSize;
- this.clone = clone;
- this.overwriteElementAt;
- }
- // getCapacity() -- returns the number of elements the vector can hold
- function Vector_getCapacity()
- {
- return this.data.length;
- }
- // getSize() -- returns the current size of the vector
- function getSize()
- {
- return this.size;
- }
- // isEmpty() -- checks to see if the Vector has any elements
- function Vector_isEmpty()
- {
- return this.getSize() == 0;
- }
- // getLastElement() -- returns the last element
- function getLastElement()
- {
- if (this.data[this.getSize() - 1] != null)
- {
- return this.data[this.getSize() - 1];
- }
- }
- // getFirstElement() -- returns the first element
- function getFirstElement()
- {
- if (this.data[0] != null)
- {
- return this.data[0];
- }
- }
- // getElementAt() -- returns an element at a specified index
- function Vector_getElementAt(i)
- {
- try
- {
- return this.data[i];
- }
- catch (e)
- {
- return "Exception " + e + " occured when accessing " + i;
- }
- }
- // addElement() -- adds a element at the end of the Vector
- function addElement(obj)
- {
- if(this.getSize() == this.data.length)
- {
- this.resize();
- }
- this.data[this.size++] = obj;
- }
- // insertElementAt() -- inserts an element at a given position
- function insertElementAt(obj, index)
- {
- try
- {
- if (this.size == this.capacity)
- {
- this.resize();
- }
-
- for (var i=this.getSize(); i > index; i--)
- {
- this.data[i] = this.data[i-1];
- }
- this.data[index] = obj;
- this.size++;
- }
- catch (e)
- {
- return "Invalid index " + i;
- }
- }
- // removeElementAt() -- removes an element at a specific index
- function removeElementAt(index)
- {
- try
- {
- var element = this.data[index];
-
- for(var i=index; i<(this.getSize()-1); i++)
- {
- this.data[i] = this.data[i+1];
- }
-
- this.data[getSize()-1] = null;
- this.size--;
- return element;
- }
- catch(e)
- {
- return "Invalid index " + index;
- }
- }
- // removeAllElements() -- removes all elements in the Vector
- function removeAllElements()
- {
- this.size = 0;
-
- for (var i=0; i<this.data.length; i++)
- {
- this.data[i] = null;
- }
- }
- // indexOf() -- returns the index of a searched element
- function indexOf(obj)
- {
- for (var i=0; i<this.getSize(); i++)
- {
- if (this.data[i] == obj)
- {
- return i;
- }
- }
- return -1;
- }
- // contains() -- returns true if the element is in the Vector, otherwise false
- function contains(obj)
- {
- for (var i=0; i<this.getSize(); i++)
- {
- if (this.data[i] == obj)
- {
- return true;
- }
- }
- return false;
- }
- // resize() -- increases the size of the Vector
- function resize()
- {
- newData = new Array(this.data.length + this.increment);
-
- for (var i=0; i< this.data.length; i++)
- {
- newData[i] = this.data[i];
- }
-
- this.data = newData;
- }
- // trimToSize() -- trims the vector down to it's size
- function trimToSize()
- {
- var temp = new Array(this.getSize());
-
- for (var i = 0; i < this.getSize(); i++)
- {
- temp[i] = this.data[i];
- }
- this.size = temp.length - 1;
- this.data = temp;
- }
- // sort() - sorts the collection based on a field name - f
- function sort(f)
- {
- var i, j;
- var currentValue;
- var currentObj;
- var compareObj;
- var compareValue;
-
- for(i=1; i<this.getSize();i++)
- {
- currentObj = this.data[i];
- currentValue = currentObj[f];
-
- j= i-1;
- compareObj = this.data[j];
- compareValue = compareObj[f];
-
- while(j >=0 && compareValue > currentValue)
- {
- this.data[j+1] = this.data[j];
- j--;
- if (j >=0)
- {
- compareObj = this.data[j];
- compareValue = compareObj[f];
- }
- }
- this.data[j+1] = currentObj;
- }
- }
- // clone() -- copies the contents of a Vector to another Vector returning the new Vector.
- function clone()
- {
- var newVector = new Vector(this.size);
-
- for (var i=0; i<this.size; i++)
- {
- newVector.addElement(this.data[i]);
- }
-
- return newVector;
- }
- // toString() -- returns a string rep. of the Vector
- function toString()
- {
- var str = "Vector Object properties:\n" +
- "Increment: " + this.increment + "\n" +
- "Size: " + this.size + "\n" +
- "Elements:\n";
-
- for (var i=0; i<getSize(); i++)
- {
- for (var prop in this.data[i])
- {
- var obj = this.data[i];
- str += "\tObject." + prop + " = " + obj[prop] + "\n";
- }
- }
- return str;
- }
- // overwriteElementAt() - overwrites the element with an object at the specific index.
- function overwriteElementAt(obj, index)
- {
- this.data[index] = obj;
- }
- //Class Vector end
- //Class Sprite begin
- //類別宣告
- function Sprite(name,pic,w,h,x,y,sw,sh)
- {
- //屬性宣告,定義
- this.name = name;
- this.w = w;
- this.h = h;
- this.sw = sw;
- this.sh = sh;
- this.x = x;
- this.y = y;
- this.speed = 1;
-
- //方法宣告
- this.show = Sprite_show;
- this.move = Sprite_move;
- this.shift = Sprite_shift;
- this.setPic = Sprite_setPic;
- this.collision = SPrite_collision;
-
- //建構子程序
- this.pic = new Image();
- this.pic.src = pic;
- }
- //方法定義
- function Sprite_show(idx,idy)
- {
- ctx.drawImage(this.pic,idx*this.w,idy*this.h,this.w,this.h,this.x,this.y,this.sw,this.sh);
- }
- function Sprite_move(x,y)
- {
- this.x = x;
- this.y = y;
- }
- function Sprite_shift(dx,dy)
- {
- this.move(this.x+dx*this.speed,this.y+dy*this.speed);
- }
- function Sprite_setPic(newPic)
- {
- this.pic.src = newPic;
- }
- function SPrite_collision(obj)
- {
- var rate = 0.5;
- if(this.x+(this.sw*rate) > obj.x && this.x < obj.x+(obj.sw*rate) && this.y+(this.sh*rate) > obj.y && this.y < obj.y+(obj.sh*rate))
- return true;
- else
- return false;
- }
- //Class Sprite end
複製代碼 |