python+pygame 最强大脑联动归位游戏
生活随笔
收集整理的這篇文章主要介紹了
python+pygame 最强大脑联动归位游戏
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 聯(lián)動(dòng)歸位游戲
- 下載包
- 項(xiàng)目結(jié)構(gòu)
- 準(zhǔn)備
- 編寫代碼
- 導(dǎo)入包
- 定義圖像類
- 繪制滑塊和文字
- 定義一個(gè)二維列表的查找函數(shù)
- 定義字體
- 生成目標(biāo)
- 移動(dòng)函數(shù)
- 分析
- 獲得滑塊行列
- 四個(gè)方向的移動(dòng)方法
- 調(diào)用移動(dòng)方法
- 完整的代碼
- 初始化游戲并定義常量
- 循環(huán)判斷
- 游戲結(jié)束后顯示信息
- 完整代碼
- 資源及源代碼下載鏈接
聯(lián)動(dòng)歸位游戲
上視頻。
【最強(qiáng)大腦】第二輪挑戰(zhàn)“聯(lián)動(dòng)歸位”
下載包
pip install pygame項(xiàng)目結(jié)構(gòu)
- simsun.ttc是字體
- applicant下的東西是滑塊
- background.jpeg是背景
- help.jpg是目標(biāo)圖片
- icon.png是圖標(biāo)
準(zhǔn)備
資源及源代碼下載鏈接
提取碼: 7jhp
編寫代碼
在"聯(lián)動(dòng)歸位"文件夾下創(chuàng)建main-game.py
導(dǎo)入包
import pygame import random import os import sys import time import pprint定義圖像類
class Image(object):def __init__(self, path):self.image = pygame.image.load(path)self.name = (os.path.basename(path)).split('.')[0]def __str__(self):return self.name繪制滑塊和文字
def render(colors):screen.blit(background.image, (0, 0))for row, i in enumerate(colors):for column, j in enumerate(i):screen.blit(j.image, (row * 40, column * 40))screen.blit(getfont(text='成果實(shí)例圖:'), (gwidth * 40, screen.get_rect().centery - gwidth // 2 * 40))screen.blit(helping.image, (gwidth * 40 + 6 * 28, screen.get_rect().centery - gwidth // 2 * 40))screen.blit(getfont(text=f'計(jì)時(shí):{timer}秒'), (gwidth * 40, screen.get_rect().centery))screen.blit(getfont(text=f'移動(dòng)步數(shù):{movement}次'), (gwidth * 40, screen.get_rect().centery + 50))定義一個(gè)二維列表的查找函數(shù)
def getindex(target, lists):for row, i in enumerate(lists):for column, j in enumerate(i):if j == target:return row, columnraise IndexError定義字體
def getfont(text, color=(255, 70, 130)):return gamefont.render(text, True, color)生成目標(biāo)
def targets(images):ans = images[:]for counter, color in enumerate(imgcolors):ans[-1][counter] = colorreturn ans移動(dòng)函數(shù)
分析
- 獲得滑塊的行列
- 通過(guò)angel的方向參數(shù),定義四個(gè)方向的不同移動(dòng)
獲得滑塊行列
def move(angel):global movement, colorsredx, redy = getindex(red, colors)bluex, bluey = getindex(blue, colors)brownx, browny = getindex(brown, colors)greenx, greeny = getindex(green, colors)orangex, orangey = getindex(orange, colors)pinkx, pinky = getindex(pink, colors)purplex, purpley = getindex(purple, colors)yellowx, yellowy = getindex(yellow, colors)movement += 1四個(gè)方向的移動(dòng)方法
def left():def mover(x, y, col):colors[x][y] = streetx -= 1if (colors[x][y] != street and (colors[x][y] not in imgtars)) or x < 0:x += 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)def right(): # 差不多def mover(x, y, col):colors[x][y] = streetx += 1if x >= gwidth:x -= 1if colors[x][y] != street and (colors[x][y] not in imgtars):x -= 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)def up(): # 差不多def mover(x, y, col):colors[x][y] = streety -= 1if (colors[x][y] != street and (colors[x][y] not in imgtars)) or y < 0:y += 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)def down(): # 差不多def mover(x, y, col):colors[x][y] = streety += 1if y >= gwidth:y -= 1if colors[x][y] != street and (colors[x][y] not in imgtars):y -= 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)調(diào)用移動(dòng)方法
functions = {'left': left,'right': right,'up': up,'down': down,}[angel]functions()完整的代碼
def move(angel):global movement, colorsredx, redy = getindex(red, colors)bluex, bluey = getindex(blue, colors)brownx, browny = getindex(brown, colors)greenx, greeny = getindex(green, colors)orangex, orangey = getindex(orange, colors)pinkx, pinky = getindex(pink, colors)purplex, purpley = getindex(purple, colors)yellowx, yellowy = getindex(yellow, colors)movement += 1def left():def mover(x, y, col):colors[x][y] = streetx -= 1if (colors[x][y] != street and (colors[x][y] not in imgtars)) or x < 0:x += 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)def right():def mover(x, y, col):colors[x][y] = streetx += 1if x >= gwidth:x -= 1if colors[x][y] != street and (colors[x][y] not in imgtars):x -= 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)def up():def mover(x, y, col):colors[x][y] = streety -= 1if (colors[x][y] != street and (colors[x][y] not in imgtars)) or y < 0:y += 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)def down():def mover(x, y, col):colors[x][y] = streety += 1if y >= gwidth:y -= 1if colors[x][y] != street and (colors[x][y] not in imgtars):y -= 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)functions = {'left': left,'right': right,'up': up,'down': down,}[angel]functions()初始化游戲并定義常量
pygame.init()gwidth = 19 width = gwidth * 40 + 240 height = gwidth * 40helping = Image('images/help/help.jpg') gamefont = pygame.font.Font('fonts/simsun.ttc', 29)icon = Image('images/icon/icon.png')background = Image('images/back/background.jpeg') blue = Image('images/applicant/blue.bmp') brown = Image('images/applicant/brown.bmp') green = Image('images/applicant/green.bmp') orange = Image('images/applicant/orange.bmp') pink = Image('images/applicant/pink.bmp') purple = Image('images/applicant/purple.bmp') red = Image('images/applicant/red.bmp') stack = Image('images/applicant/stack.bmp') street = Image('images/applicant/street.bmp') yellow = Image('images/applicant/yellow.bmp')bluetar = Image('images/applicant/target/blue-target.bmp') browntar = Image('images/applicant/target/brown-target.bmp') greentar = Image('images/applicant/target/green-target.bmp') orangetar = Image('images/applicant/target/orange-target.bmp') pinktar = Image('images/applicant/target/pink-target.bmp') purpletar = Image('images/applicant/target/purple-target.bmp') redtar = Image('images/applicant/target/red-target.bmp') yellowtar = Image('images/applicant/target/yellow-target.bmp')imgcolors = [blue, brown, green, orange, purple, red, yellow, pink] imgtars = [bluetar, browntar, greentar, orangetar, pinktar, purpletar, redtar, yellowtar]movement = 0colors = [[stack if random.random() < 0.28 else street for i in range(gwidth)] for j in range(gwidth)] colors = targets(colors) winmap = [list(i) for i in colors] # print(images, winmap) for count in range(gwidth * gwidth):move(random.choice(('left', 'right', 'up', 'down')))clock = pygame.time.Clock() fps = 12start = time.time() end = time.time() timer = 0movement = 0screen = pygame.display.set_mode((width, height))pygame.display.set_caption('聯(lián)動(dòng)歸位') pygame.display.set_icon(icon.image)running = True win = False # win = True循環(huán)判斷
while running:clock.tick(fps)end = time.time()timer = int(end - start)render(colors)if colors == winmap:win = Truerunning = Falsefor event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:running = Falseelif event.key == pygame.K_LEFT:move('left')elif event.key == pygame.K_RIGHT:move('right')elif event.key == pygame.K_UP:move('up')elif event.key == pygame.K_DOWN:move('down')pygame.display.flip()游戲結(jié)束后顯示信息
running = win while running:screen.blit(background.image, background.image.get_rect())centerx = screen.get_rect().centerxcentery = screen.get_rect().centeryscreen.blit(getfont('作答完成'), (centerx, centery - 158))screen.blit(getfont(f'用時(shí):{timer}'), (centerx, centery - 102))screen.blit(getfont(f'移動(dòng):{movement}'), (centerx, centery - 60))for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:running = Falsepygame.display.update()pygame.quit() sys.exit()完整代碼
import pygame import random import os import sys import time import pprintclass Image(object):def __init__(self, path):self.image = pygame.image.load(path)self.name = (os.path.basename(path)).split('.')[0]def __str__(self):return self.namedef render(colors):screen.blit(background.image, (0, 0))for row, i in enumerate(colors):for column, j in enumerate(i):screen.blit(j.image, (row * 40, column * 40))screen.blit(getfont(text='成果實(shí)例圖:'), (gwidth * 40, screen.get_rect().centery - gwidth // 2 * 40))screen.blit(helping.image, (gwidth * 40 + 6 * 28, screen.get_rect().centery - gwidth // 2 * 40))screen.blit(getfont(text=f'計(jì)時(shí):{timer}秒'), (gwidth * 40, screen.get_rect().centery))screen.blit(getfont(text=f'移動(dòng)步數(shù):{movement}次'), (gwidth * 40, screen.get_rect().centery + 50))def getindex(target, lists):for row, i in enumerate(lists):for column, j in enumerate(i):if j == target:return row, columnraise ValueErrordef getfont(text, color=(255, 70, 130)):return gamefont.render(text, True, color)def targets(images):ans = images[:]for counter, color in enumerate(imgcolors):ans[-1][counter] = colorreturn ansdef move(angel):global movement, colorsredx, redy = getindex(red, colors)bluex, bluey = getindex(blue, colors)brownx, browny = getindex(brown, colors)greenx, greeny = getindex(green, colors)orangex, orangey = getindex(orange, colors)pinkx, pinky = getindex(pink, colors)purplex, purpley = getindex(purple, colors)yellowx, yellowy = getindex(yellow, colors)movement += 1def left():def mover(x, y, col):colors[x][y] = streetx -= 1if (colors[x][y] != street and (colors[x][y] not in imgtars)) or x < 0:x += 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)def right():def mover(x, y, col):colors[x][y] = streetx += 1if x >= gwidth:x -= 1if colors[x][y] != street and (colors[x][y] not in imgtars):x -= 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)def up():def mover(x, y, col):colors[x][y] = streety -= 1if (colors[x][y] != street and (colors[x][y] not in imgtars)) or y < 0:y += 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)def down():def mover(x, y, col):colors[x][y] = streety += 1if y >= gwidth:y -= 1if colors[x][y] != street and (colors[x][y] not in imgtars):y -= 1colors[x][y] = colmover(bluex, bluey, blue)mover(brownx, browny, brown)mover(greenx, greeny, green)mover(orangex, orangey, orange)mover(pinkx, pinky, pink)mover(purplex, purpley, purple)mover(redx, redy, red)mover(yellowx, yellowy, yellow)functions = {'left': left,'right': right,'up': up,'down': down,}[angel]functions()pygame.init()gwidth = 19 width = gwidth * 40 + 240 height = gwidth * 40helping = Image('images/help/help.jpg') gamefont = pygame.font.Font('fonts/simsun.ttc', 29)icon = Image('images/icon/icon.png')background = Image('images/back/background.jpeg') blue = Image('images/applicant/blue.bmp') brown = Image('images/applicant/brown.bmp') green = Image('images/applicant/green.bmp') orange = Image('images/applicant/orange.bmp') pink = Image('images/applicant/pink.bmp') purple = Image('images/applicant/purple.bmp') red = Image('images/applicant/red.bmp') stack = Image('images/applicant/stack.bmp') street = Image('images/applicant/street.bmp') yellow = Image('images/applicant/yellow.bmp')bluetar = Image('images/applicant/target/blue-target.bmp') browntar = Image('images/applicant/target/brown-target.bmp') greentar = Image('images/applicant/target/green-target.bmp') orangetar = Image('images/applicant/target/orange-target.bmp') pinktar = Image('images/applicant/target/pink-target.bmp') purpletar = Image('images/applicant/target/purple-target.bmp') redtar = Image('images/applicant/target/red-target.bmp') yellowtar = Image('images/applicant/target/yellow-target.bmp')imgcolors = [blue, brown, green, orange, purple, red, yellow, pink] imgtars = [bluetar, browntar, greentar, orangetar, pinktar, purpletar, redtar, yellowtar]movement = 0colors = [[stack if random.random() < 0.28 else street for i in range(gwidth)] for j in range(gwidth)] colors = targets(colors) winmap = [list(i) for i in colors] # print(images, winmap) for count in range(gwidth * gwidth):move(random.choice(('left', 'right', 'up', 'down')))clock = pygame.time.Clock() fps = 12start = time.time() end = time.time() timer = 0movement = 0screen = pygame.display.set_mode((width, height))pygame.display.set_caption('聯(lián)動(dòng)歸位') pygame.display.set_icon(icon.image)running = True win = False # win = Truewhile running:clock.tick(fps)end = time.time()timer = int(end - start)render(colors)if colors == winmap:win = Truerunning = Falsefor event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:running = Falseelif event.key == pygame.K_LEFT:move('left')elif event.key == pygame.K_RIGHT:move('right')elif event.key == pygame.K_UP:move('up')elif event.key == pygame.K_DOWN:move('down')pygame.display.flip()running = win while running:screen.blit(background.image, background.image.get_rect())centerx = screen.get_rect().centerxcentery = screen.get_rect().centeryscreen.blit(getfont('作答完成'), (centerx, centery - 158))screen.blit(getfont(f'用時(shí):{timer}'), (centerx, centery - 102))screen.blit(getfont(f'移動(dòng):{movement}'), (centerx, centery - 60))for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:running = Falsepygame.display.update()pygame.quit() sys.exit()資源及源代碼下載鏈接
資源及源代碼下載鏈接
提取碼: 7jhp
總結(jié)
以上是生活随笔為你收集整理的python+pygame 最强大脑联动归位游戏的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Flash计时器次数为什么设置1次的重要
- 下一篇: 女程序员再漂亮也是单身?解析程序员圈的奇