python编程基础与案例集锦,python基础编程例子

大家好,小编来为大家解答以下问题,python编程入门与案例详解,python编程基础与案例集锦,现在让我们一起来看看吧!

本项目基于“实验楼”“200行Python代码实现2048教程: 原教程地址:

项目界面采用curses库制作,原文在linux下运行,官方curses库不支持windows系统,需要从第三方下载cueses扩展库,根据网上教程安装下载,第三方下载地址:

1.游戏机制及基本操作 1.1状态机 处理游戏主逻辑的时候我们会用到一种十分常用的技术:状态机,或者更准确的说是有限状态机(FSM) 你会发现 2048 游戏很容易就能分解成几种状态的转换快码论文

def main(stdscr):
    def init():
        game_field.reset()
        return 'Game'
        
    def game():
        (stdscr)
        
        action = get_user_action(stdscr)
        
        if action == 'Restart':
            return 'Init'
        if action == 'Exit':
            return 'Exit'
        if (action):
            if game_field.is_win():
                return 'Win'
            if game_field.is_gameover():
                return 'Gameover'
        return 'Game'
        
    def not_game(state):
        (stdscr)
        
        action = get_user_action(stdscr)
        if action == 'Restart':
            return 'Init'
        if action == 'Exit':
            return 'Exit'
        return state
        #responses = defaultdict(lambda: state)
        #responses['Restart'] = 'Init'
        #responses['Exit'] = 'Exit'
        #return responses[action]

    state_actions = {
   
            'Init': init,
            'Win': lambda: not_game('Win'),  
            'Gameover': lambda: not_game('Gameover'),
            'Game': game}
    curses.use_default_colors()
    
    #设置获胜条件
    game_field = GameField(win = 2048)  
    state = 'Init'
    #状态机开始循环
    while state != 'Exit':
        state = state_actions[state]()

设置了init() game() not_game 三种状态,用以实现状态机的状态切换,def main(stdscr)语句中stdscr变量为curses模块的固定格式,通过while循环使程序未进入’Exit‘状态保持运行,个人对原文中not_game函数进行了修改,#备注为原代码。

    def not_game(state):
        (stdscr)
        
        action = get_user_action(stdscr)
        responses = defaultdict(lambda: state)
        responses['Restart'] = 'Init'
        responses['Exit'] = 'Exit'
        return responses[action]

修改为:

    def not_game(state):
        (stdscr)
        
        action = get_user_action(stdscr)
        if action == 'Restart':
            return 'Init'
        if action == 'Exit':
            return 'Exit'
        return state

原代码可能兼容性更高一点,不过修改后可能更好理解一点,目前修改后的代码还没有发现问题。1.2模块导入 导入curses模块和random模块,由于程序部分内容修改,不再需要导入defaultdict方法。

import curses
from random import randrange, choice

1.3用户行为及用户输入 所有的有效输入都可以转换为"上,下,左,右,游戏重置,退出"这六种行为,用 actions 表示, 输入键采用W(上),A(左),S(下),D(右),R(重置),Q(退出),这里要考虑到大小写情况,并在原代码基础上支持了方向键。

letter_codes = [ord(ch) for ch in 'WASDRQwasdrq']
actions = ['Up', 'Left', 'Down', 'Right', 'Restart', 'Exit']
actions_dict = dict(zip(letter_codes, actions * 2))
#添加上下左右方向键
letter_codes_key = [curses.KEY_UP, curses.KEY_LEFT, curses.KEY_DOWN, curses.KEY_RIGHT]
actions_key = ['Up', 'Left', 'Down', 'Right']
actions_dict_key = dict(zip(letter_codes_key, actions_key))
actions_dict.update(actions_dict_key)#将两段字典合并

def get_user_action(keyboard):
    char = "N"
    while char not in actions_dict:
        char = keyboard.getch()
    return actions_dict[char]

1.4矩阵转置与翻转 zip函数返回一个迭代对象,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表,实现转置。

def transpose(field):
    return [list(row) for row in zip(*field)]
    
def invert(field):
    return [row[::-1] for row in field]

2.封装GameFiled类 封装一个GameFiled类,并对其建立reset(重置界面)、move(移动)、is_win(判断是否获胜)、is_gameover(判断游戏失败)、draw(绘制游戏界面)、spawn(随机生成元素)、move_is_possible(是否可以移动)等方法,实现游戏运行。 通过 __init__初始化棋盘参数

class GameField(object):
    def __init__(self, height=4, width =4, win=2048):
        self.height = height
        self.width = width
        self.win_value = win
        self.score = 0   
        self.highscore = 0
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值