python实现2048小游戏

来源:中文源码网    浏览: 次    日期:2018年9月2日

【下载文档:  python实现2048小游戏.txt 】

(友情提示:右键点上行txt文档名->目标另存为)

python实现2048小游戏 2048的python实现。修改自某网友的代码,解决了原网友版本的两个小bug:1. 原版游戏每次只消除一次,而不是递归消除。如 [2 ,2 ,2 ,2] 左移动的话应该是 [4, 4, 0, 0] , 而不是[8 , 0 , 0 ,0]

2. 对游戏结束的侦测有bug,已经改正。

2048game.py

# -*- coding: utf-8 -*-

"""

Created on Tue Jul 1 14:15:39 2014

@author: kelvin

"""

import random

class game2048:

totalScore = 0

v = [[2, 8, 8, 2],

[4, 2, 4, 8],

[2, 4, 2, 0],

[4, 2, 4, 0]]

'''

v = [[0, 0, 0, 0],

[0, 0, 0, 0],

[0, 0, 0, 0],

[0, 0, 0, 0]]

'''

def __init__(self):

for i in range(4):

self.v[i] = [random.choice([0,0,0,2,2,4]) for x in range(4)]

def display(self):

print('{0:4} {1:4} {2:4} {3:4}'.format(self.v[0][0], self.v[0][1], self.v[0][2], self.v[0][3]))

print('{0:4} {1:4} {2:4} {3:4}'.format(self.v[1][0], self.v[1][1], self.v[1][2], self.v[1][3]))

print('{0:4} {1:4} {2:4} {3:4}'.format(self.v[2][0], self.v[2][1], self.v[2][2], self.v[2][3]))

print('{0:4} {1:4} {2:4} {3:4}'.format(self.v[3][0], self.v[3][1], self.v[3][2], self.v[3][3]))

print('得分为:{0:4}'.format(self.totalScore))

print('游戏是否结束:{0:4}'.format(self.isOver()))

#重新排列

def align(self,vList, direction):

for i in range(vList.count(0)):

vList.remove(0)

zeros = [0 for x in range(4-len(vList))]

if direction == 'left':

vList.extend(zeros)

else:

vList[:0] = zeros

#将相同的元素相加,返回新增积分

def addSame(self,vList, direction):

increment=0

if direction == 'left':

for i in [0,1,2]:

if vList[i]==vList[i+1] and vList[i+1]!=0:

vList[i] *= 2

vList[i+1] = 0

increment += vList[i]

else:

for i in [3,2,1]:

if vList[i]==vList[i-1] and vList[i-1]!=0:

vList[i] *= 2

vList[i-1] = 0

increment += vList[i]

return increment

#处理行和方向,返回新增积分

def handle(self, vList, direction):

self.align(vList, direction)

increment = self.addSame(vList, direction)

self.align(vList, direction)

self.totalScore += increment #直接加到总值

return increment

#判断游戏是否结束

def judge(self):

if self.isOver():

print('你输了,游戏结束!')

return False

else:

if self.totalScore >= 2048:

print('你赢了,游戏结束!但是你还可以继续玩。')

return True

#判断游戏是否真正结束

def isOver(self):

N = self.calcCharNumber(0)

if N!=0:

return False

else:

for row in range(4):

flag = self.isListOver(self.v[row])

if flag==False:

return False

for col in range(4):

# 将矩阵中一列复制到一个列表中然后处理

vList = [self.v[row][col] for row in range(4)]

flag = self.isListOver(vList)

if flag==False:

return False

return True

#判断一个列表是否还可以合并

def isListOver(self, vList):

for i in [0,1,2]:

if vList[i]==vList[i+1] and vList[i+1]!=0:

return False

return True

def calcCharNumber(self, char):

n = 0

for q in self.v:

n += q.count(char)

return n

def addElement(self):

# 统计空白区域数目 N

N = self.calcCharNumber(0)

if N!=0:

# 按2和4出现的几率为3/1来产生随机数2和4

num = random.choice([2, 2, 2, 4])

# 产生随机数k,上一步产生的2或4将被填到第k个空白区域

k = random.randrange(1, N+1) #k的范围为[1,N]

n = 0

for i in range(4):

for j in range(4):

if self.v[i][j] == 0:

n += 1

if n == k:

self.v[i][j] = num

return

def moveLeft(self):

self.moveHorizontal('left')

def moveRight(self):

self.moveHorizontal('right')

def moveHorizontal(self, direction):

for row in range(4):

self.handle(self.v[row], direction)

def moveUp(self):

self.moveVertical('left')

def moveDown(self):

self.moveVertical('right')

def moveVertical(self, direction):

for col in range(4):

# 将矩阵中一列复制到一个列表中然后处理

vList = [self.v[row][col] for row in range(4)]

self.handle(vList, direction)

# 从处理后的列表中的数字覆盖原来矩阵中的值

for row in range(4):

self.v[row][col] = vList[row]

#主要的处理函数

def operation(self):

