📄 movegame.c
字号:
//这是本利用c++设计的模拟数码移动游戏
//游戏过程很简单;
#include "stdafx.h"
#include <iostream.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#include <iomanip.h>
const char up='w'; //定义方向
const char down='s';
const char left='a';
const char right='d';
class MoveNum //建立类
{
int a[4][4];
int x,y;
int count;
time_t tm1,tm2; //记录从开始和结束的时间来计算程序运行时间
public:
MoveNum();
~MoveNum();
void out_num(); //输出数字
void do_move(); //实行过程函数
bool is_end(); //判断游戏是否结束
void is_start(); //开始时初时化数字
bool test_move(char); //判断移动是否正确
void End(); //结束后输出的信息
};
MoveNum::MoveNum()
{
cout<<"*********^_^ WELCOME TO THE GAME ! ^_^ ***********"<<endl;
cout<<"游戏说明:\n\n 把框内的8个数互相移动,直到变成 |1 2 3 4 |"<<endl;
cout<<" |5 6 7 8 |"<<endl;
cout<<" |9 10 11 12|"<<endl;
cout<<" |13 14 15 |"<<endl;
cout<<"游戏才完成!"<<endl;
cout<<"其中,框内有一个地方没有数字,表示它周围的数字"<<endl;
cout<<"可以向它移动.控制方向键和cs的方向控制键一样."<<endl;
count=0;
}
MoveNum::~MoveNum()
{
cout<<"************ 欢迎下次再来 ! ^_^*************"<<endl;
}
void MoveNum::do_move()
{
cout<<endl;
if(is_end())
End();
cout<<"……………………请移动数字……………………"<<endl;
char ch;
while(!is_end())
{ cout<<"第"<<count+1<<"次移动"<<endl;
back:cin>>ch;
if(!test_move(ch))
{
cout<<"------无效移动-------"<<endl;
goto back;
}
else
{
count++;
switch(ch)
{
case up:{a[x][y]=a[x+1][y];a[x+1][y]=0;x++ ;break;}
case down:{a[x][y]=a[x-1][y]; a[x-1][y]=0; x--; break;}
case left:{ a[x][y]=a[x][y+1]; a[x][y+1]=0; y++; break;}
case right:{ a[x][y]=a[x][y-1]; a[x][y-1]=0; y--; break;}
default: cout<<"请输入:\" w->up, a->left, d->right, s->down\""<<endl;break;
}
}
out_num();
cout<<endl;
}
End();
}
void MoveNum::out_num()
{
cout<<endl;
cout<<"-------------------------------------------------"<<endl;
for(int i=0;i<4;i++)
{
cout<<"|";
for(int j=0;j<4;j++)
{
if(a[i][j]==0)
{
x=i;y=j;
cout<<setw(4)<<" ";
}
else
cout<<setw(4)<<a[i][j];
}
cout<<"|"<<endl;
}
cout<<"-------------------------------------------------"<<endl;
}
bool MoveNum::is_end()
{
int n=0;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
if(a[i][j]==(4*i+j+1)) n++;
if(n==15)
return 1;
return 0;
}
void MoveNum::is_start()
{
tm1=time(0);
srand(time(0));
int i,j;
int b[16];
b[0]=(int)rand()%16;
for(i=1;i<16;i++)
{
b[i]=(int)rand()%16;
int yes=0;
for(j=0;j<i;j++)
if(b[j]!=b[i])
yes++;
if(yes!=i)
i--;
}
for(i=0;i<16;i++)
{
if(i<4) a[0][i]=b[i];
else if(i>3&&i<8) a[1][i%4]=b[i];
else if(i>7&&i<12) a[2][i%4]=b[i];
else a[3][i%4]=b[i];
}
}
bool MoveNum::test_move(char ch)
{
int w,v;
w=x;
v=y;
switch(ch)
{
case up:w++;break;
case down:w--;break;
case left:v++;break;
case right :v--;break;
default: break;
}
if(v>=0&&v<4&&w>=0&&w<4)
return 1;
return 0;
}
void MoveNum::End()
{
tm2=time(0);
cout<<"********* Very Good !! ^_^ ********"<<endl;
cout<<"**** 你所移动的次数为:"<<count<<" *****"<<endl;
cout<<"**** 所用的时间为:"<<difftime(tm2,tm1)<<" *****"<<endl;
}
int main()
{
MoveNum my_obj;
my_obj.is_start();
my_obj.out_num();
my_obj.do_move();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -