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

合集下载

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[] = "您上次输入的指令无法识别,请重新输入。

c语言课课程设计2048

c语言课课程设计2048

c语言课课程设计2048一、教学目标本章节的教学目标是让学生掌握C语言的基本语法和编程技巧,通过编写2048游戏,培养学生的逻辑思维能力和问题解决能力。

具体目标如下:1.知识目标:–掌握C语言的基本数据类型、运算符、控制结构。

–理解函数的定义和调用。

–学习数组、指针和字符串的基本操作。

2.技能目标:–能够使用C语言编写简单的程序。

–学会使用调试工具,能够发现和修复程序中的错误。

–掌握基本的算法设计和优化技巧。

3.情感态度价值观目标:–培养学生的团队合作意识和沟通能力。

–激发学生对编程的兴趣和热情,培养创新精神。

–培养学生的耐心和毅力,面对困难不轻易放弃。

二、教学内容本章节的教学内容主要包括C语言的基本语法、编程技巧和2048游戏的实现。

具体内容包括:1.C语言基本语法:数据类型、变量、运算符、控制结构。

2.函数的定义和调用:返回值、参数传递、局部变量。

3.数组、指针和字符串:数组的声明和访问、指针的定义和运算、字符串的表示和操作。

4.2048游戏的实现:游戏规则、算法设计、程序编写。

三、教学方法为了达到本章节的教学目标,将采用以下教学方法:1.讲授法:通过讲解C语言的基本语法和编程技巧,让学生掌握理论知识。

2.案例分析法:通过分析2048游戏的实现,让学生理解并应用所学知识。

3.实验法:让学生动手编写程序,培养实际编程能力。

4.小组讨论法:鼓励学生之间的交流和合作,培养团队合作意识和沟通能力。

四、教学资源为了支持本章节的教学内容和教学方法的实施,将准备以下教学资源:1.教材:《C程序设计语言》或《C语言入门教程》。

2.参考书:《C语言编程思想》或《C语言实战》。

3.多媒体资料:教学PPT、视频教程。

4.实验设备:计算机、编程环境(如Code::Blocks、Visual Studio等)。

5.在线资源:编程论坛、博客、开源项目等。

五、教学评估本章节的教学评估将采用多元化的评价方式,以全面客观地评估学生的学习成果。

2048游戏设计_课程设计报告

2048游戏设计_课程设计报告

2016-2017学年第一学期《Windows程序设计》课程设计报告题目:2048游戏设计专业:班级:姓名:指导教师:成绩:学院二0一六年十一月十五日目录1、实验要求及目的 (1)2、游戏需求分析及概要设计 (1)2.1需求分析 (1)2.2可行性分析 (1)2.3运行环境 (1)2.4游戏概要设计 (1)3、游戏详细设计 (2)3.1游戏主界面 (2)3.2游戏结束界面 (4)3.3新纪录界面 (6)3.4游戏规则 (8)4、游戏测试 (8)4.1测试过程 (8)4.2测试内容 (8)4.3测试结果 (9)5、小结 (10)6、参考文献 (11)7、附录 (12)1、实验要求及目的本课程设计旨在提高学生的软件编程能力。

本设计将进一步加强学生对面向对象程序设计思想的理解,增强对C#程序语言的灵活运用。

要求学生能实现基本的应用软件,为以后从事相关行业打下软件编程基础。

2、游戏需求分析及概要设计2.1需求分析现代社会对休闲小游戏的需求是:提高游戏的操作可行性,降低游戏的操作难度,降低游戏的上手难度,降低游戏的竞争需求,对使用设备的要求趋于简单化和多样化,游戏界面更加人性化,功能更加贴合使用。

2.2可行性分析1)技术可行性根据游戏设计的要求,可以通过 c#进行源代码的编辑,通过 windows 界面进行用户界面的编辑和优化,结合时间和目前学习水平等各项因素,项目所要求功能和性能完全可以实现。

2)运行可行性游戏基本要求是.netframework4.0 及以上,在大部分的用户设备上可以实现,并且游戏运行对硬件几乎无要求,项目运行可以得到保证。

3)可行性综合分析综合以上两点,项目开发可以得到技术和运行的保证,证明项目可行。

2.3运行环境操作系统:Windows7应用软件:Microsoft Visual Studio 20122.4游戏概要设计图-1 概要设计3、游戏详细设计3.1游戏主界面1)截图如“图-2主界面”所示图-2主界面2)主界面核心功能代码case 0:{ gra.FillRectangle(newSolidBrush(Color.BurlyWood),dian.X,dian.Y,90,90); } break;case 2:{ gra.FillRectangle(newSolidBrush(Color.LightSalmon),dian.X, dian.Y, 90, 90); } break;case 4:{ gra.FillRectangle(new SolidBrush(Color.Peru),dian.X, dian.Y, 90, 90); } break;case 8:{ gra.FillRectangle(newSolidBrush(Color.Chocolate),dian.X, dian.Y, 90, 90); } break;case 16:{ gra.FillRectangle(new SolidBrush(Color.Gray), dian.X, dian.Y, 90, 90); } break;case 32:{ gra.FillRectangle(newSolidBrush(Color.DarkSeaGreen), dian.X, dian.Y, 90, 90); } break;case 64:{ gra.FillRectangle(new SolidBrush(Color.Gold), dian.X, dian.Y,90, 90); } break;case 128:{ gra.FillRectangle(new SolidBrush(Color.HotPink), dian.X, dian.Y, 90, 90); } break;case 256:{ gra.FillRectangle(new SolidBrush(Color.DarkOrange), dian.X, dian.Y, 90, 90); } break;case 512:{ gra.FillRectangle(new SolidBrush(Color.LightPink), dian.X, dian.Y, 90, 90); } break;case 1024:{ gra.FillRectangle(new SolidBrush(Color.DarkRed), dian.X, dian.Y, 90, 90); } break;case 2048:{ gra.FillRectangle(new SolidBrush(Color.Red), dian.X, dian.Y, 90, 90); } break;3.2游戏结束界面1)截图如“图-3 结束界面”、“图-4 结束界面”所示图-3 结束界面图-4 结束界面2)结束界面核心功能代码public partial class _2048messageBox : Form{public _2048messageBox(){ InitializeComponent(); }public string a{ get; set; }public string b{ get; set; }private void _2048messageBox_Load(object sender, EventArgs e){ label1.Text = a; textBox1.Text = b; this.TopLevel = true; }public void b_add(string x){ textBox1.AppendText(x); }private void _2048messageBox_MouseClick(object sender, MouseEventArgs e){ this.Close(); }private void _2048messageBox_KeyDown(object sender, KeyEventArgs e){ if (e.KeyCode == Keys.Enter) this.Close(); }private void textBox1_TextChanged(object sender, EventArgs e){ }}3.3新纪录界面1)截图如“图-5新纪录界面”、“图-6新纪录界面”所示图-5新纪录界面图-6新纪录界面2)新纪录界面核心功能代码public partial class _2048messageBox : Form{public _2048messageBox(){ InitializeComponent(); }public string a{ get; set; }public string b{ get; set; }private void _2048messageBox_Load(object sender, EventArgs e){ label1.Text = a; textBox1.Text = b; this.TopLevel = true; }public void b_add(string x){ textBox1.AppendText(x); }private void _2048messageBox_MouseClick(object sender, MouseEventArgs e){ this.Close(); }private void _2048messageBox_KeyDown(object sender,KeyEventArgs e){ if (e.KeyCode == Keys.Enter) this.Close(); }private void textBox1_TextChanged(object sender, EventArgs e){ }}3.4游戏规则开始时棋盘内随机出现两个数字,出现的数字仅可能为2或4,玩家可以选择上下左右四个方向,若棋盘内的数字出现位移或合并,视为有效移动,玩家选择的方向上若有相同的数字则合并,每次有效移动可以同时合并,但不可以连续合并,合并所得的所有新生成数字想加即为该步的有效得分,玩家选择的方向行或列前方有空格则出现位移,每有效移动一步,棋盘的空位(无数字处)随机出现一个数字(依然可能为2或4)。

c语言2048设计思路

c语言2048设计思路

c语言2048设计思路
1. 主要数据结构:
- 定义一个二维数组来存储2048的棋盘,每个格子可以存储一个数字。

- 定义一个结构体或类来表示每个格子的坐标(行、列)。

2. 初始化棋盘:
- 将所有格子的数字初始化为0。

- 随机选择两个格子,将其数字初始化为2或4。

3. 绘制界面:
- 使用控制台或图形库来绘制棋盘的界面,可以在控制台中使用ASCII码来绘制棋盘。

- 每个格子的大小可以根据实际界面设计来确定。

4. 接受用户输入:
- 使用键盘输入来接收用户的方向指令,如"W"表示向上移动,"S"表示向下移动,"A"表示向左移动,"D"表示向右移动。

- 每次接收到方向指令后,执行相应的移动操作。

5. 移动操作:
- 根据用户的方向指令,对棋盘进行相应的移动操作。

- 每次移动操作前,判断是否可以执行移动操作,如判断是否有空格子、判断是否可以合并等。

6. 合并相同数字:
- 在执行移动操作后,需要判断是否有相同数字的格子可以合并。

- 如果可以合并,则将这两个格子合并,并将其数字相加。

7. 生成新数字:
- 在每次移动操作后,需要生成一个新的数字放到空的格子中,以增加游戏的难度。

- 可以通过随机选择一个空格子,并随机生成2或4的数字来实现。

8. 判断游戏是否结束:
- 判断是否所有格子都被填满,并且无相邻格子可以合并,即游戏结束。

9. 记录分数和最高分:
- 在移动操作和合并操作中,根据合并的数字来计算分数,并记录下最高分。

c语言课程设计2048

c语言课程设计2048

c语言课程设计2048一、教学目标本课程的目标是让学生掌握C语言的基本知识,能够运用C语言编写简单的程序。

通过学习2048游戏的设计与实现,使学生了解并掌握C语言的语法、数据结构、算法等基本知识,提高学生的编程能力和逻辑思维能力。

同时,培养学生独立思考、合作学习的精神,增强学生对计算机科学的兴趣和热情。

具体来说,知识目标包括:1.掌握C语言的基本语法和数据类型。

2.了解函数、数组、指针等基本概念。

3.学习常用的数据结构和算法。

4.理解2048游戏的设计原理和实现方法。

技能目标包括:1.能够使用C语言编写简单的程序。

2.学会使用调试工具,能够发现并修复程序错误。

3.能够独立完成2048游戏的编写和调试。

情感态度价值观目标包括:1.培养学生对计算机科学的兴趣和热情。

2.培养学生独立思考、合作学习的精神。

3.培养学生勇于挑战、不断探索的精神。

二、教学内容本课程的教学内容主要包括C语言的基本语法、数据类型、函数、数组、指针等基本概念,以及常用的数据结构和算法。

通过学习2048游戏的设计与实现,使学生能够将所学的知识运用到实际编程中,提高编程能力和逻辑思维能力。

具体的教学大纲如下:1.C语言的基本语法和数据类型。

2.函数、数组、指针等基本概念。

3.常用的数据结构和算法。

4.2048游戏的设计原理和实现方法。

三、教学方法为了提高教学效果,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法、实验法等。

通过多样化的教学方法,激发学生的学习兴趣和主动性。

1.讲授法:用于讲解C语言的基本语法、数据类型、函数、数组、指针等基本概念,以及常用的数据结构和算法。

2.讨论法:通过小组讨论,让学生深入理解2048游戏的设计原理和实现方法。

3.案例分析法:分析经典的编程案例,使学生能够将所学的知识运用到实际编程中。

4.实验法:让学生动手编写和调试程序,提高编程能力和逻辑思维能力。

四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:《C程序设计语言》(K&R)2.参考书:《C Primer Plus》、《C和指针》3.多媒体资料:教学PPT、视频教程4.实验设备:计算机、编程软件(如Visual Studio、Code::Blocks等)以上教学资源将帮助学生更好地学习C语言,掌握2048游戏的设计与实现,提高编程能力和逻辑思维能力。

程序设计报告——控制台游戏2048

程序设计报告——控制台游戏2048
大连理工大学程序设计总结报告
控制台游戏——2048
学生姓名:刘阳
院系班级:电计1203
学号:201281303
联系电话:188-4085-1891
Email:rick@
完成日期:2014年7月1日
一、
设计目标:完成一个控制台小游戏,其中包括游戏、排名、存档和读档等功能。
函数原型19int average()
函数功能:根据数据文件求玩家纪录中的平均水平
入口参数:void
出口参数:void
算法描述:以读的方式打开数据文件,读进相应的数组,调用quntity函数求出文件中数据的个数,计算出平均值,结果直接输出在屏幕上。
下面是int game(int a[4][4],int step,int grade)函数的流程图。
函数原型7int read_rank(int x,int num)
函数功能:读取游戏排名
入口参数:int x,int num
出口参数:x值为1或2,num为数据文件中记录个数
算法描述:通过参数x的控制以读的方式打开相应的数据文件,将排名数据存入相应数组中,再通过gotoxy函数以及for循环打印。
函数原型8int save_record(int x,int a[4][4],int step,int grade);
函数功能:读取游戏存档。
入口参数:int x,int a[4][4],int b[2]
出口参数:x值为1或2,保存游戏数据的二维数组a[4][4],保存步数step和分数grade的数组b[2]。
算法描述:通过参数x的控制以读的方式打开相应的数据文件,将游戏数据信息读取到数组a[4][4]中,将分数等信息读取到b[2]中。
函数原型17int initialization(int a[4][4])

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课程设计一、课程目标知识目标: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,进行程序调试,分析并优化程序性能。

2048游戏设计_课程设计报告

2048游戏设计_课程设计报告

2016-2017学年第一学期《Windows程序设计》课程设计报告题目:2048游戏设计专业:班级:姓名:指导教师:成绩:学院二0一六年十一月十五日目录1、实验要求及目的 (1)2、游戏需求分析及概要设计 (1)2.1需求分析 (1)2.2可行性分析 (1)2.3运行环境 (1)2.4游戏概要设计 (1)3、游戏详细设计 (2)3.1游戏主界面 (2)3.2游戏结束界面 (4)3.3新纪录界面 (6)3.4游戏规则 (8)4、游戏测试 (8)4.1测试过程 (8)4.2测试内容 (8)4.3测试结果 (9)5、小结 (10)6、参考文献 (11)7、附录 (12)1、实验要求及目的本课程设计旨在提高学生的软件编程能力。

本设计将进一步加强学生对面向对象程序设计思想的理解,增强对C#程序语言的灵活运用。

要求学生能实现基本的应用软件,为以后从事相关行业打下软件编程基础。

2、游戏需求分析及概要设计2.1需求分析现代社会对休闲小游戏的需求是:提高游戏的操作可行性,降低游戏的操作难度,降低游戏的上手难度,降低游戏的竞争需求,对使用设备的要求趋于简单化和多样化,游戏界面更加人性化,功能更加贴合使用。

2.2可行性分析1)技术可行性根据游戏设计的要求,可以通过 c#进行源代码的编辑,通过 windows 界面进行用户界面的编辑和优化,结合时间和目前学习水平等各项因素,项目所要求功能和性能完全可以实现。

2)运行可行性游戏基本要求是.netframework4.0 及以上,在大部分的用户设备上可以实现,并且游戏运行对硬件几乎无要求,项目运行可以得到保证。

3)可行性综合分析综合以上两点,项目开发可以得到技术和运行的保证,证明项目可行。

2.3运行环境操作系统:Windows7应用软件:Microsoft Visual Studio 20122.4游戏概要设计图-1 概要设计3、游戏详细设计3.1游戏主界面1)截图如“图-2主界面”所示图-2主界面2)主界面核心功能代码case 0:{ gra.FillRectangle(newSolidBrush(Color.BurlyWood),dian.X,dian.Y,90,90); } break;case 2:{ gra.FillRectangle(newSolidBrush(Color.LightSalmon),dian.X, dian.Y, 90, 90); } break;case 4:{ gra.FillRectangle(new SolidBrush(Color.Peru),dian.X, dian.Y, 90, 90); } break;case 8:{ gra.FillRectangle(newSolidBrush(Color.Chocolate),dian.X, dian.Y, 90, 90); } break;case 16:{ gra.FillRectangle(new SolidBrush(Color.Gray), dian.X, dian.Y, 90, 90); } break;case 32:{ gra.FillRectangle(newSolidBrush(Color.DarkSeaGreen), dian.X, dian.Y, 90, 90); } break;case 64:{ gra.FillRectangle(new SolidBrush(Color.Gold), dian.X, dian.Y,90, 90); } break;case 128:{ gra.FillRectangle(new SolidBrush(Color.HotPink), dian.X, dian.Y, 90, 90); } break;case 256:{ gra.FillRectangle(new SolidBrush(Color.DarkOrange), dian.X, dian.Y, 90, 90); } break;case 512:{ gra.FillRectangle(new SolidBrush(Color.LightPink), dian.X, dian.Y, 90, 90); } break;case 1024:{ gra.FillRectangle(new SolidBrush(Color.DarkRed), dian.X, dian.Y, 90, 90); } break;case 2048:{ gra.FillRectangle(new SolidBrush(Color.Red), dian.X, dian.Y, 90, 90); } break;3.2游戏结束界面1)截图如“图-3 结束界面”、“图-4 结束界面”所示图-3 结束界面图-4 结束界面2)结束界面核心功能代码public partial class _2048messageBox : Form{public _2048messageBox(){ InitializeComponent(); }public string a{ get; set; }public string b{ get; set; }private void _2048messageBox_Load(object sender, EventArgs e){ label1.Text = a; textBox1.Text = b; this.TopLevel = true; }public void b_add(string x){ textBox1.AppendText(x); }private void _2048messageBox_MouseClick(object sender, MouseEventArgs e){ this.Close(); }private void _2048messageBox_KeyDown(object sender, KeyEventArgs e){ if (e.KeyCode == Keys.Enter) this.Close(); }private void textBox1_TextChanged(object sender, EventArgs e){ }}3.3新纪录界面1)截图如“图-5新纪录界面”、“图-6新纪录界面”所示图-5新纪录界面图-6新纪录界面2)新纪录界面核心功能代码public partial class _2048messageBox : Form{public _2048messageBox(){ InitializeComponent(); }public string a{ get; set; }public string b{ get; set; }private void _2048messageBox_Load(object sender, EventArgs e){ label1.Text = a; textBox1.Text = b; this.TopLevel = true; }public void b_add(string x){ textBox1.AppendText(x); }private void _2048messageBox_MouseClick(object sender, MouseEventArgs e){ this.Close(); }private void _2048messageBox_KeyDown(object sender,KeyEventArgs e){ if (e.KeyCode == Keys.Enter) this.Close(); }private void textBox1_TextChanged(object sender, EventArgs e){ }}3.4游戏规则开始时棋盘内随机出现两个数字,出现的数字仅可能为2或4,玩家可以选择上下左右四个方向,若棋盘内的数字出现位移或合并,视为有效移动,玩家选择的方向上若有相同的数字则合并,每次有效移动可以同时合并,但不可以连续合并,合并所得的所有新生成数字想加即为该步的有效得分,玩家选择的方向行或列前方有空格则出现位移,每有效移动一步,棋盘的空位(无数字处)随机出现一个数字(依然可能为2或4)。

C语言大作业报告——2048小游戏程序

C语言大作业报告——2048小游戏程序

《C语言程序设计》实验大作业反思报告系统设计与实现:1.系统功能模块划分对系统进行自顶向下的模块分解,画出系统各个功能模块之间的结构图如下:2.函数功能和外部接口设计本系统总计设计了13个函数,每个函数的功能和接口设计如下表所示:序号函数名函数功能函数参数函数返回值1 read_keyboard 读取键盘输入的变量无key_code2 loop_Game 游戏循环cmd 无3 reset_Game 重置游戏无无4 add_rand_num 添加随机数无随机数5 get_null_count 获取空位置数量无空位置数量n6 check_Game_over 检查游戏是否结束无if_Game_over7 Move_left 左移无If_need_add_num8 Move_right 右移无If_need_add_num9 Move_up 上移无If_need_add_num10 Move_down 下移无If_need_add_num11 clear_screen 清屏无无12 refresh_show 刷新界面无无13 init_Game 初始化游戏无无各个函数之间的调用关系如下所示:3.数据结构结构体数组+指针,链表4.算法递推,查找,文件操作5.程序流程图系统总体流程图如下:实验过程中遇到的问题及解决方法与思路:问题1:开始部分函数体和数据设置较多,导致后面程序的编写过程中出现了许多错误,例如函数名和数据名的大小写等出现错误。

原因:函数名和数据的设计为了追求简洁而无法记住其意义,并且设置过多。

解决方法:在纸上将函数名和数据名都记好,以防后面编写时出现遗忘,此外,应当按照函数名以及数据名的具体作用进行设置,而非随心所欲。

问题2:对于清屏函数clear_screen和初始化函数init的掌握不熟练,导致编写过程中有许多错误出现,编写很不规范。

原因:对于Linux相关知识掌握较少,无法使用相关函数功能。

c2048游戏课课程设计

c2048游戏课课程设计

c2048游戏课课程设计一、教学目标本课程的学习目标包括:知识目标:学生能理解c2048游戏的规则,掌握基本的操作技巧,了解游戏背后的算法和逻辑。

技能目标:学生能够独立完成c2048游戏,具备一定的游戏策略和技巧,能够分析游戏中的问题和挑战。

情感态度价值观目标:学生能够体验游戏的乐趣,培养积极向上的游戏态度,理解通过游戏可以锻炼智力和思维能力。

二、教学内容本课程的教学内容主要包括:1.c2048游戏的基本规则和操作方法。

2.c2048游戏的算法和逻辑分析。

3.c2048游戏的策略和技巧探讨。

4.通过游戏实践,培养学生的思维能力和问题解决能力。

三、教学方法本课程的教学方法包括:1.讲授法:教师讲解c2048游戏的基本规则和操作方法,引导学生理解游戏的基本概念。

2.讨论法:教师引导学生进行游戏策略和技巧的讨论,促进学生之间的交流和合作。

3.案例分析法:教师提供游戏中的具体案例,引导学生分析问题和解决问题,培养学生的思维能力。

4.实验法:学生通过实际操作游戏,掌握游戏的规则和技巧,提高游戏水平。

四、教学资源本课程的教学资源包括:1.教材:c2048游戏教程,用于引导学生学习游戏的基本规则和操作方法。

2.参考书:关于算法和逻辑的书籍,用于深入分析游戏背后的原理。

3.多媒体资料:游戏操作视频和案例分析,用于辅助教学和提供学习资源。

4.实验设备:计算机和游戏软件,用于学生实际操作游戏,锻炼游戏技巧和思维能力。

五、教学评估教学评估是检验学生学习成果的重要手段。

本课程的评估方式包括:1.平时表现:观察学生在课堂上的参与程度、提问回答和小组讨论的表现,评估学生的学习态度和积极性。

2.作业:布置相关的游戏设计和分析作业,评估学生的理解和应用能力。

3.考试:定期进行游戏规则和策略的考试,评估学生的知识掌握和问题解决能力。

评估方式应客观、公正,能够全面反映学生的学习成果。

教师应及时给予反馈,帮助学生改进和提高。

六、教学安排本课程的教学安排如下:1.教学进度:按照课程大纲进行教学,确保覆盖所有的重要知识点。

2048游戏C语言实验报告

2048游戏C语言实验报告

嘉应学院计算机学院实验报告课程名称:C程序设计开课学期:2015—2016学年第1学期班级:计算机1505指导老师:陈广明设计题目:游戏2048第3组:钟瞻宇15111025梁佳151110233学生姓名(学号):房嘉泽151110240陈祺151110249目录一、实验目的和要求 (3)二、实验环境、内容和方法 (3)三、程序设计 (3)四、源代码 (5)五、调试与运行结果 (17)六、总结 (17)一、实验目的和要求(1)使用C语言编写2048这款游戏。

(2)能够正常运行,拥有游戏界面。

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

(4)用户操作方便。

二、实验环境、内容和方法实验内容:1、游戏开始时随机产生两个数值为2/4的方格,其中一个方格置于4个角中的一个位置,另一个方格随机的置于其他位置,其他方格置于0。

