2048源代码.doc
文本预览下载声明
一、实验说明
1. 环境登录
2. 环境介绍
本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序:
LX终端(LXTerminal):Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令。
GVim:非常好用的编辑器,最简单的用法可以参考课程Vim编辑器。
3.环境使用
使用GVim编辑器输入实验所需的代码及文件,使用LX终端(LXTerminal)运行所需命令进行操作。 完成实验后可以点击桌面上方的“实验截图”保存并分享实验结果到微博,向好友展示自己的学习进度。实验楼提供后台系统截图,可以真实有效证明您已经完成了实验。 实验记录页面可以在“我的主页”中查看,其中含有每次实验的截图及笔记,以及每次实验的有效学习时间(指的是在实验桌面内操作的时间,如果没有操作,系统会记录为发呆时间)。这些都是您学习的真实性证明。
二、项目介绍
这次我们的项目是2048游戏,开动脑筋秀秀智商吧。最终效果图是这样的?
三、项目实战
1. 基础知识
我们的项目用到了一点数据结构的知识,还涉及到了linux的一些系统调用,有助于我们加深对linux下的程序设计的深入理解。此外,我们还用了一个文本界面的屏幕绘图库ncurses,编译时需要加上-lcurses选项。
1.1.安装ncurses库
在终端输入sudo apt-get install libncurses5-dev
2. 设计思路
我们的2048游戏里最关键的就是消掉方块和在屏幕任意位置输出数据。后者通过ncurses库可以轻松实现,前者就需要我们开动脑筋了。
3. 开始动手
让我们先来完成一些基础工作,首先是头文件:
#include stdio.h
#include stdlib.h
#include curses.h
#include sys/time.h
#include signal.h
还需要几个全局变量:
// 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);
void cnt_value(int *new_y, int *new_x);
int game_over();
int cnt_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){
显示全部