2048小游戏c语言编程设计

合集下载

C语言课程设计报告-游戏2048

C语言课程设计报告-游戏2048

东华理工大学C语言课程设计报告学院:国际教育学院学院专业:电子信息工程班级:1420606学号:************姓名:***一、课程设计题目:游戏2048二、课程设计要求:a)使用C语言编写2048这款游戏b)能够正常运行,拥有游戏界面。

c)能正常进行游戏从开始到结束。

d)用户操作方便三、设计思路:a)游戏介绍:i.2048是一款简单的数字类游戏,界面是一个4*4的方形格子。

每个格子里可以为空或者有一个2^n的数值。

ii.用户可以输入4种指令,分别是:上下左右,游戏会根据用户的指定的方向,将格子中的数值向对应方向进行移动,直至移动到最边上的格子或者有其他数值占用,如果碰到等大数值,将会进行合并。

此外,成功移动后,会在一个空格子随机生成一个2或者4 iii.游戏目标是合成2048这个数值或者更大的数值。

b)实现思路:i.可以使用二维数组来保存4*4格子中的数值ii.指令,可以通过输入字符函数,读取用户在键盘上的方向键,进行判断执行对应的代码。

iii.游戏界面,可以使用简单的特殊制表符,来实现,并通过清屏函数来进行反复同位置打印界面。

iv.需要判断游戏结束的函数,以及记录游戏分数和步骤的变量v.当游戏结束时,能够询问用户是否重新开始。

vi.随机生成一个新数,可以调用随机函数,使用时间做种子。

c)实现难点:i.打印游戏界面,要实现灵活能根据棋盘数组里面的数据灵活打印。

ii.执行操作时,数值的移动和合并。

四、流程图五、C语言源代码// 游戏2048.c#include "windows.h"#include "time.h"#include "stdio.h"#include "conio.h"#include "string.h"//宏定义常量方向键值//const int LEFT = 75, UP = 72, RIGHT = 77, DOWN = 80;#define LEFT 75#define UP 72#define RIGHT 77#define DOWN 80const char error_str[] = "您上次输入的指令无法识别,请重新输入。

c语言2048游戏课程设计

c语言2048游戏课程设计

c语言2048游戏课程设计一、课程目标知识目标:1. 让学生掌握C语言的基本语法和结构,包括变量声明、数据类型、运算符、控制结构等。

2. 帮助学生理解数组的定义和使用,掌握二维数组的访问和操作。

3. 引导学生了解函数的定义、调用和参数传递,重点掌握递归和模块化编程。

技能目标:1. 培养学生运用C语言解决问题的能力,特别是逻辑思维和算法设计能力。

2. 通过设计2048游戏,让学生掌握游戏开发的基本流程,包括需求分析、设计、编码、测试等。

3. 提高学生的编程实践能力,使其能够独立编写、调试和优化C语言程序。

情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发学习动力,提高学习积极性。

2. 引导学生养成合作、探究的学习习惯,培养团队精神和解决问题的能力。

3. 培养学生的创新意识,鼓励他们勇于尝试,敢于挑战,形成积极向上的学习态度。

课程性质:本课程为C语言编程实践课程,旨在通过设计2048游戏,让学生在实际项目中运用所学知识,提高编程能力和逻辑思维能力。

学生特点:学生处于高年级阶段,已经具备一定的C语言基础,具有一定的编程能力和独立思考能力。

教学要求:教师应关注学生的个体差异,因材施教,注重理论与实践相结合,提高学生的编程实践能力。

同时,教师应引导学生积极参与课堂讨论,培养他们的合作精神和创新能力。

在教学过程中,将课程目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容1. C语言基础知识回顾:变量、数据类型、运算符、控制结构(选择、循环)。

2. 数组与二维数组:数组的概念、定义、初始化;二维数组的访问和操作。

3. 函数:函数的定义、调用、参数传递;递归函数的编写和调用。

