小学生python游戏编程arcade----单词对错检测及记录写入excel中

news2024/11/24 18:55:35

小学生python游戏编程arcade----单词对错检测及记录写入excel中

    • 前言
    • 单词对错检测及记录写入excel中
      • 1、excel读取修改
        • 1.1 excel读取
        • 1.2 修改用到的库
        • 1.3 获取Excel表格名称的三种方式
        • 1.4 excel格式问题
      • excel文件保存
        • 2.1 保存函数
        • 2.2 实验
        • 2.3 游戏中调用修改
        • 2.4 升级时保存字典内容至excel
    • 源码获取

前言

接上篇文章继续解绍arcade游戏编程的基本知识。在游戏中将单词的对错记录写入excel中,游戏碰撞中如何收集每个单词的掌握情况,游戏中对excel文件的操作知识。
在这里插入图片描述

单词对错检测及记录写入excel中

1、excel读取修改

1.1 excel读取

def getwordzw(filename, sheet_index=0, danyuan=1,nianji=‘三年级上册’):
# 打开excel文件读取数据,取两列存为字典
data = xlrd.open_workbook(filename)
table = data.sheet_by_index(sheet_index)
nrows = table.nrows
# nclos = table.ncols
# 将每行的信息放入一个字典,再将字典放入一个列表中
dict = {}
for rownum in range(1, nrows):
# print(int(table.cell_value(rownum, 5)))
if table.cell_value(rownum, 5)== danyuan and table.cell_value(rownum, 6)==nianji:
# print(‘true’)
dict[table.cell_value(rownum, 1).replace(‘\u200e’, ‘’)] = {
‘hanzi’:table.cell_value(rownum, 4).replace(‘\u200e’, ‘’),
‘cuo’: table.cell_value(rownum, 7),
‘dui’: table.cell_value(rownum, 8),
‘id’:rownum
}

return dict

1.2 修改用到的库

openpyxl
在这里插入图片描述

1.3 获取Excel表格名称的三种方式

获取Excel表格名称的三种方式
sheet = workbook[“花名册”] #根据表名获取表格
sheet2 = workbook.worksheets[0] #根据索引在worksheets中获取表格
sheet3 = workbook.active #获取当前活跃的表

1.4 excel格式问题

# 保存excel数据
data = load_workbook(filename)

File “E:\pgame\venv\lib\site-packages\openpyxl\reader\excel.py”, line 94, in _validate_archive
raise InvalidFileException(msg)
openpyxl.utils.exceptions.InvalidFileException: openpyxl does not support the old .xls file format, please use xlrd to read this file, or convert it to the more recent .xlsx file format.
如原先用的93-97的excel格式,出错以上错误,用新的.xlsx的excel格式,正常

excel文件保存

2.1 保存函数

def saveword(wordzd,filename, sheet_index=3, danyuan=1,nianji='三年级上册'):
    # 保存excel数据
    data = load_workbook(filename)
    table = data.worksheets[sheet_index]
    # cell与读取时开始位不一样,cell 从1,1开始
    for w in wordzd:
        print(wordzd[w]['id'])
        print(table.cell(wordzd[w]['id']+1, 8).value)
        table.cell(wordzd[w]['id']+1, 8).value=wordzd[w]['cuo']
        table.cell(wordzd[w]['id'] + 1, 9).value = wordzd[w]['cuo']
    data.save(filename)

2.2 实验

游戏中,每次升级时,把打对错的单词,在excel中保存记录次数,等玩一段时间后,把不会的单词找出来,再进行生产敌人。

    zd={'pen': {'hanzi': '钢笔', 'cuo': 3, 'dui': 0.0, 'id': 1}, 'pencil': {'hanzi': '铅笔', 'cuo': 2, 'dui':2, 'id': 2}, 'pencil-case': {'hanzi': '铅笔盒', 'cuo': 4, 'dui': 0.0, 'id': 3}, 'ruler': {'hanzi': '尺子', 'cuo': 0.0, 'dui': 0.0, 'id': 4}}

    saveword(zd,u'english.xlsx', sheet_index=3, danyuan=1, nianji='三年级上册')

2.3 游戏中调用修改

