J'essaie d'écrire un programme pour simuler un jeu de cartes. J'ai une classe appelée MagicCard, et une variété de classes qui étendent la carte, comme card1, card2 ... Je veux trouver un moyen de stocker une liste/tableau de cartes différentes (un deck). Chaque carte1, carte2 ... a un effet "spécial" qu'elles déclenchent quand elles sont jouées, donc le besoin d'une fonction unique, c'est pourquoi j'ai besoin de toutes les différentes sous-classes. Beaucoup de cartes ont des propriétés similaires. Comment puis-je stocker le jeu de manière raisonnable et accessible? (Je veux que le jeu soit facilement manipulé pour que je puisse ajouter une carte, ou en retirer une carte quand je veux).Meilleure façon de stocker une liste/tableau de sous-classes différentes
Actuellement c'est ce que j'ai:
//My Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace mtgDeckSimulator
{
//General properties of a magic card, extended by individual classes
class cardProperties
{
private String cardName;
/*Mana Array Aranged in the following Order:
* [Colorless,White,Blue,Black,Red,Green] */
private int[] manaCost;
/* Card Type int definitions:
* 0-Artifact
* 1-Creature
* 2-Enchantment
* 3-Instant
* 4-Land
* 5-Planeswalker
* 6-Sorcery
* 7-Tribal */
private int cardType;
public int attack;
public int defense;
private bool permBool;
private bool isLegen; //Or is restricted to one copy
public cardProperties(String cardName,int[] manaCostIn,int cardTypeIn,int attack,int defense,bool permBoolIn,bool isLegenIn)
{
this.cardName = cardName;
manaCost = manaCostIn;
cardType = cardTypeIn;
permBool = permBoolIn;
isLegen = isLegenIn;
}
//Get Variables
public String getCardName()
{
return cardName;
}
public int[] getManaCost()
{
return manaCost;
}
public int getCardType()
{
return cardType;
}
public bool getPermBool()
{
return permBool;
}
public bool getIsLegen()
{
return isLegen;
}
//Other Methods
}
//Interface for magic cards
interface MagicCard
{
int SpecialEffect();
}
#region Magic Card List
class WallOfOmens : cardProperties, MagicCard
{
public WallOfOmens()
: base("Wall of Omens", new int[6] { 1, 1, 0, 0, 0, 0 }, 1, 0, 4, true, false)
{
;
}
public int SpecialEfect()
{
return 1;
//throw new NotImplementedException();
}
}
class Card2 : cardProperties, MagicCard
{
public int SpecialEfect()
{
return 2;
//throw new NotImplementedException();
}
}
#endregion
}
Y at-il une meilleure façon de mettre en œuvre ce? Aussi le code ne fonctionne pas car il me dit que WallOfOmens et Card2 n'implémentent pas SpecialEffect(), pourquoi cela se passe-t-il?
Si vous épelez 'SpecialEfect' comme' SpecialEffect' comme dans l'interface, cela pourrait fonctionner mieux. –
Parce que vous ne dites pas que vos fonctions implémentent l'interface. Ils devraient être appelés MagicCard.SpecialEffect() – Stu
@Stu: En C#, vous n'avez pas besoin de qualifier l'interface sauf si elle est ambiguë (c'est-à-dire, plusieurs interfaces avec le même membre) –