哈佛公开课cs50习题集fifteen相关
来源:互联网 发布:舒适的椅子 知乎 编辑:程序博客网 时间:2024/05/10 01:20
这个竟然不允许发,是在想不通为什么,是不是原标题是fifteen游戏,然后百度认为是15禁游戏?如果是这样,只能呵呵了。
申诉也没有反应,只能重新改标题,再发一次。
参照上一篇“手动移动的八数码程序相关(非算法)”而改编的,具体注释看上一篇的,如果看不懂可以把每个函数单独运行。
这个是4*4的15数码,其实基本都差不多,move函数那边有区别。
这个是公开课视频上输入数字移动,而上一篇是上下左右键移动。
哦,没验证won函数,也就是移动成功后会怎样,要手动移动比较麻烦。
下面的图片就是:
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
// 声明
void clear(void);//清屏
void greet(void);//提示
void init(int array[]);//初始化
void draw(int array[]);//绘制
void move(int tile,int array[]);//移动
bool won(int array[]);//完成
//主函数
int
main()
{
int array[16];
int tile;
init(array);
do
{
clear();
greet();
draw(array);
if(won(array))
{
printf("你赢了!好棒!!\n");
break;
}
printf("\n");
printf("输入要移动的数字: ");
scanf("%d",&tile);
while(getchar()!='\n');
if(tile<0 || tile>15)
{
printf("retry!\n");
}
//tile = GetInt();
move(tile,array);
}while(tile!=0);
}
//清屏函数
void
clear(void)
{
/*printf("\033[2J");
printf("\033[%d;%dH", 0, 0);
*/
system("cls");
}
//提示函数
void
greet(void)
{
//clear();
printf("类似华容道的数字游戏,将其排列成1,2,3...15的顺序吧!\n");
printf("如果想结束,除了按右上角的x,还可以输入数字0,试试吧!\n");
printf("\n");
usleep(2000000);
}
//初始化函数
void
init(int array[])
{
// TODO
int i,j,sum;
srand((unsigned int)time(NULL));
do
{
sum=0;
for(i=0;i<16;i++)
array[i]=rand()%16;
for(i=0;i<16;i++)
{
for(j=0;j<i;j++)
{
if(array[j]==array[i])
{
array[i]=array[i]+1;
if(array[i]==16)
array[i]=0;
j=-1;
}
}
}
for(i=0;i<16;i++)
for(j=i+1;j<16;j++)
if(array[i]>array[j])
sum++;
}while(sum%2!=0);
}
//绘制函数
void
draw(int array[])
{
// TODO
int i,j;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
if(array[i*4+j]==0)
printf("\t");
else
printf("%d\t",array[i*4+j]);
printf("\n");
}
}
//移动函数
void
move(int tile,int array[])
{
// TODO
int i;
for(i=0;i<16;i++)
if(array[i]==0)break;
if((i>=1)&&(tile==array[i-1]))
{
array[i]=array[i-1];
array[i-1]=0;
}
if((i<=14)&&(tile==array[i+1]))
{
array[i]=array[i+1];
array[i+1]=0;
}
if((i>=4)&&(tile==array[i-4]))
{
array[i]=array[i-4];
array[i-4]=0;
}
if((i<=11)&&(tile==array[i+4]))
{
array[i]=array[i+4];
array[i+4]=0;
}
/*
switch(tile)
{
case array[i-1]:j=i-1;break;
case array[i+1]:j=i+1;break;
case array[i-4]:j=i-4;break;
case array[i+4]:j=i+4;break;
}
if(j>=0&&j<=15)
{
array[i]=array[j];
array[j]=0;
}
*/
}
//完成函数
bool
won(int array[])
{
// TODO
int i;
for(i=0;i<14;i++)
if(array[i]!=i+1)
return false;
return true;
}
- 哈佛公开课cs50习题集fifteen相关
- 哈佛公开课cs50习题集fifteen相关
- 哈佛cs50公开课,list1链表相关程序
- 公开课学习笔记-[哈佛]计算机科学CS50(一)
- 公开课学习笔记-[哈佛]计算机科学CS50(二)
- 公开课学习笔记-[哈佛]计算机科学CS50(三)
- 公开课学习笔记-[哈佛]计算机科学CS50(四)
- 公开课学习笔记-[哈佛]计算机科学CS50(五)
- 公开课学习笔记-[哈佛]计算机科学CS50(六)
- 公开课学习笔记-[哈佛]计算机科学CS50(七)
- 公开课学习笔记-[哈佛]计算机科学CS50(八)
- 公开课学习笔记-[哈佛]计算机科学CS50(九)
- 写点看Harvard CS50 公开课的感受
- 网易公开课哈佛大学CS50学习笔记
- 网易公开课哈佛大学CS50学习笔记(2)
- 幸福地生活 -<<哈佛幸福公开课>>
- 哈佛公开课《Positive Psychology 1504》学习笔记 -- Basic Premises
- 哈佛公开课《Positive Psychology 1504》学习笔记 -- Beliefs
- 手动移动的八数码程序相关(非算法)
- 学习python的第十五天
- 哈佛cs50公开课,list1链表相关程序
- 结合SSH&Nutz框架使用定时器quartz
- 哈佛公开课cs50习题集fifteen相关
- 哈佛公开课cs50习题集fifteen相关
- git 一些配置及常用命令
- ASP.NET网站转移之IIS6.0、FTP及Microsoft SQL Server 2005 Express的相关配置
- yii 1.0 后台CGridView中分页时,过滤器filtering只在第一页起作用的解决方法
- Android listview setEmpty 使用说明
- Yii 1.0 联级菜单,子菜单的prompt默认项在update时的相关问题
- 将博客搬至CSDN
- 超声波模块测试
- centos7下快速安装mysql