Python+Pygame制作简易版2048小游戏

目录
  • 导语
  • 正文
    • 主要代码
    • 效果图

导语

哈喽!大家好,我是栗子,感谢大家的支持!

新的一天,新气象,程序猿们的日常开始敲敲敲,改改改——今天给大家来一款简单的小游戏!

2048小游戏——准确的来说确实是一个简单版本的!

呐呐呐 ,主要是担心很多小伙伴儿直接上界面版本的看不懂,所以做了这款简单的2048,先看这篇简单版本的吧!

正文

为了搞懂这个游戏的规则,小编去直接下载了一款2048的小游戏,上手玩了一波!

然后.........完全停不下来!23333~

玩法: 用手指或键盘上下左右滑动,将两个相同的数字合并,例如:2 + 2 = 4, 4 + 4 = 8... 直到

1024 + 1024 = 2048!

主要代码

# 练习1:定义函数,将列表中0元素,移动到末尾。
# [2,0,2,0]   -->  [2,2,0,0]
# [0,4,2,4]   -->  [4,2,4,0]

# 适合零基础同学
def zero_to_end(list_target):
    # 选出非零元素 形成新列表
    # [2, 0, 2, 0] -->  [2, 2]
    new_list = []
    for item in list_target:
        if item != 0:
            new_list.append(item)
            # 追加零元素 [2, 2] --> [2,2,0,0]
    # 判断原列表零元素数量: list_target.count(0)
    for i in range(list_target.count(0)):
        new_list.append(0)
        # 返回新列表
    return new_list

# def zero_to_end(list_target):
#     # 选出非零元素 形成新列表
#     # [2, 0, 2, 0] -->  [2, 2]
#     new_list = [item for item in list_target if item != 0]
#     # 重复生成零元素 [0] * list_target.count(0)
#     new_list += [0] * list_target.count(0)
#     # 返回新列表
#     return new_list

# 同学方法
# def zero_to_end(list_target):
#     # 删除零元素  在后面追加
#     for item in list_target:
#         if item == 0:
#             list_target.remove(0)
#             list_target.append(item)
#     # 返回新列表
#     return list_target

# 测试
# print(zero_to_end([1, 0, 0, 2]))
# print(zero_to_end([0, 4, 2, 4]))

# 练习2:定义合并相同(不相邻也可以)列表元素的函数
# [2,2,0,0]    -->  [4,0,0,0]
# [2,0,2,0]    -->  [4,0,0,0]
# [2,2,2,0]    -->  [4,2,0,0]
# [4,2,0,4]    -->  [4,2,4,0]
# [0,0,2,4]    -->  [2,4,0,0]
# 提示:
# 0元素移动到末尾
# 相邻相同合并
# list[0] == list[1]

def merge(list_target):
    # 1.将零元素移动到末尾 [2,0,2,0]    -->  [2,2,0,0]
    list_target = zero_to_end(list_target)
    # 2. 合并
    for i in range(len(list_target) - 1):
        # 如果非零元素  相邻且相同
        if list_target[i] != 0 and list_target[i] == list_target[i + 1]:
            # 将后一个元素累加到前一个元素上
            list_target[i] += list_target[i + 1]
            # 讲后一个元素清零
            list_target[i + 1] = 0
    # 3. 将零元素移动到末尾  [2,2,2,0]    -->  [4,0,2,0]  -->[4,2,0,0]
    list_target = zero_to_end(list_target)
    return list_target

# print(merge([2,2,2,0]))

# 练习3:定义在控制台中绘制2048地图的函数 11:33
def print_atlas(list_atlas):
    # 00   01   02   03
    for r in range(len(list_atlas)):
        for c in range(len(list_atlas[r])):
            print(list_atlas[r][c], end=" ")
        print()

atlas01 = [
    [2, 0, 0, 2],
    [8, 0, 4, 4],
    [2, 2, 0, 4],
    [0, 2, 4, 0],
]

print_atlas(atlas01)

# 练习4:在控制台中打印第二行,与第四行元素。
#                   第一列,与第三列元素。
# 第二行
# for c in range(4):
#     print(atlas01[1][c], end=" ")
# print()
# # 第四行
# for c in range(4):
#     print(atlas01[3][c], end=" ")
# print()
# # 第一列
# for r in range(4):
#     print(atlas01[r][0])
# # 第三列
# for r in range(4):
#     print(atlas01[r][2])

