20234203 2023-2024-2 《Python程序设计》实验4 Python综合实践

20234203郑凯夫 20234203郑凯夫 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

20234203 2023-2024-2 《Python程序设计》实验四报告
课程:《Python程序设计》
班级: 2342
姓名: 郑凯夫
学号:20234203
实验教师:王志强
实验日期:2024年5月27日
必-修/选修: 公选课

一、实验项目

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等

评分标准:
(1)程序能运行,功能丰富。(需求提交源代码,并建议录制程序运行的视频)10分
(2)综合实践报告,要体现实验分析、设计、实现过程、结果等信息,格式规范,逻辑清晰,结构合理。20分。

(3)实验4的遇到的问题以及感想体会。5分。
(4)对全课进行总结,并写课程感想体会、意见和建议等。10分。

二、实验过程

对2048这个游戏一直挺上头的,形策课有一次院士还提到了,觉得做一个2048是一个不错的方向

在观看B站视频、csdn社区讨论已经咨询相关专业同学后,开始编写

对2048游戏的制作需要对制作相应的游戏面板(本次以标准4*4为例)

 设置游戏面板尺寸,并规定初始值为0

 

 规定程序通过left up down right进行移动,控制同一行或同一列数值可以进行移动与合并

 在程序运行中添加数值保证游戏正常进行

 判断游戏是否到达结束条件,即当没有空格且无法进行任何有效移动时,游戏结束

 根据输入的方向,选择相应的移动函数执行。确保只有在移动导致面板发生变化时(即有有效移动),才更新面板状态并添加新数字。

将程序拆分上述部分,合并可得完整简易4*4的2048游戏代码

以下是源代码

import random
import copy

# 初始化
def init_board(size=4):
    return [[0 for _ in range(size)] for _ in range(size)]

# 游戏面板
def print_board(board):
    for row in board:
        print(" ".join(str(cell).rjust(5) for cell in row))
    print()

# 移动
def move_direction(board, direction):
    def shift_and_merge(line):
        line = [x for x in line if x != 0]
        merged = []
        skip = False
        for i in range(len(line)):
            if skip:
                skip = False
                continue
            if i < len(line) - 1 and line[i] == line[i + 1]:
                merged.append(line[i] * 2)
                skip = True
            else:
                merged.append(line[i])
        return merged + [0] * (len(board) - len(merged))

    if direction == 'left':
        for row in board:
            row[:] = shift_and_merge(row)
    elif direction == 'right':
        for row in board:
            row[:] = shift_and_merge(row[::-1])[::-1]
    elif direction == 'up':
        for col in range(len(board)):
            column = [board[row][col] for row in range(len(board))]
            shifted = shift_and_merge(column)
            for row, val in enumerate(shifted):
                board[row][col] = val
    elif direction == 'down':
        for col in range(len(board)):
            column = [board[row][col] for row in range(len(board) - 1, -1, -1)]
            shifted = shift_and_merge(column)
            for row, val in enumerate(shifted[::-1]):
                board[len(board) - 1 - row][col] = val

# 添加随机新数字
def add_new_tile(board):
    empty_cells = [(r, c) for r in range(len(board)) for c in range(len(board[r])) if board[r][c] == 0]
    if empty_cells:
        r, c = random.choice(empty_cells)
        board[r][c] = random.choice([2, 4])

# 检查游戏是否结束
def is_game_over(board):
    if any(0 in row for row in board):
        return False
    directions = ['left', 'right', 'up', 'down']
    for direction in directions:
        temp_board = copy.deepcopy(board)
        move_direction(temp_board, direction)
        if temp_board != board:
            return False
    return True

# 主游戏循环
def main():
    board = init_board()
    add_new_tile(board)
    add_new_tile(board)

    while not is_game_over(board):
        print_board(board)
        move_input = input("请输入移动方向(left, right, up, down): ").strip().lower()
        if move_input in ['left', 'right', 'up', 'down']:
            move_direction(board, move_input)
            add_new_tile(board)
        else:
            print("无效的输入,请重新输入!")

    print("\n游戏结束!感谢游玩。")


if __name__ == "__main__":
    main()

!!!老师我的csdn不知道咋搞的没有传输视频的选项,没法在这里展示了,会打包给课代表的

(运行截图) 

三、实验问题及感受

1.在实验项目选择中发现有需要cfg模块、pygame等额外插件,可以win+r在cmd中输入cfg进行下载已经在官方网站下载pygame

