嘛,python期末要做个pj,hangman,开学时wxp老师展示了两个据说是上届的作品,用的pygame,心血来潮,也自己做了个
但是昨晚发现他发的东西有这个开头:
# Four-In-A-Row (a Connect Four clone)
# By Al Sweigart al@inventwithpython.com
# http://inventwithpython.com/pygame
# Released under a "Simplified BSD" license
哦?(黑人问号)SHIT
并且代码很规范,不像是学生写的,不是变态谁一个comma后面必有blank啊
嘛,由于期末还有很久结束,先不放上代码了,之后再做详解,记录使用的pygame操作
流程:
1.从words.txt读入词库,随机选择一个
2.得到的单词反馈给游戏界面,画出相应下划线
3.从界面给出的26个字母按钮中读取用户选择的字符
4.判断选择的字符是否正确,不断刷新用户选择对的字符组和错误数记录,反馈给游戏界面,画上hangman状态,在下划线上方打出用户选对的字母
5.游戏中止判断,失误6次,用户失败,并将下划线上单词补齐,未敲出字母打为红色。用户拼写正确,恭喜一下。
6.5secs内关闭游戏
难点:
1.制作中最费劲的地方在于,pygame并没有按钮这个东西,你要自己做一个出来,我参考的SRL的博客,以下是原文链接:
https://www.cnblogs.com/SRL-Southern/p/4949624.html
修改后得到的按钮:
鼠标不放上去,字母为白色
鼠标放上去,字母变成红色
鼠标点击,字母变为灰色,并且变不回去
2.pygame的游戏界面显示对于一个图片的展示需要分三步:
①:background = pygame.image.load(background_image_filename).convert_alpha()
第一步,载入图片,生成一个特殊类surface
②:screen.blit(background, (0,0))
将这个surface展示到生成的游戏界面窗口内
③:pygame.display.update()
展示更新,将surface真正展示出来,三步缺一不可
但是对于难点1中的按钮,又多了一个问题
screen.blit和pygame.display.update()对于在游戏界面内打字是覆盖的,会产生什么效果呢?
第一次打“一”,第二次打“二”,屏幕上就会有一个“三”,(如果位置不变的话),除非你每次将所有的底层surface都更新一遍,十分增加开销
所以十分纠结对于按钮,选择使用文字还是图片(对于26个字母,每个字母三个颜色的30px*30px的图片,会累死的),我感觉这样的实现十分龌龊,算了算了
所幸对于文字的覆盖,如果文字内容相同,仅仅更换颜色,并不会看出什么明显差别
待解决问题:
pygame背景音频只能同时播放一个,如果想要在背景音下,每次用户点击按钮,发出按钮被点击的声音要怎么做