[C++] 纯文本查看 复制代码
#include <graphics.h>
#include<cstdio>
#include<bits/stdc++.h>
using namespace std;
#define Row 4
#define Col 4
int board[Row][Col]; //棋盘
int board1[4][4],board2[4][4];//副本
int pass=1; //当前关卡
PIMAGE pimgs[3]; //棋盘图片
mouse_msg msg; //鼠标
key_msg keyMsg; //键盘
int check[65536];//标记用 数组
int f[101][101];
int a[65536],bx[65536],by[65536],c[65536];
int m1[4][4]={
1,1,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1
} ;
void loadImage()//图片载入
{
char path[100]; //加载图片路径
for(int i=0;i<3;i++)
{
pimgs[i]=newimage(); //向计算机申请一个图片空间
sprintf(path,"image/%d.jpg",i);//拼接图片相对路径
getimage(pimgs[i],path);//将系统中的图片数据存入pimgs
}
}
void draw()//图形绘制
{
for(int i=0;i<Row;i++)
for(int j=0;j<Col;j++)
putimage(j*50,i*50,pimgs[board[i][j]]);
}
bool gameover()
{
for(int i=0;i<Row;i++)
for(int j=0;j<Col;j++)
{
if (board[i][j] == 1)
{
return false;
}
}
//游戏结束
return true;
}
bool check_dfs()
{
for(int i=0;i<Row;i++)
for(int j=0;j<Col;j++)
{
if (board1[i][j] == 1)
{
return false;
}
}
//游戏结束
return true;
}
void filp(int x,int y)//翻转棋子
{
board[x][y] = !board[x][y];
if(y>=1) board[x][y-1] = !board[x][y-1];
if(y<=2) board[x][y+1] = !board[x][y+1];
if(x>=1) board[x-1][y] = !board[x-1][y];
if(x<=2) board[x+1][y] = !board[x+1][y];
}
void filp1(int x,int y)//翻转棋子
{
board1[x][y] = !board1[x][y];
if(y>=1) board1[x][y-1] = !board1[x][y-1];
if(y<=2) board1[x][y+1] = !board1[x][y+1];
if(x>=1) board1[x-1][y] = !board1[x-1][y];
if(x<=2) board1[x+1][y] = !board1[x+1][y];
}
void start()//初始化
{
//关闭窗口不强制退出程序,以便进行游戏保存工作
// setinitmode(INIT_RENDERMANUAL | INIT_NOFORCEEXIT, 100, 50);
initgraph(Col*50,Row*50);//图形初始化
setcaption("翻转游戏"); //设置程序标题
setbkcolor(WHITE);
loadImage();//图片载入
setcolor(WHITE);
setfont(25,0,"幼圆");//(字体高度,字体宽度(为0即为自适应),字形)设置字体为25,幼圆字体
setbkmode(TRANSPARENT); //设置文字背景色为透明(默认为有背景色)
memcpy(board, m1, sizeof(m1));
}
void dfs(int c)
{
int x=c/4;
int y=c%4;
for(int i=0;i<=1;i++)
{
if(i==1)
{
f[x][y]=1;
filp1(x,y);
}
if(check_dfs())
{
for(int i=0;i<=3;i++)
{
for(int j=0;j<=3;j++)
{
if(f[x][y]==1)
{
cout<<x<<" "<<y<<endl;
}
}
}
cout<<endl;
}
else if(c<15)
dfs(c+1);
if(i==1)
{
filp1(x,y);
f[x][y]=0;
}
}
}
int main()
{
start();
while(1)
{
while(mousemsg())
{
msg=getmouse();
int y=msg.x/50,x=msg.y/50;
if(msg.is_down())
{
filp(x,y);//翻转
}
// for(int i=0;i<=6;i++) cout<<board[0][i]<<" ";
// cout<<endl;
}
while(kbmsg()) {
keyMsg = getkey();
if((keyMsg.msg == key_msg_down)&&(keyMsg.key=='Q'))//
{
}
else if((keyMsg.msg == key_msg_down)&&(keyMsg.key=='W'))//
{
memcpy(board1,board,sizeof(board));
dfs(0);
}
}
cleardevice();
draw();
if(gameover()) {xyprintf(150,5,"获胜"); getch();}
delay_fps(60);
}
getch();
return 0;
}