资源描述
2048游戏项目需求分析
一、项目概述 2
二、需求分析 2
1.游戏开发趋势和特色 2
2.游戏操作需求 2
3.开发环境 3
三、概要设计 3
四、程序步骤图 4
五、具体设计 5
3.颜色以下: 5
4.光标位置等格式控制 6
5.终端控制 7
六、游戏运行说明 10
1.游戏运行步骤图 10
七、扩展说明 10
1.扩展功效框图 10
一、项目概述
2048是一款简单小巧益智类游戏,挑战您智力极限,借鉴1024和小3传奇游戏开发而成,难度相对有所下降,是一款让您根本停不下来游戏。
游戏规则:滑动屏幕或方向键来移动小方块,两个数字一样小方块相撞时就会相加合成一个方块,每次操作以后会在空白方格处随机生成一个2或4方块,最终得到一个2048方块就算胜利了,
假如16个格子全部填满且无法移动话GAMEOVER。
二、需求分析
1.游戏开发趋势和特色
Linux特点就是代码开源。开放平台使更多开发者参与到游戏代码优化和完善当中,一个崭新游戏也很快走向成熟。
伴随计算机技术不停发展,硬件已经不在是游戏发展瓶颈。游戏计划愈加向专业化方向发展。
1. 将向网络化方向发展,伴随各平台对无线通信网络、WIFI网络、蓝牙网络良好支持,游戏将创新出愈加好游戏性和用户本验。网络游戏,多人游戏,联机对战等将深入强化玩家对游戏粘着度,而且轻易经过对道具等控制产生营利模式。玩家之间对交互能力需求也会促成未来游戏向网络化发展进程加紧。
2.将向休闲化、时间片化方向发展,移动设备随身性使是休闲小游戏将得到快速发展。移动设备对分散时间利用促进了游戏向时间片化发展,即一个游戏能够随时开始,随时结束,充足利用用户分散时间片来运行。
所以2048这个休闲益智手机游戏就应运而生,一经公布就占据各大手机游戏下载排行榜前列,这是一款老少皆宜手机游戏,在空闲时间你能够拿出手机来玩,上班、下班、坐公交、等地铁,你随心随意愉快玩耍。它简单易上手,只需滑动手指就能够操作,但却有难精通,要打通关卡却不是一件轻易事情
经过C语言控制台仿写这个游戏,能够锻炼编程框架思想和技巧,同时将所学到数据结构等知识灵活利用。
2.游戏操作需求
1、可使用鼠标或↑、↓、→、←或W、X、A、D键进行操作;
2、ESC 退出游戏
3.开发环境
运行环境:centos6.2
开发环境:vim编辑器
编写语言:c语言
三、概要设计
1、游戏开始时随机产生2个数值为2/4方格,其中1个方格置于4个角中一个位置,
另一个方格随机置于其它位置,其它方格值为0。
2、每次移动鼠标或按方向键后,逐行计算移动后方格值。每行移动算法是:先将全部值为0数移至行首。能后从行尾开始逐一和前一个数比较,假如相等则合并这2个格子。
3、每合并一次格子,将其值累计到游戏总分中。
4、一次移动结束后,在全部值为0方格中随机分配一个2/4值。
5、全部方格值不为0且上下、左右相邻方格全部不相等,则游戏结束。
6、2出现概率为90%,4出现概率为为10%。
四、程序步骤图
五、具体设计
1.控制Linux终端打印字符颜色和位置
Linux 终端控制台字体颜色,用到一个 转义序列
\e[F;B;Om
\e 转义字符开始,ESC ASCII 码用十进制表示就是 27,等于用八进制表示 033。
\e 或 \033 申明了转义序列开始(经过测试,F、B次序能够交换,也可省略)
[ 开始定义颜色。
'F' 为字体颜色,编号30~37;
'B' 为背景色,编号40~47。
'O' 为特殊意义代码
它们次序没相关系。
m 是标识
m 后面不用跟空格,是所定义彩色字和背景
使用方法一:
格式 printf("\033[字体颜色; 字背景颜色m输出字符串\033[0m" );
例子:printf("\033[31; 47;1mhello world\033[5m\n");
说明:31是字体颜色,47是字背景颜色, , hello world是字符串. ,1m表示高亮显示,后面\033[5m是控制码
使用方法二:
格式: echo -e "\033[字体颜色;字背景颜色;1m字符串\033[0m"
例子: echo -e "\033[36;41;1m something here \033[0m"
说明:其中41位置代表底色, 36位置是代表字颜色
\033[ ; m …… \033[0m ---这些ascii code是对颜色调用始末.
2.字体颜色和背景色
字背景颜色范围: 40--49 字颜色: 30--39
40: 黑 30: 黑
41:红 31: 红
42:绿 32: 绿
43:黄 33: 黄
44:蓝 34: 蓝
45:紫 35: 紫
46:深绿 36: 深绿
47:白色 37: 白色
3.输出特效格式控制(特殊意义码)
===========ANSI控制码说明=============
\033[0m 关闭全部属性
\033[1m 设置高亮度
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显,反白显示
\033[8m 消隐,不可见
\033[30m -- \033[37m 设置前景色
\033[40m -- \033[47m 设置背景色
\033[nA 光标上移n行
\033[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾内容
\033[s 保留光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\033[?25h 显示光标
4.颜色以下:
none = "\033[0m"
black = "\033[0;30m"
dark_gray = "\033[1;30m"
blue = "\033[0;34m"
light_blue = "\033[1;34m"
green = "\033[0;32m"
light_green -= "\033[1;32m"
cyan = "\033[0;36m"
light_cyan = "\033[1;36m"
red = "\033[0;31m"
light_red = "\033[1;31m"
purple = "\033[0;35m"
light_purple = "\033[1;35m"
brown = "\033[0;33m"
yellow = "\033[1;33m"
light_gray = "\033[0;37m"
white = "\033[1;37m"
5.光标位置等格式控制
\033[nA 光标上移n行
\03[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾内容
\033[s 保留光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\33[?25h 显示光标
代码实例:color.c
6.终端控制
struct termios
struct termios org, new; 终端状态
tcgetattr() 获取状态org
STDIN_FILENO : 终端相关宏
memcpy() 内存拷贝函数
struct stu a,b;
a = b; xxxxx
memcpy(&a, &b, sizeof(struct stu));
24 行 , &= ~ 位运算
设置终端新状态
tcsetattr(new_opts),修改目前状态
c=getchar();
tcsetattr(old_opts), 恢复之前状态
键盘输入--方向键--由三个字符表示:
上: 27 91 65
下: 27 91 66
右: 27 91 67
左: 27 91 68
终端控制文档说明
代码实例 termios_control.c
7. 数据结构、绘图
相关数据结构、数据类型定义 相关头文件定义中
游戏状态、按键方向、4x4方格数据值(使用二维数据存放)、实施步数、取得分数
绘制界面--4x4方格并显示数据值、实施步数、取得分数
依据color.c , 打印方格及数值, 代码实例 draw.c draw_box()
键盘控制数据方块移动
绘制图形、方向控制、更新画面
代码实例 draw.c main函数实施步骤
step 5 位运算
-5 :
原码 1000 0101
反码 1111 1010
补码 1111 1011
9 :
0000 1001
-5 & 9
0000 1001
00000011 3
00001100 12
1<<1 1 * 2^1
1<<2 1 * 2^2
1<<3 1 * 2^3
x = 1100 1010
0000 0001
0010 0000
1110 1010
1110 1010
x = (1<<5) | x
x |= (1<<5)
0100 0000
1011 1111
1010 1010
x = x & ~( 1<<6)
x &= ~(1<<6)
step9:合并算法
将一维数组转换为二维
RIGHT:
对每行处理:i=0; i<4; i++
从右边开始计算,
j=3 , 用于从右到左循环移动、合并
deep = 3, 用于从右到左存放
box_4x4[i][deep] = box_4x4[i][j]
deep = 2
merge_line
i=0;
box2[0][j] = box[j]
box2[1][j] = box[4+j]
box2[2][j] = box[8+j]
参考 merge.c
完整代码 my2048.c
六、游戏运行说明
1.游戏运行步骤图
七、扩展说明
可增加排名、存档和读档等功效
1.扩展功效框图
展开阅读全文