我的改进版2048(1)


假设有谁想要这个软件的话,在评论中留一个邮箱吧。)

前几天好几次看到有朋友晒出玩2048刷高分的截图。我就想我能不能也做一个2048呢?细致想了想2048游戏的规律,发现事实上逻辑上非常easy,也不用研究什么算法,于是我立即认为我能够非常快写出来。当天下午我就用了四个小时完毕了2048的基本功能。几天后认为不满足,于是给我的2048加了存档、读档和后退一步的功能,这样就更好刷分了呢!

使用语言:C#; 平台:Visual Studio 2012 Win Form。

怎样完毕2048的基本功能呢?2048在每一次操作后16个方格的数字就有可能发生变化,所以在我的程序里用一个4乘4的二维数组来存这16个值,0表示没有数字。

每一次操作直接改变数组的值。然后再把数组的值填到16个方格中。

首先来看程序中几个全局的变量:

public int[,] matrixValue = new int[4, 4];//相应16个方格的数字,0表示没有数字public bool isThereChanged = false;//表示每一次按键后是否发生改变public int score = 0;//此次游戏的分数public int maxScore = 0;//记录最高分,用于推断是否破纪录public List<storeRecord> dataStoreRecord = new List<storeRecord>();//存储全部存档public List<int[,]> history = new List<int[,]>();//存近期10步操作
如今想一下,玩2048的时候往一个方向滑动它是怎么改变16个方格的数字的。我把这个过程分解成三个步骤,相应程序中的三个函数。

我认为在软件开发过程中,这样的模块化设计的思想是非常重要的。

下面是这三个函数(三个步骤):

public void addSameNumber(string command)//first step往指定方向叠加同样数字的相邻两格
public void moveToEdge(string command)//Second step将全部有数字的格子往指定方向靠边移动
public void addAnNumber()//Third step在没有数字的格子中随机选择一个加入数字
       事实上凝视上已经说明了其目的。第一个函数会在指定方向上叠加相邻两个同样的数字,相邻的意思是中间没有非0的数字,也就是有可能两个同样数字中间两个空格。这样的情况下也要相机;第二个函数是在实现了同样数字的叠加之后把全部数字往一个方向挪动;第三个函数实现的是在一个操作过后16个方格状态有改变的时候随机给空格填入一个数字。

第一个函数:(仅仅贴出向上移动的代码)

public void addSameNumber(string command)//first step往指定方向叠加同样数字的相邻两格{if (command == "up"){for (int col = 0; col < 4; col++){int firstOfSamePair = -1;int previousIndex = -1;for (int row = 0; row < 4; row++){if (matrixValue[row, col] != 0){if (matrixValue[row, col] == firstOfSamePair){score += matrixValue[row, col] * 2;changeYourScoreHandle();//刷新你的分数matrixValue[previousIndex, col] *= 2;matrixValue[row, col] = 0;firstOfSamePair = -1;previousIndex = -1;isThereChanged = true;}else{firstOfSamePair = matrixValue[row, col];previousIndex = row;}}}}}//if
第二个函数:

public void moveToEdge(string command)//Second step将全部有数字的格子往指定方向靠边移动{if (command == "up"){for (int col = 0; col < 4; col++){int index = 0;for (int row = 0; row < 4; row++){if (matrixValue[row, col] != 0){int temp = matrixValue[row, col];matrixValue[row, col] = matrixValue[index, col];matrixValue[index, col] = temp;if (index != row)isThereChanged = true;index++;}}}}
第三个函数:

public void addAnNumber()//Third step在没有数字的格子中随机选择一个加入数字{int emptyCount = 0;for(int i = 0; i < 4; i++){for(int j = 0; j < 4; j++){if(matrixValue[i,j] == 0)emptyCount++;}}Random rand = new Random();int temp = rand.Next(emptyCount);emptyCount = 0;for (int i = 0; i < 4; i++){for (int j = 0; j < 4; j++){if (matrixValue[i, j] == 0){if (emptyCount == temp)randomAddNumber(i, j);//往该位置加入数字emptyCount++;}}}}
其它的请看下篇文章《我的改进版2048(2)》


 


