# -*- coding: utf-8 -*- import pygame from api.Sprite2 import CSprite from api.Button import CButton from api.Points import CPoints from api.Label import CLabel from api.Mouse import CMouse from api.Globe import Globe import api.Math as Math import api.Image as Image from api.Vector import CVector from api.Game import CGame from api.GameState import CGameState import HallState from assets.data import area1game1_data from gettext import gettext as _ STATE_STALE = 0 STATE_STALE_UP = 1 STATE_DRAG = 2 STATE_ADJUST = 3 STATE_RETURN = 4 STATE_OK = 5 OVER_COLOR = (255, 0, 0) NORMAL_COLOR = (255, 125, 50) GOODS = 8 BADS = 4 class Piece(CSprite): MIN_DISTANCE = 40 TIME_RETURN = 15.0 TIME_ADJUST = 8.0 RADIUS_COLLISION = 50 mState = None def __init__(self, aParent, aNum, aOrigin, aDestine): CSprite.__init__(self) # assign variables self.mNum = aNum self.mParent = aParent self.mOrigin = CVector(aOrigin[0], aOrigin[1]) self.setXY(self.mOrigin.getX(), self.mOrigin.getY()) self.mDest = CVector(aDestine[0], aDestine[1]) self.setState(STATE_STALE) def update(self): CSprite.update(self) if (self.mState == STATE_STALE): if not(self.mParent.mAlphaSet): if self.mouseDown() and (self.mParent.mActivePiece == None): self.mParent.mActivePiece = self.mNum #p = self.mParent.mListPieces[self.mNum] #CGame().removeChild(p) #CGame().addChild(p) self.setState(STATE_STALE_UP) elif (self.mState == STATE_STALE_UP): if self.mouseDown(): # and (self.mParent.mActivePiece == None): self.mParent.mActivePiece = self.mNum p = self.mParent.mListPieces[self.mNum] CGame().removeChild(p) CGame().addChild(p) self.setState(STATE_DRAG) elif (self.mState == STATE_DRAG): x, y = CMouse().getPos() self.setXY(x, y) if self.clicked(): d = Math.dist(self.mPos.getX() , self.mPos.getY(), self.mDest.getX(), self.mDest.getY()) if (d < self.MIN_DISTANCE): self.setState(STATE_ADJUST) else: #print 'set return' self.setState(STATE_RETURN) self.mParent.mActivePiece = None elif (self.mState == STATE_ADJUST): if (Math.dist(self.mPos.getX() , self.mPos.getY(), self.mDest.getX(), self.mDest.getY()) < self.RADIUS_COLLISION): self.setState(STATE_OK) self.mParent.mGood = self.mParent.mGood + 1 self.mParent.mPoints.set_goods(self.mParent.mGood) elif (self.mState == STATE_RETURN): dist = Math.dist(self.mPos.getX() , self.mPos.getY(), self.mOrigin.getX(), self.mOrigin.getY()) if (dist < self.RADIUS_COLLISION): #play(Sonido mal) self.setState(STATE_STALE) self.mParent.mBad = self.mParent.mBad+ 1 self.mParent.mPoints.set_bads(self.mParent.mBad) elif (self.mState == STATE_OK): pass def setState(self, aState): if (aState == STATE_STALE): #o = CVector(self.mOrigin.getX(), self.mOrigin.getY()) self.setPosition(self.mOrigin) #self.setXY(100, 200) self.mVel = CVector(0.0, 0.0) if (aState == STATE_STALE_UP): #o = CVector(self.mOrigin.getX(), self.mOrigin.getY()) #self.setPosition(self.mOrigin) CGame().addChild(self.mParent.mListOptions[self.mNum]) self.setXY(600, 500) self.mVel = CVector(0.0, 0.0) if (aState == STATE_DRAG): self.mVel = CVector(0.0, 0.0) #CGame().addChild(self.mParent.mListOptions[self.mNum]) if (aState == STATE_ADJUST): self.setVelXY((self.mDest.getX() - self.mPos.getX()) / self.TIME_ADJUST, (self.mDest.getY() - self.mPos.getY()) / self.TIME_ADJUST) CGame().removeChild(self.mParent.mListOptions[self.mNum]) if (aState == STATE_RETURN): vec = CVector(self.mOrigin.getX() - self.mPos.getX(), self.mOrigin.getY() - self.mPos.getY()) vec.normalize() dist = Math.dist(self.mOrigin.getX(), self.mOrigin.getY(), self.mPos.getX(), self.mPos.getY()) vec.mul(dist/self.TIME_ADJUST) self.setVelXY(vec.getX(), vec.getY()) CGame().removeChild(self.mParent.mListOptions[self.mNum]) if (aState == STATE_OK): self.setPosition(self.mDest) self.mVel = CVector(0.0, 0.0) #play(Sonido OK) self.mState = aState def getState(self): return self.mState class CArea1Game1(CGameState): def __init__(self): CGameState.__init__(self) self.mBackground = None self.mButtonPlay = None self.mListOptions = [] self.mListPieces = [] self.mActivePiece = None self.mBad = 0 self.mGood = 0 self.mDialog = None self.mBBsetted = False self.mNBsetted = True self.mBHsetted = False self.mNHsetted = True self.mAlphaSet = True self.mHelpShowed = True self.mBackground = Image.loadImage('assets/images/a1g1/A1G1-back.jpg', False) CGame().setBackground(self.mBackground) self.mBox = CSprite() self.mBox.setXY(420, 600) self.mBox.loadImage('assets/images/a1g1/A1G1-caja.png') CGame().addChild(self.mBox) self.mElisa = CSprite() self.mElisa.setXY(12, 110) self.mElisa.loadImage('assets/images/a1g1/A1G1-silueta-elisa.png') CGame().addChild(self.mElisa) self.mJuan = CSprite() self.mJuan.setXY(670, 75) self.mJuan.loadImage('assets/images/a1g1/A1G1-silueta-juan.png') CGame().addChild(self.mJuan) # back button self.mBackImageN = Image.loadImage('assets/images/back.png') self.mBackImageB = Image.loadImage('assets/images/back_big.png') self.mButtonBack = CSprite() self.mButtonBack.setRegistrationPointOffset(22, 22) self.mButtonBack.setXY(1170, 30) 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() self.mButtonHelp.setRegistrationPointOffset(22, 22) self.mButtonHelp.setXY(1110, 30) self.mButtonHelp.setImage(self.mHelpImageN) CGame().addChild(self.mButtonHelp) # load the pieces # parameters: aParent, aNum, aOrigin, aDestine #mujer piece = Piece(self, 0, (600.0, 655.0), (260.0, 460.0)) piece.loadImage('assets/images/a1g1/A1G1-mamas.png') self.mListPieces.append(piece) piece = Piece(self, 1, (630.0, 655.0), (254.0, 549.0)) piece.loadImage('assets/images/a1g1/A1G1-ovarios.png') self.mListPieces.append(piece) piece = Piece(self, 2, (600.0, 655.0), (254.0, 559.0)) piece.loadImage('assets/images/a1g1/A1G1-utero.png') self.mListPieces.append(piece) piece = Piece(self, 3, (630.0, 655.0), (258.0, 630.0)) piece.loadImage('assets/images/a1g1/A1G1-vagina.png') self.mListPieces.append(piece) #hombre piece = Piece(self, 4, (600.0, 665.0), (927.0, 650.0)) piece.loadImage('assets/images/a1g1/A1G1-pene.png') self.mListPieces.append(piece) piece = Piece(self, 5, (630.0, 665.0), (927.0, 588.0)) piece.loadImage('assets/images/a1g1/A1G1-prostata.png') self.mListPieces.append(piece) piece = Piece(self, 6, (600.0, 665.0), (927.0, 656.0)) piece.loadImage('assets/images/a1g1/A1G1-testiculos.png') self.mListPieces.append(piece) piece = Piece(self, 7, (630.0, 665.0), (927.0, 606.0)) piece.loadImage('assets/images/a1g1/A1G1-vesiculas.png') self.mListPieces.append(piece) for p in self.mListPieces: size = p.getSize() p.setRegistrationPointOffset(size[0] / 2 , size[1] / 2) CGame().addChild(p) # load the options pieces = [_('Mamas'), _('Ovarios'), _('Utero'), _('Vagina')] pieces = pieces + [_('Pene'), _('Próstata'), _('Testículos'), _('Vesículas')] for name in pieces: op = CLabel() op.bgColor = (0x99, 0x99, 0x66) op.fgColor = (0xFF, 0xFF, 0xFF) op.font = pygame.font.Font('assets/fonts/DejaVuSans.ttf', 28) op.set_center((600, 400)) op.set_size((200, 40)) op.set_text(unicode(name, 'UTF-8')) self.mListOptions.append(op) self.mPoints = CPoints() self.mPoints.setXY(250, 10) #self.mPoints.set_bads(55) #self.mPoints.set_goods(55) CGame().addChild(self.mPoints) alphasurface = pygame.Surface((1200,900)) alphasurface.convert() alphasurface.fill((100,100,100)) alphasurface.set_alpha(200) self.mAlpha = CSprite() self.mAlpha.setXY(0, 0) self.mAlpha.setImage(alphasurface) CGame().addChild(self.mAlpha) self.mButtonAccept = CButton() self.mButtonAccept.set_bgColor(NORMAL_COLOR) self.mButtonAccept.font = pygame.font.Font('assets/fonts/DejaVuSans.ttf', 28) self.mButtonAccept.set_center((600, 400)) self.mButtonAccept.set_size((200, 40)) self.mButtonAccept.set_text(_('Aceptar')) CGame().addChild(self.mButtonAccept) msg = area1game1_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(0) 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.mGood == GOODS) or (self.mBad > BADS): 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) 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(0) return def destroy(self): CGameState.destroy(self) CGame().removeChild(self.mButtonBack) CGame().removeChild(self.mButtonHelp) CGame().removeChild(self.mPoints) CGame().removeChild(self.mBox) CGame().removeChild(self.mElisa) CGame().removeChild(self.mJuan) self.mPoints = None for p in self.mListPieces: CGame().removeChild(p) for o in self.mListOptions: CGame().removeChild(o) self.mButtonBack = None self.mButtonHelp = None self.mBackground = None CGame().removeChild(self.mAlpha) CGame().removeChild(self.mDialog) CGame().removeChild(self.mButtonAccept)