2048游戏python源代码,python实现2048小游戏
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小游戏相关推荐
- Python 简单实现贪吃蛇小游戏
文章目录 1. pygame库的简介2. pygame库的安装3. python代码实现贪吃蛇小游戏4. pyinstaller打包成exe 很多人学习python,不知道从何学起. 很多人学习pyt ...
- Python编写人机对战小游戏(抓狐狸)(2)
封面图片:<中学生可以这样学Python>,董付国.应根球著,清华大学出版社 =========== 很久很久以前,在公众号里推送过一个抓狐狸游戏,详见Python编写人机对战小游戏(抓小 ...
- Python编写微信打飞机小游戏(三)
如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...
- python实现猫捉老鼠小游戏
最近小侄女老是缠着我给她玩躲猫猫游戏,然后为了打发她就随手用python实现猫捉老鼠小游戏,简单又好玩,就不用一直缠着我了,专心的和小哥哥聊天吧,嘿嘿 首界面 上源码就是这么简单 开始游戏界面 然后键 ...
- Python编写微信打飞机小游戏(八)
如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...
- Python编写微信打飞机小游戏(十一)
如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...
- Python实现消消乐小游戏
本文主要介绍了Python实现消消乐小游戏,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,编程学习资料点击免费领取 提到开心消消乐这款小游戏,相信大家都不陌生,其曾 ...
- Python初学者-双人对战小游戏
--------------------------------------Python初学者 学习历程分享------------------------------------ 小游戏-双人决战之 ...
- Python 和 PyQt5 实现打地鼠小游戏
Python 和 PyQt5 实现打地鼠小游戏 实现效果: 视频效果: https://live.csdn.net/v/264602https://live.csdn.net/v/264602 代码: ...
- 学生学python编程---实现贪吃蛇小游戏+源码
学生学python编程---实现贪吃蛇小游戏+源码 前言 主要设计 1.蛇的表示 2.蛇怎么移动? 3.玩家控制小蛇移动功能的实现 4.如何判定游戏结束? 应用知识点 1.python知识点 1.1 ...
最新文章
- zabbix3.2.4监控MySQL5.7.16状态
- 响应面法求可靠度指标代码_基于可靠度理论的既有桥梁结构承载能力评估——结构可靠度理论若干基本概念...
- idea 15 license server
- sql相同顺序法和一次封锁法_【数据库】面试题汇总
- mysql序列化字段反序列化_序列化serialize()与反序列化unserialize()的实例
- NWT创业失败原因之层层分析
- 本台计算机控制网速,笔记本网速限制(笔记本电脑限制网速怎么设置)
- php识别手写图片,可识别手写字体的文字识别软件(附源码)
- 请求头显示Provisional headers are shown问题
- AI公司盈利难?MSN聊天机器人起家的小i是如何做到的
- 【微信授权登录】Scope 参数错误或没有 Scope 权限
- 在openSUSE编译OpenFOAM
- 一个用js写的沙漏程序 hourglass
- 手机游戏真的那么好赚钱吗?
- I2C知识大全系列一 —— I2C相关概念
- 大数据毕业设计题目汇总 python毕设选题推荐
- 传感器常见技术参数介绍
- python:设有一张厚度为1毫米的纸,对折多少次后厚度可以超过珠穆朗玛峰的高度
- php 扩展了imagick,PHP编程:PHP使用imagick扩展实现合并图像的方法
- 中债登、银行间市场、上清所… 这些机构你能分清几个?