Discuz! Board

 找回密码
 立即注册
查看: 238|回复: 0

妻子翻转

[复制链接]

49

主题

70

帖子

23万

积分

论坛元老

Rank: 8Rank: 8

积分
232980

大王燕 Lv:51
发表于 2024-11-16 11:37:41 | 显示全部楼层 |阅读模式
[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;
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-5-29 05:31 , Processed in 0.055939 second(s), 28 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表