转载于:https://www.cnblogs.com/liguangsunls/p/7244789.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2020年市场最缺什么_2020年聚合氯化铝市场评述

2020年聚合氯化铝市场评述一、行情概述&#xff1a;今年聚合氯化铝价格整体呈下滑趋势&#xff0c;接近年底价格才有小幅反弹。但不同时期价格有小幅起伏&#xff0c;主要受疫情影响&#xff0c;在下游需求不佳的影响下价格出现下滑。1月受疫情影响&#xff0c;前期停产企业短期…

通过反射来将一个类的内容转换到另外一个类里

主函数&#xff1a; import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.serializer.ValueFilter;import com.google.common.base.Preconditions; import java.lang.reflect.Field;import java.lang.reflect.Modifier; public class leijun {public static void ma…

开发辅助 | 阿里图标库iconfont入门使用

目前大多数的互联网公司&#xff0c;前端开发和UI设计师配合中&#xff0c;针对设计师给图的效果图&#xff0c;前端开发工程师不再像往常一样对于细小图标进行切图&#xff0c;取而代之的是引用阿里图标库&#xff08;http://iconfont.cn/&#xff09;&#xff1b;简单的临时开…

计量经济学建模_一分钟看完计量经济学

建模是计量的灵魂&#xff0c;所以就从建模开始。一、建模步骤建模步骤&#xff1a;A&#xff0c;理论模型的设计: a&#xff0c;选择变量b&#xff0c;确定变量关系c&#xff0c;拟定参数范围B&#xff0c;样本数据的收集: a&#xff0c;数据的类型b&#xff0c;数据的质量C&a…

制图折断线_【机械制图】机械设计中的尺寸标注,看懂复杂机械图纸!

专注于机械行业、专业、职业信息分享服务于制造业百万工程师推荐阅读【机械制图】画图这么久&#xff0c;线型都没搞懂&#xff1f;【机械制图】机械图纸知识解析&#xff0c;这个总结溜溜的【机械制图】机械图纸尺寸标注规则&#xff0c;通过动图复习一下&#xff01;知名机械…

CCS3的过渡、变换、动画以及响应式布局、弹性布局

CSS3 过渡 、变换、动画 在没有CSS3之前&#xff0c;如果页面上需要一些动画效果&#xff0c;要么你自己编写 JavaScript&#xff0c;要么使用 JavaScript 框架(如 jQuery)来提高效率。 但是CSS3出来之后&#xff0c;有能力做一些如平滑过渡(比如在鼠标悬停时)和在屏幕上移动元…

BZOJ2659: [Beijing wc2012]算不出的算式

2659: [Beijing wc2012]算不出的算式 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1489 Solved: 891[Submit][Status][Discuss]Description 算不出的算式 背景&#xff1a; 曾经有一个老掉牙的游戏放在我面前&#xff0c;我没有珍惜。直到这个游戏停产才追悔莫及。人世间…

go 修改结构体方法_「GCTT 出品」Go 系列教程——26. 结构体取代类

Go语言中文网&#xff0c;致力于每日分享编码、开源等知识&#xff0c;欢迎关注我&#xff0c;会有意想不到的收获&#xff01;Go 支持面向对象吗&#xff1f;Go 并不是完全面向对象的编程语言。Go 官网的 FAQ 回答了 Go 是否是面向对象语言&#xff0c;摘录如下。可以说是&…

分组后分页_SQL(约束、视图、分页、序列、索引、同义词、创建用户,为用户授权、执行计划的使用 数据的导入导出)...

学习主题&#xff1a;SQL学习目标&#xff1a;掌握约束掌握视图修改表名与删除表删除表中的列语句的语法结构是什么&#xff1f;答&#xff1a;delete 表名from table where ;删除表中的列语句的语法结构是什么&#xff1f;答&#xff1a;delete 表名from table where ;截断表的…

