def _refresh_dialog(self): """ Uppdatera namn i namnfält Anropas när tecken lagts till eller tagits bort. """ nbr_of_chars = len(self.name) # Dölj nuvarande namn och skapa nytt grafikobjekt för namn. super().remove_from_world(self.erasename_rect) gv.graphics["playername"] = gv.menufont_medium.render\ (''.join(self.name), True, gv.yellow) # Bestäm centerposition och visa nyskapat namnobjekt. NAME_X = 297 NAME_Y = 220 namerect = gv.graphics["playername"].get_rect() namerect.x = NAME_X - (namerect.width / 2) namerect.y = NAME_Y screen.blit("playername", namerect) # Bestäm position för textpekare och visa textpekare. CURSOR_X = namerect.x + namerect.width + 2 # precis intill namn screen.blit("cursor_dialog", pygame.Rect(CURSOR_X, 220, 30, 30))
def start(self): """ Visar menyvy """ gv.switch_window = False # Ersätt hela fönstret med menyvy. screen.erase(gv.whole_screenrect) screen.blit("bg_main_menu", gv.whole_screenrect) self.show_main(goback_sound = False)
def update_scorebar(self, score): """ Uppdatera poängruta med nytt poäng """ # Skapa grafikobjekt för poängtext. gv.graphics["score"] = gv.menufont_large.render( str(score), True, gv.yellow) # Ta bort nuvarande poängtext och lägg till ny. screen.erase(self.rects["score"]) screen.blit("score", self.rects["score"])
def addfood(self): """ Lägg ut äpple på ett slumpmässigt matställe """ global STEP X = 0 # Välj ut ett slumpmässigt matställe. coordinate = random.sample(self.foodspots, 1) # Visa äpple på utvalt matställe. self.foodspot = pygame.Rect(coordinate[X], (STEP, STEP)) screen.blit("food", self.foodspot)
def update_cursor(self): """ Flytta pekare till ny position """ ROWGAP = 30 # vertikalt avstånd mellan menyval # Bestäm ny pekarpos genom att utgå från pekarpos för första menyval. cursorpos = pygame.Rect(self.rects["cursor_on_PLAY"]) cursorpos.y = cursorpos.y + self.cursor_at * ROWGAP # Dölj föregående pekare och visa ny pekare. screen.erase(self.rects["del_cursor"]) screen.blit("cursor_menu", cursorpos)
def update_scorebar(self, score): """ Uppdatera poängruta med nytt poäng """ # Skapa grafikobjekt för poängtext. gv.graphics["score"] = gv.menufont_large.render(str(score), True, gv.yellow) # Ta bort nuvarande poängtext och lägg till ny. screen.erase(self.rects["score"]) screen.blit("score", self.rects["score"])
def update_happybar(self): """ Uppdatera pekare som visar ormens belåtenhetsnivå """ # Ta bort aktuell belåtenhetsmätare och lägg till ny. screen.erase(self.rects["happybar"]) screen.blit("happybar_gui", self.rects["happybar"]) # Beräkna position för pekare och placera ut på mätare. # happycursor recten innehåller position för mätare. # Genom att använda x position för mätarens västra # sida så kan man räkna ut pekarens position på mätaren. rect = pygame.Rect(self.rects["happycursor"]) rect.x = rect.x + self.HAPPYLEVEL_STEP * Snake.happylevel screen.blit("happycursor_gui", rect)
def show_main(self, goback_sound = True): """ Visar menyval i huvudmeny vid retur från submeny """ self.cursor_at = self.PLAY # Spela ljud om föregående fönster var en submeny. if goback_sound: gv.sounds["back_menu"].play() # Töm aktuell meny för att sedan visa huvudmeny. self.clearmenu() screen.blit("text_play_menu", self.rects["play"]) screen.blit("text_table_menu", self.rects["table"]) screen.blit("text_help_menu", self.rects["help"]) screen.blit("text_exit_menu", self.rects["exit"]) screen.blit("cursor_menu", self.rects["cursor_on_PLAY"])
def display(self, board): # render text for i in range(9): for j in range(9): if self._board[i][j]: c = (255, 0, 0) else: c = (0, 128, 0) text = font.render(str(board[i][j]), True, c) h = text.get_height() - 5 textpos = text.get_rect() textpos.centerx = screen.get_rect().centerx + j * h - 200 textpos.centery = 50 + i * h screen.fill((255, 255, 255), textpos) screen.blit(text, textpos) pygame.display.flip()
def move(self): """ Förflytta orm Returnera False vid krasch eller vid för låg belåtenhetsnivå. I annat fall returnera True. Värdet används i Gameklassen för att avgöra om spelet är över eller inte. """ X = 0 Y = 1 global STEP global WORLDRECT # Ändra riktning på orm om svänglista inte är tom. if self.turnlist: self.direction = self.turnlist.pop(0) # Bestäm nytt huvud, huvud utanför värld hamnar på motsatt sida. head = pygame.Rect( self.head) # kopiera koordinater för nuvarande huvud head.x = (head.x + (self.direction[X] * STEP)) % WORLDRECT.width head.y = (head.y + (self.direction[Y] * STEP)) % WORLDRECT.height # Lägg till nytt huvud. self.head = head self.snake.append(head) # Ta bort nytt huvud från giltiga matställen och visa huvud. self.world.remove_foodspot(self.head) screen.erase(head) screen.blit("snake", head) # Ta bort svans för att simulera rörelse. if not self.grow: # Borttagen svans blir matplats. self.world.add_foodspot(self.tail) # Ta bort svans och bestäm ny svans. screen.erase(self.snake.popleft()) self.tail = self.snake[0] # 1:a elementet = ny svans # Förläng orm genom att inte ta bort svans. else: self.grow -= 1 return self.nocollision() and Snake.happylevel >= 0
def move(self): """ Förflytta orm Returnera False vid krasch eller vid för låg belåtenhetsnivå. I annat fall returnera True. Värdet används i Gameklassen för att avgöra om spelet är över eller inte. """ X = 0 Y = 1 global STEP global WORLDRECT # Ändra riktning på orm om svänglista inte är tom. if self.turnlist: self.direction = self.turnlist.pop(0) # Bestäm nytt huvud, huvud utanför värld hamnar på motsatt sida. head = pygame.Rect(self.head) # kopiera koordinater för nuvarande huvud head.x = (head.x + (self.direction[X] * STEP)) % WORLDRECT.width head.y = (head.y + (self.direction[Y] * STEP)) % WORLDRECT.height # Lägg till nytt huvud. self.head = head self.snake.append(head) # Ta bort nytt huvud från giltiga matställen och visa huvud. self.world.remove_foodspot(self.head) screen.erase(head) screen.blit("snake", head) # Ta bort svans för att simulera rörelse. if not self.grow: # Borttagen svans blir matplats. self.world.add_foodspot(self.tail) # Ta bort svans och bestäm ny svans. screen.erase(self.snake.popleft()) self.tail = self.snake[0] # 1:a elementet = ny svans # Förläng orm genom att inte ta bort svans. else: self.grow -= 1 return self.nocollision() and Snake.happylevel >= 0
def reset(self): """ Ställ in/återställ orm """ global STEP Snake.happylevel = 2 # orm är lagomt belåten från start self.direction = self.EAST self.grow = 0 self.turnlist = [] # Bestäm ormens initialkoordinater. self.tail = pygame.Rect(8 * STEP, 7 * STEP, STEP, STEP) middle = pygame.Rect((9 * STEP, 7 * STEP), (STEP, STEP)) self.head = pygame.Rect(10 * STEP, 7 * STEP, STEP, STEP) # Skapa orm med en längd på tre pluppar. self.snake.clear() # ta bort befintliga pluppar self.snake.append(self.tail) self.snake.append(middle) self.snake.append(self.head) # Visa orm i värld. for bodypart in self.snake: screen.blit("snake", bodypart)
def reset(self): """ Ställ in/återställ orm """ global STEP Snake.happylevel = 2 # orm är lagomt belåten från start self.direction = self.EAST self.grow = 0 self.turnlist = [] # Bestäm ormens initialkoordinater. self.tail = pygame.Rect(8*STEP, 7*STEP, STEP, STEP) middle = pygame.Rect((9*STEP, 7*STEP), (STEP, STEP)) self.head = pygame.Rect(10*STEP, 7*STEP, STEP, STEP) # Skapa orm med en längd på tre pluppar. self.snake.clear() # ta bort befintliga pluppar self.snake.append(self.tail) self.snake.append(middle) self.snake.append(self.head) # Visa orm i värld. for bodypart in self.snake: screen.blit("snake", bodypart)
def add_question(self, operand1, operand2, operator, answer_options): """ Visa fråga med svarsalternativ i GUI """ # Skapa grafik för fråga och svarsalternetiv. question = str(operand1) + " " + operator + " " + str(operand2) gv.graphics["question"] = gv.mathfont.render(question, True, gv.yellow) gv.graphics["answer_alt1"] = gv.mathfont.render\ ("1. " + str(answer_options[0]), True, gv.yellow) gv.graphics["answer_alt2"] = gv.mathfont.render\ ("2. " + str(answer_options[1]), True, gv.yellow) gv.graphics["answer_alt3"] = gv.mathfont.render\ ("3. " + str(answer_options[2]), True, gv.yellow) # Visa fråga och svarsalternativ. self.erase_qa() # ta bort nuvarande fråga och svarsalternativ screen.blit("question", self.rects["question"]) screen.blit("answer_alt1", self.rects["answer_alt1"]) screen.blit("answer_alt2", self.rects["answer_alt2"]) screen.blit("answer_alt3", self.rects["answer_alt3"])
def reset(self): """ Töm grafikinnehåll i GUI fönster. """ screen.blit("bg_gui", self.rects["bg"])
def draww(self, screen): self.font = pygame.font.SysFont('SimHei', 20) self.font_surface = self.font.render('疼!', True, (0, 0, 0)) screen.blit(self.font_surface, (self.x - 19, self.y - 20)) self.font_surface = self.font.render('疼!', True, (255, 255, 255)) screen.blit(self.font_surface, (self.x - 20, self.y - 19))
def draww(self, screen): self.font = pygame.font.SysFont('SimHei', 20) self.font_surface = self.font.render('减速', True, (0, 0, 0)) screen.blit(self.font_surface, (self.x + 1, self.y + 1)) self.font_surface = self.font.render('减速', True, (144, 144, 255)) screen.blit(self.font_surface, (self.x, self.y))
i = 0 def goldencut(base): return base * 0.382 def middle(base): return round(base * 0.5, 0) while True: events = pygame.event.get() mouse_pos = pygame.mouse.get_pos() screen.fill((246, 198, 0)) # fill screen with an rgb color screen.blit(img, (middle(480) - 20, goldencut(800) - 20)) for event in events: print event if event.type == pygame.MOUSEBUTTONDOWN: if pygame.Rect((middle(480) - 20, goldencut(800) - 20), (40, 40)).collidepoint( mouse_pos ): #funktioniert noch nicht, muss verschoben werden print "Hey you tickled the shit!" pygame.display.flip()
def show_help(self): """ Visar hjälpmeny """ self.in_submenu = True # Töm aktuell meny för att sedan visa hjälpmeny. self.clearmenu() screen.blit("bg_help_menu", pygame.Rect(295, 200, 500, 500)) screen.blit("text_return_menu", pygame.Rect(340, 364, 150, 100)) screen.blit("text_help_meter", pygame.Rect(395, 196, 200, 100)) screen.blit("text_help_arrowkeys", pygame.Rect(395, 248, 200, 100)) screen.blit("text_help_nbrs", pygame.Rect(395, 280, 200, 100)) screen.blit("text_help_esc", pygame.Rect(395, 310, 200, 100))
# check for closing window if event.type == pygame.QUIT: running = False elif event.type == pygame.MOUSEBUTTONUP: pos = pygame.mouse.get_pos() #TODO: block placing elif event.type == pygame.KEYDOWN: xadd = 0 yadd = 0 print('keydown ' + str(event.key)) if (event.key == pygame.K_w): yadd = -10 if (event.key == pygame.K_s): yadd = 10 if (event.key == pygame.K_d): xadd = 10 if (event.key == pygame.K_a): xadd = -10 player.move(player.x + xadd, player.y + yadd) # Обновление # Рендеринг screen.fill(BLACK) print(sprites) for key, value in sprites.items(): screen.blit(value.image, (value.rect.x, value.rect.y)) pygame.display.update() pygame.quit()
def introtext(self): """ Visa instruktioner för att starta spel/returnera till huvudmeny. """ screen.blit("introtext_line1", pygame.Rect(115, 190, 400, 300)) screen.blit("introtext_line2", pygame.Rect(115, 230, 400, 300))
def show_table(self): """ Visar tabell/highscores """ self.in_submenu = True # Töm aktuell meny för att sedan visa tabellmeny. self.clearmenu() screen.blit("text_header_table", pygame.Rect(295, 180, 100, 100)) screen.blit("text_underscore_table", pygame.Rect(295, 185, 100, 100)) screen.blit("text_underscore_table", pygame.Rect(445, 185, 100, 100)) screen.blit("text_return_menu", pygame.Rect(340, 364, 150, 100)) rownbr = 0 FIRSTROW_Y = 210 # y-koordinat första rad NAME_X = 295 # x-koordinat för namn SCORE_X = 446 # x-koordinat för poäng ROWGAP = 15 # avstånd mellan poängrader SCORE = 0 # indexvariabel för highscorelista # Skriv ut samtliga rader. for h in highscore.get_highscores(): y_coord = FIRSTROW_Y + rownbr * ROWGAP col_name = "highscore_" + str((rownbr + 1)) + "_name" col_score = "highscore_" + str((rownbr + 1)) + "_score" gv.graphics[col_name] = gv.menufont_small.render((str(rownbr + 1) + ". " + h[1]), True, gv.yellow) gv.graphics[col_score] = gv.menufont_small.render(str(h[SCORE]), True, gv.yellow) screen.blit(col_name, pygame.Rect(NAME_X, y_coord, 100, 100)) screen.blit(col_score, pygame.Rect(SCORE_X, y_coord, 100, 100)) rownbr += 1
def add_to_world(self, obj, rect): """ Lägg till angivet objekt i värld (förlängs av Namedialog) """ screen.blit(obj, rect)
def draww(self, screen): if self.name not in img_pool: img_pool[self.name] = pygame.image.load('img/%s.png' % self.name).convert_alpha() screen.blit(img_pool[self.name], (self.x - 20, self.y - 20))
i=0 def goldencut (base): return base * 0.382 def middle (base): return round (base * 0.5, 0) while True: events = pygame.event.get() mouse_pos = pygame.mouse.get_pos() screen.fill( (246, 198, 0) ) # fill screen with an rgb color screen.blit( img, (middle(480)-20, goldencut(800)-20) ) for event in events: print event if event.type == pygame.MOUSEBUTTONDOWN: if pygame.Rect( (middle(480)-20, goldencut(800)-20), (40, 40) ).collidepoint(mouse_pos): #funktioniert noch nicht, muss verschoben werden print "Hey you tickled the shit!" pygame.display.flip()