当前位置:文档之家› C编写的小游戏

C编写的小游戏

C编写的小游戏集团档案编码:[YTTR-YTPT28-YTNTL98-UYTYNN08]
#i n c l u d e<i o s t r e a m>
usingnamespacestd;
constcharMOUSE='*';
constcharWAY='';
constcharWALL='@';
constcharPASS='.';
constcharIMPASS='X';
classGame{
public:
Game(size_tuWidth,size_tuHeight):m_uWidth(uWidth),m_uHeight(uHe ight),m_pcMaze(newchar[uWidth*uHeight]),m_mouse(0,1){
srand(time(NULL));
char(*pcMaze)[m_uWidth]=reinterpret_cast<char(*)[m_uWidth]>(m_p cMaze);
for(size_ti=0;i<m_uHeight;i++)
for(size_tj=0;j<m_uWidth;j++)
if((i==1&&j<4)||(i==m_uHeight-2&&j>m_uWidth-5))
pcMaze[i][j]=WAY;
elseif(i==0||i==m_uHeight-
1||j==0||j==m_uWidth-1)
pcMaze[i][j]=WALL;
else
pcMaze[i][j]=rand()%4?WAY:WALL;
}
~Game(void){
if(m_pcMaze){
delete[]m_pcMaze;
m_pcMaze=NULL;
}
}
voidRun(void){
for(Show();!Quit()&&Step(););
}
private:
classMouse{
public:
Mouse(size_tx,size_ty):m_x(x),m_y(y){}
size_tGetX(void){returnm_x;}
size_tGetY(void){returnm_y;}
voidStepRight(void){
m_x++;
m_brain.Remember(EDIR_RIGHT);
}
voidStepDown(void){
m_y++;
m_brain.Remember(EDIR_DOWN);
}
voidStepLeft(void){
m_x--;
m_brain.Remember(EDIR_LEFT);
}
voidStepUp(void){
m_y--;
m_brain.Remember(EDIR_UP);
}
voidStepBack(void){
switch(m_brain.Recollect()){
caseEDIR_RIGHT:
m_x--;
break;
caseEDIR_DOWN:
m_y--;
break;
caseEDIR_LEFT:
m_x++;
break;
caseEDIR_UP:
m_y++;
break;
}
}
private:
typedefenumtag_Direction{
EDIR_RIGHT,
EDIR_DOWN,
EDIR_LEFT,
EDIR_UP,
EDIR_STILL
}EDIR;
classBrain{
public:
Brain(void):m_pMemory(NULL){}
~Brain(void){
for(Step*pStep=m_pMemory,*pLast;pStep;pStep=pLast){
pLast=pStep->m_pLast;
deletepStep;
}
}
voidRemember(EDIReDir){
m_pMemory=newStep(eDir,m_pMemory);
}
EDIRRecollect(void){
EDIReDir=EDIR_STILL;
if(m_pMemory){
Step*pStep=m_pMemory;
m_pMemory=m_pMemory->m_pLast;
eDir=pStep->m_eDir;
deletepStep;
}
returneDir;
}
private:
classStep{
public:
Step(EDIReDir,Step*pLast):m_eDir(eDir),m_pLast(pLast){}
EDIRm_eDir;
Step*m_pLast;
};
Step*m_pMemory;
};
size_tm_x;
size_tm_y;
Brainm_brain;
};
voidShow(void){
char(*pcMaze)[m_uWidth]=reinterpret_cast<char(*)[m_uWidth]>(m_p cMaze);
for(size_ti=0;i<m_uHeight;i++){
for(size_tj=0;j<m_uWidth;j++)
cout<<pcMaze[i][j];
cout<<endl;
}
}
boolQuit(void){
cout<<"鎸塓阃€鍑猴紝鍏朵粬阌户缁?"<<flush;
intch=getchar();
returnch=='Q'||ch=='q';
}
boolStep(void){
char(*pcMaze)[m_uWidth]=reinterpret_cast<char(*)[m_uWidth]>(m_p cMaze);
size_tx=m_mouse.GetX();
size_ty=m_mouse.GetY();
if(x+1<=m_uWidth-1&&pcMaze[y][x+1]==WAY){
pcMaze[y][x]=PASS;
m_mouse.StepRight();
}
elseif(y+1<=m_uHeight-1&&pcMaze[y+1][x]==WAY){
pcMaze[y][x]=PASS;
m_mouse.StepDown();
}
elseif(x-1>=0&&pcMaze[y][x-1]==WAY){
pcMaze[y][x]=PASS;
m_mouse.StepLeft();
}
elseif(y-1>=0&&pcMaze[y-1][x]==WAY){
pcMaze[y][x]=PASS;
m_mouse.StepUp();
}
else{
pcMaze[y][x]=IMPASS;
m_mouse.StepBack();
}
x=m_mouse.GetX();
y=m_mouse.GetY();
pcMaze[y][x]=MOUSE;
Show();
if(x==0&&y==1){
cout<<"******小老鼠赢了*****";
returnfalse;
}
if(x==m_uWidth-1&&y==m_uHeight-2){
cout<<"*****小老鼠失败了*****"<<endl;
returnfalse;
}
returntrue;
}
size_tm_uWidth;
size_tm_uHeight;
char*m_pcMaze;
Mousem_mouse; };
intmain(void){
Gamegame(30,15);
game.Run();
return0;
}。

相关主题