1 / 11
文档名称:

2048源代码.doc

格式:doc   大小:50KB   页数:11页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

2048源代码.doc

上传人:253214894 2018/9/7 文件大小:50 KB

下载得到文件列表

2048源代码.doc

相关文档

文档介绍

文档介绍:一、实验说明
1. 环境登录

2. 环境介绍
本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序:
LX终端(LXTerminal):Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令。
GVim:非常好用的编辑器,最简单的用法可以参考课程Vim编辑器。

使用GVim编辑器输入实验所需的代码及文件,使用LX终端(LXTerminal)运行所需命令进行操作。完成实验后可以点击桌面上方的“实验截图”保存并分享实验结果到微博,向好友展示自己的学****进度。实验楼提供后台系统截图,可以真实有效证明您已经完成了实验。实验记录页面可以在“我的主页”中查看,其中含有每次实验的截图及笔记,以及每次实验的有效学****时间(指的是在实验桌面内操作的时间,如果没有操作,系统会记录为发呆时间)。这些都是您学****的真实性证明。
二、项目介绍
这次我们的项目是2048游戏,开动脑筋秀秀智商吧。最终效果图是这样的 
三、项目实战
1. 基础知识
我们的项目用到了一点数据结构的知识,还涉及到了linux的一些系统调用,有助于我们加深对linux下的程序设计的深入理解。此外,我们还用了一个文本界面的屏幕绘图库ncurses,编译时需要加上-lcurses选项。

在终端输入sudo apt-get install libncurses5-dev
2. 设计思路
我们的2048游戏里最关键的就是消掉方块和在屏幕任意位置输出数据。后者通过ncurses库可以轻松实现,前者就需要我们开动脑筋了。
3. 开始动手
让我们先来完成一些基础工作,首先是头文件:
#include <>
#include <>
#include <>
#include <sys/>
#include <>
还需要几个全局变量:
// 4*4方格
int a[4][4] = {0};
// 方格里空格的个数
int empty;
int old_y, old_x;
为了调用起来方便,我们先声明一下我们定义的函数:
void draw();
void play();
void init();
void draw_one(int y, int x);
t_value(int *new_y, int *new_x);
int game_over();
t_one(int y, int x);
4. main函数
先看看代码:
int main(){
init();
play();
endwin();
return 0;
}
我们在main里先做好初始化,然后就进入play子函数。下面看一下init函数:
void init()
{
int x, y;
initscr();
cbreak();
noecho();
curs_set(0);
empty = 15;
srand(time(0));
x = rand() % 4;
y = rand() % 4;
a[y][x] = 2;
draw();
}
init函数首先初始化屏幕,在方格中随机生成一个位置并放入数字2。然后绘制方格。draw函数代码如下:
void draw(){
int n, m, x, y, i, j, k, t, h;

char c[4] = {'0', '0', '0', '0'};
clear();
for(n = 0; n < 9; n += 2) //横线
for(m = 0; m < 21; m++) {
move(n, m);
addch('-');
refresh();
}
for(m = 0; m < 22; m += 5) //竖线
for(n = 1; n < 8; n++) {
move(n, m);
addch('|');
refresh();
}
for(y = 0; y < 4; y++, t++) //数字
for(x = 0; x < 4; x++) {
draw_one(y, x);
}
}
其中draw_one函数用于绘制单个数字:
void draw_one(int y, int x){
int i, m, k, j;
char c[4] = {'0', '0', '0', '0'};
i = a[y][x];
m = 0;
do {
j = i % 10;
c[m++] = j + '0';
i = i / 10;
}while(i > 0);
m = 0;