分类:
2010-09-21 00:02:41
/*
我一直在想,像前两天我写的那个《魔兽》步兵的属性定义程序存在一个问题,虽然定义步兵的属性,比如血量,攻击力等,但是,那只是对这个游戏而言的,在游戏过程中,玩家训练步兵的数量是不一定的,那要看玩家需要训练多少,这就没办法用数组实现,因为数组声明的时候需要定义好数组元素的数量,例如魔兽100人口,如果为了给用户训练最大步兵量而把这个数组声明到最大,那样是十分耗费内存空间的。《魔兽》人口上限是100人口,每个步兵占2个,就是说,要声明到50,可是在早期的记事战略游戏,比如《帝国时代》,每个兵占1个人口,上限200,又如《红色警戒》,没有人口上限,如何声明呢?这两天看了链表,我受了点儿启发,我想应该是通过链表实现的,因为链表的结点是需要多少创建多少。所以今天我写了这样的一个程序,因为看的数据结构教材是c语言版的,所以暂且先拿c语言写了一个,过几天我将研究如何用c++实现链表,程序如下:
*/
#include
struct footman /*因为是c语言,所以只能用结构体了,不能用class*/
{
int life;
int attack;
int defence;
};
typedef struct footman FTM;
struct node /*声明节点*/
{
FTM ftm;
struct node *link; /*递归式声明link指向下一结点*/
};
typedef struct node NODE;
main()
{
int i,total; /*total 是总人数*/
NODE *head,*p,*pr;
head=NULL; /*head指向首地址,赋值为空值*/
printf("Please input the amount of footman you want to train:");
scanf("%d",&total);
for(i=0;i
p=(NODE *)malloc(sizeof(NODE)); /*malloc用来申请一个内存空间*/
p->link=NULL;
p->ftm.life=420; /*这个地方我错过好几次了,一定要用p指向ftm*/
p->ftm.attack=12; /*原因就是p指向NODE,而ftm是在结点里声明的*/
p->ftm.defence=3;
if(i==0) /*当i==0时,p与pr指向首地址*/
{
head=p;
pr=p;
}
else
{ /*当i!=1时,pr将下一个结点链入链表*/
pr->link=p;
pr=pr->link; /*pr指向p,而下一个p在malloc语句中将这个pr引到下一个结点*/
} /*p->link是用来指向链表的*/
}
for(p=head,i=0;p!=NULL;p=p->link) /*循环输出*/
{
printf("the number %d footman''''s ",i);
printf("life is %d",p->ftm.life);
printf(", and atk is %d\n",p->ftm.attack);
printf(", and def is %d\n",p-
(后面的代码又残缺了……)