生产敌人时

    def setup_enemy(self):
        # pass
        self.scene.add_sprite_list_after(LAYER_tanks, 'wj')
        if len(self.word_keys) == 0:
            if self.danyuan==len(self.gk[self.year]):
                self.level += 1
                self.year =self.years[self.level]
            else:
                self.danyuan += 1
                self.setup_word(self.danyuan, self.year)

        if len(self.word_keys) > 0:
            self.key = self.word_dict[self.word_keys[0]]['hanzi']  # 朋友
            # print('key',self.key)
            xsword = {}
            xsword[self.word_keys[0]] = self.word_dict[self.word_keys[0]]['hanzi']
            # 随机取3
            sankey = random.sample(self.word_dict.keys(), 3)
            if self.word_keys[0] in sankey:
                sankey.remove(self.word_keys[0])
            # 增加两个敌人
            xsword[sankey[0]] = self.word_dict[sankey[0]]['hanzi']
            xsword[sankey[1]] = self.word_dict[sankey[1]]['hanzi']

坦克直撞时检测:

        # 检测磁到的是硬币还是敌人
        for collision in player_collision_list:
            if self.scene[LAYER_tanks] in collision.sprite_lists:
                collision.remove_from_sprite_lists()
                arcade.play_sound(self.hit_sound3)
                if collision.hz == self.key:
                    self.score += 50
                    self.wanjia.bullets += 3
                    self.word_dict[self.word_current]['dui'] += 1
                    self.enemy_reset = True
                    return
                else: # 撞错了减两命
                    self.wanjia.life -= 2
                    self.word_dict[collision.word]['cuo'] += 1
                    self.word_dict[self.word_current]['cuo'] += 1
                    if self.wanjia.life <= 0:
                        arcade.play_sound(self.game_over)
                        game_over = GameOverView()
                        self.window.show_view(game_over)
                        return

子弹碰撞时检测:

            if hit_list:
                bullet.remove_from_sprite_lists()

                for cc in hit_list:
                    # 敌坦克与子弹碰撞
                    if (self.scene[LAYER_tanks] in cc.sprite_lists):
                        # 磁撞的是敌人 根据子弹伤害及敌人生命值确定争分数及消失
                        cc.remove_from_sprite_lists()
                        # 声音
                        arcade.play_sound(self.hit_sound1)
                        # 爆炸效果
                        self.baozha(hit_list)

                        if cc.hz == self.key:
                            self.score += 100
                            self.wanjia.bullets += 5
                            self.enemy_reset = True
                            self.word_dict[self.word_current]['dui'] +=1
                            return

                        else:
                            self.wanjia.life -= 2
                            self.word_dict[cc.word]['cuo'] += 1
                            self.word_dict[self.word_current]['cuo'] += 1
                            # print('打错了')

                    if (self.scene['建筑物'] in cc.sprite_lists):
                        # 磁撞的是建筑物,  制造爆炸
                        for i in range(20):
                            particle = Particle(self.scene[LAYER_explosions])
                            particle.position = cc.position  # 粒子位置,也即敌人位置
                            self.scene[LAYER_explosions].append(particle)

                        smoke = Smoke(30)
                        smoke.position = cc.position  # 烟雾位置
                        self.scene[LAYER_explosions].append(smoke)

                        cc.remove_from_sprite_lists()

                        # 爆炸声音
                        arcade.sound.play_sound(self.hit_sound2)
                return

2.4 升级时保存字典内容至excel

    def collision_all(self):
        self.collision_bullet_enemy()
        self.collision_bullet_player()
        self.collision_player_enemy()

        if self.enemy_reset:
            # 重置坦克及子弹
            self.scene.remove_sprite_list_by_name(LAYER_bullet)
            self.scene.remove_sprite_list_by_name(LAYER_tanks)
            self.scene.add_sprite_list_after(LAYER_bullet, 'wj')
            self.scene.add_sprite_list_after(LAYER_tanks, 'wj')
            if len(self.word_keys)==0:
                saveword(self.word_dict,u'english.xls', sheet_index=3, danyuan=self.danyuan, nianji=self.year)
                print('升级成功')
                self.update_stop = True
                # self.setup_texiao()
                return
                # arcade.draw_text('升级成功', self.wanjia.center_x, self.wanjia.center_y + 40, arcade.csscolor.RED, 18, )
                # time.sleep(10)

            self.setup_enemy()
            self.enemy_reset = False

