【python学习】多线程 与 面向对象 结合的一个经典例子
2016-04-12 17:15
691 查看
今天看到很久以前在学校的时候的一个伪代码,讲述的是一个打怪的故事,今天用python做一下练习。
伪代码如下:
执行结果还蛮有意思的
伪代码如下:
class 怪物 { char 怪物名; int 血; 怪物(怪物名n,血n) /*构造函数*/ { 怪物名=怪物名n; 血=血n; } 被打函数() { 血减少; } 判断函数() { if (血==0) printf("你胜利了!"); } 玩游戏() { while (血 > 0) { 被打函数(); 判断函数(); } } }
import os,random,time,threading,random,string ##定义一个monster类,属性有名字,血量,被打方法,判断方法 class monster(): def __init__(self, name, blood): self.name = name self.blood = blood print 'Hahaha.....I am a tiger monster' def hit(self, n, times): self.blood = self.blood - n if self.blood < 0: self.blood = 0 print 'Round %s monster\'s blood - %s' % (times, n) print 'monster\'s blood is %s' % self.blood def checklife(self): if self.blood <= 0: print 'Finally, you win!' ##定义一个hunter类,属性有名字、攻击血量,打怪方法,休息方法 class hunter(): def __init__(self, name, hitblo): self.hitblo = hitblo self.name = name def hitmonster(self): print 'I am hunter-%s , my hitnum is %s' % (self.name, self.hitblo) print 'Ouye...hunter hit monster %s blood' % self.hitblo return self.hitblo def haverest(self): print 'hunter %s need have a rest.' % self.name time.sleep(random.random()) ##定义一个全局怪物tiger global m m = monster('tiger', 800) numround = 1 ##定义一个计数变量,计算打斗回合 ##锁 lock1 = threading.Lock() ##定义游戏流程函数,内置的if判断是必要的,否则最后一次打斗判断,3个线程while都是true,但是第一次打怪已经结束流程了,后面两线程等待锁释放之后,还是使用之前的true判断 def playgame(hname, hitblo): print '%s :fighting begin...\n' %hname h = hunter(hname, hitblo) while m.blood >0: lock1.acquire() try: if m.blood >0: h.hitmonster() h.haverest() global numround m.hit(h.hitblo, numround) m.checklife() numround+=1 print '------------------------------------------' finally: lock1.release() ##定义一个函数,随机生成hunter信息 def mkobj(n): global hunters hunters = [] for i in range(0,n): strname = string.join(random.sample(['a','b','c','d','e','f','g','h','i','j'], 3)).replace(" ","") hitnum = random.randrange(60, 151) hunters.append(hunter(strname,hitnum)) mkobj(3) t0 = threading.Thread(target=playgame, args=(hunters[0].name, hunters[0].hitblo,)) t1 = threading.Thread(target=playgame, args=(hunters[1].name, hunters[1].hitblo,)) t2 = threading.Thread(target=playgame, args=(hunters[2].name, hunters[2].hitblo,)) t0.start() t1.start() t2.start() t0.join() t1.join() t2.join()
执行结果还蛮有意思的
Hahaha.....I am a tiger monster afg :fighting begin... gdh :fighting begin... cbf :fighting begin... I am hunter-afg , my hitnum is 119 Ouye...hunter hit monster 119 blood hunter afg need have a rest. Round 1 monster's blood - 119 monster's blood is 681 ------------------------------------------ I am hunter-gdh , my hitnum is 109 Ouye...hunter hit monster 109 blood hunter gdh need have a rest. Round 2 monster's blood - 109 monster's blood is 572 ------------------------------------------ I am hunter-cbf , my hitnum is 64 Ouye...hunter hit monster 64 blood hunter cbf need have a rest. Round 3 monster's blood - 64 monster's blood is 508 ------------------------------------------ I am hunter-afg , my hitnum is 119 Ouye...hunter hit monster 119 blood hunter afg need have a rest. Round 4 monster's blood - 119 monster's blood is 389 ------------------------------------------ I am hunter-gdh , my hitnum is 109 Ouye...hunter hit monster 109 blood hunter gdh need have a rest. Round 5 monster's blood - 109 monster's blood is 280 ------------------------------------------ I am hunter-cbf , my hitnum is 64 Ouye...hunter hit monster 64 blood hunter cbf need have a rest. Round 6 monster's blood - 64 monster's blood is 216 ------------------------------------------ I am hunter-afg , my hitnum is 119 Ouye...hunter hit monster 119 blood hunter afg need have a rest. Round 7 monster's blood - 119 monster's blood is 97 ------------------------------------------ I am hunter-gdh , my hitnum is 109 Ouye...hunter hit monster 109 blood hunter gdh need have a rest. Round 8 monster's blood - 109 monster's blood is 0 Finally, you win! ------------------------------------------
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例