iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >怎么用Python实现2048小游戏
  • 120
分享到

怎么用Python实现2048小游戏

2023-06-15 08:06:32 120人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍怎么用python实现2048小游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、开发环境Python版本:3.6.4相关模块:pygame模块;以及一些Python自带的模块。二、环境搭建安装P

这篇文章主要介绍怎么用python实现2048小游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一、开发环境

Python版本:3.6.4
相关模块:
pygame模块;
以及一些Python自带的模块。

二、环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

三、原理介绍

“使用方向键移动方块,两个数字相同的方块撞在一起后,将会合并为一个数字是原来两倍的新方块。游戏的时候尽可能多地合并这些数字方块就行了。”
大概了解了游戏规则之后,我们就可以开始写这个游戏啦~首先,进行一下游戏初始化操作并播放一首自己喜欢的游戏背景音乐:

# 游戏初始化pygame.init()screen = pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('2048 —— 彳余大胆')# 播放背景音乐pygame.mixer.music.load(cfg.BGMPATH)pygame.mixer.music.play(-1, 30)

接着,我们来定义一个2048游戏类,里面主要负责实现2048的各种游戏规则:

'''2048游戏'''class Game2048(object):  def __init__(self, matrix_size=(4, 4), max_score_filepath=None, **kwargs):    # matrix_size: (num_rows, num_cols)    self.matrix_size = matrix_size    # 游戏最高分保存路径    self.max_score_filepath = max_score_filepath    # 初始化    self.initialize()

具体而言,我们先用一个二维的列表来保存当前的游戏状态:

self.game_matrix = [['null' for _ in range(self.matrix_size[1])] for _ in range(self.matrix_size[0])]

其中null表示当前的块里没有数字。否则,对应的位置则用当前的数字表示。很显然地,2048小游戏的当前游戏状态是可以用一个4*4的列表表示的:

怎么用Python实现2048小游戏

游戏一开始,我们需要在这个二维列表里随机地选择两个位置生成数字(即2或者4):

'''在新的位置随机生成数字'''def randomGenerateNumber(self):  empty_pos = []  for i in range(self.matrix_size[0]):    for j in range(self.matrix_size[1]):      if self.game_matrix[i][j] == 'null': empty_pos.append([i, j])  i, j = random.choice(empty_pos)  self.game_matrix[i][j] = 2 if random.random() > 0.1 else 4self.randomGenerateNumber()self.randomGenerateNumber()

然后,当玩家按下方向键(↑↓←→)时,这个二维列表要根据玩家的操作指令进行更新,主要分为两个部分:
移动所有的数字块并进行必要的合并和记分;
随机地在一个还没有数字的位置上生成一个数字。
具体而言,代码实现如下:

'''更新游戏状态'''def update(self):  game_matrix_before = copy.deepcopy(self.game_matrix)  self.move()  if game_matrix_before != self.game_matrix: self.randomGenerateNumber()

其中,移动所有的数字并进行必要的合并的代码实现如下:

'''根据指定的方向, 移动所有数字块'''def move(self):  # 提取非空数字  def extract(array):    array_new = []    for item in array:      if item != 'null': array_new.append(item)    return array_new  # 合并非空数字  def merge(array):    score = 0    if len(array) < 2: return array, score    for i in range(len(array)-1):      if array[i] == 'null':        break      if array[i] == array[i+1]:        array[i] *= 2        array.pop(i+1)        array.append('null')        score += array[i]    return extract(array), score  # 不需要移动的话直接return  if self.move_direction is None: return  # 向上  if self.move_direction == 'up':    for j in range(self.matrix_size[1]):      col = []      for i in range(self.matrix_size[0]):        col.append(self.game_matrix[i][j])      col = extract(col)      col.reverse()      col, score = merge(col)      self.score += score      col.reverse()      col = col + ['null',] * (self.matrix_size[0] - len(col))      for i in range(self.matrix_size[0]):        self.game_matrix[i][j] = col[i]  # 向下  elif self.move_direction == 'down':    for j in range(self.matrix_size[1]):      col = []      for i in range(self.matrix_size[0]):        col.append(self.game_matrix[i][j])      col = extract(col)      col, score = merge(col)      self.score += score      col = ['null',] * (self.matrix_size[0] - len(col)) + col      for i in range(self.matrix_size[0]):        self.game_matrix[i][j] = col[i]  # 向左  elif self.move_direction == 'left':    for idx, row in enumerate(copy.deepcopy(self.game_matrix)):      row = extract(row)      row.reverse()      row, score = merge(row)      self.score += score      row.reverse()      row = row + ['null',] * (self.matrix_size[1] - len(row))      self.game_matrix[idx] = row  # 向右  elif self.move_direction == 'right':    for idx, row in enumerate(copy.deepcopy(self.game_matrix)):      row = extract(row)      row, score = merge(row)      self.score += score      row = ['null',] * (self.matrix_size[1] - len(row)) + row      self.game_matrix[idx] = row  self.move_direction = None

懒得动脑子了(反正就4*4那么大T_T),所以直接遍历了这个二维列表以实现我们想要的所有操作了。最后,我们再写个函数以根据当前的游戏状态来判断游戏是否结束就ok啦:

'''游戏是否结束'''@propertydef isgameover(self):  for i in range(self.matrix_size[0]):    for j in range(self.matrix_size[1]):      if self.game_matrix[i][j] == 'null': return False      if (i == self.matrix_size[0] - 1) and (j == self.matrix_size[1] - 1):        continue      elif (i == self.matrix_size[0] - 1):        if (self.game_matrix[i][j] == self.game_matrix[i][j+1]):          return False      elif (j == self.matrix_size[1] - 1):        if (self.game_matrix[i][j] == self.game_matrix[i+1][j]):          return False      else:        if (self.game_matrix[i][j] == self.game_matrix[i+1][j]) or (self.game_matrix[i][j] == self.game_matrix[i][j+1]):          return False  return True

其实很简单,如果二维列表被数字填满,且数字不能再进行合并的话,这局游戏就结束了,否则,游戏就没有结束。
定义完2048游戏类,我们的游戏基本上算是写完了。只需要在游戏主循环里根据用户操作来更新当前的游戏状态并将游戏里所有必要的元素显示在屏幕上就ok啦:

# 游戏主循环clock = pygame.time.Clock()is_running = Truewhile is_running:  screen.fill(pygame.Color(cfg.BG_COLOR))  # --按键检测  for event in pygame.event.get():    if event.type == pygame.QUIT:      pygame.quit()      sys.exit()    elif event.type == pygame.KEYDOWN:      if event.key in [pygame.K_UP, pygame.K_DOWN, pygame.K_LEFT, pygame.K_RIGHT]:        game_2048.setDirection({pygame.K_UP: 'up', pygame.K_DOWN: 'down', pygame.K_LEFT: 'left', pygame.K_RIGHT: 'right'}[event.key])  # --更新游戏状态  game_2048.update()  if game_2048.isgameover:    game_2048.saveMaxScore()    is_running = False  # --将必要的游戏元素画到屏幕上  drawGameMatrix(screen, game_2048.game_matrix, cfg)  start_x, start_y = drawScore(screen, game_2048.score, game_2048.max_score, cfg)  drawGameIntro(screen, start_x, start_y, cfg)  # --屏幕更新  pygame.display.update()  clock.tick(cfg.FPS)return endInterface(screen, cfg)

四、效果图

最后的效果大概是这样的:

怎么用Python实现2048小游戏
怎么用Python实现2048小游戏

以上是“怎么用Python实现2048小游戏”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网Python频道!

--结束END--

本文标题: 怎么用Python实现2048小游戏

