用python编写2048程序

本文介绍了如何使用Python编写2048游戏,包括游戏算法、图形界面和运行过程。作者参考了@彡楠风丶吹的图形界面设计,但自创了算法并重新制作了所有图片,增加了游戏的个性化元素。
摘要由CSDN通过智能技术生成

一、背景介绍与引用
最近在重温python,加上一点私心,想要编一个有图像界面的2048程序。
我曾经想过在论坛里面找一个类似的,但是搜索了很久都找不到合适的,有的是只有控制台界面,有的实在是不好自制。最终,我找到了一个非常合适的解决方案(下面会放出链接)。但是我只是采用了其中图形界面的设定,具体的算法还有图形我是自己设计的,原因是原作者在规则上与2048有些不符(比如当移动并不改变现在的顺序时,不产生新的随机块)。
下面放出引用作者的原贴链接

感谢@彡楠风丶吹
Python写2048小游戏全部代码及所用图片

二、源代码
虽然算法是自己写的,但我采用了 @彡楠风丶吹 的源代码方案,把源代码分了三部分:游戏算法、游戏图形和游戏运行。
首先是算法部分:GameCalculation.py,这部分包含了主要的内部算法过程,主要是上下左右移动、添加随机数、游戏规则。其中,上下左右移动的过程是先移动后合并然后再次移动。下面是这部分的代码:

import numpy as np
import random as rd
def Up(GameList):#向上移动
    NewList1=np.array([[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]])#用两个零矩阵过渡
    NewList2=np.array([[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]])#懒得用zeros了
    for j in range(4):#先储存非零量在赋值给新列表
        NoneZeroList = []
        for i in range(4):
            if GameList[i,j]!=0:
                NoneZeroList.append(GameList[i,j])
        for k in range(len(NoneZeroList)):
            NewList1[k,j]=NoneZeroList[k]
    for j in range(4):#相同值合并
        for i in range(3):
            if NewList1[i,j]==NewList1[i+1,j]:
                NewList1[i,j]=NewList1[i,j]*2
                NewList1[i+1,j]=0
    for j in range(4):#合并后再移动
        NoneZeroList=[]
        for i in range(4):
            if NewList1[i,j]!=0:
                NoneZeroList.append(NewList1[i,j])
        for k in range(len(NoneZeroList)):
            NewList2[k,j]=NoneZeroList[k]
    NoneSame=0
    for i in range(4):
        for j in range(4):
            if GameList[i,j]!=NewList2[i,j]:
                NoneSame=1
                break
    if NoneSame==1:
        for i in range(4):
            for j in range(4):
                GameList[i,j]=NewList2[i,j]
        return 1
    else:
        return 0
def Down(GameList):
    NewList1=np.array([[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]])
    NewList2=np.array([[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]])
    for j in range(4
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值