4. 2048游戏原理与设计:a. 游戏规则介绍b. 游戏界面设计c. 游戏逻辑实现:移动、合并、生成新数字等d. 游戏胜负判断5. 编程实践:a. 使用C语言编写2048游戏的各个功能模块b. 调试、优化程序,提高游戏性能c. 测试游戏功能,确保游戏可玩性6. 教学内容安排与进度:a. 基础知识回顾(1课时)b. 数组与二维数组(2课时)c. 函数与递归(2课时)d. 2048游戏原理与设计(2课时)e. 编程实践(3课时)教材章节关联:1. 基础知识回顾:教材第1-4章2. 数组与二维数组:教材第5章3. 函数与递归:教材第6章4. 游戏设计与编程实践:结合教材实例,拓展相关知识教学内容确保科学性和系统性,以2048游戏为载体,引导学生运用所学知识,培养编程实践能力和逻辑思维能力。

C语言课程设计报告-游戏2048

C语言课程设计报告-游戏2048

东华理工大学C语言课程设计报告学院:国际教育学院学院专业:电子信息工程班级:1420606学号:201420060638姓名:钟天运一、课程设计题目:游戏2048二、课程设计要求:a)使用C语言编写2048这款游戏b)能够正常运行,拥有游戏界面。

c)能正常进行游戏从开始到结束。

d)用户操作方便三、设计思路:a)游戏介绍:i.2048是一款简单的数字类游戏,界面是一个4*4的方形格子。

每个格子里可以为空或者有一个2^n的数值。

ii.用户可以输入4种指令,分别是:上下左右,游戏会根据用户的指定的方向,将格子中的数值向对应方向进行移动,直至移动到最边上的格子或者有其他数值占用,如果碰到等大数值,将会进行合并。

此外,成功移动后,会在一个空格子随机生成一个2或者4 iii.游戏目标是合成2048这个数值或者更大的数值。

b)实现思路:i.可以使用二维数组来保存4*4格子中的数值ii.指令,可以通过输入字符函数,读取用户在键盘上的方向键,进行判断执行对应的代码。

iii.游戏界面,可以使用简单的特殊制表符,来实现,并通过清屏函数来进行反复同位置打印界面。

iv.需要判断游戏结束的函数,以及记录游戏分数和步骤的变量v.当游戏结束时,能够询问用户是否重新开始。

vi.随机生成一个新数,可以调用随机函数,使用时间做种子。

c)实现难点:i.打印游戏界面,要实现灵活能根据棋盘数组里面的数据灵活打印。

ii.执行操作时,数值的移动和合并。

四、流程图五、C语言源代码// 游戏2048.c#include "windows.h"#include "time.h"#include "stdio.h"#include "conio.h"#include "string.h"//宏定义常量方向键值//const int LEFT = 75, UP = 72, RIGHT = 77, DOWN = 80;#define LEFT 75#define UP 72#define RIGHT 77#define DOWN 80const char error_str[] = "您上次输入的指令无法识别,请重新输入。

2048小游戏代码解析C语言版

2048小游戏代码解析C语言版

2048⼩游戏代码解析C 语⾔版2048⼩游戏,也算是风靡⼀时的益智游戏。

其背后实现的逻辑⽐较简单,代码量不算多,⽽且趣味性强,适合作为有语⾔基础的童鞋来加强编程训练。

本篇分析2048⼩游戏的C 语⾔实现代码。

前⾔游戏截图:游戏实现原理:使⽤终端图形库⽂件curses 绘制终端⾥的图形。

使⽤⼀个⼆维数组保存4 x 4 空格中的变量。

键盘输⼊控制移动,经过逻辑判断,⼆维数组数据变化。

⼆维数组数据变化后交给图形函数显⽰出来。

库⽂件curses 介绍:curses 是⼀种终端图形绘制库,利⽤curses 可以在终端中绘制多种图形。

简单demo深⼊学习请查询相关资料。