2、每次按方向键(w,s,a,d)后,逐行计算移动后的方格值。

每行移动的算法是:先将所有值为0的数移至行首。

能后从行尾开始逐一和前一个数比较,如果相等则合并这2个格子。

3、每合并一次格子,将其值累计到游戏总分中。

4、一次移动结束后,在所有值为0的方格中随机的分配一个2/4的值。

5、所有方格值不为0且上下、左右相邻的方格都不相等,则游戏结束。

6、2出现的概率为70%,4出现的概率为30%。

实验方法:通过上机操作完成各内容。

实验环境:实验用PC机一台,使用操作系统为Windows 7/ Windows 8/ Windows10,安装vc++或v2008等编译软件三、程序设计四、源代码#include<stdio.h>#include<stdlib.h>#include<time.h>#include<conio.h>#define M 2048void up(); //上操作。

void down(); //下操作。

void right(); //右操作。

2048小游戏c语言编程设计

2048小游戏c语言编程设计

#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;}。

c2048课程设计

c2048课程设计

c 2048课程设计一、教学目标本课程的教学目标是让学生掌握C语言编程的基础知识,学会使用C语言进行简单的程序设计。

具体包括以下几点:1.知识目标:(1)了解C语言的基本语法和编程思想。

(2)掌握变量、常量的声明和使用。

(3)学会使用条件语句和循环语句进行程序控制。

(4)熟悉函数的定义和调用。

(5)了解指针的概念和应用。

2.技能目标:(1)能够使用C语言编写简单的程序,解决实际问题。

(2)具备一定的代码阅读和调试能力。

(3)学会使用调试工具进行程序调试。

3.情感态度价值观目标:(1)培养学生对编程的兴趣和热情。

(2)培养学生解决问题的能力和创新精神。

(3)培养学生团队合作和自主学习的意识。

二、教学内容本课程的教学内容主要包括以下几个部分:1.C语言基本语法和编程思想。

2.变量、常量的声明和使用。

3.条件语句和循环语句的应用。

4.函数的定义和调用。

5.指针的概念和应用。

6.综合案例分析。

三、教学方法为了达到本课程的教学目标,我们将采用以下几种教学方法:1.讲授法:讲解C语言的基本语法和编程思想,让学生掌握基础知识。

2.案例分析法:通过分析实际案例,让学生学会使用C语言解决实际问题。

3.实验法:让学生动手编写代码,培养实际编程能力。

4.小组讨论法:分组讨论问题,培养学生的团队合作和自主学习能力。

四、教学资源为了支持本课程的教学内容和教学方法,我们将准备以下教学资源:1.教材:《C语言程序设计》。

2.参考书:《C Primer Plus》、《C和指针》。

3.多媒体资料:教学PPT、视频教程。

4.实验设备:计算机、编程环境。

5.在线资源:编程、论坛、开源项目。

五、教学评估本课程的教学评估将采用多元化的评价方式,全面客观地评价学生的学习成果。

评估方式包括:1.平时表现:通过课堂参与、提问、讨论等方式,评估学生的学习态度和积极性。

2.作业:布置课后编程作业,评估学生的编程能力和应用能力。

3.考试:定期进行笔试和机试,评估学生对知识的掌握程度和实际编程能力。

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

东华理工大学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[] = "您上次输入的指令无法识别,请重新输入。

";struct board{int place[4][4];long int stepn;long int num; //存储游戏分数long int time;int dtk; //direction key 记录方向键,及操作方向int over;int zeronum;};//该函数为游戏运行函数,当只是玩游戏的时候。

进入该函数,游戏控制函数。