# 练习5,定义向上移动的函数
# 提示:将二维列表每列元素形成一维列表,交给合并merge函数,再还给二维列表
def move_up(atlas):  # 15:30
    # 将二维列表第一列元素形成一维列表,
    # 00  10   20  30
    for c in range(4):
        list_merge = []
        for r in range(4):
            list_merge.append(atlas[r][c])

        # 交给合并merge函数
        list_merge = merge(list_merge)

        # 再还给二维列表
        for r in range(4):
            atlas[r][c] = list_merge[r]
    return atlas

# resutl = move_up(atlas01)
# print_atlas(resutl)

# 扩展作业1:定义向左移动的函数
def move_left(atlas):
    for r in range(4):
        # 从左到右依次获取行
        list_merge = []
        for c in range(4):
            # 00  01  02  03
            list_merge.append(atlas[r][c])

        list_merge = merge(list_merge)

        for c in range(4):
            atlas[r][c] = list_merge[c]

    return atlas

# resutl = move_left(atlas01)
# print_atlas(resutl)

# 扩展作业2:定义向下移动的函数
# 30   20   10  00
def move_down(atlas):
    for c in range(4):
        list_merge = []
        # 从下至上获取二维列表列元素
        for r in range(3,-1,-1):
            list_merge.append(atlas[r][c])

        list_merge = merge(list_merge)

        # 从左至右获取一维列表元素
        # 从下至上还给二维列表
        for r in range(3, -1, -1):
            atlas[r][c] = list_merge[3 -r]  # 0  1 2 3
    return atlas

def move_right(atlas):
    for r in range(4):
        list_merge = []
        for c in range(3, -1, -1):
            list_merge.append(atlas[r][c])

        list_merge=merge(list_merge)

        for c in range(3, -1, -1):
            atlas[r][c] = list_merge[3 - c]
    return atlas
# resutl = move_down(atlas01)
# print_atlas(resutl)

# 扩展作业3:定义向右移动的函数
while True:
    shell = input("请输入玩家指令wsad:")
    if shell=="w":
        move_up(atlas01)
        print_atlas(atlas01)
    elif shell=="s":
        move_down(atlas01)
        print_atlas(atlas01)
    elif shell=="a":
        move_left(atlas01)
        print_atlas(atlas01)
    elif shell=="d":
        move_right(atlas01)
        print_atlas(atlas01)
    else:
        print("输入错误")

效果图

