1914|2

531

帖子

4

TA的资源

纯净的硅(高级)

米尔MYC-YT507开发板测评:开发环境篇之二:Python 2048小游戏 [复制链接]

本帖最后由 qinyunti 于 2022-7-25 22:54 编辑

2048

 

前言

本开发板官方镜像带python2.7环境,可以使用python进行开发。支持python等脚本开发的话对应于很多轻量级开发场景会非常快速便捷,所以我们也简单测试下使用python 编写2048小游戏进行测试。

准备

参考《米尔MYC-YT507开发板测评:开发环境篇之一:Linux C按键控制LED》安装交叉编译环境。

以及基本的登录文件传输等操作。

2048小游戏

代码2048.py

# -*- coding:UTF-8 -*-

#!/usr/bin/python2

 

import random

import os, sys

 

 

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

     [0, 0, 0, 0],

     [0, 0, 0, 0],

     [0, 0, 0, 0]]

 

def display(v, score):

    print "%4d  %4d %4d %4d"    %   (v[0][0], v[0][1], v[0][2], v[0][3])

    print "%4d  %4d %4d %4d"    %   (v[1][0], v[1][1], v[1][2], v[1][3])

    print "%4d  %4d %4d %4d"    %   (v[2][0], v[2][1], v[2][2], v[2][3])

    print "%4d  %4d %4d %4d"    %   (v[3][0], v[3][1], v[3][2], v[3][3])

    print "Total score: %d" % score

 

def init(v):

    for i in range(4):

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

 

def align(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(vList, direction):

    score = 0

    if direction == 'left':

        for i in [0, 1, 2]:

            align(vList, direction)

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

                vList *= 2

                vList[i+1] = 0

                score += vList

                return {'bool':True, 'score':score}

    else:

        for i in [3, 2, 1]:

            align(vList, direction)

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

                vList *= 2

                vList[i-1] = 0

                score += vList

                return {'bool':True, 'score':score}

    return {'bool':False, 'score':score}

 

def handle(vList, direction):

    totalScore = 0

    align(vList, direction)

    result = addSame(vList, direction)

    while result['bool'] == True:

        totalScore += result['score']

        align(vList, direction)

        result = addSame(vList, direction)

    return totalScore

     

def operation(v):

    totalScore = 0

    gameOver = False

    direction = 'left'

    op = raw_input('operator:')

    if op in ['a','A']:

        direction = 'left'

        for row in range(4):

            totalScore += handle(v[row], direction)

    elif op in ['d','D']:

        direction = 'right'

        for row in range(4):

            totalScore += handle(v[row], direction)

    elif op in ['w', 'W']:

        direction = 'left'

        for col in range(4):

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

            totalScore += handle(vList, direction)

            for row in range(4):

                v[row][col] = vList[row]

    elif op in ['s', 'S']:

        direction = 'right'

        for col in range(4):

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

            totalScore += handle(vList, direction)

            for row in range(4):

                v[row][col] = vList[row]

    else:

        print "Invalid input,please enter a charactor in [W,S,A,D] or the lower"

        gameOver = True

        return {'gameOver':gameOver,'score':totalScore}

 

    N = 0

    for q in v:

        N += q.count(0)

 

    if N == 0:

        gameOver = True

        return {'gameover':gameOver,'score':totalScore}

   

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

    k = random.randrange(1, N+1)

    n = 0

 

    for i in range(4):

        for j in range(4):

            if v[j] == 0:

                n += 1

                if n == k:

                    v[j] = num

                    break          

 

    return {'gameOver':gameOver, 'score':totalScore}

   

 

init(v)

score = 0

print "Input:W(Up) S(Down) A(Left) D(Right), press <CR>."

while True:

    os.system("clear")

    display(v, score)

    result = operation(v)

    print result

    if result['gameOver'] == True:

        print "Game Over, You failed!"

        print "Your total score %d" % (score)

        sys.exit(1)

    else:

        score += result['score']

        if score >= 2048:

            print "Game Over, You Win!!!"

            print "Your total score: %d" % (score)

            sys.exit(0)



 

 

按键w,s,a,d回车分别对应上下左右。

  image.png  

总结

支持python轻量开发很方便,如果能支持pip安装库,支持tkinter等图形界面开发的画会更加方便。

 

 

2048.py

3.24 KB, 下载次数: 2

2048.mp4

1.83 MB, 下载次数: 1

最新回复

我那安装好了tkinter环境了。可以支持的。但是pyqt、pyinside2没搞定。  详情 回复 发表于 2022-7-24 16:16

回复
举报

7258

帖子

11

TA的资源

版主

我那安装好了tkinter环境了。可以支持的。但是pyqt、pyinside2没搞定。

点评

我也尝试了下手动安装,setup时提示hashlib有点问题,暂时没解决。可以分享学习下,有界面的话演示效果好点。  详情 回复 发表于 2022-7-24 21:55

回复

531

帖子

4

TA的资源

纯净的硅(高级)

lugl4313820 发表于 2022-7-24 16:16 我那安装好了tkinter环境了。可以支持的。但是pyqt、pyinside2没搞定。

我也尝试了下手动安装,setup时提示hashlib有点问题,暂时没解决。可以分享学习下,有界面的话演示效果好点。


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

开源项目 更多>>
    随便看看
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
    关闭
    站长推荐上一条 1/10 下一条

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

     
    机器人开发圈

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 10

    北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表