本代码来源于 《Python和Pygame游戏开发指南》中的 Star Pusher 游戏

# Star Pusher (a Sokoban clone)
# By Al Sweigart al@inventwithpython.com
# http://inventwithpython.com/pygame
# Released under a "Simplified BSD" licenseimport random, sys, copy, os, pygame
from pygame.locals import *FPS = 30 # frames per second to update the screen
WINWIDTH = 800 # width of the program's window, in pixels
WINHEIGHT = 600 # height in pixels
HALF_WINWIDTH = int(WINWIDTH / 2)
HALF_WINHEIGHT = int(WINHEIGHT / 2)# The total width and height of each tile in pixels.
TILEWIDTH = 50
TILEHEIGHT = 85
TILEFLOORHEIGHT = 40CAM_MOVE_SPEED = 5 # how many pixels per frame the camera moves# The percentage of outdoor tiles that have additional
# decoration on them, such as a tree or rock.
OUTSIDE_DECORATION_PCT = 20BRIGHTBLUE = (  0, 170, 255)
WHITE      = (255, 255, 255)
BGCOLOR = BRIGHTBLUE
TEXTCOLOR = WHITEUP = 'up'
DOWN = 'down'
LEFT = 'left'
RIGHT = 'right'def main():global FPSCLOCK, DISPLAYSURF, IMAGESDICT, TILEMAPPING, OUTSIDEDECOMAPPING, BASICFONT, PLAYERIMAGES, currentImage# Pygame initialization and basic set up of the global variables.pygame.init()FPSCLOCK = pygame.time.Clock()# Because the Surface object stored in DISPLAYSURF was returned# from the pygame.display.set_mode() function, this is the# Surface object that is drawn to the actual computer screen# when pygame.display.update() is called.DISPLAYSURF = pygame.display.set_mode((WINWIDTH, WINHEIGHT))pygame.display.set_caption('Star Pusher')BASICFONT = pygame.font.Font('freesansbold.ttf', 18)# A global dict value that will contain all the Pygame# Surface objects returned by pygame.image.load().IMAGESDICT = {'uncovered goal': pygame.image.load('RedSelector.png'),'covered goal': pygame.image.load('Selector.png'),'star': pygame.image.load('Star.png'),'corner': pygame.image.load('Wall_Block_Tall.png'),'wall': pygame.image.load('Wood_Block_Tall.png'),'inside floor': pygame.image.load('Plain_Block.png'),'outside floor': pygame.image.load('Grass_Block.png'),'title': pygame.image.load('star_title.png'),'solved': pygame.image.load('star_solved.png'),'princess': pygame.image.load('princess.png'),'boy': pygame.image.load('boy.png'),'catgirl': pygame.image.load('catgirl.png'),'horngirl': pygame.image.load('horngirl.png'),'pinkgirl': pygame.image.load('pinkgirl.png'),'rock': pygame.image.load('Rock.png'),'short tree': pygame.image.load('Tree_Short.png'),'tall tree': pygame.image.load('Tree_Tall.png'),'ugly tree': pygame.image.load('Tree_Ugly.png')}# These dict values are global, and map the character that appears# in the level file to the Surface object it represents.TILEMAPPING = {'x': IMAGESDICT['corner'],'#': IMAGESDICT['wall'],'o': IMAGESDICT['inside floor'],' ': IMAGESDICT['outside floor']}OUTSIDEDECOMAPPING = {'1': IMAGESDICT['rock'],'2': IMAGESDICT['short tree'],'3': IMAGESDICT['tall tree'],'4': IMAGESDICT['ugly tree']}# PLAYERIMAGES is a list of all possible characters the player can be.# currentImage is the index of the player's current player image.currentImage = 0PLAYERIMAGES = [IMAGESDICT['princess'],IMAGESDICT['boy'],IMAGESDICT['catgirl'],IMAGESDICT['horngirl'],IMAGESDICT['pinkgirl']]startScreen() # show the title screen until the user presses a key# Read in the levels from the text file. See the readLevelsFile() for# details on the format of this file and how to make your own levels.levels = readLevelsFile('starPusherLevels.txt')currentLevelIndex = 0# The main game loop. This loop runs a single level, when the user# finishes that level, the next/previous level is loaded.while True: # main game loop# Run the level to actually start playing the game:result = runLevel(levels, currentLevelIndex)if result in ('solved', 'next'):# Go to the next level.currentLevelIndex += 1if currentLevelIndex >= len(levels):# If there are no more levels, go back to the first one.currentLevelIndex = 0elif result == 'back':# Go to the previous level.currentLevelIndex -= 1if currentLevelIndex < 0:# If there are no previous levels, go to the last one.currentLevelIndex = len(levels)-1elif result == 'reset':pass # Do nothing. Loop re-calls runLevel() to reset the leveldef runLevel(levels, levelNum):global currentImagelevelObj = levels[levelNum]mapObj = decorateMap(levelObj['mapObj'], levelObj['startState']['player'])gameStateObj = copy.deepcopy(levelObj['startState'])mapNeedsRedraw = True # set to True to call drawMap()levelSurf = BASICFONT.render('Level %s of %s' % (levelNum + 1, len(levels)), 1, TEXTCOLOR)levelRect = levelSurf.get_rect()levelRect.bottomleft = (20, WINHEIGHT - 35)mapWidth = len(mapObj) * TILEWIDTHmapHeight = (len(mapObj[0]) - 1) * TILEFLOORHEIGHT + TILEHEIGHTMAX_CAM_X_PAN = abs(HALF_WINHEIGHT - int(mapHeight / 2)) + TILEWIDTHMAX_CAM_Y_PAN = abs(HALF_WINWIDTH - int(mapWidth / 2)) + TILEHEIGHTlevelIsComplete = False# Track how much the camera has moved:cameraOffsetX = 0cameraOffsetY = 0# Track if the keys to move the camera are being held down:cameraUp = FalsecameraDown = FalsecameraLeft = FalsecameraRight = Falsewhile True: # main game loop# Reset these variables:playerMoveTo = NonekeyPressed = Falsefor event in pygame.event.get(): # event handling loopif event.type == QUIT:# Player clicked the "X" at the corner of the window.terminate()elif event.type == KEYDOWN:# Handle key presseskeyPressed = Trueif event.key == K_LEFT:playerMoveTo = LEFTelif event.key == K_RIGHT:playerMoveTo = RIGHTelif event.key == K_UP:playerMoveTo = UPelif event.key == K_DOWN:playerMoveTo = DOWN# Set the camera move mode.elif event.key == K_a:cameraLeft = Trueelif event.key == K_d:cameraRight = Trueelif event.key == K_w:cameraUp = Trueelif event.key == K_s:cameraDown = Trueelif event.key == K_n:return 'next'elif event.key == K_b:return 'back'elif event.key == K_ESCAPE:terminate() # Esc key quits.elif event.key == K_BACKSPACE:return 'reset' # Reset the level.elif event.key == K_p:# Change the player image to the next one.currentImage += 1if currentImage >= len(PLAYERIMAGES):# After the last player image, use the first one.currentImage = 0mapNeedsRedraw = Trueelif event.type == KEYUP:# Unset the camera move mode.if event.key == K_a:cameraLeft = Falseelif event.key == K_d:cameraRight = Falseelif event.key == K_w:cameraUp = Falseelif event.key == K_s:cameraDown = Falseif playerMoveTo != None and not levelIsComplete:# If the player pushed a key to move, make the move# (if possible) and push any stars that are pushable.moved = makeMove(mapObj, gameStateObj, playerMoveTo)if moved:# increment the step counter.gameStateObj['stepCounter'] += 1mapNeedsRedraw = Trueif isLevelFinished(levelObj, gameStateObj):# level is solved, we should show the "Solved!" image.levelIsComplete = TruekeyPressed = FalseDISPLAYSURF.fill(BGCOLOR)if mapNeedsRedraw:mapSurf = drawMap(mapObj, gameStateObj, levelObj['goals'])mapNeedsRedraw = Falseif cameraUp and cameraOffsetY < MAX_CAM_X_PAN:cameraOffsetY += CAM_MOVE_SPEEDelif cameraDown and cameraOffsetY > -MAX_CAM_X_PAN:cameraOffsetY -= CAM_MOVE_SPEEDif cameraLeft and cameraOffsetX < MAX_CAM_Y_PAN:cameraOffsetX += CAM_MOVE_SPEEDelif cameraRight and cameraOffsetX > -MAX_CAM_Y_PAN:cameraOffsetX -= CAM_MOVE_SPEED# Adjust mapSurf's Rect object based on the camera offset.mapSurfRect = mapSurf.get_rect()mapSurfRect.center = (HALF_WINWIDTH + cameraOffsetX, HALF_WINHEIGHT + cameraOffsetY)# Draw mapSurf to the DISPLAYSURF Surface object.DISPLAYSURF.blit(mapSurf, mapSurfRect)DISPLAYSURF.blit(levelSurf, levelRect)stepSurf = BASICFONT.render('Steps: %s' % (gameStateObj['stepCounter']), 1, TEXTCOLOR)stepRect = stepSurf.get_rect()stepRect.bottomleft = (20, WINHEIGHT - 10)DISPLAYSURF.blit(stepSurf, stepRect)if levelIsComplete:# is solved, show the "Solved!" image until the player# has pressed a key.solvedRect = IMAGESDICT['solved'].get_rect()solvedRect.center = (HALF_WINWIDTH, HALF_WINHEIGHT)DISPLAYSURF.blit(IMAGESDICT['solved'], solvedRect)if keyPressed:return 'solved'pygame.display.update() # draw DISPLAYSURF to the screen.FPSCLOCK.tick()def isWall(mapObj, x, y):"""Returns True if the (x, y) position onthe map is a wall, otherwise return False."""if x < 0 or x >= len(mapObj) or y < 0 or y >= len(mapObj[x]):return False # x and y aren't actually on the map.elif mapObj[x][y] in ('#', 'x'):return True # wall is blockingreturn Falsedef decorateMap(mapObj, startxy):"""Makes a copy of the given map object and modifies it.Here is what is done to it:* Walls that are corners are turned into corner pieces.* The outside/inside floor tile distinction is made.* Tree/rock decorations are randomly added to the outside tiles.Returns the decorated map object."""startx, starty = startxy # Syntactic sugar# Copy the map object so we don't modify the original passedmapObjCopy = copy.deepcopy(mapObj)# Remove the non-wall characters from the map datafor x in range(len(mapObjCopy)):for y in range(len(mapObjCopy[0])):if mapObjCopy[x][y] in ('$', '.', '@', '+', '*'):mapObjCopy[x][y] = ' '# Flood fill to determine inside/outside floor tiles.floodFill(mapObjCopy, startx, starty, ' ', 'o')# Convert the adjoined walls into corner tiles.for x in range(len(mapObjCopy)):for y in range(len(mapObjCopy[0])):if mapObjCopy[x][y] == '#':if (isWall(mapObjCopy, x, y-1) and isWall(mapObjCopy, x+1, y)) or \(isWall(mapObjCopy, x+1, y) and isWall(mapObjCopy, x, y+1)) or \(isWall(mapObjCopy, x, y+1) and isWall(mapObjCopy, x-1, y)) or \(isWall(mapObjCopy, x-1, y) and isWall(mapObjCopy, x, y-1)):mapObjCopy[x][y] = 'x'elif mapObjCopy[x][y] == ' ' and random.randint(0, 99) < OUTSIDE_DECORATION_PCT:mapObjCopy[x][y] = random.choice(list(OUTSIDEDECOMAPPING.keys()))return mapObjCopydef isBlocked(mapObj, gameStateObj, x, y):"""Returns True if the (x, y) position on the map isblocked by a wall or star, otherwise return False."""if isWall(mapObj, x, y):return Trueelif x < 0 or x >= len(mapObj) or y < 0 or y >= len(mapObj[x]):return True # x and y aren't actually on the map.elif (x, y) in gameStateObj['stars']:return True # a star is blockingreturn Falsedef makeMove(mapObj, gameStateObj, playerMoveTo):"""Given a map and game state object, see if it is possible for theplayer to make the given move. If it is, then change the player'sposition (and the position of any pushed star). If not, do nothing.Returns True if the player moved, otherwise False."""# Make sure the player can move in the direction they want.playerx, playery = gameStateObj['player']# This variable is "syntactic sugar". Typing "stars" is more# readable than typing "gameStateObj['stars']" in our code.stars = gameStateObj['stars']# The code for handling each of the directions is so similar aside# from adding or subtracting 1 to the x/y coordinates. We can# simplify it by using the xOffset and yOffset variables.if playerMoveTo == UP:xOffset = 0yOffset = -1elif playerMoveTo == RIGHT:xOffset = 1yOffset = 0elif playerMoveTo == DOWN:xOffset = 0yOffset = 1elif playerMoveTo == LEFT:xOffset = -1yOffset = 0# See if the player can move in that direction.if isWall(mapObj, playerx + xOffset, playery + yOffset):return Falseelse:if (playerx + xOffset, playery + yOffset) in stars:# There is a star in the way, see if the player can push it.if not isBlocked(mapObj, gameStateObj, playerx + (xOffset*2), playery + (yOffset*2)):# Move the star.ind = stars.index((playerx + xOffset, playery + yOffset))stars[ind] = (stars[ind][0] + xOffset, stars[ind][1] + yOffset)else:return False# Move the player upwards.gameStateObj['player'] = (playerx + xOffset, playery + yOffset)return Truedef startScreen():"""Display the start screen (which has the title and instructions)until the player presses a key. Returns None."""# Position the title image.titleRect = IMAGESDICT['title'].get_rect()topCoord = 50 # topCoord tracks where to position the top of the texttitleRect.top = topCoordtitleRect.centerx = HALF_WINWIDTHtopCoord += titleRect.height# Unfortunately, Pygame's font & text system only shows one line at# a time, so we can't use strings with \n newline characters in them.# So we will use a list with each line in it.instructionText = ['Push the stars over the marks.','Arrow keys to move, WASD for camera control, P to change character.','Backspace to reset level, Esc to quit.','N for next level, B to go back a level.']# Start with drawing a blank color to the entire window:DISPLAYSURF.fill(BGCOLOR)# Draw the title image to the window:DISPLAYSURF.blit(IMAGESDICT['title'], titleRect)# Position and draw the text.for i in range(len(instructionText)):instSurf = BASICFONT.render(instructionText[i], 1, TEXTCOLOR)instRect = instSurf.get_rect()topCoord += 10 # 10 pixels will go in between each line of text.instRect.top = topCoordinstRect.centerx = HALF_WINWIDTHtopCoord += instRect.height # Adjust for the height of the line.DISPLAYSURF.blit(instSurf, instRect)while True: # Main loop for the start screen.for event in pygame.event.get():if event.type == QUIT:terminate()elif event.type == KEYDOWN:if event.key == K_ESCAPE:terminate()return # user has pressed a key, so return.# Display the DISPLAYSURF contents to the actual screen.pygame.display.update()FPSCLOCK.tick()def readLevelsFile(filename):assert os.path.exists(filename), 'Cannot find the level file: %s' % (filename)mapFile = open(filename, 'r')# Each level must end with a blank linecontent = mapFile.readlines() + ['\r\n']mapFile.close()levels = [] # Will contain a list of level objects.levelNum = 0mapTextLines = [] # contains the lines for a single level's map.mapObj = [] # the map object made from the data in mapTextLinesfor lineNum in range(len(content)):# Process each line that was in the level file.line = content[lineNum].rstrip('\r\n')if ';' in line:# Ignore the ; lines, they're comments in the level file.line = line[:line.find(';')]if line != '':# This line is part of the map.mapTextLines.append(line)elif line == '' and len(mapTextLines) > 0:# A blank line indicates the end of a level's map in the file.# Convert the text in mapTextLines into a level object.# Find the longest row in the map.maxWidth = -1for i in range(len(mapTextLines)):if len(mapTextLines[i]) > maxWidth:maxWidth = len(mapTextLines[i])# Add spaces to the ends of the shorter rows. This# ensures the map will be rectangular.for i in range(len(mapTextLines)):mapTextLines[i] += ' ' * (maxWidth - len(mapTextLines[i]))# Convert mapTextLines to a map object.for x in range(len(mapTextLines[0])):mapObj.append([])for y in range(len(mapTextLines)):for x in range(maxWidth):mapObj[x].append(mapTextLines[y][x])# Loop through the spaces in the map and find the @, ., and $# characters for the starting game state.startx = None # The x and y for the player's starting positionstarty = Nonegoals = [] # list of (x, y) tuples for each goal.stars = [] # list of (x, y) for each star's starting position.for x in range(maxWidth):for y in range(len(mapObj[x])):if mapObj[x][y] in ('@', '+'):# '@' is player, '+' is player & goalstartx = xstarty = yif mapObj[x][y] in ('.', '+', '*'):# '.' is goal, '*' is star & goalgoals.append((x, y))if mapObj[x][y] in ('$', '*'):# '$' is starstars.append((x, y))# Basic level design sanity checks:assert startx != None and starty != None, 'Level %s (around line %s) in %s is missing a "@" or "+" to mark the start point.' % (levelNum+1, lineNum, filename)assert len(goals) > 0, 'Level %s (around line %s) in %s must have at least one goal.' % (levelNum+1, lineNum, filename)assert len(stars) >= len(goals), 'Level %s (around line %s) in %s is impossible to solve. It has %s goals but only %s stars.' % (levelNum+1, lineNum, filename, len(goals), len(stars))# Create level object and starting game state object.gameStateObj = {'player': (startx, starty),'stepCounter': 0,'stars': stars}levelObj = {'width': maxWidth,'height': len(mapObj),'mapObj': mapObj,'goals': goals,'startState': gameStateObj}levels.append(levelObj)# Reset the variables for reading the next map.mapTextLines = []mapObj = []gameStateObj = {}levelNum += 1return levelsdef floodFill(mapObj, x, y, oldCharacter, newCharacter):"""Changes any values matching oldCharacter on the map object tonewCharacter at the (x, y) position, and does the same for thepositions to the left, right, down, and up of (x, y), recursively."""# In this game, the flood fill algorithm creates the inside/outside# floor distinction. This is a "recursive" function.# For more info on the Flood Fill algorithm, see:#   http://en.wikipedia.org/wiki/Flood_fillif mapObj[x][y] == oldCharacter:mapObj[x][y] = newCharacterif x < len(mapObj) - 1 and mapObj[x+1][y] == oldCharacter:floodFill(mapObj, x+1, y, oldCharacter, newCharacter) # call rightif x > 0 and mapObj[x-1][y] == oldCharacter:floodFill(mapObj, x-1, y, oldCharacter, newCharacter) # call leftif y < len(mapObj[x]) - 1 and mapObj[x][y+1] == oldCharacter:floodFill(mapObj, x, y+1, oldCharacter, newCharacter) # call downif y > 0 and mapObj[x][y-1] == oldCharacter:floodFill(mapObj, x, y-1, oldCharacter, newCharacter) # call updef drawMap(mapObj, gameStateObj, goals):"""Draws the map to a Surface object, including the player andstars. This function does not call pygame.display.update(), nordoes it draw the "Level" and "Steps" text in the corner."""# mapSurf will be the single Surface object that the tiles are drawn# on, so that it is easy to position the entire map on the DISPLAYSURF# Surface object. First, the width and height must be calculated.mapSurfWidth = len(mapObj) * TILEWIDTHmapSurfHeight = (len(mapObj[0]) - 1) * TILEFLOORHEIGHT + TILEHEIGHTmapSurf = pygame.Surface((mapSurfWidth, mapSurfHeight))mapSurf.fill(BGCOLOR) # start with a blank color on the surface.# Draw the tile sprites onto this surface.for x in range(len(mapObj)):for y in range(len(mapObj[x])):spaceRect = pygame.Rect((x * TILEWIDTH, y * TILEFLOORHEIGHT, TILEWIDTH, TILEHEIGHT))if mapObj[x][y] in TILEMAPPING:baseTile = TILEMAPPING[mapObj[x][y]]elif mapObj[x][y] in OUTSIDEDECOMAPPING:baseTile = TILEMAPPING[' ']# First draw the base ground/wall tile.mapSurf.blit(baseTile, spaceRect)if mapObj[x][y] in OUTSIDEDECOMAPPING:# Draw any tree/rock decorations that are on this tile.mapSurf.blit(OUTSIDEDECOMAPPING[mapObj[x][y]], spaceRect)elif (x, y) in gameStateObj['stars']:if (x, y) in goals:# A goal AND star are on this space, draw goal first.mapSurf.blit(IMAGESDICT['covered goal'], spaceRect)# Then draw the star sprite.mapSurf.blit(IMAGESDICT['star'], spaceRect)elif (x, y) in goals:# Draw a goal without a star on it.mapSurf.blit(IMAGESDICT['uncovered goal'], spaceRect)# Last draw the player on the board.if (x, y) == gameStateObj['player']:# Note: The value "currentImage" refers# to a key in "PLAYERIMAGES" which has the# specific player image we want to show.mapSurf.blit(PLAYERIMAGES[currentImage], spaceRect)return mapSurfdef isLevelFinished(levelObj, gameStateObj):"""Returns True if all the goals have stars in them."""for goal in levelObj['goals']:if goal not in gameStateObj['stars']:# Found a space with a goal but no star on it.return Falsereturn Truedef terminate():pygame.quit()sys.exit()if __name__ == '__main__':main()

