GO 写个游戏 2048程序逻辑

1.用别人的代码啦
https://github.com/wangwenbin/2048-go
下载到随便哪里
2.这里写图片描述
怎么报错了!

3.说明环境没配置好
下载
https://github.com/mattn/go-runewidth

C:\Users\Mr.Bean\go\src\github.com\mattn\go-runewidth

https://github.com/nsf/termbox-go

C:\Users\Mr.Bean\go\src\github.com\nsf\termbox-go

具体路径看你报啥错,把相关的文件放进去就可以了,缺啥放啥
go run 2048.go
这里写图片描述

4.代码研究ing

2048游戏使用4x4的格子来表示需要移动的数字,这不难想到可以使用一个矩阵来表示这些数字,我们使用type G2048 [4][4]int来表示。每一次使用方向键来移动数字时,对应方向上的数字需要进行移动和合并,也就是移动和合并矩阵中的非零值。当按下不同的方向键时,移动的数字也不同。我们一共会向上、向下、向左、向右四个方向移动数字,可以通过旋转矩阵将向下、向左、向右的移动都转换为向上的移动,这样能一定程度上简化游戏逻辑。大致流程图如下:这里写图片描述

2048游戏中的难点有两个地方,一个是矩阵中数字的移动合并,另一个则是矩阵的变换,之所以需要对矩阵进行变换,是为了将2048游戏中向下的移动,向左的移动和向右的移动都转换成向上的移动操作。当然可以针对每个移动方式编写函数
1,归零:我们将出现在格子里面的非零的数字都移动到手滑动的方向去。
2,计算:移动到一起之后,非零数字之间没有空隙了,我们对他们
相邻的两个数字相同的进行相加计算。将计算的结果保存在离手指滑动方向较远的那个位置,那么,被消除的那个位置就要重置数值为0;
3,归零:上面第二步操作之后,非零数字中间又出现了0,所以我们又要执行第一步,归零。这样,一个基本的游戏逻辑运算就完成了。
向右4402 归零 0442 合并 0082 移动 不变
0224 归零 不变 合并 0008 移动 不变
0444 归零 不变 合并 0408 移动 0048

移动元素 简单用c++写了一个 应该没啥问题,遇到0交换前后
4 0 0 2 向右移动变成 0 0 4 2

    for(int i=0;i<=3;i++){
        cin>>a[i];
    }
    for(int i=1;i<=3;i++){
        for(int j=i;j<=3;j++){
            if(a[j]==0){
                swap(a[j],a[j-1]);
            }
        }
    }
    for(int i=0;i<=3;i++){
        printf("%d ",a[i] );
    }

接下来合并了解一下 仍然是向右合并
4 4 2 0 0 8 2 0
2 2 4 0 0 0 8 0
0 4 4 4 0 4 0 8
其余方向类似
具体的请大家自己实现啦,我的也不一定正确还请多斟酌

#include <bits/stdc++.h>
using namespace std;
int main(int argc, char const *argv[])
{
    int t=4;
    int a[t];
    for(int i=0;i<=3;i++){
        cin>>a[i];
    }
    for(int i=3;i>=1;i--){
        for(int j=3;j>=1;j--){
            if(a[j]==a[j-1]){
                a[j]+=a[j-1];
                a[j-1]=0;
            }
        }
    }
    for(int i=0;i<=3;i++){
        printf("%d ",a[i] );
    }
    return 0;
}

分数计算:所有元素相加值,可以用移动次数作为权重辅助计算

读取:可以用字符代替方向,也可以接受键盘指令

打印:按矩阵打印

游戏结束条件:
如果数组中的0个数为0,且横竖方向上面都没有相等的数字的时候,那么游戏结束;
到这里,2048的实现逻辑基本上是完成了。

游戏胜利条件,存在一个元素大于等于2048

哦对了还有一个随机数生成
思路是搞一个vector 存x,y节点(0元素)
rand()%v.size() 然后随便生成一个2,4在对应的x,y上

猜你喜欢

转载自blog.csdn.net/qq_38677814/article/details/80459362
今日推荐