资源简介
Linux2048(详细注释版-验证可运行)
代码片段和文件信息
// add your header comment here
#include
#include
#include
#include
#include
// put any extra includes here but don‘t delete the ones above
#define SIZE 4
// add your function_prototypes here
// The functions moveLeft moveRight moveUp moveDown
// return -1 if the specified moving of numbers is not possible.
// Otherwise they move the numbers as indicated and return
// the change to the score from combining adjacent identical numbers.
// They return 0 if no numbers were combined.
/*
题目的意思是这样的,需要‘严格’判断能否移动,我用flag标示移动的时候在第二个判断的时候出错了!
拿下移为例,if(cell==0)的时候直接判断可以移动是错误的,当下移的时候,如果只有
上面第一行的某一个元素为0,下面所有行不出现合并的情况下是不能下移的。
所以在上下左右移动的过程中,当if(cell==0)即当前元素为0时要使得能够移动,就必须限制这个为0的
元素不是上面第一行(下移时)、左侧第一列(右移)、右侧第一列(左移)、下面第一行(上移)、
所以修改每个move函数中判断if(cell==0)代码的i或者j的循环条件,以避开判断时0所在的特殊行位置
具体修改看下面部分注释(修改的只有每个move函数中第二个for循环中的i或者j的循环条件)
*/
/**************************************移动判断部分*****************************************/
int moveLeft(int board[SIZE][SIZE]) {
int ijscore=0flag=-1;
for(i=0;i {
for(j=0;j {
int cell=board[i][j];//cell单词用的不太恰当,表示当前元素,你可以采用更有意义的命名
if(cell!=0)//当前格子不为空
{
int k=j+1;
while(k {
int nextcell=board[i][k];//现在nextcell为cell左边的一个元素
if(nextcell!=0)
{
if(cell==nextcell)
{
flag=0;//相邻两个元素相同,就说明能移动,所以改变flag的值
board[i][j]+=board[i][k];
score+=board[i][j];
board[i][k]=0;
}
k=SIZE;//跳出双重循环(机智)
break;
}
k++;
}
}
}
}
//修改部分:for循环中的i或者j的循环条件
for(i=0;i {
for(j=0;j {
int cell=board[i][j];
if(cell==0)//如果当前格子是空的
{
int k=j+1;
while(k {
int nextcell=board[i][k];
if(nextcell!=0)//直到找到一个元素
{
flag=0;//
board[i][j]=nextcell;//把那个元素移动到当前
board[i][k]=0;//把被移动元素的原位置上清空
k=SIZE;//直接跳出循环
}
k++;
}
}
}
}
if(flag!=-1)
return score;
else
return -1;
}
int moveRight(int board[SIZE][SIZE]) {
int ijscore=0flag=-1;
for(i=0;i {
for(j=SIZE-1;j>=0;j--)
{
int cell=board[i][j];
if(cell!=0)
{
相关资源
- Linux操作系统实验报告
- linux下QT游戏五子棋源代码
- Linux添加系统调用遍历进程
- jdk-8u221-linux-x64.tar.gz&jdk;-8u221-windows-
- dos2unix for windows
- 一个简单的LINUX防火墙
- 飞凌ok6410 linuxLED驱动及应用程序
- 理发师问题的实现
- Linux下线性和DFS遍历进程树 内核模块
- SAP JCo3在Linux下安装及连接
- 安装过Windows系统的电脑如何安装Lin
- 简单的网络嗅探器Linux 源码
- linux内核 0.11版本源码 带中文注释
- cudnn-11.1-linux-x64-v8.0.4.30.tgzab
- Linux C程序设计王者归来_book_cd.7z.004
- 鸟哥的Linux私房菜:服务器架设篇第
- 《Linux-UNIX系统编程手册 上、下册 全
- linux学习资料(收集了很久)
- 程序的链接和装入
- 实验四:实现一个unix命令解释程序代
-
gsnap.tar.gz linux从fr
amebuffer获取image源 - i2c_ioctl详解
- Linux网络编程超级详细笔记
- linux tftp rpm软件包
- libssl-dev库
- 基于video4linux2的双usb摄像头图像获取
- linux网络编程教学视频
- Linux下聊天系统
- linux压力测试工具stress
- 国密SM4算法ECB CBC源码及demoLinux C版
评论
共有 条评论