第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息...

第三百三十四节&#xff0c;web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻&#xff0c;爬取Ajax动态生成的信息 crapy爬取百度新闻&#xff0c;爬取Ajax动态生成的信息&#xff0c;抓取百度新闻首页的新闻rul地址 有多网站&#xff0c;当你浏览器访问时看到的信息&#xf…

20170117小测

今天再次迎来了我们的例行考试。 T1&#xff1a; 首先我们考虑那些点是可以共存的&#xff0c;我们可以枚举一个质数做他们的gcd&#xff0c;然后把这些点放在一张图里求直径。所以我们要做的就是把这些点的值分解质因数&#xff0c;对每个质因数挂一个链&#xff0c;代表有那些…

iOS中Safari浏览器select下拉列表文字太长被截断的处理方法

网页中的select下拉列表&#xff0c;文字太长的话在iOS的Safari浏览器里会被自动截断&#xff0c;显示成下面这种&#xff1a; 安卓版的浏览器则没有这个问题。 如何让下拉列表中的文字在iOS的Safari浏览器里显示完整呢&#xff1f;答案是使用<optgroup></optgroup>…

Servlet 开发

1. Servlet &#xff08;很久远的东西&#xff0c;但是现在学习原理&#xff09; html css js 前端页面&#xff08;静态的&#xff09; form action ".html" Servlet 允许将action属性设置为映射&#xff0c;通过映射找到相关的Servlet class 进行数据的处理。…

CentOS 7 Flannel的安装与配置

1. 安装前的准备 etcd 3.2.9 Docker 17.12.0-ce 三台机器10.100.97.236, 10.100.97.92, 10.100.97.81 etcd不同版本之间的差别还是挺大的&#xff0c;使用V3版本跟Flannel整合起来会有坑&#xff0c;下文详解。 2. 安装 sudo yum install -y flannel 安装后&#xff0c;版本是0…

给Ambari集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解)...

不多说&#xff0c;直接上干货&#xff01; Impala和Hive的关系&#xff08;详解&#xff09; 扩展博客 给Clouderamanager集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤&#xff08;图文详解&#xff09; 参考 hortonworks ambari集成impala ambari hdp 集成 imp…

html中常见的小问题(1)

问题&#xff1a;自适应高度的块级元素内添加图片后&#xff0c;其高度会比图片高度多出一块 简单代码如下&#xff1a; <!doctype html> <html><head><style>.box{width:533px;margin:100px auto;border:1px solid red;}</style></head>…

JmeterAnt构建自动化测试平台

一、jmeter jmeter下载地址为&#xff1a;http://jmeter.apache.org/download_jmeter.cgi 下载完成后&#xff0c;解压文件&#xff0c; 加压后&#xff0c;到biin目录下&#xff0c;点击jmeter.bat启动jmeter(如果是linux环境&#xff0c;给jmeter.sh可执行的权限&#xff0c;…

input复选框checkbox默认样式纯css修改

修改之前的样式 修改之后的样式 html <input type"checkbox" name"btn" id"btn1"><label for"btn1">按钮1</label> css input[type"checkbox"]{width:20px;height:20px;display: inline-block;text-al…

c++word书签_「职场必备」干货!WORD办公软件快捷键,小编整理拿走不谢

小编工作时的照片&#xff0c;不上镜CtrlShiftSpacebar创建不间断空格Ctrl -(连字符)创建不间断连字符CtrlB使字符变为粗体CtrlI使字符变为斜体CtrlU为字符添加下划线CtrlShift缩小字号CtrlShift>增大字号CtrlQ删除段落格式CtrlSpacebar删除字符格式CtrlC复制所选文本或对象…

前端学习---css基本知识

css基本知识 我们先看一个小例子&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><div style"background-color:#2459a2;height:…