配套资源下载

python利用pygame框架实现类似推箱子游戏 Star Pusher相关推荐

  1. python利用pygame框架实现类似大鱼吃小鱼游戏 (松鼠吃松鼠) code from making games with python and pygame

    本源码来自于 <Python和Pygame游戏开发指南> # Squirrel Eat Squirrel (a 2D Katamari Damacy clone) # By Al Swei ...

  2. python推箱子游戏代码_用python入门知识做推箱子游戏,若能打过第三关,则可以学会编程...

    不得不说,Python小游戏是最适合入门编程的项目,因为太简单! 无论懂或完全不懂python,这样的小游戏,你都可以直接开发出来,原因很简单: 在详细教程里,会有从零基础开始,一步一步的教你完成这个 ...

  3. Python使用tkinter模块实现推箱子游戏

    前段时间用C语言做了个字符版的推箱子,着实是比较简陋.正好最近用到了Python,然后想着用Python做一个图形界面的推箱子.这回可没有C那么简单,首先Python的图形界面我是没怎么用过,在网上找 ...

  4. python推箱子代码详细讲解_Python使用tkinter模块实现推箱子游戏

    前段时间用C语言做了个字符版的推箱子,着实是比较简陋.正好最近用到了Python,然后想着用Python做一个图形界面的推箱子.这回可没有C那么简单,首先Python的图形界面我是没怎么用过,在网上找 ...

  5. Python——利用pygame模块制作RPG游戏(一)

    利用pygame模块制作RPG游戏(一) 需要用到的第三方库:pygame 一.构造游戏的基本框架 1.首先准备好相应的游戏素材:背景,人物动作图片,音乐,音效等. 图片均用png格式,音乐音效均用o ...

  6. python推箱子游戏顶层设计子层设计_python实现推箱子游戏

    本文实例为大家分享了python实现推箱子游戏的具体代码,供大家参考,具体内容如下 题目描述: 最短路径为: uurrDDDDuuuulldRurDDDrddLLrruLuuulldRurDDDrdL ...

  7. python 推箱子实验开发报告,python实现推箱子游戏

    本文实例为大家分享了python实现推箱子游戏的具体代码,供大家参考,具体内容如下 题目描述: 最短路径为: uurrDDDDuuuulldRurDDDrddLLrruLuuulldRurDDDrdL ...

  8. 通过python利用Django框架搭建一个属于自己的免费网站(已更新)

    大家好,我是天空之城,今天给大家带来,通过python利用Django框架搭建一个属于自己的免费网站. 以下是网上找到的免费教程,https://djangogirlstaipei.gitbooks. ...

  9. 用python写一个推箱子游戏

    好的,我会用中文来帮助您编写一个推箱子游戏. 首先,我们需要定义游戏的地图.地图可以用一个二维数组来表示,其中 0 表示可以走的路,1 表示墙壁,2 表示箱子,3 表示目标位置.例如,我们可以定义一个 ...

