基于C#开发的2048

昨天花了一晚上的时间写了一个过气的小游戏-2048,一直到晚上十二点多才把键盘响应事件写好,感觉自己的脑子不行,还要再补补。

先来一波运行的效果:

  1 主要算法,可以实现不同边长的2048
  2    private void Up()
  3         {
  4             int i, j;
  5             for (j = 0; j < gameHeight; j++)
  6             {//每一列
  7                 for (i = 0; i < gameWidth - 1; i++)
  8                 {
  9                     if (game[i, j].Value == game[i + 1, j].Value)
 10                     {
 11                         game[i, j].Value = game[i, j].Value + game[i + 1, j].Value;
 12                         game[i + 1, j].Value = 0;
 13                         //移除空格
 14                         Up_Remove_Blank();
 15                     }
 16
 17                 }
 18             }
 19         }
 20         private void Up_Remove_Blank()
 21         {
 22             int i, j, k;
 23             for (j = 0; j < gameHeight; j++)
 24             {
 25                 for (i = 1; i < gameWidth; i++)
 26                 {
 27                     k = i;
 28                     while (k - 1 >= 0 && game[k - 1, j].Value == 0)
 29                     {//上面的那个为空
 30                         int temp;
 31                         temp = game[k, j].Value;
 32                         game[k, j].Value = game[k - 1, j].Value;
 33                         game[k - 1, j].Value = temp;
 34                         k--;
 35
 36                     }
 37                 }
 38             }
 39         }
 40         private void Down()
 41         {
 42             int i, j;
 43             for (j = 0; j < gameHeight; j++)
 44             {//每一列
 45                 for (i = gameWidth - 1; i >= 1; i--)
 46                 {
 47                     if (game[i, j].Value == game[i - 1, j].Value)
 48                     {
 49                         game[i, j].Value = game[i, j].Value + game[i - 1, j].Value;
 50                         game[i - 1, j].Value = 0;
 51                         //移除空格
 52                         Down_Remove_Blank();
 53                     }
 54
 55                 }
 56             }
 57         }
 58         private void Down_Remove_Blank()
 59         {
 60             int i, j, k;
 61             for (j = 0; j < gameHeight; j++)
 62             {
 63                 for (i = gameWidth - 2; i >= 0; i--)
 64                 {
 65                     k = i;
 66                     while (k + 1 <= gameWidth - 1 && game[k + 1, j].Value == 0)
 67                     {//上面的那个为空
 68                         int temp;
 69                         temp = game[k, j].Value;
 70                         game[k, j].Value = game[k + 1, j].Value;
 71                         game[k + 1, j].Value = temp;
 72                         k++;
 73                     }
 74                 }
 75             }
 76         }
 77         private void Left()
 78         {
 79             int i, j;
 80             for (i = 0; i < gameWidth; i++)
 81             {
 82                 for (j = 0; j < gameHeight - 1; j++)
 83                 {
 84                     if (game[i, j].Value == game[i, j + 1].Value)
 85                     {
 86                         game[i, j].Value += game[i, j + 1].Value;
 87                         game[i, j + 1].Value = 0;
 88                         Left_Remove_Blank();
 89                     }
 90
 91                 }
 92             }
 93         }
 94         public void Left_Remove_Blank()
 95         {
 96             int i, j, k;
 97             for (i = 0; i < gameWidth; i++)
 98             {
 99                 for (j = 1; j < gameHeight; j++)
100                 {
101                     k = j;
102                     while (k - 1 >= 0 && game[i, k - 1].Value == 0)
103                     {//上面的那个为空
104                         int temp;
105                         temp = game[i, k].Value;
106                         game[i, k].Value = game[i, k - 1].Value;
107                         game[i, k - 1].Value = temp;
108                         k--;
109                     }
110                 }
111             }
112         }
113         private void Right()
114         {
115             int i, j;
116             for (i = 0; i < gameWidth; i++)
117             {
118                 for (j = gameHeight - 1; j >= 1; j--)
119                 {
120                     if (game[i, j].Value == game[i, j - 1].Value)
121                     {
122                         game[i, j].Value += game[i, j - 1].Value;
123                         game[i, j - 1].Value = 0;
124                         Right_Remove_Blank();
125                     }
126                 }
127             }
128         }
129
130         private void Right_Remove_Blank()
131         {
132             int i, j, k;
133             for (i = 0; i < gameWidth; i++)
134             {
135                 for (j = gameHeight - 2; j >= 0; j--)
136                 {
137                     k = j;
138                     while (k + 1 <= gameHeight - 1 && game[i, k + 1].Value == 0)
139                     {//上面的那个为空
140                         int temp;
141                         temp = game[i, k].Value;
142                         game[i, k].Value = game[i, k + 1].Value;
143                         game[i, k + 1].Value = temp;
144                         k++;
145                     }
146                 }
147             }
148         }

附上源码:链接:http://pan.baidu.com/s/1skOKdR3 密码:2p3h

时间: 2024-08-10 18:59:27

基于C#开发的2048的相关文章

JavaFX开发的2048游戏