2.在4*4盘满时仍然继续运行,无法结束。 在进行前确保通过一个函数检查游戏板上是否存在空位。如果没有空位,则不再生成新数字,避免循环。

四、全课总结与感想

在学长的建议下,选择了python作为本学期的一门选修课,转眼结课,不知时间过隙。也带着一点高中时期对python的一些兴趣,以及会考里的一些遗憾,对python课也是充满自信的。(然而自信仅仅持续三周)

收获也是很多的,从python语言的字符运算、数据类型(就是字符串、列表、字典那些啦)、还有控制结构(诸如条件语句、循环)等等。控制结构也算是比较得心应手的一个小模块了,现在想来还是成就感十足。在一次次的实验中,看着自己的小程序从一次次调试运行不断出错,到正常运行,期间不停地查阅资料,咨询同学,对照老师给出的代码,出错试错的过程,就是知识汲取的过程。不停的循环语句做出自己的猜数字游戏,不停调试实现了同一网络下服务端和客户端的交互,由简入难,自己对python也是有一种又爱又恨的感觉。非常感谢老师地宽容,面对抽问不会的情况,依旧选择原谅我们并且不厌其烦地解答问题,深深体会到老师治学之严谨,教学之敬业。希望自己在日后学习也可以戒骄戒躁脚踏实地,敬畏知识,学以致用。

关于课程,我也有一些自己的小的提议!即使老师您意识到文科班对于python理解的艰难晦涩而放缓进度,但理解起来还是有些吃力,希望老师可以对重点内容加以强调或者查阅网络资料,用通俗的语言向同学们阐明道理。另外,自己在csdn的浏览过程中发现python的应用中,关于python小游戏的开源大部分会使用到pygame,感觉到pygame的应用还是比较广泛的,想到我们有类似的实验任务和实验课程,我认为如果课程充裕的条件下老师可以向大家拓展一下pygame,感觉大家的兴趣会更广一些。感觉知识的遗忘还是很严重的,自己没有认真去记是很大一部分,也希望老师作为课程的第二负责人可以对我们多加约束(可以多问问甚至多考考,现场再写一串代码~)

最后的最后,还是感谢老师对我们的倾情授课!我们学到了好多!“未来的人生,一路繁花似锦”,我们会记住这个学期在富丰路7号发生的故事,和那个燃烧着整片天空的傍晚。

 

 

...全文

相关推荐

政府科技管理者如何高效评估科技成果的市场转化潜力?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

产业园区运营负责人如何实现园区内创新资源的智能配置?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

科技中介服务机构在为中小企业提供技术对接服务时,如何解决信息盲区与匹配低效问题?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

电力系统风储联合一次调频仿真模型(Simulink仿真实现)

内容概要:本文提供了“电力系统风储联合一次调频仿真模型”的Simulink仿真实现方案,系统性地构建了风电与储能系统协同参与电力系统一次频率调节的动态仿真模型。该模型深度融合风力发电的波动性特征与储能系统的快速响应能力,设计了联合调频控制策略,通过Simulink平台实现了对电网频率扰动的精细化仿真分析。内容涵盖风储功率协调分配、逆变器控制(如VSG、下垂控制)、中点电位平衡、正负序分离、电网前馈补偿等关键技术模块,重点考察控制逻辑架构、关键参数整定及系统在动态工况下的频率响应性能,旨在验证风储联合系统在提升低惯量电网频率稳定性和调频效能方面的可行性与优越性。; 适合人群:具备电力系统分析、自动控制理论及新能源并网技术基础,熟练掌握Simulink/MATLAB仿真工具,从事电力系统稳定控制、新能源集成、储能应用等方向研究的研究生、科研人员及电力行业工程技术人员。; 使用场景及目标:①深入探究风电与储能系统在电网一次调频中的协同控制机理与能量管理策略;②对比分析不同控制算法(如下垂控制、VSG、MPC等)对频率调节效果的影响;③支撑学术论文复现、科研项目仿真验证及新型电力系统工程方案的前期可行性研究。; 阅读建议:建议结合电力系统频率控制相关经典文献与最新研究成果,逐步调试模型中的控制参数,重点关注风储出力协调性、控制延时、响应速度及弱电网条件对整体调频性能的影响,推荐通过多场景对比仿真以深化对系统动态行为的理解。

荔枝科研社

产业园区如何实现科技资源的统一管理和动态监测?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN
评论
收藏 已收藏
分享
返回顶部