最新文章

  1. 12门课100分直博清华!这份成绩单冲上热搜,但学霸小伙也曾考过25分
  2. 万豪酒店数据库遭入侵 5亿顾客信息或泄露
  3. linux转mysql_转linux下mysql命令
  4. 算法-动态规划(01背包)
  5. 约稿——码字能赢得百万人生?不开玩笑
  6. Linux服务器中的wget、curl和scp
  7. 解决ajax中文乱码问题
  8. uV胶点胶机器人_解析手机用粘合剂十大用胶点
  9. 喜获Arctic Code Vault Contributor勋章,北极代码库贡献者
  10. win7临时文件_小甲办公 | 如何在2020年优雅地使用win7
  11. 【免费内网穿透】Windows远程桌面连接树莓派
  12. 现代都市女性所爱的潮流搭!
  13. 多线程处理Excel导入数据入库
  14. try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?
  15. 微信跨公众号进行支付
  16. 江苏电信服务器托管/1U托管/4G硬防
  17. 口袋网咖已有服务器在使用怎么注销,口袋网咖进不去怎么办_口袋网咖进不去解决办法...
  18. [笔记]表单校验validate.js
  19. C#代码考究--foreach、for和dictionary三种遍历方式性能比较
  20. ps怎么做墨水喷溅运动鞋海报效果

热门文章

  1. php获取脚本运行时间,PHP获取脚本运行时间
  2. 订单失效怎么做的_虾皮Shopee新加坡电商做什么产品好呢?订单少得可怜怎么办呢...
  3. scrolling=no 无法根据坐标获取元素_提高三坐标测量精度,要记住这几招
  4. Vue调试工具的安装方法(动动鼠标就完成,不会意外报错,超爽~)
  5. 沾化区php学校,推进校地合作 助力产教融合:滨州市技术学院与沾化经济开发区举行签约仪式...
  6. 【java笔记】lambda表达式介绍和使用
  7. 【动态规划】01背包:P1049 装箱问题
  8. LeetCode 116/117 填充每个节点下一个右侧指针
  9. H.264官方软件JM源代码简单分析-解码器ldecod
  10. 在FFMPEG中使用libRTMP的经验