// Cards lists
|
|
FoodChain.cards = [
|
|
"alligator", "animal", "bat", "bee", "bird", "camel", "cat", "chicken", "chimp",
|
|
"clam", "corn", "cow", "crab", "crocodile", "crow", "dog", "duck", "fish", "flies",
|
|
"fox", "frog", "giraffe", "goat", "grass", "hay", "hen", "lamb", "mice", "mole",
|
|
"mosquito", "mule", "owl", "ox", "pig", "rat", "shark", "shrimp", "skunk", "snail",
|
|
"snake", "spider", "spike", "squid", "squirrel", "starfish", "swan", "tick", "wheat"
|
|
];
|
|
|
|
// Feed strategy list and members
|
|
FoodChain.feedStrategy = [
|
|
{ name: "herbivore", members: ["swan", "bee", "cow", "giraffe", "squirrel", "goat", "ox", "lamb", "mule", "camel", "chimp"] },
|
|
{ name: "carnivore", members: ["mosquito", "mole", "spike", "tick", "squid", "crab", "owl", "snake", "dog", "alligator", "bat", "crocodile", "frog", "shark", "spider", "starfish", "crocodile"] },
|
|
{ name: "omnivore", members: ["duck", "flies", "pig", "mice", "rat", "skunk", "chicken", "hen", "fox"] }
|
|
];
|
|
|
|
// Chains computation
|
|
FoodChain.validChains = [
|
|
["snake", "mice", "corn"],
|
|
["cat", "mice", "corn"],
|
|
["fox", "bird", "spider", "mosquito"],
|
|
["fox", "bird", "spider", "flies"],
|
|
["fox", "duck", "frog", "flies"],
|
|
["snake", "frog", "mosquito"],
|
|
["snake", "frog", "flies"],
|
|
["fox", "duck", "frog", "snail", "grass"],
|
|
["spike", "spider", "mosquito"],
|
|
["spike", "spider", "flies"],
|
|
["shark", "fish", "shrimp"],
|
|
["owl", "bat", "mosquito"],
|
|
["owl", "bat", "flies"],
|
|
["cat", "bat", "mosquito"],
|
|
["cat", "bat", "flies"],
|
|
["fox", "hen", "corn"],
|
|
["fox", "chicken", "corn"],
|
|
["cow", "grass"],
|
|
["starfish", "clam"],
|
|
["frog", "snail", "grass"],
|
|
["skunk", "rat", "snail", "grass"],
|
|
["skunk", "mice", "snail", "grass"],
|
|
["spike", "snail", "grass"],
|
|
["crow", "snail", "grass"],
|
|
["duck", "snail", "grass"],
|
|
["starfish", "crab"]
|
|
];
|
|
|
|
// Create a random foodchain for the specified size (game build)
|
|
FoodChain.randomChain = function(size) {
|
|
// Check size
|
|
if (size == undefined) {
|
|
size = 3;
|
|
}
|
|
|
|
// Look for chains for this size
|
|
var chains = [];
|
|
for(var i in FoodChain.validChains) {
|
|
// Too small
|
|
var c = FoodChain.validChains[i];
|
|
if (c.length < size)
|
|
continue;
|
|
|
|
// Just the right size
|
|
if (c.length == size) {
|
|
chains.push(c);
|
|
continue;
|
|
}
|
|
|
|
// Too long, compute randomly a subchain
|
|
var index = Math.floor(Math.random()*(c.length-size));
|
|
var newchain = [];
|
|
for (var j = index; j < index+size ; j++) {
|
|
newchain.push(c[j]);
|
|
}
|
|
chains.push(newchain);
|
|
}
|
|
|
|
// Randomly choose a chain
|
|
return chains[Math.floor(Math.random()*chains.length)];
|
|
};
|
|
|
|
|
|
// Mix a chain
|
|
FoodChain.mix = function(chain) {
|
|
// Check size
|
|
if (chain.length < 2) {
|
|
return chain;
|
|
}
|
|
|
|
// Mix cards
|
|
var mixedchain = [];
|
|
var tomix = enyo.cloneArray(chain);
|
|
while (tomix.length != 1) {
|
|
// Take a card
|
|
var i = Math.floor(Math.random()*tomix.length);
|
|
mixedchain.push(tomix[i]);
|
|
tomix[i] = null;
|
|
|
|
// Remix
|
|
var newmix = [];
|
|
for (var j = 0 ; j < tomix.length ; j++) {
|
|
if (tomix[j] != null)
|
|
newmix.push(tomix[j]);
|
|
}
|
|
tomix = newmix;
|
|
}
|
|
mixedchain.push(tomix[0]);
|
|
|
|
return mixedchain;
|
|
};
|
|
|
|
|
|
// Create a random feed card for the specified size and count (game learn)
|
|
FoodChain.randomFeedList = function(size, count) {
|
|
// Check size
|
|
if (size == undefined) {
|
|
size = 2;
|
|
}
|
|
|
|
// Look for chains for this size
|
|
var list = [];
|
|
for(var i = 0 ; i < count ; i++) {
|
|
// Choose randomly a feed strategy
|
|
var strategy = Math.floor(Math.random()*size);
|
|
|
|
// Choose randomly a card not already picked
|
|
var index = -1;
|
|
var cardname;
|
|
while (index == -1) {
|
|
// Pick a card
|
|
index = Math.floor(Math.random()*FoodChain.feedStrategy[strategy].members.length);
|
|
|
|
// Check if not already here
|
|
cardname = FoodChain.feedStrategy[strategy].members[index];
|
|
for (var j = 0 ; index != -1 && j < list.length ; j++) {
|
|
if (list[j].cardname == cardname) {
|
|
index = -1;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Add card
|
|
list.push({cardname: cardname, strategy: strategy});
|
|
}
|
|
|
|
// Return list
|
|
return list;
|
|
};
|