[Unity学习教程] 2048小游戏成品源码

[复制链接]
查看970 | 回复0 | 2023-8-16 16:32:46 | 显示全部楼层 |阅读模式 来自 中国北京
2048小游戏,可以自选配景颜色,方框颜色,音乐播放。
还可以展示当前玩家的排名,动态排名,及历史玩家的排名。
前期需求:


利用pygame加载目次音乐。MP3文件:
  1. def music_play():
  2.     import pygame as py
  3.     # 初始化
  4.     py.mixer.init()
  5.     # 文件加载
  6.     py.mixer.music.load(r'.\test.mp3')
  7.     # 播放  第一个是播放值 -1代表循环播放, 第二个参数代表开始播放的时间
  8.     py.mixer.music.play(-1, 10)
复制代码
看下运行后的效果图:
=========参数设置:

=========配景设置:

=========方块设置:




==========源码分享:
[code]#!/usr/bin/env python3# -*- coding: utf-8 -*-# @Author  : Codeooo# @Time    : 2022/04/13"""2048游戏本模块已完备实现2048游戏的算法及分数的计算算法本游戏的界面采用python 尺度库 tkinter 来实现此界面的布局采用tkinter中的grid布局"""import copyimport random  # 导入随机模块random,重要用于随机天生新的数字及数字摆方位置import math  # 导入数学模块,用来计算分数# _map_data 绑定一个 4 x 4 列表,此列表为2048游戏舆图,初始值如下:from tkinter.colorchooser import askcolor_map_data = [    [0, 0, 0, 0],    [0, 0, 0, 0],    [0, 0, 0, 0],    [0, 0, 0, 0]]score_list = []  # 分数列表# -------------------------以下为2048游戏的根本算法---------------------------def reset():    '''重新设置游戏数据,将舆图恢复为初始状态,并加入两个数据 2 作用初始状态'''    _map_data[:] = []  # _map_data.clear()    _map_data.append([0, 0, 0, 0])    _map_data.append([0, 0, 0, 0])    _map_data.append([0, 0, 0, 0])    _map_data.append([0, 0, 0, 0])    # 在空白舆图上添补两个2    fill2()    fill2()def get_space_count():    """获取没有数字的方格的数目,假如数目为0则说有无法添补新数据,游戏即将竣事    """    count = 0    for r in _map_data:        count += r.count(0)    return countdef get_score():    '''获取游戏的分数,得分规则是每次有两个数加在一起则天生相应的分数。    如 2 和 2 归并后得4分, 8 和 8 分并后得 16分.    根据一个大于2的数字就可以知道他共归并了多少次,可以直接算出分数:    如:       4 肯定由两个2归并,得4分       8 肯定由两个4归并,则计:8 + 4 + 4 得32分       ... 以此类推    '''    score = 0    for r in _map_data:        for c in r:            score += 0 if c < 4 else c * int((math.log(c, 2) - 1.0))    return score  # 导入数学模块def fill2():    '''添补2到空位置,假如填度乐成返回True,假如已满,则返回False'''    blank_count = get_space_count()  # 得到舆图上空白位置的个数    if 0 == blank_count:        return False    # 天生随机位置, 如,当只有四个空时,则天生0~3的数,代表自左至右,自上而下的空位置    pos = random.randrange(0, blank_count)    offset = 0    for row in _map_data:  # row为行row        for col in range(4):  # col 为列,column            if 0 == row[col]:                if offset == pos:                    # 把2添补到第row行,第col列的位置,返回True                    row[col] = 2                    return True                offset += 1def is_gameover():    """判定游戏是否竣事,假如竣事返回True,否是返回False    """    for r in _map_data:        # 假如程度方向另有0,则游戏没有竣事        if r.count(0):            return False        # 程度方向假如有两个相邻的元素类似,应当是可以归并的,则游戏没有竣事        for i in range(3):            if r == r[i + 1]:                return False    for c in range(4):        # 竖直方向假如有两个相邻的元素类似,应当可以归并的,则游戏没有竣事        for r in range(3):            if _map_data[r][c] == _map_data[r + 1][c]:                return False    # 以上都没有,则游戏竣事    return True# 以下是2048游戏的根本算法,此算法是在达内的美女老师"贾琳倩"提供算法上改进而来# 此种算法不是最优算法,但我以为这是目前最容易明确的算法def _left_move_number(line):    '''左移一行数字,假如有数据移动则返回True,否则返回False:    如: line = [0, 2, 0, 8] 即表达如下一行:        +---+---+---+---+        | 0 | 2 | 0 | 8 |

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则