2048游戏C语言实验报告
Android综合程序设计(2048游戏)

山东轻工业学院实验报告成绩实验项目名称实验七、 Android综合程序设计(2048游戏)一、实验目的通过进行一个较为完整的Android应用程序开发,学习综合运用课程所学的相关Android开发知识的,进行移动软件设计的相关能力。
在模拟软件开发的过程中,掌握从问题发现、系统分析、系统规划到代码实现中每一步所要做的工作。
掌握实际软件开发的过程和方法。
二、主要仪器设备、试剂或材料微型计算机;JDK、eclipse、ADT、Android SDK等软件包三、实验内容运用Android制作一个简单的2048小游戏。
2048游戏的制作属于电子游戏中的益智类小游戏,它做到了娱乐性、趣味性、教育性相统一。
益智类的游戏即是需要去开动大脑去思考从而获得游戏的胜利。
简单的益智类游戏可以使玩家在娱乐中不断的开发大脑。
这样一来就实现了在娱乐中学习四、程序设计思路、运行及及结果分析设计思路:(1)初始化进入游戏,初始化4*4表格,并随机产生两个数字(2或者4);二维数组this.tables 表格循环存入数据;random1, random2 ,random11, random22四个随机数可以确定两个2的xy位置;方法newNumber里面,根据位置i,j和级别num可以确定一个新的数字;创建背景cell和cell上面的数字标签cellLabel;并根据num确定是否显示cellLabel;最后给cell关联一个data数据;特别说明这里的number:num不是精灵上面的数字而是精灵的级别,比如number=11 则数字是1024。
(2)游戏结束的判断每次发生卡片移动,都要检查游戏还能否继续,是否已经结束。
使用函数CheckComplete()完成游戏是否失败的检查。
(3)游戏的计分在卡片的每一次移动的时候判断是否有两个相同数字进行相加,凡是有相见的两个数字其相加所得的和需要存入计分中,其中如果游戏获得了最高分要对最高分进行保存。
基于C + + 的2048游戏设计

实习论文(本科)学院数学与统计学院专业统计学年级2013级姓名论文题目基于C + + 的2048游戏设计指导教师职称讲师成绩2016年10月16日目录摘要 (1)关键词 (1)Abstract (1)Key words (1)前言 (1)1 实习前的准备 (1)2 实习目的 (2)3 实习任务 (2)4 实习内容 (2)4.1 2048游戏简介 (2)4.2 2048模块需求分析 (2)4.3 UI界面的规划设计 (3)4.4 头文件的需求分析 (3)4.5 随机数的生成 (4)4.6 图片资源的导入和加载 (5)4.7 主体算法的分析和实现 (7)4.8 游戏结束的判断 (9)4.9 游戏最终运行成果 (12)5 个人总结 (12)参考文献 (12)基于C + + 的2048游戏设计学生姓名:学号:学院:数学与统计学院专业:统计学指导教师:职称:讲师摘要:专业实习,是教学计划中的一门重要的必修课和综合实践课程,是培养学生的专业素质和实际能力的重要实践环节。
通过此次的C + + 实习,掌握了程序设计的基本理论与方法,能够运用基本代码进行简单的程序设计,运行基本的游戏程序。
关键词:C + + ;设计;程序The Game Design of 2048 Based on C + +Abstract:The important required course in the teaching plan and comprehensive practice curriculum, professional internships, is to cultivate the students' professional quality and practical ability of the important link of practice. Through the C + + practice, we grasp the basic theory and method of program design, be able to use basic code to build simple program and run it.Key words:C + + ;Design;Program前言这次实习是我们毕业前的一次实践性实习。
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工程实训报告