源码获取

关注博主后,私聊博主免费获取
需要技术指导,育娃新思考,企业软件合作等更多服务请联系博主

今天是以此模板持续更新此育儿专栏的第 38/50次。
可以关注我,点赞我、评论我、收藏我啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/45842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SuperMap GIS管线数据优化

一、优化目的 城市管网数据错综复杂&#xff0c;未经优化处理的数据在加载过程中可能会出现显示效果差&#xff0c;浏览效率低的情况&#xff0c;特别是在浏览器端&#xff0c;受文件请求量&#xff0c;网络带宽、硬件性能等方面的影响&#xff0c;未经优化的管线数据显示可能不…

5个高清图片素材网站,无水印,免费商用。

网上找的图片素材清晰度不够&#xff0c;版权不明确怎么办。看看这几个可商用图片素材网站&#xff0c;解决你的所有图片需求&#xff0c;高清无水印、下载无限制、免费可商用&#xff0c;赶紧马住&#xff01; 1、菜鸟图库 https://www.sucai999.com/pic.html?vNTYxMjky 网站…

【学习笔记54】运动函数的分析

一、运动函数的基本实现 运动函数是我们自己封装的一个函数。作用是将css样式的改变不是一次性完成&#xff0c;是逐步完成执行效果&#xff0c;看上去像是动画/运动完成的css样式改变。实际项目中框架等都有自己的运动函数我们目前封装一个简单的兼容多属性的运动函数。 1、HT…

回溯法(Java)

回溯法&#xff08;Java&#xff09; 文章目录回溯法&#xff08;Java&#xff09;1、引言2、回溯法2.1 定义2.2 使用场合2.3 基本做法2.4 具体做法2.5 常见例子3、比较4、 问题的解空间4.1 介绍4.2 解空间&#xff08;Solution Space&#xff09;4.3 举例5、基本思想5.1 基本步…

Starday跨境电商平台靠“三快”取胜

入驻快、支付快、物流快 在这个瞬息万变的互联网世界&#xff0c;追求“快”已经成为各行各业的共识&#xff0c;而对于一个因互联网发展而诞生的新兴行业——跨境电商行业&#xff0c;“快”就是跨境电商行业的第一生产力&#xff0c;要想在众多的跨境电商行业中成功出圈&…

【allegro 17.4软件操作保姆级教程六】布线操作基础之一

目录 1.1走线和修线 1.2 Copy操作 1.3 change操作 1.4 删除操作 1.5 Z-copy操作 1.6 Sub-drawing操作 1.1走线和修线 这两个操作是布线时用的最多最基础的操作。如下图&#xff0c;左边是走线命令&#xff08;add connect&#xff09;&#xff0c;右边是修线命令&#x…

外卖项目(项目优化3)12---前后端分离开发

目录 问题描述&#xff1a;184 一、前后端分离开发 185 1.1介绍 185 1.2开发流程 1.3前端技术栈 二、YAPI 186 2.1介绍 2.2使用方式 三、Swagger 187 3.1介绍 3.2使用方式&#xff08;步骤&#xff09; 3.3Swagger---常用注解 188 四、项目部署 189 4.1部署架构…

虹科分享 | 网络流量监控 | 使用 ntopng 收件人和端点进行灵活的警报处理

在之前&#xff0c;ntopng引擎对所有警报的配置是单一的&#xff1a;进入偏好页面并指定警报的发送地点。但这是不理想的&#xff0c;原因有很多&#xff1a;包括不可能在不同的渠道向不同的收件人发送警报&#xff0c;或有选择地决定何时发送警报。 出于这个原因&#xff0c;…

【教材】20022/11/28[指针] 指针数组

一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都存放一个地址,相当于一个指针变量。下面定义一个指针数组:int *p[4] 注意不要写成int &#xff08;*p&#xff09;[4]. 可以分别定义一些字符串,然后用指针数组中的元素分别指向各字符串,在n…

二手闲置物品交易数据快照

近年来&#xff0c;中国社会消费品零售总额不断增长&#xff0c;2019 年1-4 月,消费品零售总额达到128375.8 亿元&#xff0c;同比增长8%。消费者购买力的增强和电商行业的发展&#xff0c;给购买行为提供便利条件&#xff0c;消费者冲动消费后的闲置产品&#xff0c;给二手交易…