本文链接: https://www.lsjlt.com/news/279164.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么用Python实现2048小游戏
    这篇文章主要介绍怎么用Python实现2048小游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、开发环境Python版本:3.6.4相关模块:pygame模块;以及一些Python自带的模块。二、环境搭建安装P...
    99+
    2023-06-15
  • Python怎么实现简单2048小游戏
    这篇文章主要介绍了Python怎么实现简单2048小游戏,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。简单的2048小游戏不多说,直接上图,这里并未实现GUI之类的,需要的话...
    99+
    2023-06-15
  • 小程序怎么实现2048小游戏
    这篇文章主要介绍“小程序怎么实现2048小游戏”,在日常操作中,相信很多人在小程序怎么实现2048小游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”小程序怎么实现2048小游戏”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-26
  • java怎么实现2048游戏
    这篇文章主要介绍java怎么实现2048游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!本文实例讲述了java实现的2048游戏。分享给大家供大家参考,具体如下:先来看看运行效果:具体代码如下:package&nb...
    99+
    2023-05-30
  • java实现2048小游戏(含注释)
    本文实例为大家分享了java实现2048小游戏的具体代码,供大家参考,具体内容如下 实现文件 APP.java import javax.swing.*; public cla...
    99+
    2024-04-02
  • 怎么用C语言实现2048游戏
    本篇内容主要讲解“怎么用C语言实现2048游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用C语言实现2048游戏”吧!本文实例为大家分享了用C语言实现2048游戏的具体代码,供大家参考,...
    99+
    2023-06-20
  • 使用java实现2048小游戏的案例
    这篇文章将为大家详细讲解有关使用java实现2048小游戏的案例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下实现文件APP.javaimport javax.swing.*;pub...
    99+
    2023-06-14
  • 怎么用Python+Pygame制作简易版2048小游戏
    这篇文章主要介绍了怎么用Python+Pygame制作简易版2048小游戏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Python+Pygame制作简易版2048小游戏文章都会有所收获,下面我们一起来看...
    99+
    2023-06-29
  • 用C语言实现2048游戏
    本文实例为大家分享了用C语言实现2048游戏的具体代码,供大家参考,具体内容如下 我遇到的几个问题: 问题1:如何显示? system("clear");//清屏 每次发生变化就清屏...
    99+
    2024-04-02
  • Python制作简易版2048小游戏
    目录目标效果设计开始步骤一步骤二步骤三步骤四步骤五今天我们来动手实现一款2048小游戏。这款游戏的精髓就玩家能够在于通过滑动屏幕合并相同数字,直到不能再合并为止。玩法可以说是非常的简...
    99+
    2024-04-02
  • Unity游戏开发之2048游戏的实现
    目录一、前言二、游戏开发知识储备2-1技术栈三、休闲类游戏《2048》开发实战3-1玩法概述3-2实现分析3-3搭建场景3-4实现代码一、前言 写今天这篇文章的缘由,其实是来自于前段...
    99+
    2024-04-02
  • 怎么用C语言完整实现2048游戏
    这篇文章主要介绍怎么用C语言完整实现2048游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、游戏思路程序开始时出现菜单,让玩家选择开始游戏或者退出游戏。玩家选择开始游戏后,出现棋盘,通过方向键选择移动的方向。移...
    99+
    2023-06-25
  • linux控制台下如何实现2048小游戏
    这篇“linux控制台下如何实现2048小游戏”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇...
    99+
    2024-04-02
  • Python+Pygame制作简易版2048小游戏
    目录导语正文主要代码效果图导语 哈喽!大家好,我是栗子,感谢大家的支持! 新的一天,新气象,程序猿们的日常开始敲敲敲,改改改——今天给大家来一款简单的小游戏...
    99+
    2024-04-02
  • 用C语言完整实现2048游戏
    目录前言一、游戏思路二、游戏框架 1.菜单界面2.游戏主体1.初始化界面:2.随机生成初始数字3.实现移动4.增加新数字5.判定胜负6.游戏函数三、游戏运行四、所有代码总结 前言 游...
    99+
    2024-04-02
  • 微信小程序实现2048小游戏的详细过程
    效果图 实例代码 今天我们要用微信小程序实现2048小游戏,效果图如上面所示。游戏的规则很简单,你需要控制所有方块向同一个方向运动,两个相同数字方块撞在一起之后合并成为他们的和,每...
    99+
    2024-04-02
  • 怎么用Matlab制作一款3D版2048小游戏
    这篇文章主要介绍了怎么用Matlab制作一款3D版2048小游戏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Matlab制作一款3D版2048小游戏文章都会有所收获,下面我们一起来看看吧。效果:完整代码...
    99+
    2023-06-29
  • java如何实现2048游戏功能
    小编这次要给大家分享的是java如何实现2048游戏功能,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。功能要求:2048的基本界面,能够实现2048的游戏功能。总思路:两个类:Game和GameLis...
    99+
    2023-05-31
    java ava
  • 怎么用Python实现拼图小游戏
    本篇内容主要讲解“怎么用Python实现拼图小游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python实现拼图小游戏”吧!开发工具Python版本:...
    99+
    2024-04-02
  • 基于C语言实现2048游戏
    本文实例为大家分享了C语言实现2048游戏的具体代码,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h>...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作