自从JavaFX被纳入Java 8之后,JavaFX团队决定跳过几个版本,追赶Java 8.而如今的JavaFX的与以往的Swing和JavaFX 1.2 版本已大大不同,为了更加容易理解和开发,JavaFX的改观不容小觑,但仁者见仁,智者见智,对于JavaFX而言,还有多久才能走到大众开发视线,拭目以待. JavaFX开发的2048游戏 我想不用说,2048游戏大家应该是有过尝试的,这款游戏由 Gabriele Cirulli 作者开发,并开源在 GITHUB 上,大家可以尝试一下 目前已经从

微信公众平台开发(100) 2048游戏

微信开发第100篇了,算上微信支付和微信小店,其实已经超过了,这次完整讲一下2048游戏吧. 一.2048游戏 <2048>是比较流行的一款数字游戏.原版2048首先在github上发布,原作者是Gabriele Cirulli.它是基于<1024>和<小3传奇>的玩法开发而成的新型数字游戏 .随后2048便出现各种版本,走各大平台.由Ketchapp公司移植到IOS的版本最为火热,现在约有1000万下载,其名字跟原版一模一样.衍生版中最出名的是<2048六边形&

基于DevExpress开发的GridView如何实现某一列的一行让用户可以从下列列表选择选项

在很多DevExpress的使用例子里面,我们可以看到,基于GridView实现的不同控件展示的时候,每一列的控件类型都是一样的,如果我要某一列的一行让用户可以从下列列表选择选项,而其他行不可选择,那我们可以实现这种效果吗,应该如何实现? 1.GridView实现的显示效果 例如下面的效果就是我希望达到的,在第一行的流程处理人列允许用户选择,其他行禁止用户选择. 单用户单击第一行的“流程处理人”列的时候,弹出一个列表供用户选择,选择后显示具体的人员的姓名即可. 2.功能实现具体步骤 实现上面所说

基于Spring开发的DUBBO服务接口测试

基于Spring开发的DUBBO服务接口测试 知识共享主要内容: 1. Dubbo相关概念和架构,以及dubbo服务程序开发步骤. 2. 基于Spring开发框架的dubbo服务接口测试相关配置. 3. spring test+junit和spring test+TestNG两种测试框架脚本编写方法. 一.        DUBBO与DUBBO架构 1.          什么是dubbo?DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治

基于QT开发的第三方库

基于Qt开发的第三方库 分类: Qt2014-02-12 11:34 1738人阅读 评论(0) 收藏 举报 QT第三方库 目录(?)[+] 文章来源:http://blog.csdn.net/zhgn2/article/details/14613519 QxOrm QxOrm is a new open source ORM (Object Relational Mapping) C++ library designed to provide : * Persistence (based on

emWin 移植 - 基于红牛开发板

一直想利用所学的东西自己设计一个精致一些的作品,手头正好有一块红牛开发板,就先用它来写一些软件,熟悉一下过程和一些想法的可行性.首先当然是选择一个操作系统了,对比了几种之后选择了emWin.那就移植一下吧. 这里首先要感谢一下http://www.openedv.com/posts/list/0/27697.htm 这篇帖子.我的思路基本是照着这个帖子做的.感谢楼主把辛苦的研究成果贡献出来,让我这个菜鸟能够快些入门. STemWin下载地址: http://www.st.com/web/en/c

QT5.6.2基于VS2013开发环境配置(Win7 64位)

1) 在https://www.qt.io/download-open-source/#section-2页面下载如下文件: Qt 5.6.2 for Windows 64-bit (VS 2013, 832 MB) Visual Studio Add-in 2.0.0 for Qt5 MSVC 2013 (9 MB) 2) 自动安装上述两个文件,可选QT安装路径(如D盘),安装完成之后打开VS2013,可发现多出QT VS TOOLS菜单 3) 打开QT VS TOOLS菜单下的Qt Opti

基于Nucleo开发板STM32F4XX模版的建立与ST-Link的配置

本文将建立一个基于Nucleo开发板和KEIL5.14的工程模版,由一下几个部分组成: 1.工程模版的建立 2.STlink的设置与永远的流水灯 1.工程模版的建立 1)在建立工程之前,首先建立一个存放模版文件的文件夹,我们把它叫做template.然后在建立6个子文件夹:Doc,Libraries,Listing,Output,Project,USER,在Libraries里建立CMSIS和FWlib文件夹,在CMSIS中建立startup,这些文件夹的名字可以任意取的,这样命名只是为了方便识

基于webkit开发分享

因项目需要,需要将B/S上项目以桌面版的形式呈现,并实现控制操作系统锁屏功能,为此只有将其以类似于.NET的WebBrowser控件的方式嵌入winForm,但WebBrowser采用IE内核引擎,对HTML5以及CSS3尚不支持,同时受限于操作系统以及版本限制.为此必须转换思路,通过资料查询,主流浏览器很多,其解释引擎自然也不同,兼容性很好的Chrome采用webkit,FireFox采用GECKO,这两款引擎是我了解目前市场上兼容性比较好的解释引擎,虽说对html5支持程度并不全面,但对于项