志在指尖
用双手敲打未来

python简单小游戏代码(python代码保护)

python简单小游戏代码

利用python写”猜数字”,”猜词语”,”谁是卧底”这三个游戏,从而快速把握python编程的入门常识,包含python语法/列表/元组/字典/流程操控/库函数等等。
环境参数
linux渠道,python3.4。需要在linux中把python3.4编译一下,这样编写python程序时保存为.py格局的文件并增加履行权限再终端运转即可(原理跟shell脚本相同),十分方便。
ps:贴出来的python程序代码在windows中也兼容,只不过运转方法不是命令行,而是要经过python软件。python软件能够上官网下载安装点击翻开链接,在学习的时分,能够直接在python软件上面输入python句子即可打印成果,也便是说python无需编译即可运转,很多人也称之为”脚本”言语。
规划实现
猜数字
很多人在聚餐时都玩过猜数字游戏,由某人随机出一个指定范围内的数,然后其他人一个一个猜,猜的过程中区间不断缩小,直到猜中停止。
这儿的猜数字游戏便是用程序来替代那个出数字的人,程序算法规划为:
1.输入数字区间—>2.体系发生区间内的随机数—>3.玩家输入自己猜的数字—>4.比较玩家猜的与答案的高低并提示—>5.未猜中则回到3,猜中则提示猜次数
代码很少,如下所示:
#!/usr/local/bin/python3
importrandom
bot=int(input(‘Setrangebottom’))
top=int(input(‘Setrangetop’))
rand=random.randint(bot,top)
print(‘Randomnumberin[‘+str(bot)+’,’+str(top)+’]generated!’)
num=int(input(‘###Guessthenumber###’))
cnt=1
while(num!=rand):
if(num
print(‘*_*Lowerthantheanswer’)
else:
print(‘T_THigherthantheanswer’)
num=int(input(‘###Guessthenumber###’))
cnt=cnt+1
print(‘^_^Yougettheanswerwith[%d]times’%cnt)
第一行是要让linux体系知道这是python3程序,random是发生随机数的库函数,要注意的是python对格局要求很严格,由于它不必经过{}而是经过缩进量判别流程。
经过这个能够把握根本的语法和编写规则了,下面再试试有点难度的,用到词组和循环操控等常识。
猜词语
电视节目中的”你来比画我来猜”我们应该都看过,而且很多人也玩过,规则便是一个人看词语比画相应动作和说一些提示,另一个人看不到词语要经过比画的动作猜出来,猜的过程中主持人判别是否符合规则。
某一组玩家猜词语的算法规划为:
1.开端计时—>2.猜词语—>3.答对则正确数加1并回到2,要跳过或犯规了则直接回到2,超时了直接跳到3—>3.循环10次后或时刻完毕后核算答对的题数
有num组玩家就进行以上流程的num次循环,当然也要预备x组词语,由于每组玩家猜的词语是不同的。
代码量不大,如下所示:
#!/usr/local/bin/python3
importtime
num=int(input(‘有多少组玩家’))
guessWord=[]
correct=[]
#界说列表,num+10是不想让guessWord下标不合法
foriinrange(0,num+10):
guessWord.append(0)
correct.append(0)
wordNum=10
guessWord[0]=[‘打情骂俏’,’海绵宝宝’,’娇媚’,’金鸡独立’,’饥不择食’,’睡眼模糊’,’出类拔萃’,’手舞足蹈’,’卓别林’,’穿越前方’]
guessWord[1]=[‘喜形于色’,’英雄联盟’,’扭秧歌’,’偷看美女’,’大摇大摆’,’回眸一笑’,’市场营销’,’大眼瞪小眼’,’自恋’,’处女座’]
guessWord[2]=[‘狗急跳墙’,’捧腹大笑’,’目不转睛’,’愁眉苦脸’,’左顾右盼’,’宫保鸡丁’,’升国旗’,’暗恋’,’臭袜子’,’浑水摸鱼’]
flag=’n’
foriinrange(0,num):
start=time.time()
forkinrange(0,wordNum):
#显示词语
print((‘%d.%s’)%(k+1,guessWord[i][k]))
flag=input(‘请答题,答对请输入y,跳过请输入任意键’)
end=time.time()
sec=end-start
#核算用时
if(110<=sec<=120):
print(‘还有10秒钟’)
if(sec>=120):
print(‘时刻到!游戏完毕’)
break
if(flag==’y’):
correct[i]=correct[i]+1
continue
else:
continue
str_temp=(‘第%d组答对数目:%d’)%(i+1,correct[i])
print(str_temp)
其实词语能够做成从独立的文件中读入的方法,这样方便更新和管理,下面就介绍一种用”字典”的方法来取得”谁是卧底”的卧底词。
谁是卧底
谁是卧底也是深受很多人喜欢的游戏,最少要三人以上才能玩,大致分为几个阶段:1.分配布衣词语和卧底词语—>2.玩家顺次讲话—>3.根据讲话投票以为谁是卧底—>4.得到票数最多的玩家出局—>5.出局玩家刚好是卧底则布衣成功,假如出局玩家是布衣则被冤死并继续第2步,当剩下的布衣只有1个时卧底成功。
特殊情况是,呈现两名或以上的玩家票数相同,则相同票数的玩家重新讲话,然后全体针对这几个玩家投票。
程序规划思维:输入玩家数num,玩家编号为0~num-1,然后界说三个含有num个元素的列表:词语列表,核算玩家票数的列表,死亡玩家的列表。列表下标从0~num-1,随机发生该区间的数x,代表x号玩家是卧底,然后分配卧底词和布衣词。注意,提示几号玩家是卧底或冤死的时分,要将打印信息时分的下标加1,比如下标数0代表的其实是1号玩家。在生活中,没多少人会习惯说自己是”第0个人”这种说法吧,除了程序员–;
在每轮游戏中,顺次进行讲话,投票,票数最多的玩家出局(呈现相同票数则重新讲话),出局玩家归入死亡玩家列表。然后开端下一轮。
那么,假如有num位玩家,则最多有多少轮游戏完毕?由于进行到只有2位玩家游戏就完毕了,所以答案是num-2轮!也便是说上述流程要循环num-2次。
编程思维定了就能够敲代码了,程序代码如下:
#!/usr/local/bin/python3
importrandom
fromspywordimportspyword
num=int(input(‘请输入玩家数(至少为3)’))
#卧底玩家
spy=random.randint(0,num-1)
#随机发生词语界说词语列表核算玩家票数的列表核算死亡玩家的列表
list_rand=spyword.popitem()
word=[]
cnt=[]
dead=[]
#给三个列表赋值
foriinrange(0,num):
word.append(‘a’)
cnt.append(0)
dead.append(num+2)
#给玩家词语其间print是调试用的,sanmeVote是呈现相同票数的标志,spyWin是卧底成功的判决条件
foriinrange(0,num):
if(i==spy):
word[i]=str(list_rand[1])
else:
word[i]=str(list_rand[0])
print(word[i])
sameVote=0
spyWin=0
#游戏开端
forxinrange(0,num-1):
forkinrange(0,num):
if((knotindead)&(sameVote==0)):
print(‘%d号玩家讲话时刻’%(k+1))
print(‘讲话环节完毕’)
#将各位玩家的票数置0
forjinrange(0,num):
if(jnotindead):
cnt[j]=0
forjinrange(0,num):
if(jnotindead):
vote2p=int(input(‘请%d号玩家投票’%(j+1)))-1
cnt[vote2p]=cnt[vote2p]+1
sameVote=0
foryinrange(0,num):
if((cnt[y]==max(cnt))&(y!=cnt.index(max(cnt)))):
print(‘不止一位玩家得到最高票数,请这些玩家重新讲话’)
sameVote=1
if(sameVote==0):
dead[x]=cnt.index(max(cnt))
if(dead[x]==spy):
print(‘卧底得到最多票数,游戏完毕’)
spyWin=1
break
print(‘%d号玩家被冤死!’%(dead[x]+1))
#游戏完毕
if(spyWin==0):
print(‘只剩两名玩家,卧底成功!’)
有一行代码是
fromspywordimportspyword
这儿spyword是我自己界说的卧底词字典,运转时把这个文件放在python的作业目录下,就能够让python程序调用该字典了。要查看python作业目录,你需要运转python后输入
>>>importos
>>>os.getcwd()
当然你也能够更改python作业目录。
python是一门简洁高效,通俗易懂的高阶动态编程言语;很多人也称之为”胶水言语”,在接到大项目时往往用python写好主体结构,然后在一些特定模块再用java/js/C++之类的言语实现特定需求。把握python并不难,经过这篇博客讲到的三个小游戏,希望您能发现python的趣味,快速找到python编程的诀窍。Python

python代码保护

Python越来越抢手了,2019年3月TIOBE编程言语排行榜上,Python更是罕见的打败了“霸榜三巨头”之一的C++,挤进前三。

Python长处许多,比如简略易学,代码量少,能做的事许多等等,和其他言语一样,Pyhton也有一些不可掩盖的缺陷,版本不兼容,运转效率不高等等。
其中一个缺陷,让不少开发者头疼不已,因为Python解说器开源的关系,导致Python代码无法加密,代码的安全性得不到保证。
当然,想要加密Python代码,也并非无解。最常见的加密办法有4种,还有1种共同的加密办法。
1
Python解说器在履行代码的过程中,会首先生成.pyc文件,然后再解说履行.pyc中的内容,当然,解说器也能直接履行.pyc文件。
.pyc文件是一个二进制的文件,是不具备可读性的。
假设咱们发到客户环境时,是.pyc文件,而不是.py,那么是不是就能够维护咱们的Python代码?
想要做到这一点,并不难。Python标准库就供给了一个名叫compileall的库,运用它就能够做到。
履行如下指令,即可将目录下的一切.py文件编译成.pyc文件:
python-mcompileall然后删去目录下一切.py文件就能够了。
$find-name’*.py’-typef-print-execrm{}\;
这一办法,能够加密咱们的Python代码,胜过代码裸在外面。尴尬的是,因为Python解说器的兼容较差,有些版本并不能运转.pyc文件。而且已经有现成的反编译工具,能够直接破解。
比如python-uncompyle6(「链接」),只需履行以下指令,就能够搞定。
$uncompyle6*compiled-python-file-pyc-or-pyo*
2
代码混杂,也是一种常见的“加密”办法,严格意义上说,这一办法并不是加密,而是上代码的可读性变差。比如删去注释,增加毫无意义的注释,增加无效代码,对变量、函数、类进行重命名等。
内容不可读,代码就受到了维护。
代码混杂的工具许多,一个比较好用的混杂库是pyobfuscate(GitHub-astrand/pyobfuscate:pyobfuscate)。这个库能够对类、函数进行重命名,而且插入无关的代码,乃至主动加空格等等。
这一办法很简略,也提高了破解的门槛。但因为代码结构未发生变化,字节码也能获取,破解难度也不高。
一般来说,运用这一办法较为简略,实用。
3
如果有一款工具,能够将Python脚本打包成在某一平台的可履行文件,最终咱们发行的,是一份打包完成的二进制文件,那么程序就更难被破解了?
py2exe(FrontPage-py2exe.orgFrontPage-py2exe.org)便是一款很好的打包工具,能够将Python脚本打包成可在Windows上运转的文件。
这一办法的长处是进一步提高了破解门槛。遗憾的是,你只能在windows上运转它。
4
Python运转速度慢何解?用Cython就能够带来性能的提高。实际上,Cython也能够用来加密Python代码。
Cython的原理是,将.py编译为.c文件,再将.c文件编译为.so或许.pyd,这样一来,文件就变得难以破解了。
这样做的好处是,Python代码很难被破解,缺陷是有时候,Cython或许不支持一小部分代码,完善起来就比较麻烦了。
5
最终一种办法,做得比较绝。
因为Python是解说型言语,因此在发行Python程序的时候,就必须包含一个Python解说器,如果咱们修正这个解说器,代码不就被维护起来了吗?
如果咱们能对最原始的Python代码进行加密,加密后的代码被发行后。哪怕被他人看到了,但因为不晓得算法是怎样的,就破解不了了。
这是因为Python解说器本身是一个二进制文件,自然也就无法获得关键性的数据,从而维护了源码。

未经允许不得转载:IT技术网站 » python简单小游戏代码(python代码保护)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载