def test_validateChapterKey(self): text = texts.Text('testing') text.loadFromString(self.bookWithChaptersText) with self.assertRaises(KeyError): text._validateChapterKey(None) with self.assertRaises(KeyError): text._validateChapterKey(0) with self.assertRaises(KeyError): text._validateChapterKey('1') text._validateChapterKey(1) text._validateChapterKey(2) text._validateChapterKey(3) with self.assertRaises(KeyError): text._validateChapterKey(4) text = texts.Text('testing', False) text.loadFromString(self.bookWithoutChaptersText) with self.assertRaises(KeyError): text._validateChapterKey(None) with self.assertRaises(KeyError): text._validateChapterKey(0) with self.assertRaises(KeyError): text._validateChapterKey('1') # It seems helpful to treat the number 1 as a valid # chapterKey. text._validateChapterKey(1) with self.assertRaises(KeyError): text._validateChapterKey(2)
def test_allVersesInChapter(self): text = texts.Text('testing') text.loadFromString(self.bookWithChaptersText) # This should arrive at all verses in chapter 1. self.assertEqual(text._allVersesInChapter(1), [ ((1, 1), u'In principio creavit Deus cælum et terram.'), ((1, 2), u'Terra autem erat inanis et vacua...'), ((1, 3), u'Dixitque Deus...'), ]) # This should arrive at all verses in chapter 2. self.assertEqual(text._allVersesInChapter(2), [ ((2, 1), u'Igitur perfecti sunt cæli et terra...'), ((2, 2), u'Complevitque Deus die septimo opus suum quod fecerat...'), ((2, 3), u'Et benedixit diei septimo...'), ]) text = texts.Text('testing', False) text.loadFromString(self.bookWithoutChaptersText) # This should arrive at all verses in chapter 1. self.assertEqual(text._allVersesInChapter(1), [ ((1, 1), u'Judas Jesu Christi servus...'), ((1, 2), u'Misericordia vobis...'), ((1, 3), u'Carissimi...'), ])
def test_getVerse(self): text = texts.Text('testing') text.loadFromString(self.bookWithChaptersText) # This should return all of chapter 1. result = text.getVerse(addrs.Addr(1)) self.assertEqual(result, [ ((1, 1), u'In principio creavit Deus cælum et terram.'), ((1, 2), u'Terra autem erat inanis et vacua...'), ((1, 3), u'Dixitque Deus...'), ]) # This should return all of chapter 2. result = text.getVerse(addrs.Addr(2)) self.assertEqual(result, [ ((2, 1), u'Igitur perfecti sunt cæli et terra...'), ((2, 2), u'Complevitque Deus die septimo opus suum quod fecerat...'), ((2, 3), u'Et benedixit diei septimo...'), ]) # This should return verse 1:1. result = text.getVerse(addrs.Addr(1, 1)) self.assertEqual(result, [ ((1, 1), u'In principio creavit Deus cælum et terram.'), ]) # This should return verse 1:2. result = text.getVerse(addrs.Addr(1, 2)) self.assertEqual(result, [ ((1, 2), u'Terra autem erat inanis et vacua...'), ]) # This should return verse 2:3: result = text.getVerse(addrs.Addr(2, 3)) self.assertEqual(result, [ ((2, 3), u'Et benedixit diei septimo...'), ]) text = texts.Text('testing', False) text.loadFromString(self.bookWithoutChaptersText) # This should return only verse 1. result = text.getVerse(addrs.Addr(1)) self.assertEqual(result, [ (1, u'Judas Jesu Christi servus...'), ]) # This should return only verse 2. result = text.getVerse(addrs.Addr(2)) self.assertEqual(result, [ (2, u'Misericordia vobis...'), ]) # A request for 1:2 should also return verse 2, but the # 'address' should have the shape of the reference. result = text.getVerse(addrs.Addr(1, 2)) self.assertEqual(result, [ ((1, 2), u'Misericordia vobis...'), ])
def test_validateVerseKey(self): text = texts.Text('testing') text.loadFromString(self.bookWithChaptersText) # If the book has chapters, any verseKey by itself is cause # for an exception. with self.assertRaises(KeyError): text._validateVerseKey(None) with self.assertRaises(KeyError): text._validateVerseKey(0) with self.assertRaises(KeyError): text._validateVerseKey('1') with self.assertRaises(KeyError): text._validateVerseKey(1) text = texts.Text('testing', False) text.loadFromString(self.bookWithoutChaptersText) with self.assertRaises(KeyError): text._validateVerseKey(None) with self.assertRaises(KeyError): text._validateVerseKey(0) with self.assertRaises(KeyError): text._validateVerseKey('1') text._validateVerseKey(1) text._validateVerseKey(2) text._validateVerseKey(3) with self.assertRaises(KeyError): text._validateVerseKey(4)
def Check_Hit_PowerUp(self,SpriteGroup): for Sprite in SpriteGroup: playSound("pickup") player.Player.PowerupType=Sprite.type # Grab Power up type (0=autofire 1=2 way fire 3=fire all directions) type_text=["Auto Fire","Two Way Fire","Four Way Fire"] text = texts.Text(self.game, 400, 500, type_text[Sprite.type].format(round),50,"CENTRE",3,1) self.game.points.append(text)
def test_firstVersesInChapter(self): text = texts.Text('testing') text.loadFromString(self.bookWithChaptersText) # This should produce verses 1:1-3. self.assertEqual(text._firstVersesInChapter(1, 1), [ ((1, 1), u'In principio creavit Deus cælum et terram.'), ]) # This should produce verses 1:2-3. self.assertEqual(text._firstVersesInChapter(1, 2), [ ((1, 1), u'In principio creavit Deus cælum et terram.'), ((1, 2), u'Terra autem erat inanis et vacua...'), ]) # This should produces verses 1:3. self.assertEqual(text._firstVersesInChapter(1, 3), [ ((1, 1), u'In principio creavit Deus cælum et terram.'), ((1, 2), u'Terra autem erat inanis et vacua...'), ((1, 3), u'Dixitque Deus...'), ])
def test_middleVersesInChapter(self): text = texts.Text('testing') text.loadFromString(self.bookWithChaptersText) # This should produce all three verses of chapter one. self.assertEqual(text._middleVersesInChapter(1, 1, 3), [ ((1, 1), u'In principio creavit Deus cælum et terram.'), ((1, 2), u'Terra autem erat inanis et vacua...'), ((1, 3), u'Dixitque Deus...'), ]) # This should produce only verse 1. self.assertEqual(text._middleVersesInChapter(1, 1, 1), [ ((1, 1), u'In principio creavit Deus cælum et terram.'), ]) # This should produce only verse 2. self.assertEqual(text._middleVersesInChapter(1, 2, 2), [ ((1, 2), u'Terra autem erat inanis et vacua...'), ]) # This should produce only verse 3. self.assertEqual(text._middleVersesInChapter(1, 3, 3), [ ((1, 3), u'Dixitque Deus...'), ]) # This should produce verses 1-2. self.assertEqual(text._middleVersesInChapter(1, 1, 2), [ ((1, 1), u'In principio creavit Deus cælum et terram.'), ((1, 2), u'Terra autem erat inanis et vacua...'), ]) # This should produce verses 2-3. self.assertEqual(text._middleVersesInChapter(1, 2, 3), [ ((1, 2), u'Terra autem erat inanis et vacua...'), ((1, 3), u'Dixitque Deus...'), ])
def test_getRangeOfVerses(self): text = texts.Text('testing') text.loadFromString(self.bookWithChaptersText) # Here are a few ranges entirely within the same chapter, # starting with 1:1-1:3. verses = text.getRangeOfVerses( addrs.AddrRange(addrs.Addr(1, 1), addrs.Addr(1, 3))) self.assertEqual( [((1, 1), u'In principio creavit Deus cælum et terram.'), ((1, 2), u'Terra autem erat inanis et vacua...'), ((1, 3), u'Dixitque Deus...')], verses) # 2:1-2:2 verses = text.getRangeOfVerses( addrs.AddrRange(addrs.Addr(2, 1), addrs.Addr(2, 2))) self.assertEqual( [((2, 1), u'Igitur perfecti sunt cæli et terra...'), ((2, 2), u'Complevitque Deus die septimo opus suum quod fecerat...')], verses) # 3:2-3:3 verses = text.getRangeOfVerses( addrs.AddrRange(addrs.Addr(3, 2), addrs.Addr(3, 3))) self.assertEqual( [((3, 2), u'Cui respondit mulier...'), ((3, 3), u'de fructu vero ligni quod est in medio paradisi...')], verses) # Here are some ranges in adjacent chapters, starting with # 1:1-2:1: verses = text.getRangeOfVerses( addrs.AddrRange(addrs.Addr(1, 1), addrs.Addr(2, 1))) self.assertEqual( [((1, 1), u'In principio creavit Deus cælum et terram.'), ((1, 2), u'Terra autem erat inanis et vacua...'), ((1, 3), u'Dixitque Deus...'), ((2, 1), u'Igitur perfecti sunt cæli et terra...')], verses) # 2:2-3:2 verses = text.getRangeOfVerses( addrs.AddrRange(addrs.Addr(2, 2), addrs.Addr(3, 2))) self.assertEqual([ ((2, 2), u'Complevitque Deus die septimo opus suum quod fecerat...'), ((2, 3), u'Et benedixit diei septimo...'), ((3, 1), u'Sed et serpens erat callidior cunctis animantibus terræ quæ fecerat Dominus Deus...' ), ((3, 2), u'Cui respondit mulier...') ], verses) # Finally, here is the case of a book in the middle: 1:3-3:1: verses = text.getRangeOfVerses( addrs.AddrRange(addrs.Addr(1, 3), addrs.Addr(3, 1))) self.assertEqual([ ((1, 3), u'Dixitque Deus...'), ((2, 1), u'Igitur perfecti sunt cæli et terra...'), ((2, 2), u'Complevitque Deus die septimo opus suum quod fecerat...'), ((2, 3), u'Et benedixit diei septimo...'), ((3, 1), u'Sed et serpens erat callidior cunctis animantibus terræ quæ fecerat Dominus Deus...' ) ], verses) # Now let's see if we can handle whole-chapter ranges like # 1-2: verses = text.getRangeOfVerses( addrs.AddrRange(addrs.Addr(1), addrs.Addr(2))) self.assertEqual( [((1, 1), u'In principio creavit Deus cælum et terram.'), ((1, 2), u'Terra autem erat inanis et vacua...'), ((1, 3), u'Dixitque Deus...'), ((2, 1), u'Igitur perfecti sunt cæli et terra...'), ((2, 2), u'Complevitque Deus die septimo opus suum quod fecerat...'), ((2, 3), u'Et benedixit diei septimo...')], verses) # What about a range like 1-1? We don't expect this from a # human, but it can happen when we normalize a mix of # addresses and address ranges to address ranges. expectedVerses = [((1, 1), u'In principio creavit Deus cælum et terram.'), ((1, 2), u'Terra autem erat inanis et vacua...'), ((1, 3), u'Dixitque Deus...')] self.assertEqual( expectedVerses, text.getRangeOfVerses(addrs.AddrRange(addrs.Addr(1), addrs.Addr(1)))) # What about a range that begins on a chapter, but ends on a # verse, like 1-2:2: verses = text.getRangeOfVerses( addrs.AddrRange(addrs.Addr(1), addrs.Addr(2, 2))) self.assertEqual( [((1, 1), u'In principio creavit Deus cælum et terram.'), ((1, 2), u'Terra autem erat inanis et vacua...'), ((1, 3), u'Dixitque Deus...'), ((2, 1), u'Igitur perfecti sunt cæli et terra...'), ((2, 2), u'Complevitque Deus die septimo opus suum quod fecerat...')], verses)
def update(self): #** In the event bullet leaves screen boundaries #** REMOVE the bullet off the screen & memory #*** for bullet in self.game.projectile: if bullet.rect.y < 0 or bullet.rect.y > SCREEN_HEIGHT - PLAYER_HEIGHT \ or bullet.rect.x < 0 or bullet.rect.x-PROJECTILE_OFFSET > SCREEN_WIDTH - PLAYER_WIDTH: self.game.projectile.remove(bullet) #*** # Grab the keyboard up/down/left/right/space # This construct also allows diagonal movement ie. left+down #*** keys=pygame.key.get_pressed() if keys[K_LEFT]: self.rect.x -= self.playerspeed self.CheckX() self.lastdirection=K_LEFT self.lasthoriz=K_LEFT elif keys[K_RIGHT]: self.rect.x += self.playerspeed self.CheckX() self.lastdirection=K_RIGHT self.lasthoriz=K_RIGHT if keys[K_UP]: self.rect.y -= self.playerspeed self.CheckY() self.lastdirection=K_UP self.lastvert=K_UP elif keys[K_DOWN]: self.rect.y += self.playerspeed self.CheckY() self.lastdirection=K_DOWN self.lastvert=K_DOWN SpriteGroup = pygame.sprite.groupcollide(self.game.powerups,self.game.PlayerSprites,True,False) projectile.Projectile.Check_Hit_PowerUp(self,SpriteGroup) #*** Check if Player Collides with Enemy *** SpriteGroup = pygame.sprite.groupcollide(self.game.PlayerSprites,self.game.enemies,False,True) if SpriteGroup: playSound("dying") spn=len(self.game.Enemy_SPAWN_List) # Spawned #hits=self.game.enemy_hits # Enemies Destroyed on screen if (self.game.allspawned==True): self.game.enemies_level_start=len(self.game.enemies)+1 #spn-hits else: self.game.enemies_level_start=spn self.First_Time_in_Round=False text = texts.Text(self.game, 550, SCREEN_HEIGHT-15, str(self.game.enemies_level_start)+" enemies remaining",15,"CENTRE",3,1) self.game.points.append(text) bs=175 cv=145 for i in range(5): self.DyingEffect(bs,cv,0,0) self.DyingEffect(-bs,cv,0,0) self.DyingEffect(bs,cv,cv,0) #reset values to original self.image = pygame.Surface((self.width,self.height)) self.image.fill((YELLOW)) self.game.draw() pygame.sprite.Group.empty(self.game.enemies) pygame.sprite.Group.empty(self.game.projectile) self.game.playing=False self.game.SetPlayerDead() self.game.Enemy_SPAWN_List.clear() pygame.sprite.Group.empty(self.game.enemies) pygame.sprite.Group.empty(self.game.projectile) pygame.sprite.Group.empty(self.game.powerups) self.game.enemies_spawned=0 self.image.fill((BLACK)) return if Player.PowerupType>=0 or keys[K_SPACE]: if self.projectilecooldown==0 : #stopSound("walking") playSound("firing") #*** After cooldown period, FIRE a BULLET!! In direction player last moved on screen self.projectilecooldown=self.maxprojectilecooldown projectile1=projectile.Projectile(self.game,self.lastdirection,self.rect.x,self.rect.y) self.game.projectile.add(projectile1) directions=[K_UP,K_DOWN,K_LEFT,K_RIGHT] if Player.PowerupType==2: # Power up to fire in all directions if self.lastdirection in directions: directions.remove(self.lastdirection) # Dont fire in this direction (..already did a few lines above) for newbullet in directions: # add projectiles in the three other directions projectile1=projectile.Projectile(self.game,newbullet,self.rect.x,self.rect.y) self.game.projectile.add(projectile1) if Player.PowerupType==1: # Power up to fire in two directions if self.lastdirection in [K_UP,K_DOWN]: xlastvert=K_UP if self.lastvert==K_LEFT: xlastvert=K_RIGHT if self.lastvert==K_RIGHT: xlastvert=K_LEFT projectile1=projectile.Projectile(self.game,self.lasthoriz,self.rect.x,self.rect.y) self.game.projectile.add(projectile1) else: xlasthoriz=K_DOWN if self.lasthoriz==K_UP: xlasthoriz=K_DOWN if self.lasthoriz==K_DOWN: xlasthoriz=K_UP projectile1=projectile.Projectile(self.game,self.lastvert,self.rect.x,self.rect.y) self.game.projectile.add(projectile1) else: self.projectilecooldown-=1