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

📄 movegame.c

📁 这是利用c++设计的模拟数码移动游戏。
💻 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 + -