《前端》JavaScript总结

文章目录js的使用方法变量与运算符let 与 const变量类型运算符输入与输出输入输出格式化字符串判断语句循环语句for循环while循环do...while循环对象数组访问数组中的元素数组常用属性和函数函数类定义继承静态方法静态变量事件鼠标键盘表单窗口js的使用方法 **使用方式&#…

网络安全工程师必备证书有哪些?

网络环境之间的竞争&#xff0c;归根到底优秀人才之间的竞争。 在2022年网络安全周上&#xff0c;《网络安全人才实战能力白皮书》正式公布。资料显示&#xff0c;到2027年&#xff0c;我国网络安全人员缺口将达327万&#xff0c;而高校人才培养经营规模仅是3万/年。 那样&am…

上半年亏损之下,卫龙第三次冲刺港股IPO

据港交所文件显示&#xff0c;今年6月27日卫龙美味通过港交所上市聆听&#xff0c;11月24日&#xff0c;卫龙更新了聆听后资料集。若此次上市成功&#xff0c;卫龙将成为港股乃至国内辣条第一股。 此前&#xff0c;卫龙已经两度申请了赴港IPO&#xff0c;但都功败垂成&#xff…

看看咱是如何用MATLAB白嫖遥遥领先于同行的神仙级翻译工具 — DeepL

伙伴们不用惊讶&#xff0c;标题仅仅是借用余大嘴的专用修饰语“遥遥领先于同行”而已&#xff0c;但讲DeepL翻译器遥遥领先于同行也不为过&#xff0c;下图是官方给出的采用盲测的方式与其他同类产品的对比图&#xff0c;这应该不是吹牛X&#xff1a; 如此优秀的翻译神器&…

免改造密码方案入选工信部“首届全国商用密码应用优秀案例”

2022年8月18日&#xff0c;“首届全国商用密码应用优秀案例”评选结果重磅揭晓&#xff0c;炼石网络与陕西移动联合打造的“面向重要数据与个人信息保护的商用密码解决方案”&#xff0c;凭借创新性及技术优势&#xff0c;从102个案例中脱颖而出、成功入选&#xff0c;并被收录…

yolov4训练数据: cuda和cudnn的安装

近期再搞openvinoYolov4目标检测&#xff0c;记录一下cuda和cudnn的安装笔记。 mirrors / alexeyab / darknet GitCode 1.cuda的安装 cuDNN Archive | NVIDIA Developer wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_…

【SVM时序预测】基于matlab鲸鱼算法优化支持向量机SVM时序数据预测【含Matlab源码 2250期】

⛄一、鲸鱼算法优化支持向量机SVM 1 鲸鱼优化算法 WOA是由Mirjalili和Lewis在2016年提出的一种较为新颖的元启发式群体智能优化算法&#xff0c;该算法模仿座头鲸的“螺旋气泡网”捕食策略&#xff0c;如图1所示。 图1 座头鲸“螺旋起泡网”捕食策略 WOA算法寻优步骤如下。 步…

详解企业财务数字化转型路径|推荐收藏

许多企业在推动各大业务部门进行数字化转型时&#xff0c;往往会忽略财务部门。然而&#xff0c;作为掌握公司核心资源与数据和推动企业信息化建设的部门&#xff0c;财务部门也应成为企业数字化转型的重要突破口。 财务数字化转型是运用信息技术等手段对财务数据进行统计、记录…

【Android App】三维投影OpenGL ES的讲解及着色器实现(附源码和演示 超详细)

需要源码请点赞关注收藏后评论区留言私信~~~ 一、OpenGL ES简介 虽然OpenGL的三维制图功能非常强大&#xff0c;但是它主要为计算机设计的&#xff0c;对于嵌入式设备和移动端设备来说显得比较臃肿&#xff0c;所以业界又设计了专供嵌入式设备的OpenGL ES 它相当于OpenGL的精简…

GPS定位原理

GPS卫星&#xff1a; 卫星定位系统是一种使用卫星对某物进行准确定位的技术&#xff0c;它从最初的定位精度低、不能实时定位、难以提供及时的导航服务&#xff0c;发展到现如今的高精度GPS全球定位系统&#xff0c;实现了在任意时刻、地球上任意一点都可以同时观测到4颗卫星&a…