#include <stdio.h>#include <curses.h>int main(){initscr();border(0,0,0,0,0,0,0,0);move(5,15);printw("%s","hello world");refresh();char ch=getch();endwin();return 0;}编译:gcc curses_demo.c -lcurses2048实现代码分析根据2048实现原理,代码要实现的主要有三件事:图形绘制游戏逻辑操作图形加载逻辑结果主程序代码如下:2048 C语⾔版代码分析//-------------头⽂件--------------------//#include <stdio.h>#include <stdlib.h>#include <curses.h>#include <time.h>#include <unistd.h>#include <signal.h>//--------------------------------------////------------------全局变量-------------------------------// 游戏主界⾯是⼀个 4*4 的 16 宫格,使⽤⼆维数组进⾏表⽰,⽤ 0 表⽰空格int a[4][4] = {0};// 16 宫格中空格的个数int empty;// 涉及到新产⽣的数字的位置的两个变量int old_y, old_x;//所有的C语⾔代码就是在这三个函数中int main(){//初始化函数init();//游戏运⾏时函数play();//结束函数,清屏//endwin()来关闭 curses 模式.endwin();return0;}main()函数代码分析头⽂件+全局变量头⽂件中包含的库⽂件如下:<stdio.h> 标准输⼊输出<stdlib.h> 设计到内存操作函数<curses.h> 绘制图形库⽂件<time.h> 时间函数<unistd.h> 睡眠函数库⽂件<signal.h> 信号相关操作库⽂件主函数代码主函数中共有三个⼦函数,其中复杂的为前两个,第三个为curses关闭的函数,没有任何逻辑。

2048C语言

