admin管理员组文章数量:1621657
游戏规则
移动九宫格中的0,使得最终状态等于:
1 2 3
4 5 6
7 8 0
C/C++源代码
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
// #include<conio.h>
using namespace std;
class BSM
{
private:
int m_init_state[3][3];
int m_goal_state[3][3];
// char m_y; //0的行位置
// char m_x; //0的列位置
private:
int init();
public:
BSM();
~BSM();
int move(int sz[3][3], int step); //0 1 2 3对应 上 下 左 右
int showInitState();
int showGoalState();
bool isWin();
int game();
int menu();
};
BSM::BSM()
{
for(int i = 0; i< 3; i++)
for(int j = 0; j<3; j++)
{
m_init_state[i][j] = 3*i+j+1;
m_goal_state[i][j] = 3*i+j+1;
}
m_init_state[2][2] = 0;
m_goal_state[2][2] = 0;
// m_y = 2;
// m_x = 2;
init();
}
BSM::~BSM()
{
}
int BSM::init()
{
int step = -1;
for(int i = 0; i < 20; i++)
{
int step = rand()%4;
move(m_init_state, step);
// showInitState();
}
return 0;
}
int BSM::move(int sz[3][3], int step)
{
int y_pos = -1;
int x_pos = -1;
for(int i =0; i < 3; i++)
for(int j = 0; j < 3; j++)
{
if(sz[i][j] == 0)
{
y_pos = i;
x_pos = j;
break;
}
}
int temp = -1;
if(step == 0)
{
if(y_pos > 0)
{
temp = sz[y_pos-1][x_pos];
sz[y_pos-1][x_pos] = sz[y_pos][x_pos];
sz[y_pos][x_pos] = temp;
}
}
else if(step == 1)
{
if(y_pos < 2)
{
temp = sz[y_pos+1][x_pos];
sz[y_pos+1][x_pos] = sz[y_pos][x_pos];
sz[y_pos][x_pos] = temp;
}
}
else if(step ==2)
{
if(x_pos > 0)
{
temp = sz[y_pos][x_pos-1];
sz[y_pos][x_pos-1] = sz[y_pos][x_pos];
sz[y_pos][x_pos] = temp;
}
}
else if(step == 3)
{
if(x_pos < 2)
{
temp = sz[y_pos][x_pos+1];
sz[y_pos][x_pos+1] = sz[y_pos][x_pos];
sz[y_pos][x_pos] = temp;
}
}
return 0;
}
int BSM::showInitState()
{
printf("+---+---+---+\n");
for (int row = 0; row < 3; row++){
printf("| %d | %d | %d |\n", m_init_state[row][0],
m_init_state[row][1], m_init_state[row][2]);
printf("+---+---+---+\n");
}
return 0;
}
int BSM::showGoalState()
{
printf("+---+---+---+\n");
for (int row = 0; row < 3; row++){
printf("| %d | %d | %d |\n", m_goal_state[row][0],
m_goal_state[row][1], m_goal_state[row][2]);
printf("+---+---+---+\n");
}
return 0;
}
bool BSM::isWin()
{
bool bWin = true;
for (int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
{
if(m_goal_state[i][j] != m_init_state[i][j])
{
bWin = false;
break;
}
}
return bWin;
}
int BSM::game()
{
init();
showInitState();
int ch = -1;
while(1)
{
printf("%s\n","请输入你要进行的操作:0-上;1-下;2-左;3-右;4-取消游戏 ");
scanf("%d",&ch);
cout<<"你输入的是"<<ch<<endl;
if(ch == 4)
{
cout<<"取消游戏"<<endl;
break;
}
else if(ch == 0)
{
move(m_init_state,0);
showInitState();
}
else if(ch == 1)
{
move(m_init_state,1);
showInitState();
}
else if(ch == 2)
{
move(m_init_state,2);
showInitState();
}
else if(ch == 3)
{
move(m_init_state,3);
showInitState();
}
bool bWin = isWin();
if (bWin)
{
cout<<"恭喜你,成功了"<<endl;
break;
}
}
return 0;
}
int BSM::menu()
{
printf("========================\n");
printf(" 1. 开始游戏\n");
printf(" 0. 结束游戏\n");
printf("========================\n");
printf(" 请输入您的选择: ");
int num = -1;
scanf("%d", &num);;//利用键盘输入选项
return num;//将选项值返回到主函数中进行判断
}
int main()
{
srand((unsigned int)time(0));//用时间设置一个随机种子,将时间从 time_t 转成 unsigned int
BSM game;
while (1){
//一·创建一个游戏菜单
int choice = game.menu();//菜单函数
if (choice == 1){
game.game();//游戏函数
}
else if (choice == 0) {
printf("goodbye!\n");
break;
}
else{
printf("您输入的有误请重新输入\n");
}
}
return 0;
}
版权声明:本文标题:八数码游戏 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1728851075a1176686.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论