工程实践训练项目名称物联网应用专业班级自动化1301姓名黄奎伦学号201301020129指导教师汪超,谢一峰(粤嵌)2016年12月24日目录第1章实训目的与任务 (1)1.1 工程实践训练目的 (1)1.2 实训项目要求 (1)第2章知识点总结 (1)2.1 嵌入式系统 (1)2.2 Linux操作系统介绍 (2)2.3 交叉开发 (2)2.4 SecureCRT的设置与连接 (2)2.5 C程序的交叉编译及运行 (3)2.6 函数的定义 (3)2.7 Linux文件IO函数 (4)2.8 LCD显示原理 (5)第3章2048游戏的设计流程图 (5)第4章相关的c语言游戏程序 (6)第5章2048游戏展示 (39)第6章游戏测试 (40)6.1 测试的意义 (40)6.2 测试过程 (41)心得体会 (22)电气信息学院工程实践训练评分标准 (23)第1章实训目的与任务1.1 工程实践训练目的本次自动化工程实践训练第一部分是实训装置的使用说明,讲述了系统的组成、硬件的特点和技术指标、软件的使用介绍。
第二部分是实训项目部分,叙述了实训的原理、步骤及注意事项等。
通过对实训装置各个仪表的原理、工作情况及实验原理、软硬件的详细介绍,通过实际操作让我们对复杂过程控制系统实训装置有一个充分的认识,又有益于我们对工业生产现场控制系统的了解。
培养学生的工程实践能力,进一步提高学生分析和解决实际问题的能力。
1.2 实训项目要求轻松的益智游戏对缓解生活压力调节情绪具有重要的意义。
《2048》这款小游戏是一款流行的数字游戏,游戏设计初衷是一款益智类的游戏,其特点在于轻松,简单,有趣。
因此,开发要求做到各项功能要完备、操作要简便、易学易用。
所以本周的工程实训要求自己设计一个2048小游戏,以及学习关于嵌入式的基本入门知识。
第2章知识点总结2.1 嵌入式系统嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁减,以适应应用系统对功能、可靠性、成本、体积和功耗等有严格要求的专用计算机系统。
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小游戏(控制台版的)#include <iostream>#include <windows.h>#include <ctime>using namespace std;int const ROW = 4;int const COL = 4;int game[ROW][COL] = {0};//上下左右int const UP = 1;int const DOWN = 2;int const LEFT = 3;int const RIGHT = 4;//游戏所处的状态int const GAME_OVER = 1;int const GAME_WIN = 2;int const GAME_CONTINUE = 3;enum GameNum{Game_2 = 2,Game_4 = 4,Game_8 = 8,Game_16 = 16,Game_32 = 32,Game_64 = 64,Game_128 = 128,Game_256 = 256,Game_512 = 512,Game_1024 = 1024,Game_2048 = 2048,};//打印所得的数组void Print(){system("cls");cout << "***************** 2048 控制台版******************" << endl;cout << "***************** By Tanzf (Intern) ******************" << endl << endl;for (int i = 0; i < ROW; ++i){cout << "---------------------------------"<< endl;for (int j = 0; j < COL; ++j){if (game[i][j] == 0){cout <<"| \t";}else{cout <<"| " << game[i][j] << "\t";}}cout << "|" << endl;}cout << "---------------------------------"<< endl;}bool CreateNumber(){int x = -1;int y = -1;int times = 0;int maxTimes = ROW * COL;//三分之二的概率生成2,三分之一的概率生成4 int whitch = rand() % 3;do{x = rand() % ROW;y = rand() % COL;++times;} while (game[x][y] != 0 && times <= maxTimes);//说明格子已经满了if(times >= maxTimes){return false;}else{GameNum num;if(whitch == 0){num = Game_4;}else if(whitch){num = Game_2;}game[x][y] = num;}return true;}void Process(int direction){switch (direction){case UP://最上面一行不动for(int row = 1; row < ROW; ++row){for(int crow = row; crow >= 1; --crow){for(int col = 0; col < COL; ++col){//上一个格子为空if(game[crow-1][col] == 0){game[crow-1][col] = game[crow][col];game[crow][col] = 0;}else{//合并if(game[crow-1][col] == game[crow][col]){game[crow - 1][col] *= 2;game[crow][col] = 0;}}}}}break;case DOWN://最下面一行不动for(int row = ROW - 2; row >= 0; --row){for(int crow = row; crow < ROW - 1; ++crow){for(int col = 0; col < COL; ++col){//上一个格子为空if(game[crow + 1][col] == 0){game[crow + 1][col] = game[crow][col];game[crow][col] = 0;}else{//合并if(game[crow + 1][col] == game[crow][col]){game[crow + 1][col] *= 2;game[crow][col] = 0;}}}}}break;case LEFT://最左边一列不动for(int col = 1; col < COL; ++col){for(int ccol = col; ccol >= 1; --ccol){for(int row = 0; row < ROW; ++row){//上一个格子为空if(game[row][ccol-1] == 0){game[row][ccol - 1] = game[row][ccol];game[row][ccol] = 0;}else{//合并if(game[row][ccol - 1] == game[row][ccol]){game[row][ccol - 1] *= 2;game[row][ccol] = 0;}}}}}break;case RIGHT://最右边一列不动for(int col = COL - 2; col >= 0; --col){for(int ccol = col; ccol <= COL - 2; ++ccol){for(int row = 0; row < ROW; ++row){//上一个格子为空if(game[row][ccol + 1] == 0){game[row][ccol + 1] = game[row][ccol];game[row][ccol] = 0;}else{//合并if(game[row][ccol + 1] == game[row][ccol]){game[row][ccol + 1] *= 2;game[row][ccol] = 0;}}}}}break;}}//处理输入输出,返回上下左右int Input(){//读取上下左右四个方向键int upArrow = 0;int downArrow = 0;int leftArrow = 0;int rightArrow = 0;int direction = 0;while (true){upArrow = GetAsyncKeyState(VK_UP);downArrow = GetAsyncKeyState(VK_DOWN);leftArrow = GetAsyncKeyState(VK_LEFT);rightArrow = GetAsyncKeyState(VK_RIGHT);if(upArrow){direction = UP;break;}else if(downArrow){direction = DOWN;break;}else if(leftArrow){direction = LEFT;break;}else if(rightArrow){direction = RIGHT;break;}Sleep(100);}return direction;}//判断游戏状态int Judge(){//赢得游戏for(int i = 0; i < ROW; ++i){for(int j = 0; j < COL; ++j){if(game[i][j] == 2048){return GAME_WIN;break;}}}//横向检查for(int i = 0 ; i < ROW; ++i){for(int j = 0; j < COL - 1; ++j){if(!game[i][j] || (game[i][j] == game[i][j+1])){return GAME_CONTINUE;break;}}}//纵向检查for(int j = 0; j< COL; ++j){for(int i = 0; i < ROW -1; ++i){if(!game[i][j] || (game[i][j] == game[i+1][j])){return GAME_CONTINUE;break;}}}//不符合上述两种状况,游戏结束return GAME_OVER;}int main(){//设置一个随机数种子srand((unsigned int)time(0));CreateNumber();CreateNumber();Print();int direction = 0;int gameState = -1;while(true){direction = Input();gameState = Judge();if(direction && gameState == GAME_CONTINUE){Process(direction);CreateNumber();Print();Sleep(100);}else if(gameState == GAME_WIN){Print();cout << "You Win!" << endl;break;}else if(gameState == GAME_OVER){Print();cout <<"You lose!" << endl;break;}}return 0;}。
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游戏的设计与实现,提高编程能力和逻辑思维能力。
c课程设计2048
c课程设计2048一、教学目标本课程的教学目标是使学生掌握2048游戏的规则和解法,培养学生逻辑思维能力和策略规划能力。
具体包括以下三个方面的目标:1.知识目标:学生能够理解2048游戏的基本规则,掌握游戏中的数字合并原理,了解游戏的发展历程和变种。
2.技能目标:学生能够熟练操作游戏,实现数字的合并,提高自己的游戏得分。
同时,学生能够运用逻辑思维和策略规划,分析游戏中的问题和挑战,找到解决问题的有效方法。
3.情感态度价值观目标:学生在游戏中培养团队合作精神,学会分享和交流,增强自信心和自我认知。
二、教学内容本课程的教学内容主要包括2048游戏的基本规则、游戏解法、游戏发展历程和变种等方面。
具体安排如下:1.第一课时:介绍2048游戏的基本规则,让学生熟悉游戏界面和操作方法。
2.第二课时:讲解游戏中的数字合并原理,引导学生掌握游戏技巧。
3.第三课时:回顾2048游戏的发展历程,使学生了解游戏的起源和演变。
4.第四课时:介绍2048游戏的变种,拓展学生的视野。
5.第五课时:学生进行游戏实践,提高学生的操作能力和策略规划能力。
6.第六课时:总结课程内容,对学生进行游戏技巧的测试和评价。
三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式进行教学。
具体包括:1.讲授法:教师讲解2048游戏的基本规则和解法,让学生系统地了解游戏知识。
2.讨论法:学生进行小组讨论,分享游戏心得和策略,培养学生的团队合作精神。
3.案例分析法:分析游戏中的具体问题和挑战,引导学生运用逻辑思维和策略规划解决问题。
4.实验法:让学生亲自动手操作游戏,实践游戏解法,提高操作能力。
四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:2048游戏指南,为学生提供系统的游戏知识。
2.参考书:介绍2048游戏的历史和发展,拓展学生的知识面。
3.多媒体资料:制作课件和教学视频,生动形象地展示游戏规则和解法。
4.实验设备:提供电脑或手机等设备,让学生进行游戏实践。
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语句。
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)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2048游戏C语言实验报告 成绩评定 教师签名 评定日期
嘉应学院 计算机学院 实验报告
课程名称: C程序设计 开课学期: 2015—2016学年第1学期 班 级: 计算机1505 指导老师: 陈广明 设计题目: 游戏2048
学生姓名(学号): 第3组:钟瞻宇梁佳151110233房嘉泽151110240陈祺151110249 2048游戏C语言实验报告 目 录 一、实验目的和要求 .................................................................................................................................................. 3二、实验环境、内容和方法 ...................................................................................................................................... 3三、程序设计 .............................................................................................................................................................. 3四、源代码 .................................................................................................................................................................. 3五、调试与运行结果 .................................................................................................................................................. 4六、总结 ...................................................................................................................................................................... 42048游戏C语言实验报告 一、实验目的和要求 (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等编译软件
三、程序设计 2048游戏C语言实验报告 2048游戏C语言实验报告 Y
Y N N
开始 显示4*4的游戏方格窗口,并随机产生2个方块。
键盘(w,s,a,d)操作上下左右方向
根据操作方向所有方块在4*4格子里的范围向一边靠拢 靠拢的方向是否有两个相邻的值相等? 合并相加为一个方块,所有
方块再往原来的方向靠拢。
方块的格子是否满格或有方块的值为2048?
随机产生一个方块。 刷新4*4窗口,重新显示当前方块内容。 2048游戏C语言实验报告 Y
四、源代码 #include #include #include #include #define M 2048 void up(); //上操作。 void down(); //下操作。 void right(); //右操作。 void left(); //左操作。 void play(); //操作函数。 void random(); //随机函数。 void integral(int x);//积分函数。
游戏结束 输出游戏结束。 2048游戏C语言实验报告 void all_printf(); //输出图像函数。 int A[4][4]={0}; int C=0; //得分的最终数值。 void main() { printf(" 游戏规则很简单:\n"); printf(" 开始时棋盘内随机出现两个数字,出现的数字仅可能为2或4.\n");
printf(" 玩家可以选择上(w)下(s)左(a)右(d)四个方向,若棋盘内的数字出现位移或合并,视为有效移动.\n");
printf(" 若有相同的数字则合并,每次有效移动可以同时合并,但不可以连续合并.\n");
printf(" 合并所得的所有新生成数字想加即为该步的有效得分.\n"); printf(" 玩家选择的方向行或列前方有空格则出现位移.\n"); printf(" 每有效移动一步,棋盘的空位(无数字处)随机出现一个数字(依然可能为2或4).\n");
printf(" 棋盘被数字填满,无法进行有效移动,判负,游戏结束.\n"); printf(" 棋盘上出现2048,判胜,游戏结束"); printf("\n\n\n"); printf(" \t\t\t按回车开始游戏.\n"); getchar(\n); system("cls"); 2048游戏C语言实验报告 system("color 70"); random(); random(); all_printf(); int flag=1,i,j; char judge; for(;flag==1;) { play(); for(i=0,flag=0;i<=3;i++) { for(j=0;j<=3;j++) if(A[i][j]==0&&(flag==0||flag==1))flag=1; else if(A[i][j]==M)flag=2; } if(flag==0) { system("color c7"); printf("\n\t\t\t任 务 失 败 !你总共获得%d分!\n",C); } 2048游戏C语言实验报告 else if(flag==2)printf("\n\t\t\t恭 喜 你 获 得 胜 利 !你总共获得%d分!\n",C);
if(flag==0||flag==2) { printf("是否重新开始?(y or n):"); judge=getch(); if(judge=='y') { system("cls"); C=0; for(i=0;i<=3;i++) for(j=0;j<=3;j++) A[i][j]=0; random(); random(); all_printf(); flag=1; system("color 70"); } else break; } 2048游戏C语言实验报告 else {
random(); system("cls"); all_printf(); printf("\n"); printf("\t分数为:%6d\t\t",C); } } } void play() /* 操作函数 */
{ char direction; direction=getch(); switch(direction) { case 'w':up();break; case 's':down();break; case 'a':left();break; 2048游戏C语言实验报告 case 'd':right();break; default: printf("输入错误!\n"); } } void up() { int a[4][4]={0},i,j,m; for(j=0;j<=3;j++) for(i=0,m=0;i<=3;i++) if(A[i][j]==0)continue; else a[m++][j]=A[i][j];//A[i][j]的有效值赋给a[i][j],所有有效值向上靠拢。
for(i=0;i<=3;i++) for(j=0;j<=3;j++) A[i][j]=0; //对整个A数组赋0。 for(j=0;j<=3;j++) for(i=0,m=0;i<=3;i++) { if(i==3&&a[i][j]!=0)A[m][j]=a[i][j]; else if(a[i][j]==0)continue; else if(a[i][j]==a[i+1][j])