连连看c语言代码,连连看C语言代码.doc
#include void initialize(); //初始化
void near1(int a,int b,int a1,int b1); //算法
void print_chess(); //打印棋盘
int exit_chess(); //判断是否结束
//全局变量
char chessman[10][10]; //编译系统初始化每个元素为0
void main()
{
int row,line; //row是行号,line是列号
int row2,line2; //row是行号,line是列号
printf("\t\t\t按任意键开始\n");
fflush(stdin);
getch();
initialize(); //初始化棋盘内容
do
{
print_chess();
printf("输入第一个:");
fflush(stdin);
scanf("%d.%d",&line,&row);
printf("输入第二个:");
fflush(stdin);
scanf("%d.%d",&line2,&row2);
if(chessman[line][row]!=chessman[line2][row2])
{
printf("两数不相同!\n"); //两数不同
}
else if(line==line2&&row==row2)
{
printf("错误输入!!!\n"); //输入相同的坐标,提示用户错误
}
else if(line<=line2)
{
near1(line,row,line2,row2); //使用函数处理,第一个点一定在第二个点上方
}
else
{
near1(line2,row2,line,row); //使用函数处理
}
system("pause");
}while(exit_chess());
system("pause");
printf("\n\n\n\t\t恭喜您,您胜利了!\n");
printf("\n\t\t制作人:蒋睿立\n");
printf("\n\t博客:http:\\maidini.blog.163.com");
}
void initialize() //初始化棋盘
{
int i,j; //用于循环计数
int a[8]={0}; //记录哪些字符出现次数不是偶数
srand(time(NULL));
for(i=1;i<8;i++) //这里只随机前8行,留最后一行不打印
for(j=1;j<9;j++)
{
chessman[i][j]=rand()%8+65; //棋盘内容为大写字母A到H
if(chessman[i][j]==65) a[0]++; //记录A的个数
if(chessman[i][j]==66) a[1]++; //记录B的个数
if(chessman[i][j]==67) a[2]++; //记录C的个数
if(chessman[i][j]==68) a[3]++; //记录D的个数
if(chessman[i][j]==69) a[4]++; //记录E的个数
if(chessman[i][j]==70) a[5]++; //记录F的个数
if(chessman[i][j]==71) a[6]++; //记录G的个数
if(chessman[i][j]==72) a[7]++; //记录H的个数
}
for(i=0;i<8;i++)
{
if(a[i]%2!=0) //如果字符的个数是奇数就还需要打印一个
chessman[8][i+1]=i+65;
else //如果前面7行随机的A到H字符恰好是偶数,最后一行全是I字符
chessman[8][i+1]=73;
}
}
void print_chess() //打印棋盘内容
{
int i,j;
system("cls");
printf("\t 1 2 3 4 5 6 7 8 \n");
for(i=0;i<10;i++)
{
printf("\t\n\t");
for(j=0;j<10;j++)
{
printf("%4c",chessman[i][j]);
if(j==9&&i!=0&&i!=9)
printf("\t%d",i);
}
}
printf("\n\n\n\n");
}
int exit_chess() //判断是否满足退出
{
int i,j;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
if(chessman[i][j]!=0)
return 1; //只要有1个棋子不为0,就返回1
}
return 0;
}
void near1(int a,int b,int a1,int b1)
{
int arow[2];
int aline[2];
int brow[2];
int bline[2];
int start=0,end=0; //临时两个点
int i,j,n; //用于循环
for(i=0;i<2;i++) //初始化数组
{
arow[i]=a;
brow[i]=a1;
aline[i]=b;
bline[i]=b1;
}
(a,b) a行中有哪些列
for(i=a+1;i<10;i++)
{
if(chessman[i][b]==0)
arow[1]=i; //arow[1]是A点a行向下向量
else
break;
}
for(i=a-1;i>=0;i--)
{
if(chessman[i][b]==0) //arow[0]是A点a行向上向量
arow[0]=i;
else
break;
}
(a1,b1) a1行中有哪些列
for(i=a1+1;i<10;i++)
{
if(chessman[i][b1]==0) //brow[1]是B点a1行向下向量
brow[1]=i;
else
break;
}
for(i=a1-1;i>=0;i--)
{
if(chessman[i][b1]==0) //brow[0]是B点a1行向上向量
{brow[0]=i;}
else
{break;}
}
//(a,b) b列中有哪些行
for(i=b+1;i<10;i++)
{
if(chessman[a][i]==0) //aline[1]是A点b列向右向量
{aline[1]=i;}
else
{break;}
}
for(i=b-1;i>=0;i--)
{
if(chessman[a][i]==0) //aline[0]是A点b列向左向量
{aline[0]=i;}
else
{break;}
}
//(a1,b1) b1列中有哪些行
for(i=b1+1;i<10;i++)
{
if(chessman[a1][i]==0) //bline[1]是B点b1列向右向量
{bline[1]=i;}
else
{break;}
}
for(i=b1-1;i>=0;i--)
{
if(chessman[a1][i]==0) //bline[0]是B点b1列向左向量
{bline[0]=i;}
else
{break;}
}
//关键算法///
/********************************
情况一
·
(a,b)
·(a1,b1)
*********************************/
/*********************************
情况二
·
(a,b)
·(a1,b1)
**********************************/
/*考虑上下向量*/
if(brow[0]>=arow[0]) //向上方向向量 有共同的列向量
start=brow[0]; //取大的
else
start=arow[0];
if(brow[1]<=arow[1]) //向下方向向量 有共同的列向量
end=brow[1]; //取小的
else
end=arow[1];
for(;start<=end;start++) //列向量上共同点start到end
{
/** b1要大于b,否则就交换
如果不交换将使下面的循环出错*/
if(b0)) //因为b与b1大小不能确定,所有有2个if
chessman[a][b]=chessman[a1][b1]=0;
if((n==b1-b)&&(n>0))
chessman[a][b]=chessman[a1][b1]=0;
}
/*考虑左右向量*/
if(aline[0]>=bline[0]) //向左的向量 有共同的行向量
start=aline[0]; //取大的
else
start=bline[0];
if(aline[1]0) //a1始终大于a
{
chessman[a][b]=chessman[a1][b1]=0;
break;
}
}
/*********************************************************************************
* 同行 或者 同列 ·(a,b)
*
* · · 或者
* (a,b) (a1,b1) ·(a1,b1)
*
*********************************************************************************/
if(a==a1) //同行
{
if((aline[1]>=b1)||(aline[0]<=b1))
chessman[a][b]=chessman[a1][b1]=0;
}
if(b==b1) //同列
{
if(arow[1]>=a1)
chessman[a][b]=chessman[a1][b1]=0;
}
}
连连看c语言代码,连连看C语言代码.doc相关推荐
- 对人脑而言,阅读计算机代码和阅读语言有何不同?
作者 | Anne Trafton 翻译 | 火火酱,责编 | 晋兆雨 出品 | AI科技大本营 头图 | 付费下载于视觉中国 神经科学家们发现,人类在解读代码时会激活一个通用的大脑区域网络,但不会激 ...
- 教你C语言实现通讯录的详细代码
本文详细讲解了C语言实现通讯录的方法,文中通过示例代码介绍的非常详细.对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 (一)实现思路 1.通讯录功能 添加好友,删除好友,查找好友,修改 ...
- python叫什么语言-Python代码是什么语言
Python代码是一种计算机程序设计语言,是一种动态的.面向对象的脚本语言,最初是用来编写自动化脚本的,随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发. Python代码是 ...
- 【Android NDK 开发】Kotlin 语言中使用 NDK ( 创建支持 Kotlin 的 NDK 项目 | Kotlin 语言中使用 NDK 要点 | 代码示例 )
文章目录 一.创建支持 Kotlin 的 NDK 项目 二.Kotlin 语言中使用 NDK 要点 1.加载动态库 2.声明 ndk 方法 3.Project 下的 build.gradle 配置 4 ...
- Python语言学习:python语言代码调试—异常处理之详细攻略
Python语言学习:python语言代码调试-异常处理之详细攻略 目录 python语言代码调试-异常处理 异常捕捉可以使用 try/except 语句 相关文章 Python3 错误和异常 | 菜 ...
- 动图图解C语言插入排序算法,含代码分析
C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...
- python语言能够整合各类程序代码-python语言概述
python语言的发展 python语言诞生于1990年,由Guide van Rossum设计并领导开发. python语言是开源项目的优秀代表,其解释器的全部代码都是开源的. 编写Hello程序 ...
- C语言计算月份天数if,阅读下列说明,回答问题1至问题3。【说明】 以下代码由C语言书写,能根据指定的年、月计算当月所含天数 - 赏学吧...
阅读下列说明,回答问题1至问题3. [说明] 以下代码由C语言书写,能根据指定的年.月计算当月所含天数. int GetMaxDay( int year, int month ) { int maxd ...
- c++ doxygen 注释规范_[代码规范]Go语言编码规范指导
本规范旨在为日常Go项目开发提供一个代码的规范指导,方便团队形成一个统一的代码风格,提高代码的可读性,规范性和统一性.本规范将从命名规范,注释规范,代码风格和 Go 语言提供的常用的工具这几个方面做一 ...
- php连接数据库语言,PHP语言连接MYSQL数据库实例代码
本文主要向大家介绍了PHP语言连接MYSQL数据库实例代码,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 现在做的项目需要php连接mysql数据库,虽然之前学过,但是现在基本上都给忘 ...
最新文章
- Docker学习(3)——安装部署过程及简单应用
- FPGA设计心得(5)Aurora 例子工程分析与仿真实例分析(streaming版)
- 《设备调试与网络优化》教学讲义(二)
- Spring 5.0 源码编译, 403, 404 依赖pom 无法下载问题
- Java客户端操作zookeeper:删除节点代码示例
- 一卡通大冒险(hdu2512)
- JavaScript学习(八十五)—数据类型的转换
- 功能增强的进度条控件(源码)
- 关于Centos Linux系统安装Python的问题
- Expression Blend学习5控件-TextButton
- 勒索病毒WannaCry深度技术分析:详解传播、感染和危害细节
- 计算机二级C语言选择题——01
- win10资源管理器——删除左侧图标(自用)
- 一个问题的暴漏有多难? 过五关!!!
- 这几种食物不要给1岁内宝宝吃
- 计算机三级考试网络技术资料,计算机三级考试2017网络技术辅导资料
- 把握云计算+引领云时代
- 腾讯云增强型SSD云硬盘性能方面有哪些特点?
- 常用技术指标之一文读懂RSI指标
- 代码随想录训练营day43