c++学了3天,用c++编了一个文字养成游戏雏形,结果VC6编译失败,求帮助~~

w409544041 2014-06-04 10:23:14

#include <time.h>
#include<iostream>
#include<windows.h>
using namespace std;
#include <stdio.h>

enum choose{wood,meat,coal,meathouse,tradehouse,woodmaker,meatmaker,house,view};//设置n种,枚举类型,就是输入的各种情况
class Resource//资源类
{protected:
int wood;//木头
int meat; //肉
int coal;//煤矿

int house;//房屋,一个房屋可以增加8个人口,最大值10
int meathouse;//腌肉房最大值1
int tradehouse;//贸易坊最大值1

int woodmaker;//伐木工,可生产木头,猎人和伐木工的总数,不能超过人口上限。
int meatmaker;//猎人,可产生肉。猎人和伐木工的总数,不能超过人口上限。
int peoplemax;//人口上限,初始值为8,house的8倍,上限为10;
public:
Resource();//构造函数

void set(int a,int b,int c,int d,int e,int f,int g,int h,int i);
void build(choose k);//建造函数,包括建筑物和工人

}


int build(choose k)//建造建筑所需资源参数,猎人小屋5块木头,贸易坊2块木头1块肉,小屋4块木头
{switch(k)
{case tradehouse:if((Resource1.wood>=2)&&(Resource1.meat>=1)&&(Resource1.tradehouse==0)){Recource1.wood-=2;Resource1.meat-=2;Resource1.tradehouse=1;return Resource1.tradehouse;else return 0; }
//必须要木头大于2,肉大于1,贸易坊为0,才可建造,建造好后,贸易坊的个数变为1,木头减少2,肉减少1
case meathouse:if((Resource1.wood>=5)&&(Resource1.meathouse==0)){Resource1.wood-=5;Resource1.meathouse=1;return Resource1.meathouse;else
return 0; //必须要要大于5块木头,猎人小屋为0,才可建造。建造好后,猎人小屋的数量增加1,木头减少5. }

case house:if((Resource1.wood>=4*(Resource1.house)*Resource1.house)&&(Resource1.house<=10))
{Resource1.wood-=4*Resource1.house*Resource1.house; Resource1.house+=1;return Resource1.house;else return 0}

//小屋,每建造一次,人口上限增加8,最多可以建造10次。下次建造所耗费的木头=4*小屋数量的平方(如,3个小屋,耗费的木头就是4*9=36)
case woodmaker:if((Resource1.woodmaker+Resource1.meatmaker)<Resource1.peoplemax){Resource1.woodmaker+=1;Resource1.wood+=1;
}
//伐木工,每次生产一个伐木工,木头资源增加1,伐木工个数增加1,要求伐木工和猎人的总数不能大于人口上限
case meatmaker:if( ((Resource1.woodmaker+Resource1.meatmaker)<Resource1.peoplemax)&&(Resource1.wood>0)){Resource1.meatmaker
//猎人,同上,但是生产一个猎人,会增加一个肉同食消耗掉一个木头
+=1;Resource1.meat+=1;Resource1.wood-=1;
}
case view:draw()
{cout<<"木头"<<Resource1.wood<<"肉"<<Resource1.meat<<"煤"<<Resource1.coal<<"小屋数量"<<Resource1.house;
cout<<"腌肉坊"<<Resource1.meathouse<<"贸易站"<<Resource1.tradehouse<<"人口上限"<<Resource1.peoplemax;
}
;//显示函数,用来观察整个生产的状态,同时检测数值是否正确。

default:return 0;

}





int main()
{Resource Resource1;//构造函数赋初值
Resource::Resource()
{set(0,0,0,1,0,0,0,0,8)};//初值,人口上限8,小屋1,其他都是0

void Resource1.set(int a,int b,int c, int d,int e,int f, int g,int h,int i)
{Resource1.wood=a;Resource1.meat=b;Resource1.coal=c;Resource1.house=d;Resource1.meathouse=e;Resource1.tradehouse=f;
Resource1.woodmaker=g;Resource1.meatmaker=h;Resource1.peoplemax=k;};enum choose{wood,meat,coal,meathouse,tradehouse,woodmaker,meatmaker,house,view};//设置n种,枚举类型

int Resource1.peoplemax=int Resource1.house*8;//人口上限=小屋数量*8



while(Resource1.meat<10000)//假设游戏胜利目标为木头1000
{cout<<"欢迎来到小黑屋测试版,请输入你要选择的命令/n"<<"请输入你的指令:house建造房子,meathouse建造腌肉坊,woodmaker增加伐木工,meatmaker增加猎人,view查看状态/n";
choose temp;system("cls");cin>>temp;Resource1.build(temp);//choose为自定义的枚举类型,有house,meathouse,woodmaker等等
}return 0;}
...全文
1050 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
YinQingwei1986 2014-06-20
  • 打赏
  • 举报
回复

#include <vector>
main()
测试下公司网络能发表不~~
「已注销」 2014-06-10
  • 打赏
  • 举报
回复
引用 31 楼 twtiqfn 的回复:
学了三天能有这样的水平,很了不起了
楼主有大神的潜质
w409544041 2014-06-06
  • 打赏
  • 举报
回复
谢谢各位,问题完美解决了。
schlafenhamster 2014-06-06
  • 打赏
  • 举报
回复
enum _choose {//设置n种,枚举类型,就是输入的各种情况 wood,//0 meat,//1 coal,//2 meathouse,//3 tradehouse,//4 woodmaker,//5 meatmaker,//6 house,//7 view//8 }choose;
hemmingway 2014-06-06
  • 打赏
  • 举报
回复
何苦跟自己过不去
bug_________ 2014-06-06
  • 打赏
  • 举报
回复
引用 41 楼 songjiaweizangai 的回复:
实在是...........没有看下去的欲望啊 感觉好乱 看到类那儿缺分号 class { ..... }; 在好好看看书吧
可以无视..........看的是第一个代码
bug_________ 2014-06-06
  • 打赏
  • 举报
回复
实在是...........没有看下去的欲望啊 感觉好乱 看到类那儿缺分号 class { ..... }; 在好好看看书吧
schlafenhamster 2014-06-06
  • 打赏
  • 举报
回复
原来把switch就是常数 choose
schlafenhamster 2014-06-06
  • 打赏
  • 举报
回复
int main() { Resource Res;//构造函数赋初值 Res.set(100,100,100,1,0,0,0,0,8,0); //初值,人口上限8,小屋1,其他都是0 Res.m_peoplemax=Res.m_house*8;//人口上限=小屋数量*8 while(Res.m_meat<10000)//假设游戏胜利目标为木头1000 { system("cls"); cout<< "欢迎来到小黑屋测试版\n"; cout<< "请输入你的指令:\n"; cout<< "house=7 建造房子\n"; cout<< "meathouse=3 建造腌肉坊\n"; cout<< "woodmaker=5 增加伐木工\n"; cout<< "meatmaker=6 增加猎人\n"; cout<< "view=8 查看状态\n"; int temp; cin>>temp; Res.build(temp); } return 0; } 要用字符串 ,用户不方便, witch 改 用strcmp
w409544041 2014-06-06
  • 打赏
  • 举报
回复
引用 36 楼 schlafenhamster 的回复:
这是vc6上编译正确的代码:


#include <time.h>
#include<iostream>
#include<windows.h>
using namespace std;
#include <stdio.h>

enum _choose
{//设置n种,枚举类型,就是输入的各种情况
	wood,
	meat,
	coal,
	meathouse,
	tradehouse,
	woodmaker,
	meatmaker,
	house,
	view
}choose;

class Resource//资源类
{
public:
	Resource(){};// 构造函数
	void set(int a,int b,int c,int d,int e,int f,int g,int h,int i,int k);
	int build(int k);//建造函数,包括建筑物和工人
    int m_wood;//木头
    int m_meat; //肉
    int m_coal;//煤矿
    
    int m_house;//房屋,一个房屋可以增加8个人口,最大值10
    int m_meathouse;//腌肉房最大值1
    int m_tradehouse;//贸易坊最大值1
    
    int m_woodmaker;//伐木工,可生产木头,猎人和伐木工的总数,不能超过人口上限。
    int m_meatmaker;//猎人,可产生肉。猎人和伐木工的总数,不能超过人口上限。
    int m_peoplemax;//人口上限,初始值为8,house的8倍,上限为10;
protected:

  
};
//
int Resource::build(int k)//建造建筑所需资源参数,猎人小屋5块木头,贸易坊2块木头1块肉,小屋4块木头
{
	switch(k)
	{
	case tradehouse:
		if((m_wood>=2)&&(m_meat>=1)&&(m_tradehouse==0))
		{
			m_wood-=2;
			m_meat-=2;
			m_tradehouse=1;
			return m_tradehouse;
		}	
		else 
		{
			return 0;
		}
	break;
    //必须要木头大于2,肉大于1,贸易坊为0,才可建造,建造好后,贸易坊的个数变为1,木头减少2,肉减少1
	case meathouse:
		if((m_wood>=5)&&(m_meathouse==0))
		{
			m_wood-=5;
			m_meathouse=1;
			return m_meathouse;
		}
		else
		{
			return 0;  //必须要要大于5块木头,猎人小屋为0,才可建造。建造好后,猎人小屋的数量增加1,木头减少5.                                             }
		}
		break;
	case house:
		if((m_wood>=4*(m_house)*m_house)&&(m_house<=10))
		{
			m_wood-=4*m_house*m_house;
			m_house+=1;
			return m_house;
		}
		else
		{
			return 0;
		}
	break;
//小屋,每建造一次,人口上限增加8,最多可以建造10次。下次建造所耗费的木头=4*小屋数量的平方(如,3个小屋,耗费的木头就是4*9=36)
	case woodmaker:
		if((m_woodmaker+m_meatmaker)<m_peoplemax)
		{
			m_woodmaker+=1;
			m_wood+=1;
		}
		else
		{
		}
	break;
//伐木工,每次生产一个伐木工,木头资源增加1,伐木工个数增加1,要求伐木工和猎人的总数不能大于人口上限
	case meatmaker:
		if(((m_woodmaker+m_meatmaker)<m_peoplemax)&&(m_wood>0))
		{//猎人,同上,但是生产一个猎人,会增加一个肉同食消耗掉一个木头
			m_meatmaker+=1;
			m_meat+=1;
			m_wood-=1;
		}
	break;
	case view://显示函数,用来观察整个生产的状态,同时检测数值是否正确。

	//	draw()
	//{
		cout<<"木头"<<m_wood<<"肉"<<m_meat<<"煤"<<m_coal<<"小屋数量"<<m_house;
		cout<<"腌肉坊"<<m_meathouse<<"贸易站"<<m_tradehouse<<"人口上限"<<m_peoplemax;
	break;
	default: return 0;   
	}
	return 0;
}


void Resource::set(int a,int b,int c,int d,int e,int f,int g,int h,int i,int k)
{
	m_wood=a;
	m_meat=b;
	m_coal=c;
	m_house=d;
	m_meathouse=e;
	m_tradehouse=f;
	m_woodmaker=g;
	m_meatmaker=h;
	m_peoplemax=k;
};

int main()
{
	Resource Res;//构造函数赋初值
	Res.set(0,0,0,1,0,0,0,0,8,0);//初值,人口上限8,小屋1,其他都是0
	Res.m_peoplemax=Res.m_house*8;//人口上限=小屋数量*8
	while(Res.m_meat<10000)//假设游戏胜利目标为木头1000
	{
		cout<<"欢迎来到小黑屋测试版,请输入你要选择的命令/n"<<"请输入你的指令:house建造房子,meathouse建造腌肉坊,woodmaker增加伐木工,meatmaker增加猎人,view查看状态/n";
		int temp;
		system("cls");
		cin>>temp;
		Res.build(temp);
	}
	return 0;
}
主要: int m_wood;//木头 int m_meat; //肉 int m_coal;//煤矿 加 m_ 表示 类 模块变量, 也 不与 enum choose 冲突.


#include <time.h>
#include<iostream>
#include<windows.h>
using namespace std;
#include <stdio.h>
enum _choose
{//设置n种,枚举类型,就是输入的各种情况
	wood,
	meat,
	coal,
	meathouse,
	tradehouse,
	woodmaker,
	meatmaker,
	house,
	view
}choose;


class Resource//资源类
{
public:
	Resource(){};// 构造函数
	void set(int a,int b,int c,int d,int e,int f,int g,int h,int i);
	int build(int k);//建造函数,包括建筑物和工人
    int m_wood;//木头
    int m_meat; //肉
    int m_coal;//煤矿
    
    int m_house;//房屋,一个房屋可以增加8个人口,最大值10
    int m_meathouse;//腌肉房最大值1
    int m_tradehouse;//贸易坊最大值1
    
    int m_woodmaker;//伐木工,可生产木头,猎人和伐木工的总数,不能超过人口上限。
    int m_meatmaker;//猎人,可产生肉。猎人和伐木工的总数,不能超过人口上限。
    int m_peoplemax;//人口上限,初始值为8,house的8倍,上限为80;
protected:

  
};
//
int Resource::build(int k)//建造建筑所需资源参数,猎人小屋5块木头,贸易坊2块木头1块肉,小屋4块木头
{
	switch(k)
	{
	case 1:
		if((m_wood>=2)&&(m_meat>=1)&&(m_tradehouse==0))
		{
			m_wood-=2;
			m_meat-=2;
			m_tradehouse=1;
			return m_tradehouse;
		}	
		else 
		{
			return 0;
		}
	break;
    //必须要木头大于2,肉大于1,贸易坊为0,才可建造,建造好后,贸易坊的个数变为1,木头减少2,肉减少1
	case 2:
		if((m_wood>=5)&&(m_meathouse==0))
		{
			m_wood-=5;
			m_meathouse=1;
			return m_meathouse;
		}
		else
		{
			return 0;  //必须要要大于5块木头,猎人小屋为0,才可建造。建造好后,猎人小屋的数量增加1,木头减少5.                                             }
		}
		break;
	case 3:
		if((m_wood>=4*m_house)&&(m_house<=16))
		{
			m_wood-=4*m_house;
			m_house+=1;m_peoplemax=8+4*(m_house-1);
			return m_house;
		}
		else
		{
			return 0;
		}
	break;
//小屋,每建造一次,人口上限增加8,最多可以建造10次。下次建造所耗费的木头=4*小屋数量的平方(如,3个小屋,耗费的木头就是4*9=36)
	case 4:
		if((m_woodmaker+m_meatmaker)<m_peoplemax)
		{
			m_woodmaker+=1;
			m_wood+=1;
		}
		else
		{
		}
	break;
//伐木工,每次生产一个伐木工,木头资源增加1,伐木工个数增加1,要求伐木工和猎人的总数不能大于人口上限
	case 5:
		if(((m_woodmaker+m_meatmaker)<m_peoplemax)&&(m_wood>0)&&m_meathouse==1)
		{//猎人,同上,但是生产一个猎人,会增加一个肉同食消耗掉一个木头
			m_meatmaker+=1;
			m_meat+=1;
			m_wood-=1;
		}
	break;
	case view://显示函数,用来观察整个生产的状态,同时检测数值是否正确。

	//draw()
		{
		cout<<"木头"<<m_wood<<"肉"<<m_meat<<"煤"<<m_coal<<endl;
		cout<<"小屋数量"<<m_house<<"当前人口"<<m_woodmaker+m_meatmaker<<endl;
		cout<<"腌肉坊"<<m_meathouse<<"贸易站"<<m_tradehouse<<"人口上限"<<m_peoplemax<<endl;
		break;}
	default: return 0;   
	}
	return 0;
}


void Resource::set(int a,int b,int c,int d,int e,int f,int g,int h,int i)
{
	m_wood=a;
	m_meat=b;
	m_coal=c;
	m_house=d;
	m_meathouse=e;
	m_tradehouse=f;
	m_woodmaker=g;
	m_meatmaker=h;
	m_peoplemax=8;
};

int main()
{
	Resource Res;//构造函数赋初值
	Res.set(20,0,0,1,0,0,0,0,0);//初值,人口上限8,小屋1,其他都是0
	

		cout<<"欢迎来到小黑屋测试版,请输入你要选择的命令"<<endl;
		cout<<"1建造贸易坊,2建造腌肉坊(耗费5个木头,可生产猎人),3建造小屋(增加人口4,耗费木头4)"<<endl;
		cout<<"4增加伐木工(增加1的木头),5增加猎人(增加1的肉,耗费1的木头)"<<endl<<endl<<endl;
		while(Res.m_meat<4)//假设游戏胜利目标为肉1000
		{ int temp;
		 Res.build(view);
		 cin>>temp;
		 Res.build(temp);
		}
	cout<<"恭喜你完成目标";
		return 0;
}
你这个代码能运行,但是不能进行游戏,我自己调试了一下解决了,感谢你对我的帮助,我该怎么送分给你呢? 另外还有个问题,int temp的话,输入值就是整数了,可实际上是字符串,我为了偷懒,把switch改成了常数,但是这样一来enum的枚举值就没意义了,如果要输入字符串,并能进入switch语句判断,该怎么做呢?用指针?或者是库里的字符串函数?如果可以的话,我想看看用指针,怎么解决这个问题的,麻烦你了。
赵4老师 2014-06-05
  • 打赏
  • 举报
回复
另外你要将编译错误的具体信息帖上来。
赵4老师 2014-06-05
  • 打赏
  • 举报
回复
引用 21 楼 w409544041 的回复:
精简好了,还是报错,大家能帮我看看么?
你先用/* ... */括住整个文件,编译,肯定不报错吧。 然后“每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
w409544041 2014-06-05
  • 打赏
  • 举报
回复
精简好了,还是报错,大家能帮我看看么?
w409544041 2014-06-05
  • 打赏
  • 举报
回复
引用 17 楼 zhao4zhong1 的回复:
偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。” 的方法解决的。
#include <time.h>
#include<iostream>
#include<windows.h>
using namespace std;
#include <stdio.h>


class Resource//资源类
{protected:
    int wood;//木头
    int house;//房屋,一个房屋可以增加8个人口,最大值10
    int woodmaker;//伐木工,可生产木头,猎人和伐木工的总数,不能超过人口上限。
 public:
   Resource();//构造函数
   
   void set(int wood,int house,int woodmaker);
   int build(Choose choose);//建造函数,包括建筑物和工人
  
}


int Resource::build(Choose choose)//建造建筑所需资源参数,小屋4块木头
{switch(Choose choose)

{case house:if((wood>=4*house*house)&&(house<=10))
		   {wood-=4*house*house; house+=1;returnhouse;else return 0}
//小屋,每建造一次,人口上限增加8,最多可以建造10次。下次建造所耗费的木头=4*小屋数量的平方(如,3个小屋,耗费的木头就是4*9=36)

case woodmaker:woodmaker+=1;wood+=1;
                       
//伐木工,每次生产一个伐木工,木头资源增加1,伐木工个数增加1,要求伐木工和猎人的总数不能大于人口上限


case view:draw()
{cout<<"木头"<<wood<<"小屋数量"<<house<<"伐木工"<<woodmaker;}

//显示函数,用来观察整个生产的状态,同时检测数值是否正确。

default:return 0;   
}


Resource::Resource()//构造函数赋初值
{set(0,1,0)};//初值,小屋1,其他都是0

void Resource::set(int wood,int house,int woodmaker)


{Resource1.wood=wood;Resource1.house=house;
Resource1.woodmaker=woodmaker;}



int main()
{enum Choose{wood,woodmaker,house,view};Resource Resource1;//将Resource1定义成Resource类
//设置n种,枚举类型,就是输入的各种情况
while(Resource1.wood<10000)//假设游戏胜利目标为木头1000
{cout<<"欢迎来到小黑屋测试版,请输入你要选择的命令/n"<<"请输入你的指令:house建造房子,
meathouse建造腌肉坊,woodmaker增加伐木工,meatmaker增加猎人,view查看状态/n"<<endl;
choose temp;system("cls");cin>>temp;Resource1.build(temp);//choose为自定义的枚举类型,有house,meathouse,woodmaker等等
}return 0;}
w409544041 2014-06-05
  • 打赏
  • 举报
回复
引用 17 楼 zhao4zhong1 的回复:
偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。” 的方法解决的。
我试试再精简一下,什么都不要,就一个资源,一个建筑,一个工人。
max_min_ 2014-06-05
  • 打赏
  • 举报
回复
学了才三天,干嘛要为难自己呢!
Claude_Ray 2014-06-05
  • 打赏
  • 举报
回复
真的是感觉无力吐槽……手机回复你以下,你还是再学一段时间吧,你学了类之后很快就明白现在的错误是怎么回事。虽然说刚学C++三天,但我看你还是有C语言的基础,可是你还不明白如何创建一个类,和其数据成员以及成员函数,比如它们不能出现在main函数中,还有protected的使用,定义一个成员函数中出现一个具体的对象名,说起来错误太多了。请不要心急,也更希望这篇代码将来由你自己亲自修改完成。我课余时间不多,对不起,没能给你想要的代码,希望有更热心的人帮助你
赵4老师 2014-06-05
  • 打赏
  • 举报
回复
请牢记:源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要,重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。
赵4老师 2014-06-05
  • 打赏
  • 举报
回复
偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。” 的方法解决的。
ForestDB 2014-06-05
  • 打赏
  • 举报
回复
先把细节改好,编程本来就是个细致的活。
加载更多回复(27)

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