int main(){//place数组为棋盘,其中为零代表空,-1代表不能合并的牌,其他2的倍数值为本身含义,初始化为全0。

struct board board1, board_backup;int newgame(struct board *, int),show(struct board *),operate(struct board *);char str[100] = "首次运行游戏"; //用于记录系统返回给用户的信息,例如:上一步执行向左合并,按键有误等newgame(&board1, 0); //调用函数为新局初始化,第二个参数为初始化方式show(&board1);printf("\n%s\n\n请从键盘上单击方向键,指定下一步操作(ESC键退出游戏)……\n", str);do{switch (_getch()){case 224:{switch (board1.dtk = _getch()){case LEFT: strcpy_s(str, sizeof(str), "您上次输入的方向键为:←,已执行左向合并。

"); board_backup = board1; operate(&board1); break;case UP: strcpy_s(str, sizeof(str), "您上次输入的方向键为:↑,已执行上向合并。

"); board_backup = board1; operate(&board1); break;case RIGHT: strcpy_s(str, sizeof(str), "您上次输入的方向键为:→,已执行右向合并。

"); board_backup = board1; operate(&board1); break;case DOWN: strcpy_s(str, sizeof(str), "您上次输入的方向键为:↓,已执行下向合并。

"); board_backup = board1; operate(&board1); break;default: strcpy_s(str, sizeof(str), error_str);}}break;case 27: exit(27);default: strcpy_s(str, sizeof(str), error_str);}system("cls");show(&board1);printf("\n%s\n\n请从键盘上单击方向键,指定下一步操作(ESC键退出游戏)……\n", str);if (board1.over){printf("\n游戏结束,是否重新开始?(y重新开始/n或ECS退出/其他键无效)");while (1){str[99] = _getch();if (str[99] == 'y'){newgame(&board1, 0);show(&board1);break;}else if (str[99] == 'c'){change(&board1, &board_backup);break;}else if (str[99] == 'n' || str[99] == 27)break;}}} while (!board1.over);printf("\n按任意键退出……");_getch();return 0;}//该函数为主要打印函数,包括棋盘的打印,分数,等信息int show(struct board * pboard){int i, j, x, len,numlen(int);printf("游戏2048——游戏运行时间:%ld S\n", time(NULL) -(*pboard).time);printf("游戏分数:%ld", (*pboard).num);printf(" 已执行步骤数:%ld\n", (*pboard).stepn);//开始绘制棋盘printf("╔═══╦═══╦═══╦═══╗\n║║║║║\n");for (i = 0; i < 7; ++i){if (i % 2 == 0){printf("║");for (j = 0; j < 8; ++j){if (j % 2 == 0){if ((*pboard).place[i / 2][j / 2] == 0)printf(" "); //如果值为0,输入六个空格else //打印值时。

调用numlen判断值的位数,控制数值前后的空格数量,最长为6,若为奇数,前面空格比后面多一个。

{len = numlen((*pboard).place[i / 2][j / 2]);for (x = 0; x < (6 - len + 1) / 2; ++x)printf(" ");printf("%d", (*pboard).place[i / 2][j / 2]);for (x = 0; x < (6 - len) / 2; ++x)printf(" ");}}elseprintf("║");}}else{printf("║║║║║\n╠═══╬═══╬═══╬═══╣\n║║║║║");}printf("\n");}printf("║║║║║\n╚═══╩═══╩═══╩═══╝\n");return 0;}//这是show函数的附属函数,用于求一个整数长度。

int numlen(int a){int i, n = 1;for (i = 1; i < 11; ++i){n *= 10;if (a == a%n)return i;}return 0;}//开始新的游戏,将棋盘和数据初始化,或者载入棋盘,第二个参数决定初始化方案,默认0int newgame(struct board * pboard, int project){int i, j, t;(*pboard).stepn = 0;(*pboard).num = 0;(*pboard).time = (long int)time(NULL); //取当前时间为开始时间(*pboard).dtk = 0;(*pboard).over = 0;(*pboard).zeronum = 14;for (i = 0; i < 4; ++i)for (j = 0; j < 4; ++j)(*pboard).place[i][j] = 0;do{i = (int)(rand() / 32768.0 * 4);j = (int)(rand() / 32768.0 * 4);} while ((*pboard).place[i][j]);t = 2 * ((int)(rand() / 32768.0 * 2) + 1);(*pboard).place[i][j] = t;do{i = (int)(rand() / 32768.0 * 4);j = (int)(rand() / 32768.0 * 4);} while ((*pboard).place[i][j]);t = 2 * ((int)(rand() / 32768.0 * 2) + 1);(*pboard).place[i][j] = t;return 0;}//主要操作函数,调用该函数,将执行结构体中对应按键值的方向的操作,并增加分数和操作次数。

相关文档
最新文档