2048C语言
if (i%W == 1 || i%W == 0) //在第一行和每个格子的最后一行输入一行的*
{
for (int j = 1; j <= 2 * W * N; j++){
putchar('*');
}
}
else if (i%W == (W + 1) / 2) //在中间行输出数字或者空白
putchar('*');
else
putchar(' ');
}
}
putchar('\n');
}
printf("******************************************************************************");
return 0;
}
//判断是否可以上下左右移动的函数,判断成败的条件
int Up(int number[][N]){
int i, j, k, t; //k为本次所求单个数的列下标,t为移动的,计算要和k做变化的下标
int b = 0; //b为标志变量,标志此次移动是否发生,无论是移动还是相加都代表着发生了移动
int n;//获得的随机数存放在这里
int x, y;//获得的随机坐标存放在这里
long a = rand();//a为与时间相关的随机种子数
if (a % 2 == 0)
n = 2;
else
n = 4;
/* while (1){
x = (time(0)%100) % 4;
system("color 1F");

2048c语言课程设计

2048c语言课程设计

2048c语言课程设计一、课程目标知识目标:1. 掌握C语言基本数据类型和变量声明;2. 学会使用C语言进行算术表达式和逻辑表达式的编写;3. 理解数组的定义和使用方法,能够运用数组解决2048游戏中的数据存储问题;4. 掌握循环结构和条件判断语句,实现对游戏逻辑的控制。

技能目标:1. 能够运用C语言编写简单的2048游戏程序,实现数字的合并和移动;2. 学会使用调试工具,找出并修复程序中的错误;3. 能够分析2048游戏的算法,并进行优化;4. 培养逻辑思维能力和编程解决问题的能力。

情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发学习积极性;2. 培养学生的团队合作意识,学会与他人共同解决问题;3. 培养学生面对困难不轻言放弃,勇于尝试和克服挑战的精神;4. 培养学生遵守编程规范,养成良好的编程习惯。

课程性质:本课程为实践性较强的课程,结合2048游戏案例,使学生能够在实际操作中掌握C语言编程技巧。

学生特点:学生具备一定的计算机操作基础,对编程有一定了解,但实践经验不足。

教学要求:通过案例教学,引导学生动手实践,注重培养学生的编程思维和实际操作能力。

在教学过程中,关注学生的个体差异,提供个性化的指导和帮助,确保每个学生都能达到课程目标。

将课程目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容1. C语言基本数据类型和变量声明:介绍整型、浮点型、字符型等基本数据类型,以及变量的定义和初始化方法。

相关教材章节:第一章《C语言概述》。

2. 算术表达式和逻辑表达式:讲解C语言中的运算符、优先级,以及如何编写算术表达式和逻辑表达式。

相关教材章节:第二章《运算符与表达式》。

3. 数组的使用:介绍一维数组、二维数组的定义和初始化,以及如何在2048游戏中使用数组存储数据。

相关教材章节:第三章《数组和字符串》。

4. 循环结构和条件判断语句:讲解for循环、while循环、do-while循环的使用,以及if条件语句和switch语句。

基于C语言实现2048游戏

基于C语言实现2048游戏

基于C语⾔实现2048游戏本⽂实例为⼤家分享了C语⾔实现2048游戏的具体代码,供⼤家参考,具体内容如下#include <stdio.h>#include <stdlib.h>#include <time.h>#include <conio.h>#include <windows.h>#define ROW 4#define COL ROW#define KEY1 224#define KEY_LEFT 75#define KEY_UP 72#define KEY_RIGHT 77#define KEY_DOWN 80int g_sgap = 0;/*应⽤市场下载2048如果需要图形界⾯,需要加界⾯库*///在数组arr产⽣⼀个新的数字void GetNewVal(int arr[ROW][COL]){srand( (unsigned)time( NULL ) + g_sgap++);int x = rand()%ROW;//⾏下标,保证不越界int y = rand()%COL;//列下标,保证不越界int newval = 2;if(x == 0)//75%的概率为2,25%的概率为4{newval = 4;}//找到空闲的格⼦while(arr[x][y] != 0)//该格⼦已经有值,todo有可能死循环{y++;if(y == COL)//{y = 0;x = (x+1)%ROW;//下⼀⾏}}arr[x][y] = newval;}//打印void Show(int arr[ROW][COL]){system("cls");for(int i=0; i<ROW;i++){for(int j=0;j<COL;j++){printf("%4d",arr[i][j]);}printf("\n");}}//显⽰开始界⾯void Start(int arr[ROW][COL]){//获取两个数字,然后显⽰界⾯GetNewVal(arr);GetNewVal(arr);Show(arr);}//获取键值,左:1,上:2,右:3,下:4,其它:0int GetButton(){int key1 = 0;//第⼀个键值int key2 = 0;//第⼆个键值while(1){if(_kbhit()){key1 = _getch();//获得第⼀个键值if(key1 == KEY1)//0xE0{key2 = _getch();//获取第⼆个键值if(key2 == KEY_LEFT){return 1;}else if(key2 == KEY_UP){return 2;}else if(key2 == KEY_RIGHT){return 3;}else if(key2 == KEY_DOWN){return 4;}}}Sleep(100);//睡眠,让出CPU,避免忙等待}}//向左合并bool MergeLeft(int arr[ROW][COL]){int x1 = -1;//第⼀个需要合并的数字下标bool flg = false;//当前没有有效合并(没有数据合并,也没有数据移动) for(int i=0;i<ROW;i++){x1 = -1;//第⼀步,合并相同的数字for(int j=0;j<COL;j++){if(arr[i][j]!=0){if(x1 == -1)//该⾏第⼀个⾮0的值{x1 = j;}else//当前第⼆个需要处理的值{if(arr[i][j] == arr[i][x1])//合并,将x1下标的值*2,j下标的值置为0{arr[i][x1] *= 2;arr[i][j] = 0;x1 = -1;flg = true;}else//第⼀个值和第⼆个值不等,{x1 = j;}}}}//第⼆步,移动数字int index = 0;//当前可以放数据的下标for(int j=0;j<COL;j++){if(arr[i][j]!=0)//需要移动数据{if(index != j){arr[i][index] = arr[i][j];arr[i][j] = 0;index++;flg = true;}else{index++;}}}}return flg;}//游戏是否结束//1.没有空闲单元格//2.相邻没有相同的数字bool IsGameOver(int arr[ROW][COL]){//判断有没有空闲单元格int activeCell = 0;//统计空闲单元格数量for(int i=0;i<ROW;i++){for(int j=0;j<COL;j++){if(arr[i][j] == 0){activeCell++;}}}if(activeCell != 0){return false;}//相邻是否有相同的数字,只需要判断右边和下边for(int i=0;i<ROW;i++){for(int j=0;j<COL;j++){//if(arr[i][j]==arr[i][j+1] || arr[i][j] == arr[i+1][j])if(j+1<COL&&arr[i][j]==arr[i][j+1] || i+1<ROW&&arr[i][j]==arr[i+1][j]) {return false;}}}return true;}void Run(int arr[ROW][COL]){int bt;bool rt = false;while(1){bt = GetButton();if(bt == 1)//⽅向键左{rt = MergeLeft(arr);if(rt){GetNewVal(arr);Show(arr);if(IsGameOver(arr)){return ;}}}}}int main(){int arr[ROW][COL] = {0};Start(arr);Run(arr);return 0;}int main1(){int a = 0;while(1){if(_kbhit()){a = _getch();//getchar();printf("键值是:%d\n",a);}}return 0;}/*int main(){srand( (unsigned)time( NULL ) );for(int i=0;i<10;i++){printf("%d ",rand());}printf("\n");return 0;}*/运⾏画⾯以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

c语言2048课程设计

c语言2048课程设计

c语言2048课程设计一、课程目标知识目标:1. 掌握C语言基本的语法结构,如变量声明、数据类型、运算符、控制结构等。

2. 学会使用数组存储和处理数据,理解数组的访问方式及基本操作。

3. 理解函数的定义和调用方法,能编写简单的自定义函数实现特定功能。

技能目标:1. 培养学生运用C语言解决问题的能力,特别是逻辑思维和算法设计能力。

2. 能够设计并实现2048游戏的核心算法,包括数字合并、移动逻辑等。

3. 学会使用调试工具进行程序调试,提高程序的正确性和稳定性。

情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发探究精神,形成主动学习的习惯。

2. 增强学生的团队协作能力,通过小组讨论和协作完成课程项目。

3. 引导学生体验程序设计的成就感,培养自信心和耐心,形成积极向上的学习态度。

课程性质分析:本课程为C语言编程实践课程,结合2048游戏设计,旨在让学生在实际操作中巩固所学知识,提高编程能力。

学生特点分析:学生已具备一定的C语言基础,对编程有初步认识,但对复杂逻辑和算法设计尚需引导和练习。

教学要求:1. 以学生为主体,教师为主导,注重启发式教学,引导学生主动探索。

2. 结合实际案例,让学生在实践中掌握编程方法和技巧。

3. 关注学生个体差异,提供个性化指导,确保每个学生都能在课程中取得进步。

二、教学内容1. C语言基础语法复习:变量声明、数据类型、运算符、控制结构(条件语句、循环语句)。

相关教材章节:第一章至第四章。

2. 数组的使用:一维数组、二维数组的概念及应用,数组初始化、访问和遍历。

相关教材章节:第五章。

3. 函数的定义与调用:理解函数作用,掌握函数定义、调用、传参和返回值。

相关教材章节:第六章。

4. 2048游戏原理及算法设计:a. 游戏规则和逻辑介绍。

b. 数字合并、移动算法设计。

c. 随机生成数字、界面显示。

相关教材章节:算法设计与实践。

5. 程序调试与优化:使用调试工具,如GDB,进行程序调试,分析并优化程序性能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<stdio.h>#include<conio.h> //使用getch()函数#include<time.h>#include <stdlib.h>int num[4][4];int score, gameover, ifappear, gamew, gamef,move;char key;void explation(){void menu();system("cls");printf("\t\t*****************************************\t\t\n");printf("\t\t*****************************************\n");printf("\t\t******************游戏规则***************\n");printf("\t\t*****************************************\n");printf("\t\t*****************************************\t\t\n");printf("玩家可以选择上、下、左、右或W、A、S、D去移动滑块\n");printf("玩家选择的方向上若有相同的数字则合并\n");printf("合并所得的所有新生成数字相加即为该步的有效得分\n");printf("玩家选择的方向行或列前方有空格则出现位移\n");printf("每移动一步,空位随机出现一个2或4\n");printf("棋盘被数字填满,无法进行有效移动,判负,游戏结束\n");printf("棋盘上出现2048,获胜,游戏结束\n");printf("按上下左右去移动滑块\n");printf("请按任意键返回主菜单...\n");getch();system("cls");main();}void gamefaile(){int i, j;system("cls");printf("\t\t*****************************************\t\t\n");printf("\t\t*****************************************\n");printf("\t\t******************you fail***************\n");printf("\t\t*****************************************\n");printf("\t\t*****************************************\t\t\n");printf("\t\t\t---------------------\n\t\t\t");for (j = 0; j<4; j++){for (i = 0; i<4; i++)if (num[j][i] == 0)printf("| ");elseprintf("|%4d", num[j][i]);printf("|\n");printf("\t\t\t---------------------\n\t\t\t");}printf("你的成绩:%d,移动了%d步\n", score,move);printf("请按任意键返回主菜单...\n");getch();system("cls");main();}void gamewin(){int i, j;system("cls");printf("\t\t*****************************************\t\t\n");printf("\t\t*****************************************\n");printf("\t\t*******************you win***************\n");printf("\t\t*****************************************\n");printf("\t\t*****************************************\t\t\n");printf("\t\t\t---------------------\n\t\t\t");for (j = 0; j<4; j++){for (i = 0; i<4; i++)if (num[j][i] == 0)printf("| ");elseprintf("|%4d", num[j][i]);printf("|\n");printf("\t\t\t---------------------\n\t\t\t");}printf("你的成绩:%d,移动了%d步\n", score,move);printf("请按任意键返回主菜单...\n");getch();system("cls");main();}void prin(){int i, j;system("cls");printf("\t\t*****************************************\t\t\n");//输出界面printf("\t\t*****************************************\n");printf("\t\t******************游戏开始***************\n");printf("\t\t*****************************************\n");printf("\t\t*****************************************\t\t\n");printf("\t\t 请按方向键或W、A、S、D移动滑块\n");//输出操作提示语句printf("\t\t 按ESC返回至主菜单\n");printf("\t\t\t---------------------\n\t\t\t");for (j = 0; j<4; j++) //输出4*4的表格{for (i = 0; i<4; i++)if (num[j][i] == 0)printf("| ");elseprintf("|%4d", num[j][i]);printf("|\n");printf("\t\t\t---------------------\n\t\t\t");}printf("你的成绩:%d,移动了%d步\n", score,move);//输出得分和移动步数}void appear(){int i, j,ran,t[16],x=0,a,b;srand((int)time(0)); //随机种子初始化for (j = 0; j < 4; j++) //将空白的区域的坐标保存到中间数组t中for (i = 0; i < 4;i++)if (num[j][i] == 0){t[x] = j * 10 + i;x++;}if (x == 1) //在t中随机取一个坐标ran = x - 1;elseran = rand() % (x - 1);a = t[ran] / 10; //取出这个数值的十位数b = t[ran] % 10; //取出这个数值的个位数srand((int)time(0));if ((rand() % 9)>2) //在此空白区域随机赋值2或4num[a][b] = 2;elsenum[a][b] = 4;}void close(){exit(0);}void add(int *p){int i=0, b;while (i<3){if (*(p + i) != 0){for (b = i + 1; b < 4; b++){if (*(p + b) != 0)if (*(p + i) == *(p + b)){score = score + (*(p + i)) + (*(p + b));*(p + i) = *(p + i) + *(p + b);if (*(p + i) == 2048)gamew = 1;*(p + b) = 0;i = b + i;++ifappear;break;}else{i = b;break;}}if (b == 4)i++;}elsei++;}}void Gameplay(){int i, j, g, e, a, b[4];appear();appear();while (1){if (ifappear!=0)appear();prin();key = getch();switch (key){case 'w':case 'W':case 72:ifappear = 0;for (j = 0; j < 4; j++){for (i = 0; i < 4; i++){b[i] = num[i][j];num[i][j] = 0;}add(b);e = 0;for (g = 0; g < 4; g++){if (b[g] != 0){num[e][j] = b[g];if (g != e)++ifappear;e++;}}}if (ifappear!=0)++move;break;case 's':case 'S':case 80:ifappear = 0;for (j = 0; j < 4; j++){for (i = 0; i < 4; i++){b[i] = num[i][j];num[i][j] = 0;}add(b);e = 3;for (g = 3; g>=0; g--){if (b[g] != 0){num[e][j] = b[g];if (g != e)++ifappear;e--;}}}if (ifappear != 0)++move;break;case 'a':case 'A':case 75:ifappear = 0;for (j = 0; j < 4; j++){for (i = 0; i < 4; i++){b[i] = num[j][i];num[j][i] = 0;}add(b);e = 0;for (g = 0; g < 4; g++){if (b[g] != 0){num[j][e] = b[g];if (g!=e)++ifappear;e++;}}}if (ifappear != 0)++move;break;case 'd':case 'D':case 77:ifappear = 0;for (j = 0; j < 4; j++){for (i = 0; i < 4; i++){b[i] = num[j][i];num[j][i] = 0;}add(b);e = 3;for (g = 3; g >=0; g--){if (b[g] != 0){num[j][e] = b[g];if (g!=e)++ifappear;e--;}}}if (ifappear != 0)++move;break;case 27:system("cls");main();break;}for (j = 0; j < 4; j++){for (i = 0; i < 4; i++){if (j < 3){if (i < 3){if (num[j][i] == num[j + 1][i] || num[j][i] == num[j][i + 1] || num[j][i] == 0){gamef = 0;break;}elsegamef = 1;}else{if (num[j][i] == num[j + 1][i] || num[j][i] == 0){gamef = 0;break;}elsegamef = 1;}}else{if (i < 3){if (num[j][i] == num[j][i + 1] || num[j][i] == 0 || num[j][i + 1] == 0){gamef = 0;break;}elsegamef = 1;}}}if (gamef == 0)break;}if (gamef == 1 || gamew == 1)break;}if (gamef == 1)gamefaile();elsegamewin();}void menu(){int n;printf("\t\t*****************************************\t\t\n"); //输出游戏菜单的图形printf("\t\t* 1、开始游戏*\n");printf("\t\t* 2、游戏规则*\n");printf("\t\t* 3、退出游戏*\n");printf("\t\t*****************************************\n");printf("请输入1或2或3:[ ]\b\b");scanf("%d", &n);switch (n){case 1:Gameplay(); //游戏开始函数break;case 2:explation(); //游戏规则函数break;case 3:close(); //关闭游戏函数break;}}int main(){int j, i;for (j = 0; j < 4; j++) //对4*4进行初始赋值为0for (i = 0; i < 4; i++)num[j][i] = 0;gamew = 0; //游戏获胜的判断变量初始化gamef = 0; //游戏失败的判断变量初始化ifappear = 0; //判断是否应该随机出现2或4的变量初始化score = 0; //游戏得分变量初始化gameover = 0; //游戏是否结束的变量初始化move = 0; //游戏的移动步数初始化menu(); //调用主菜单函数return 0;}。

相关文档
最新文档