⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 大富翁.txt

📁 大富翁 一个简单的游戏
💻 TXT
字号:
c++简单大富翁游戏源码编译过程中的小问题
 悬赏分:10 - 解决时间:2005-12-22 16:35
#include<iostream.h> 
#include<iomanip.h> 
#include<string.h> 

#define _GOLD 2 //标志有金子的格子 
#define _TRAP 3 //标志有陷阱的格子 
#define _OBSTACLE 4 //标志有障碍物的格子 

class simgame 
{ 
public: 
simgame(char *nm,int); 
void terminate(){delete []name;}; 
void init(int data[],int n); 
void run(); 
void display(); 
private: 
char *name; 
int way[50]; //标志环道格子种类的数组 
int location; 
int life; 
int money; 
int isdead; //判断是否死亡 
int isforward; //判断是顺行还是逆行 
}; 

simgame::simgame(char *nm,int isfd=1) 
{ 
strcpy(name,nm); 
isforward=isfd; 
location=0; 
life=money=100; 
isdead=0; 
} 

void simgame::init(int data[],int n) 
{ 
int nn=0; //用于循环data数组以保证把way数组完整赋值 
int i; 
way[0]=0; 
if(isforward) 
{ 
for(int i=1;i<50;i++) 
{ 
if(nn=n)nn=0; //如果data数组到达末尾,从头开始 
way[i]=data[nn]; 
nn++; 
} 
} 
else 
{ 
nn=n-1; 
for(i=1;i<50;i++) 
{ 
if(nn<0)nn=n-1; 
way[i]=data[nn]; 
nn--; 
} 
} 
} 

void simgame::display() 
{ 
cout<<"老鼠"<<name<<":"; 
if(life>0) 
{ 
cout<<"位置="<<setw(5)<<location; 
cout<<"生命="<<setw(5)<<life; 
cout<<"金钱="<<setw(5)<<money; 
} 
else 
cout<<"Dead!"; 
} 

void simgame::run() 
{ 
int i; 
int isstop=0; 
if(isdead)return; 
if(isforward) //正常行走的过程 
{ 
for(i=1;i<5;i++) 
{ 
if(location+i==50) 
location-=50; //如果到达末尾则从头开始走,并把位置变量重新赋值 
if(way[location+i]==_OBSTACLE) //如果途中有障碍物,则停止 
{ 
location+=i; 
isstop=1; //标志,表示是否停留 
break; 
} 
} 
if(!isstop) 
location+=4; 
switch(way[location]) 
{ 
case _GOLD:money+=50;break; 
case _TRAP:life-=80;break; 
default:break; 
} 
if(life<=0)isdead=1; 
} 
else //逆行的过程 
{ 
for(i=1;i<4;i++) 
{ 
if(location+i==50) 
location-=50; 
if(way[location+i]==_OBSTACLE) 
{ 
location+=i; 
isstop=1; 
break; 
} 
} 
if(!isstop) 
location+=3; 
switch(way[location]) 
{ 
case _GOLD:money+=50;break; 
case _TRAP:life-=80;break; 
default:break; 
} 
if(life<=0)isdead=1; 
} 
} 

void main() 
{ 
simgame mice1("A"); 
simgame mice2("B",0); 
int data[20]={1,2,2,2,3,2,3,4,1,2,3,4,1,2,3,4,3,2,2,1}; 
mice1.init(data,20); 
mice2.init(data,20); 
for(int i=0;i<5;i++) 
{ 
mice1.run(); 
mice2.run(); 
cout<<"轮次:"<<i+1<<endl; 
mice1.display(); 
mice2.display(); 
} 
mice1.terminate(); 
mice2.terminate(); 
} 
可以编译,但不可以运行,求大虾给诊断一哈,谢谢谢谢
问题补充:题目:一条由50个格子组成的环形跑道,其中一个格子是起点,两只鼠都从起点按相反方向出发,一只鼠按正方向前进且每次前进4格,另一只鼠按反方向出发,且每次前进3个格子,每只鼠出发时都有100点生命值和100个金子;跑道由普通格子,带金币的格子,带陷阱的格子,带障碍的格子等四种组成! 

规则:a,起点是普通格子,任何普通格子鼠可以顺利通过. 
b.鼠每路过或停在一个带金币的格子上就增加50个金币 
c.鼠停留在陷阱的格子上,损失生命80点. 
d.鼠路过带障碍的格子时,本轮停止前进. 


1.并实现相关的类,同时模拟此游戏 
输入:已在main()中提供一个大小为20的一维整型数组data,数值可为1,2,3,4,分别表示四种类型的格子,其中data(0)表示起点. 
输出:10轮次内,每轮走完后两只老鼠的各自位置,生命,和拥有的金币数. 

要main()函数应为如下格式 
void main() 
{ 
int data[20]={1,2,2,2,3,2,3,4,1,2,3,4,1,2,3,4,3,2,2,1}; 
simgame game; 
game.init(data,20); 
game.run(5) 
game.terminate(); 
} 

输出: 
轮次1: 
老鼠A:位置=##生命=##金钱=## 
老鼠B:位置=##生命=##金钱=## 
轮次2: 
....... 
宏: 
#define _GOLD 2 //金子 
#define _TRAP 3 //陷阱 
#define _OBSTACLE 4 //障碍物
name指针没有初始化,你就strcpy(name,nm);当然有问题 
可以:name = new char[length];//length有nm的长度决定,然后再strcpy 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -