文档详情

2048源代码.doc

发布:2016-07-30约1.13万字共11页下载文档
文本预览下载声明
一、实验说明 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){
显示全部
相似文档