到此这篇关于Python+Pygame制作简易版2048小游戏的文章就介绍到这了,更多相关Python Pygame 2048内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 用Python手把手教你实现2048小游戏

    一.开发环境 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 二.环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 三.原理介绍 "使用方向键移动方块,两个数字相同的方块撞在一起后,将会合并为一个数字是原来两倍的新方块.游戏的时候尽可能多地合并这些数字方块就行了." 大概了解了游戏规则之后,我们就可以开始写这个游戏啦~首先,进行一下游戏初始化操作并播放一首自己喜欢的游戏背景音乐: # 游戏初始化 pygame.i

  • 用Python写一个无界面的2048小游戏

    以前游戏2048火的时候,正好用其他的语言编写了一个,现在学习python,正好想起来,便决定用python写一个2048,由于没学过python里面的界面编程,所以写了一个极其简单的无界面2048.游戏2048的原理和实现都不难,正好可以拿来练手,要是不知道这游戏的话,可以去网上查一下,或者下载一个到手机来玩一下,我就不在说其原理.我知道不放图的话大家一点兴趣都没,下面首先放一张游戏成型图,然后我们在来讲如何一步步用最基础的知识来实现. 一.生成4*4的矩阵 游戏的第一步便是生成一个4*4的矩

  • Python实现简单2048小游戏

    简单的2048小游戏 不多说,直接上图,这里并未实现GUI之类的,需要的话,可自行实现: 接下来就是代码模块,其中的2048游戏原来网络上有很多,我就不详细写上去了,都写在注释里面了.唯一要注意的就是需要先去了解一下矩阵的转置,这里会用到 import random board = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] # 打印游戏界面 def display(board, score): print('{0:4} {1

  • 200 行python 代码实现 2048 游戏

    创建游戏文件 2048.py 首先导入需要的包: import curses from random import randrange, choice from collections import defaultdict 主逻辑 用户行为 所有的有效输入都可以转换为"上,下,左,右,游戏重置,退出"这六种行为,用 actions 表示 actions = ['Up', 'Left', 'Down', 'Right', 'Restart', 'Exit'] 有效输入键是最常见的 W(上

  • python pygame实现2048游戏

    实现2048相对来说比较简单,用4*4的二维数组保存地图,pygame.key.get_pressed()获取键盘操作,详见代码. 效果图 代码 # -*- coding: utf-8 -*- #!/usr/bin/python ''' Created on May 31, 2014 @author: yuanzi ''' import random import sys import pygame from pygame.locals import * PIXEL = 150 SCORE_PI

  • 200行python代码实现2048游戏

    Python实战系列用于记录实战项目中的思路,代码实现,出现的问题与解决方案以及可行的改进方向 本文为第2篇–200行Python代码实现2048 一.分析与函数设计 1.1 游戏玩法 2048这款游戏的玩法很简单,每次可以选择上下左右滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢,系统也会在空白的地方乱数出现一个数字方块,相同数字的方块在靠拢.相撞时会相加.(介绍来自百度百科) 1.2 函数设计 _init _() 初始化4*4游戏地图,分数等游戏基本数据 is_gameover() 判

  • Python实现简单的2048小游戏

    本文实例为大家分享了Python实现简单的2048小游戏的具体代码,供大家参考,具体内容如下 运行效果: 1.项目结构 2.代码 configs.py import argparse def parse_args(): parser = argparse.ArgumentParser(description='Game 2048') # Form """ screen_width: Width of the form screen_height: Height of the

  • 一步步教你用Python实现2048小游戏

    前言 2048游戏规则:简单的移动方向键让数字叠加,并且获得这些数字每次叠加后的得分,当出现2048这个数字时游戏胜利.同时每次移动方向键时,都会在这个4*4的方格矩阵的空白区域随机产生一个数字2或者4,如果方格被数字填满了,那么就GameOver了. 主逻辑图 逻辑图解:黑色是逻辑层,蓝色是外部方法,红色是类内方法,稍后即可知道~ 下面容我逐行解释主逻辑main()函数,并且在其中穿叉外部定义的函数与类. 主逻辑代码解读(完整代码见文末) 主逻辑main如下,之后的是对主函数中的一些方法的解读

  • Python+Pygame制作简易版2048小游戏

    目录 导语 正文 主要代码 效果图 导语 哈喽!大家好,我是栗子,感谢大家的支持! 新的一天,新气象,程序猿们的日常开始敲敲敲,改改改——今天给大家来一款简单的小游戏! 2048小游戏——准确的来说确实是一个简单版本的! 呐呐呐 ,主要是担心很多小伙伴儿直接上界面版本的看不懂,所以做了这款简单的2048,先看这篇简单版本的吧! 正文 为了搞懂这个游戏的规则,小编去直接下载了一款2048的小游戏,上手玩了一波! 然后.........完全停不下来!23333~ 玩法: 用手指或键盘上下左右滑动,将

  • Python制作简易版2048小游戏

    目录 目标效果 设计开始 步骤一 步骤二 步骤三 步骤四 步骤五 今天我们来动手实现一款2048小游戏.这款游戏的精髓就玩家能够在于通过滑动屏幕合并相同数字,直到不能再合并为止.玩法可以说是非常的简单,但挑战性也是十足的.话不多说,让我们从0开始实现! 目标效果 大致要实现的效果如下: 设计开始 首先简单分析一下游戏的逻辑: 输入移动方向,游戏内所有方块都朝指定方向移动 同方向移动的方块,数字相同则合并,然后生成一个合并的方块 合并后生成新的方块,无法生成新方块时游戏结束 用一系列的颜色来区分不

  • 利用c++编写简易版2048小游戏

    目录 1.程序初始化 2.画图操作 3.字符控制 4.判断游戏结束和游戏胜利 别的不多说,先上效果图 我们都知道2048是个4 4的方格,为了方便数组下表我们生成5 5的数组,只用到1~4的下标. 初始化时候先随便生成两个目标 1.程序初始化 // 程序初始化 void init() { score = 0; memset(a, 0, sizeof(a)); int x1 = rand() % 4 + 1, y1 = rand() % 4 + 1, x2 = rand() % 4 + 1, y2

  • Pygame实现简易版趣味小游戏之反弹球

    目录 导语 一.准备中 1)游戏规则 2)素材准备 3)环境安装 二.敲代码 1)配置文件 2)设置球的反弹.移动规则 3)设置球拍电脑的移动等 4)设置游戏开始界面 5)定义游戏结束页面 6)运行游戏Demo 7)主函数.标题名称等 三.效果展示 导语 宅在家里能干什么呢?突然想起了乒乓球

  • 利用Matlab制作一款3D版2048小游戏

    其实逻辑和2维版本完全一样,就不进行详细解说了,直接看效果: 效果: 目前界面还不咋好看,期待大家的优化 还是键盘↑↓←→操作嗷 完整代码: function game20483D global squaremap global colorlist global fontsizelist global baseX baseY baseZ global barHdl textHdl global txtBest txtScore global best fig=figure('units','pi

  • 利用Python写个简易版星空大战游戏

    目录 前言 一.游戏画面 二.游戏结束画面 三.游戏素材 四.游戏代码 五.核心代码 1.导入模块 2.动态星空背景函数 3.不定时产生敌机函数 4.飞碟的移动 5.子弹的移动 6.玩家射击函数 7.播放背景音乐与生成声效对象 8.新建屏幕 9.移动图章实现星星 10.哭脸 11.玩家 12.飞碟移动与子弹移动 13.敌机的碰撞检测 14.闯关成功把子弹删除 六.总结 前言 通过辣条最近观察,大家好像对划水摸鱼是情有独钟啊.于是乎我重操旧业又写上了这么一个简单版的星空大战小游戏. 当然了辣条的初

  • Python+Pygame制作"长沙版"大富翁

    目录 导语 一.大富翁之旅 二.特殊事件 1)触发的特殊事件如下 2)游戏规则 三.代码演示 1)环境素材 2)运行环境 3)主程序 4)玩家角色 四.效果展示 1)初始界面 2)选择游戏人数界面 3)后续 导语 ​说到童年爱玩的电脑游戏,你会想到什么? 最国民的莫过于金山打字通,接着是扫雷.红心大战,而红极一时的单机游戏当属<大富翁>. 嘻嘻 打字游戏——扫雷这是之前都已经给大家写过的游戏啦~SO 剩下<大富翁>游戏. 今天来给大家大显身手一波—— 作为一款经典的强手棋类游戏,“

  • Python+Pygame实现简单的射击小游戏

    目录 前言 一.运行环境 二.代码展示 ​三.效果展示 1)游戏界面 2)击中效果 3)+3分 前言 哈喽!哈喽.栗子上线啦~ 要说什么游戏能够获得大家的喜爱? 唯射击游戏莫属.此前大火手游的<刺激战场>当然现在是叫做<和平精英>啦,想当初我也是第一批下载的老玩家了!射击游戏加上丰富的地图不同的体验那是相当的有趣好玩儿. 玩家在射击游戏中,通过瞄准,击杀敌人,能够获得及时的爽感反馈.射击游戏很早就在游戏圈占据一席之地啦~ 今天的游戏代码灵感就是来源于此哦,简约简约,大制作小编一个程

  • Python快速实现简易贪吃蛇小游戏的示例代码

    贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本.既简单又耐玩.该游戏通过控制蛇头方向吃蛋,从而使得蛇变得越来越长. 贪吃蛇游戏最初为单机模式,后续又陆续推出团战模式.赏金模式.挑战模式等多种玩法. 另外还有一种名为“贪吃蛇”钻井测井技术,是运用旋转导向系统.随钻测井系统等的油气田定向钻井.随钻测井技术,可完成海上“丛式井”和复杂油气层的开采需求,大幅降低油气田开发综合成本. 依然是基于pygame库,pip install pygame安装即可 完整代码如下: # 导入

随机推荐