op = input('operator:')

if op in ['a', 'A']: # 向左移动

self.moveLeft()

self.addElement()

elif op in ['d', 'D']: # 向右移动

self.moveRight()

self.addElement()

elif op in ['w', 'W']: # 向上移动

self.moveUp()

self.addElement()

elif op in ['s', 'S']: # 向下移动

self.moveDown()

self.addElement()

else:

print('错误的输入。请输入 [W, S, A, D] 或者是其小写')

#开始

print('输入:W(上移) S(下移) A(左移) D(右移), press .')

g =game2048()

flag = True

while True:

g.display()

flag = g.judge()

g.operation()

flag = g.judge()演示图以上所述就是本文的全部内容了,希望大家能够喜欢。

亲,试试微信扫码分享本页! *^_^*

2048游戏python源代码,python实现2048小游戏相关推荐

  1. Python 简单实现贪吃蛇小游戏

    文章目录 1. pygame库的简介2. pygame库的安装3. python代码实现贪吃蛇小游戏4. pyinstaller打包成exe 很多人学习python,不知道从何学起. 很多人学习pyt ...

  2. Python编写人机对战小游戏(抓狐狸)(2)

    封面图片:<中学生可以这样学Python>,董付国.应根球著,清华大学出版社 =========== 很久很久以前,在公众号里推送过一个抓狐狸游戏,详见Python编写人机对战小游戏(抓小 ...

  3. Python编写微信打飞机小游戏(三)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  4. python实现猫捉老鼠小游戏

    最近小侄女老是缠着我给她玩躲猫猫游戏,然后为了打发她就随手用python实现猫捉老鼠小游戏,简单又好玩,就不用一直缠着我了,专心的和小哥哥聊天吧,嘿嘿 首界面 上源码就是这么简单 开始游戏界面 然后键 ...

  5. Python编写微信打飞机小游戏(八)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  6. Python编写微信打飞机小游戏(十一)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  7. Python实现消消乐小游戏

    本文主要介绍了Python实现消消乐小游戏,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,编程学习资料点击免费领取 提到开心消消乐这款小游戏,相信大家都不陌生,其曾 ...

  8. Python初学者-双人对战小游戏

    --------------------------------------Python初学者 学习历程分享------------------------------------ 小游戏-双人决战之 ...

  9. Python 和 PyQt5 实现打地鼠小游戏

    Python 和 PyQt5 实现打地鼠小游戏 实现效果: 视频效果: https://live.csdn.net/v/264602https://live.csdn.net/v/264602 代码: ...

  10. 学生学python编程---实现贪吃蛇小游戏+源码

    学生学python编程---实现贪吃蛇小游戏+源码 前言 主要设计 1.蛇的表示 2.蛇怎么移动? 3.玩家控制小蛇移动功能的实现 4.如何判定游戏结束? 应用知识点 1.python知识点 1.1 ...

最新文章

  1. zabbix3.2.4监控MySQL5.7.16状态
  2. 响应面法求可靠度指标代码_基于可靠度理论的既有桥梁结构承载能力评估——结构可靠度理论若干基本概念...
  3. idea 15 license server
  4. sql相同顺序法和一次封锁法_【数据库】面试题汇总
  5. mysql序列化字段反序列化_序列化serialize()与反序列化unserialize()的实例
  6. NWT创业失败原因之层层分析
  7. 本台计算机控制网速,笔记本网速限制(笔记本电脑限制网速怎么设置)
  8. php识别手写图片,可识别手写字体的文字识别软件(附源码)
  9. 请求头显示Provisional headers are shown问题
  10. AI公司盈利难?MSN聊天机器人起家的小i是如何做到的
  11. 【微信授权登录】Scope 参数错误或没有 Scope 权限
  12. 在openSUSE编译OpenFOAM
  13. 一个用js写的沙漏程序 hourglass
  14. 手机游戏真的那么好赚钱吗?
  15. I2C知识大全系列一 —— I2C相关概念
  16. 大数据毕业设计题目汇总 python毕设选题推荐
  17. 传感器常见技术参数介绍
  18. python:设有一张厚度为1毫米的纸,对折多少次后厚度可以超过珠穆朗玛峰的高度
  19. php 扩展了imagick,PHP编程:PHP使用imagick扩展实现合并图像的方法
  20. 中债登、银行间市场、上清所… 这些机构你能分清几个?

热门文章

  1. Martin Fowler关于微服务的原文翻译(一)
  2. iTunes的资料库中没有书籍(图书)选项的解决方法
  3. Day10_计算机网络
  4. 大规模排行榜系统实践及挑战
  5. 外一篇:九阳豆浆机故障一则
  6. UG8.5-UG11.0压铸模具离合器设计视频教程 流道 排气 渣包设计
  7. 性能测试 - 游戏服务端框架
  8. 关于华清远见的毕业总结
  9. Android 8.0 创建管理通知渠道Notification
  10. Cannot generate variable name for non-typed Collection parameter type