# -*- coding: utf-8 -*- import pygame import random import api.Image as Image from api.Game import CGame from api.GameState import CGameState from api.Button import CButton from api.Globe import Globe from api.Sprite import CSprite from api.MultiLabel import CMultiLabel from api.Points import CPoints import HallState from gettext import gettext as _ from assets.data import area1game4_data STATE_ANSWER = 1 STATE_ANIM = 2 TIME_ANIM = 60 OVER_COLOR = (255, 0, 0) NORMAL_COLOR = (255, 125, 50) GOODS = 6 BADS = 3 class CArea1Game4(CGameState): def __init__(self): CGameState.__init__(self) self.mLocalState = STATE_ANSWER self.mAnimCounter = 0 self.mBackground = None self.mButtonBackA1G4 = None self.mCurrentQuestion = 0 self.mQuestions = [] self.mButtonList = [] self.mBad = 0 self.mGood = 0 self.mBBsetted = False self.mNBsetted = True self.mBHsetted = False self.mNHsetted = True self.mAlphaSet = True self.mHelpShowed = True self.mDialog = None self.mPoints = CPoints(20, 20) CGame().addChild(self.mPoints) font26 = pygame.font.Font('assets/fonts/DejaVuSans.ttf', 26) font28 = pygame.font.Font('assets/fonts/DejaVuSans.ttf', 28) for i in area1game4_data.ITEMS.keys(): t = area1game4_data.ITEMS[i] q = (unicode(t[0], 'UTF-8'), unicode(t[1], 'UTF-8')) self.mQuestions.append(q) button = CButton() button.bgColor = (255, 125, 0) button.font = font26 button.size = (230, 40) button.text = q[1] button._update_image() self.mButtonList.append(button) CGame().addChild(button) self.mBackground = Image.loadImage('assets/images/a1g4/a1game4.png', False) CGame().setBackground(self.mBackground) self.mBook = CSprite(316, 100) self.mBook.loadImage('assets/images/a1g4/A1G4-libro.png') CGame().addChild(self.mBook) self.mGoodSprite = CSprite(300, 100) self.mGoodSprite.loadImage('assets/images/a1g4/good.png') self.mBadSprite = CSprite(300, 100) self.mBadSprite.loadImage('assets/images/a1g4/bad.png') self.mBsetted = False self.mNsetted = True self.mBackImageN = Image.loadImage('assets/images/back.png') self.mBackImageB = Image.loadImage('assets/images/back_big.png') self.mButtonBack = CSprite(1170, 30) self.mButtonBack.setRegistrationPointOffset(22, 22) self.mButtonBack.setImage(self.mBackImageN) CGame().addChild(self.mButtonBack) # help button self.mHelpImageN = Image.loadImage('assets/images/help.png') self.mHelpImageB = Image.loadImage('assets/images/help_big.png') self.mButtonHelp = CSprite(1110, 30) self.mButtonHelp.setRegistrationPointOffset(22, 22) self.mButtonHelp.setImage(self.mHelpImageN) CGame().addChild(self.mButtonHelp) self.mButtonList[0].set_center((350, 550)) self.mButtonList[1].set_center((600, 550)) self.mButtonList[2].set_center((850, 550)) self.mButtonList[3].set_center((350, 600)) self.mButtonList[4].set_center((600, 600)) self.mButtonList[5].set_center((850, 600)) self.mQuestionsL = range(6) random.shuffle(self.mQuestionsL) self.mLabelQuestion = CMultiLabel() self.mLabelQuestion.bgColor = (252, 175, 23) self.mLabelQuestion.set_font('DejaVuSans.ttf', 28) self.mLabelQuestion.set_center((600, 250)) self.mLabelQuestion.set_size((380, 150)) self.mLabelQuestion.set_text(self.mQuestions[self.mQuestionsL[self.mCurrentQuestion]][0]) CGame().addChild(self.mLabelQuestion) alphasurface = pygame.Surface((1200,900)) alphasurface.convert() alphasurface.fill((100,100,100)) alphasurface.set_alpha(200) self.mAlpha = CSprite(0, 0) self.mAlpha.setImage(alphasurface) CGame().addChild(self.mAlpha) self.mButtonAccept = CButton() self.mButtonAccept.bgColor = NORMAL_COLOR self.mButtonAccept.font = font28 self.mButtonAccept.center = (600, 400) self.mButtonAccept.size = (200, 40) self.mButtonAccept.set_text(_('Aceptar')) CGame().addChild(self.mButtonAccept) msg = area1game4_data.HELP self.mInstructions = Globe((450, 150), text=unicode(msg, 'UTF-8'), pico=None) self.mInstructions.set_center((600, 300)) CGame().addChild(self.mInstructions) def update(self): CGameState.update(self) if not(self.mAlphaSet): if self.mButtonBack.mouseOver(): if not(self.mBBsetted): self.mBBsetted = True self.mNBsetted = False self.mButtonBack.setRegistrationPointOffset(27, 27) self.mButtonBack.setImage(self.mBackImageB) else: if not(self.mNBsetted): self.mBBsetted = False self.mNBSetted = True self.mButtonBack.setRegistrationPointOffset(22, 22) self.mButtonBack.setImage(self.mBackImageN) if self.mButtonHelp.mouseOver(): if not(self.mBHsetted): self.mBHsetted = True self.mNHsetted = False self.mButtonHelp.setRegistrationPointOffset(27, 27) self.mButtonHelp.setImage(self.mHelpImageB) else: if not(self.mNHsetted): self.mBHsetted = False self.mNHSetted = True self.mButtonHelp.setRegistrationPointOffset(22, 22) self.mButtonHelp.setImage(self.mHelpImageN) if self.mButtonBack.clicked(): hs = HallState.CHallState() CGame().setState(hs) hs.setCurrentGame(3) return if self.mButtonHelp.clicked(): self.mAlphaSet = True self.mHelpShowed = True CGame().addChild(self.mAlpha) CGame().addChild(self.mInstructions) CGame().addChild(self.mButtonAccept) return if self.mLocalState == STATE_ANSWER: for b in self.mButtonList: if b.mouseOver(): b.set_bgColor(OVER_COLOR) else: b.set_bgColor(NORMAL_COLOR) answer = -1 for i in range(6): b = self.mButtonList[i] if b.clicked(): answer = i break if not(answer == -1): n = -1 if self.mCurrentQuestion < 6: n = self.mQuestionsL[self.mCurrentQuestion] if (answer == n): b = self.mButtonList[answer] b.mclicked = False CGame().removeChild(b) self.mGood = self.mGood + 1 self.mPoints.set_goods(self.mGood) CGame().addChild(self.mGoodSprite) else: self.mBad = self.mBad + 1 self.mPoints.set_bads(self.mBad) CGame().addChild(self.mBadSprite) self.mLocalState = STATE_ANIM elif self.mLocalState == STATE_ANIM: self.mAnimCounter = self.mAnimCounter + 1 if self.mAnimCounter > TIME_ANIM: self.mAnimCounter = 0 CGame().removeChild(self.mGoodSprite) CGame().removeChild(self.mBadSprite) self.mLocalState = STATE_ANSWER self.mCurrentQuestion = self.mCurrentQuestion + 1 #print 'estado de preguntas', self.mCurrentQuestion if not(self.mCurrentQuestion == 6): self.mLabelQuestion.set_text(self.mQuestions[self.mQuestionsL[self.mCurrentQuestion]][0]) if (self.mCurrentQuestion == 6) or (self.mGood == GOODS) or (self.mBad > BADS): CGame().removeChild(self.mBook) CGame().removeChild(self.mLabelQuestion) self.mAlphaSet = True CGame().addChild(self.mAlpha) msg = _('Has terminado con %s respuestas bien') % self.mGood self.mDialog = Globe((450, 100), text=unicode(msg, 'UTF-8'), pico=None) self.mDialog.set_center((600, 300)) CGame().addChild(self.mDialog) CGame().addChild(self.mButtonAccept) if (self.mGood == GOODS): CGame().setEndGameState(1, 3, 1) else: if self.mButtonAccept.mouseOver(): self.mButtonAccept.set_bgColor(OVER_COLOR) else: self.mButtonAccept.set_bgColor(NORMAL_COLOR) if self.mButtonAccept.clicked(): if self.mHelpShowed: self.mAlphaSet = False self.mHelpShowed = False self.mButtonAccept.set_bgColor(NORMAL_COLOR) CGame().removeChild(self.mAlpha) CGame().removeChild(self.mInstructions) CGame().removeChild(self.mButtonAccept) else: hs = HallState.CHallState() CGame().setState(hs) hs.setCurrentGame(3) return def destroy(self): CGameState.destroy(self) CGame().removeChild(self.mButtonHelp) CGame().removeChild(self.mButtonBack) CGame().removeChild(self.mLabelQuestion) CGame().removeChild(self.mPoints) CGame().removeChild(self.mBook) CGame().removeChild(self.mGoodSprite) CGame().removeChild(self.mBadSprite) CGame().removeChild(self.mAlpha) CGame().removeChild(self.mInstructions) CGame().removeChild(self.mButtonAccept) CGame().removeChild(self.mDialog) self.mButtonBackA1G4 = None self.mBackground = None self.mLabelDefinition = None self.mBook = None for i in range(6): b = self.mButtonList[i] CGame().removeChild(b) b = None