Pygame 做的中国象棋,一直以来喜欢下象棋,写了 python 就拿来做一个试试,水平有限,电脑走法水平低,需要在下次版本中更新电脑走法,希望源码能帮助大家更好的学习 python。总共分为四个文件,chinachess.py 为主文件,constants.py 数据常量,pieces.py 棋子类,走法,computer.py 电脑走法计算。 链接:pan.baidu.com/s/1e1lzDiLT… 提取码:cskj

chinachess.py 为主文件

import pygame
import time
import constants
import pieces
import computer class MainGame():
window = None
Start_X = constants.Start_X
Start_Y = constants.Start_Y
Line_Span = constants.Line_Span
Max_X = Start_X + * Line_Span
Max_Y = Start_Y + * Line_Span player1Color = constants.player1Color
player2Color = constants.player2Color
Putdownflag = player1Color
piecesSelected = None button_go = None
piecesList = [] def start_game(self):
MainGame.window = pygame.display.set_mode([constants.SCREEN_WIDTH, constants.SCREEN_HEIGHT])
pygame.display.set_caption("天青-中国象棋")
MainGame.button_go = Button(MainGame.window, "重新开始", constants.SCREEN_WIDTH - , ) # 创建开始按钮
self.piecesInit() while True:
time.sleep(0.1)
# 获取事件
MainGame.window.fill(constants.BG_COLOR)
self.drawChessboard()
#MainGame.button_go.draw_button()
self.piecesDisplay()
self.VictoryOrDefeat()
self.Computerplay()
self.getEvent()
pygame.display.update()
pygame.display.flip() def drawChessboard(self):
mid_end_y = MainGame.Start_Y + * MainGame.Line_Span
min_start_y = MainGame.Start_Y + * MainGame.Line_Span
for i in range(, ):
x = MainGame.Start_X + i * MainGame.Line_Span
if i== or i ==:
y = MainGame.Start_Y + i * MainGame.Line_Span
pygame.draw.line(MainGame.window, constants.BLACK, [x, MainGame.Start_Y], [x, MainGame.Max_Y], )
else:
pygame.draw.line(MainGame.window, constants.BLACK, [x, MainGame.Start_Y], [x, mid_end_y], )
pygame.draw.line(MainGame.window, constants.BLACK, [x, min_start_y], [x, MainGame.Max_Y], ) for i in range(, ):
x = MainGame.Start_X + i * MainGame.Line_Span
y = MainGame.Start_Y + i * MainGame.Line_Span
pygame.draw.line(MainGame.window, constants.BLACK, [MainGame.Start_X, y], [MainGame.Max_X, y], ) speed_dial_start_x = MainGame.Start_X + * MainGame.Line_Span
speed_dial_end_x = MainGame.Start_X + * MainGame.Line_Span
speed_dial_y1 = MainGame.Start_Y + * MainGame.Line_Span
speed_dial_y2 = MainGame.Start_Y + * MainGame.Line_Span
speed_dial_y3 = MainGame.Start_Y + * MainGame.Line_Span
speed_dial_y4 = MainGame.Start_Y + * MainGame.Line_Span pygame.draw.line(MainGame.window, constants.BLACK, [speed_dial_start_x, speed_dial_y1], [speed_dial_end_x, speed_dial_y2], )
pygame.draw.line(MainGame.window, constants.BLACK, [speed_dial_start_x, speed_dial_y2],
[speed_dial_end_x, speed_dial_y1], )
pygame.draw.line(MainGame.window, constants.BLACK, [speed_dial_start_x, speed_dial_y3],
[speed_dial_end_x, speed_dial_y4], )
pygame.draw.line(MainGame.window, constants.BLACK, [speed_dial_start_x, speed_dial_y4],
[speed_dial_end_x, speed_dial_y3], ) def piecesInit(self):
MainGame.piecesList.append(pieces.Rooks(MainGame.player2Color, ,))
MainGame.piecesList.append(pieces.Rooks(MainGame.player2Color, , ))
MainGame.piecesList.append(pieces.Elephants(MainGame.player2Color, , ))
MainGame.piecesList.append(pieces.Elephants(MainGame.player2Color, , ))
MainGame.piecesList.append(pieces.King(MainGame.player2Color, , ))
MainGame.piecesList.append(pieces.Knighs(MainGame.player2Color, , ))
MainGame.piecesList.append(pieces.Knighs(MainGame.player2Color, , ))
MainGame.piecesList.append(pieces.Cannons(MainGame.player2Color, , ))
MainGame.piecesList.append(pieces.Cannons(MainGame.player2Color, , ))
MainGame.piecesList.append(pieces.Mandarins(MainGame.player2Color, , ))
MainGame.piecesList.append(pieces.Mandarins(MainGame.player2Color, , ))
MainGame.piecesList.append(pieces.Pawns(MainGame.player2Color, , ))
MainGame.piecesList.append(pieces.Pawns(MainGame.player2Color, , ))
MainGame.piecesList.append(pieces.Pawns(MainGame.player2Color, , ))
MainGame.piecesList.append(pieces.Pawns(MainGame.player2Color, , ))
MainGame.piecesList.append(pieces.Pawns(MainGame.player2Color, , )) MainGame.piecesList.append(pieces.Rooks(MainGame.player1Color, , ))
MainGame.piecesList.append(pieces.Rooks(MainGame.player1Color, , ))
MainGame.piecesList.append(pieces.Elephants(MainGame.player1Color, , ))
MainGame.piecesList.append(pieces.Elephants(MainGame.player1Color, , ))
MainGame.piecesList.append(pieces.King(MainGame.player1Color, , ))
MainGame.piecesList.append(pieces.Knighs(MainGame.player1Color, , ))
MainGame.piecesList.append(pieces.Knighs(MainGame.player1Color, , ))
MainGame.piecesList.append(pieces.Cannons(MainGame.player1Color, , ))
MainGame.piecesList.append(pieces.Cannons(MainGame.player1Color, , ))
MainGame.piecesList.append(pieces.Mandarins(MainGame.player1Color, , ))
MainGame.piecesList.append(pieces.Mandarins(MainGame.player1Color, , ))
MainGame.piecesList.append(pieces.Pawns(MainGame.player1Color, , ))
MainGame.piecesList.append(pieces.Pawns(MainGame.player1Color, , ))
MainGame.piecesList.append(pieces.Pawns(MainGame.player1Color, , ))
MainGame.piecesList.append(pieces.Pawns(MainGame.player1Color, , ))
MainGame.piecesList.append(pieces.Pawns(MainGame.player1Color, , )) def piecesDisplay(self):
for item in MainGame.piecesList:
item.displaypieces(MainGame.window)
#MainGame.window.blit(item.image, item.rect) def getEvent(self):
# 获取所有的事件
eventList = pygame.event.get()
for event in eventList:
if event.type == pygame.QUIT:
self.endGame()
elif event.type == pygame.MOUSEBUTTONDOWN:
pos = pygame.mouse.get_pos()
mouse_x = pos[]
mouse_y = pos[]
if (
mouse_x > MainGame.Start_X - MainGame.Line_Span / and mouse_x < MainGame.Max_X + MainGame.Line_Span / ) and (
mouse_y > MainGame.Start_Y - MainGame.Line_Span / and mouse_y < MainGame.Max_Y + MainGame.Line_Span / ):
# print( str(mouse_x) + "" + str(mouse_y))
# print(str(MainGame.Putdownflag))
if MainGame.Putdownflag != MainGame.player1Color:
return click_x = round((mouse_x - MainGame.Start_X) / MainGame.Line_Span)
click_y = round((mouse_y - MainGame.Start_Y) / MainGame.Line_Span)
click_mod_x = (mouse_x - MainGame.Start_X) % MainGame.Line_Span
click_mod_y = (mouse_y - MainGame.Start_Y) % MainGame.Line_Span
if abs(click_mod_x - MainGame.Line_Span / ) >= and abs(
click_mod_y - MainGame.Line_Span / ) >= :
# print("有效点:x="+str(click_x)+" y="+str(click_y))
# 有效点击点
self.PutdownPieces(MainGame.player1Color, click_x, click_y)
else:
print("out")
if MainGame.button_go.is_click():
#self.restart()
print("button_go click")
else:
print("button_go click out") def PutdownPieces(self, t, x, y):
selectfilter=list(filter(lambda cm: cm.x == x and cm.y == y and cm.player == MainGame.player1Color,MainGame.piecesList))
if len(selectfilter):
MainGame.piecesSelected = selectfilter[]
return if MainGame.piecesSelected :
#print("") arr = pieces.listPiecestoArr(MainGame.piecesList)
if MainGame.piecesSelected.canmove(arr, x, y):
self.PiecesMove(MainGame.piecesSelected, x, y)
MainGame.Putdownflag = MainGame.player2Color
else:
fi = filter(lambda p: p.x == x and p.y == y, MainGame.piecesList)
listfi = list(fi)
if len(listfi) != :
MainGame.piecesSelected = listfi[] def PiecesMove(self,pieces, x , y):
for item in MainGame.piecesList:
if item.x ==x and item.y == y:
MainGame.piecesList.remove(item)
pieces.x = x
pieces.y = y
print("move to " +str(x) +" "+str(y))
return True def Computerplay(self):
if MainGame.Putdownflag == MainGame.player2Color:
print("轮到电脑了")
computermove = computer.getPlayInfo(MainGame.piecesList)
#if computer==None:
#return
piecemove = None
for item in MainGame.piecesList:
if item.x == computermove[] and item.y == computermove[]:
piecemove= item self.PiecesMove(piecemove, computermove[], computermove[])
MainGame.Putdownflag = MainGame.player1Color #判断游戏胜利
def VictoryOrDefeat(self):
txt =""
result = [MainGame.player1Color,MainGame.player2Color]
for item in MainGame.piecesList:
if type(item) ==pieces.King:
if item.player == MainGame.player1Color:
result.remove(MainGame.player1Color)
if item.player == MainGame.player2Color:
result.remove(MainGame.player2Color) if len(result)==:
return
if result[] == MainGame.player1Color :
txt = "失败!"
else:
txt = "胜利!"
MainGame.window.blit(self.getTextSuface("%s" % txt), (constants.SCREEN_WIDTH - , ))
MainGame.Putdownflag = constants.overColor def getTextSuface(self, text):
pygame.font.init()
# print(pygame.font.get_fonts())
font = pygame.font.SysFont('kaiti', )
txt = font.render(text, True, constants.TEXT_COLOR)
return txt def endGame(self):
print("exit")
exit() if __name__ == '__main__':
MainGame().start_game()
constants.py 数据常量
import pygame

SCREEN_WIDTH=
SCREEN_HEIGHT=
Start_X =
Start_Y =
Line_Span = player1Color =
player2Color =
overColor = BG_COLOR=pygame.Color(, , )
Line_COLOR=pygame.Color(, , )
TEXT_COLOR=pygame.Color(, , ) # 定义颜色
BLACK = ( , , )
WHITE = (, , )
RED = (, , )
GREEN = ( , , )
BLUE = ( , , ) repeat = pieces_images = {
'b_rook': pygame.image.load("imgs/s2/b_c.gif"),
'b_elephant': pygame.image.load("imgs/s2/b_x.gif"),
'b_king': pygame.image.load("imgs/s2/b_j.gif"),
'b_knigh': pygame.image.load("imgs/s2/b_m.gif"),
'b_mandarin': pygame.image.load("imgs/s2/b_s.gif"),
'b_cannon': pygame.image.load("imgs/s2/b_p.gif"),
'b_pawn': pygame.image.load("imgs/s2/b_z.gif"), 'r_rook': pygame.image.load("imgs/s2/r_c.gif"),
'r_elephant': pygame.image.load("imgs/s2/r_x.gif"),
'r_king': pygame.image.load("imgs/s2/r_j.gif"),
'r_knigh': pygame.image.load("imgs/s2/r_m.gif"),
'r_mandarin': pygame.image.load("imgs/s2/r_s.gif"),
'r_cannon': pygame.image.load("imgs/s2/r_p.gif"),
'r_pawn': pygame.image.load("imgs/s2/r_z.gif"),
}
pieces.py 棋子类,走法,
import pygame
import constants class Pieces():
def __init__(self, player, x, y):
self.imagskey = self.getImagekey()
self.image = constants.pieces_images[self.imagskey]
self.x = x
self.y = y
self.player = player
self.rect = self.image.get_rect()
self.rect.left = constants.Start_X + x * constants.Line_Span - self.image.get_rect().width /
self.rect.top = constants.Start_Y + y * constants.Line_Span - self.image.get_rect().height / def displaypieces(self,screen):
#print(str(self.rect.left))
self.rect.left = constants.Start_X + self.x * constants.Line_Span - self.image.get_rect().width /
self.rect.top = constants.Start_Y + self.y * constants.Line_Span - self.image.get_rect().height /
screen.blit(self.image,self.rect);
#self.image = self.images
#MainGame.window.blit(self.image,self.rect) def canmove(self, arr, moveto_x, moveto_y):
pass
def getImagekey(self):
return None
def getScoreWeight(self,listpieces):
return None class Rooks(Pieces):
def __init__(self, player, x, y):
self.player = player
super().__init__(player, x, y) def getImagekey(self):
if self.player == constants.player1Color:
return "r_rook"
else:
return "b_rook" def canmove(self, arr, moveto_x, moveto_y):
if self.x == moveto_x and self.y == moveto_y:
return False
if arr[moveto_x][moveto_y] ==self.player :
return False
if self.x == moveto_x:
step = - if self.y > moveto_y else
for i in range(self.y +step, moveto_y, step):
if arr[self.x][i] != :
return False
#print(" move y")
return True if self.y == moveto_y:
step = - if self.x > moveto_x else
for i in range(self.x + step, moveto_x, step):
if arr[i][self.y] != :
return False
return True def getScoreWeight(self, listpieces):
score =
return score class Knighs(Pieces):
def __init__(self, player, x, y):
self.player = player
super().__init__(player, x, y)
def getImagekey(self):
if self.player == constants.player1Color:
return "r_knigh"
else:
return "b_knigh"
def canmove(self, arr, moveto_x, moveto_y):
if self.x == moveto_x and self.y == moveto_y:
return False
if arr[moveto_x][moveto_y] == self.player:
return False
#print(str(self.x) +""+str(self.y))
move_x = moveto_x-self.x
move_y = moveto_y - self.y
if abs(move_x) == and abs(move_y) == :
step = if move_y > else -
if arr[self.x][self.y + step] == :
return True
if abs(move_x) == and abs(move_y) == :
step = if move_x > else -
if arr[self.x +step][self.y] == :
return True def getScoreWeight(self, listpieces):
score =
return score class Elephants(Pieces):
def __init__(self, player, x, y):
self.player = player
super().__init__(player, x, y)
def getImagekey(self):
if self.player == constants.player1Color:
return "r_elephant"
else:
return "b_elephant"
def canmove(self, arr, moveto_x, moveto_y):
if self.x == moveto_x and self.y == moveto_y:
return False
if arr[moveto_x][moveto_y] == self.player:
return False
if self.y <= and moveto_y >= or self.y >= and moveto_y <=:
return False
move_x = moveto_x - self.x
move_y = moveto_y - self.y
if abs(move_x) == and abs(move_y) == :
step_x = if move_x > else -
step_y = if move_y > else -
if arr[self.x + step_x][self.y + step_y] == :
return True def getScoreWeight(self, listpieces):
score =
return score
class Mandarins(Pieces): def __init__(self, player, x, y):
self.player = player
super().__init__(player, x, y) def getImagekey(self):
if self.player == constants.player1Color:
return "r_mandarin"
else:
return "b_mandarin"
def canmove(self, arr, moveto_x, moveto_y):
if self.x == moveto_x and self.y == moveto_y:
return False
if arr[moveto_x][moveto_y] == self.player:
return False
if moveto_x < or moveto_x >:
return False
if moveto_y > and moveto_y < :
return False
move_x = moveto_x - self.x
move_y = moveto_y - self.y
if abs(move_x) == and abs(move_y) == :
return True
def getScoreWeight(self, listpieces):
score =
return score class King(Pieces):
def __init__(self, player, x, y):
self.player = player
super().__init__(player, x, y)
def getImagekey(self):
if self.player == constants.player1Color:
return "r_king"
else:
return "b_king" def canmove(self, arr, moveto_x, moveto_y):
if self.x == moveto_x and self.y == moveto_y:
return False
if arr[moveto_x][moveto_y] == self.player:
return False
if moveto_x < or moveto_x > :
return False
if moveto_y > and moveto_y < :
return False
move_x = moveto_x - self.x
move_y = moveto_y - self.y
if abs(move_x) + abs(move_y) == :
return True
def getScoreWeight(self, listpieces):
score =
return score
class Cannons(Pieces):
def __init__(self, player, x, y):
self.player = player
super().__init__(player, x, y)
def getImagekey(self):
if self.player == constants.player1Color:
return "r_cannon"
else:
return "b_cannon" def canmove(self, arr, moveto_x, moveto_y):
if self.x == moveto_x and self.y == moveto_y:
return False
if arr[moveto_x][moveto_y] == self.player:
return False
overflag = False
if self.x == moveto_x:
step = - if self.y > moveto_y else
for i in range(self.y + step, moveto_y, step):
if arr[self.x][i] != :
if overflag:
return False
else:
overflag = True if overflag and arr[moveto_x][moveto_y] == :
return False
if not overflag and arr[self.x][moveto_y] != :
return False return True if self.y == moveto_y:
step = - if self.x > moveto_x else
for i in range(self.x + step, moveto_x, step):
if arr[i][self.y] != :
if overflag:
return False
else:
overflag = True if overflag and arr[moveto_x][moveto_y] == :
return False
if not overflag and arr[moveto_x][self.y] != :
return False
return True
def getScoreWeight(self, listpieces):
score =
return score class Pawns(Pieces):
def __init__(self, player, x, y):
self.player = player
super().__init__(player, x, y)
def getImagekey(self):
if self.player == constants.player1Color:
return "r_pawn"
else:
return "b_pawn" def canmove(self, arr, moveto_x, moveto_y):
if self.x == moveto_x and self.y == moveto_y:
return False
if arr[moveto_x][moveto_y] == self.player:
return False
move_x = moveto_x - self.x
move_y = moveto_y - self.y if self.player == constants.player1Color:
if self.y > and move_x != :
return False
if move_y > :
return False
elif self.player == constants.player2Color:
if self.y <= and move_x != :
return False
if move_y < :
return False if abs(move_x) + abs(move_y) == :
return True
def getScoreWeight(self, listpieces):
score =
return score def listPiecestoArr(piecesList):
arr = [[ for i in range()] for j in range()]
for i in range(, ):
for j in range(, ):
if len(list(filter(lambda cm: cm.x == i and cm.y == j and cm.player == constants.player1Color,
piecesList))):
arr[i][j] = constants.player1Color
elif len(list(filter(lambda cm: cm.x == i and cm.y == j and cm.player == constants.player2Color,
piecesList))):
arr[i][j] = constants.player2Color return arr
computer.py 电脑走法计算
import constants
#import time
from pieces import listPiecestoArr def getPlayInfo(listpieces):
pieces = movedeep(listpieces , ,constants.player2Color)
return [pieces[].x,pieces[].y, pieces[], pieces[]] def movedeep(listpieces, deepstep, player):
arr = listPiecestoArr(listpieces)
listMoveEnabel = []
for i in range(, ):
for j in range(, ):
for item in listpieces:
if item.player == player and item.canmove(arr, i, j):
#标记是否有子被吃 如果被吃 在下次循环时需要补会
piecesremove = None
for itembefore in listpieces:
if itembefore.x == i and itembefore.y == j:
piecesremove= itembefore
break
if piecesremove != None:
listpieces.remove(piecesremove) #记录移动之前的位置
move_x = item.x
move_y = item.y
item.x = i
item.y = j #print(str(move_x) + "," + str(move_y) + "," + str(item.x) + " , " + str(item.y))
scoreplayer1 =
scoreplayer2 =
for itemafter in listpieces:
if itemafter.player == constants.player1Color:
scoreplayer1 += itemafter.getScoreWeight(listpieces)
elif itemafter.player == constants.player2Color:
scoreplayer2 += itemafter.getScoreWeight(listpieces) #print("得分:"+item.imagskey +", "+str(len(moveAfterListpieces))+","+str(i)+","+str(j)+"," +str(scoreplayer1) +" , "+ str(scoreplayer2) )
#print(str(deepstep))
#如果得子 判断对面是否可以杀过来,如果又被杀,而且子力评分低,则不干
arrkill = listPiecestoArr(listpieces) if scoreplayer2 > scoreplayer1 :
for itemkill in listpieces:
if itemkill.player == constants.player1Color and itemkill.canmove(arrkill, i, j):
scoreplayer2=scoreplayer1 if deepstep > :
nextplayer = constants.player1Color if player == constants.player2Color else constants.player2Color
nextpiecesbest= movedeep(listpieces, deepstep -, nextplayer)
listMoveEnabel.append([item, i, j, nextpiecesbest[], nextpiecesbest[], nextpiecesbest[]])
else:
#print(str(len(listpieces)))
#print("得分:" + item.imagskey + ", " + str(len(listpieces)) + "," + str(move_x) + "," + str(move_y) + "," + str(i) + " , " + str(j))
if player == constants.player2Color:
listMoveEnabel.append([item, i, j, scoreplayer1, scoreplayer2, scoreplayer1 - scoreplayer2])
else:
listMoveEnabel.append([item, i, j, scoreplayer1, scoreplayer2, scoreplayer2 - scoreplayer1])
#print("得分:"+str(scoreplayer1))
item.x = move_x
item.y = move_y
if piecesremove != None:
listpieces.append(piecesremove) list_scorepalyer1 = sorted(listMoveEnabel, key=lambda tm: tm[], reverse=True)
piecesbest = list_scorepalyer1[]
if deepstep == :
print(list_scorepalyer1)
return piecesbest

关注微信公众号“ python社区营 ”分享技术干货,提供学习资源

Python 中国象棋源码 V1的更多相关文章

  1. android 在线升级借助开源中国App源码

    android 在线升级借助开源中国App源码 http://www.cnblogs.com/luomingui/p/3949429.html android 在线升级借助开源中国App源码分析如下: ...

  2. python的paramiko源码修改了一下,写了个操作命令的日志审计 bug修改

    python的paramiko源码修改了一下,写了个操作命令的日志审计,但是记录的日志中也将backspace删除键记录成^H这个了,于是改了一下代码,用字符串的特性. 字符串具有列表的特性 > ...

  3. Python解析器源码加密系列之(二):一次使用标准c的FILE*访问内存块的尝试

    摘要:由于近期打算修改Python解释器以实现pyc文件的加密/解密,出于保密的要求,解密之后的数据只能放在内存中,不能写入到文件中.但是后续的解析pyc文件的代码又只能接受FILE*作为入参,所以就 ...

  4. Python 3.5源码编译安装

    系统环境:CentOS 6.8-Minimal 安装Python依赖包: [root@Python src]# yum install zlib-devel bzip2-devel openssl-d ...

  5. Python:Sqlmap源码精读之解析xml

    XML <?xml version="1.0" encoding="UTF-8"?> <root> <!-- MySQL --&g ...

  6. 读懂掌握 Python logging 模块源码 (附带一些 example)

    搜了一下自己的 Blog 一直缺乏一篇 Python logging 模块的深度使用的文章.其实这个模块非常常用,也有非常多的滥用.所以看看源码来详细记录一篇属于 logging 模块的文章. 整个 ...

  7. Python paramiko 修改源码实现用户命令抓取

    paramiko 源码修改 paramiko主要用来实现ssh客户端.服务端链接,上一节我们说到了堡垒机,堡垒机内有一个需求是“用户行为审计”,在这里我们就可以通过修改paramiko内文件的源码来实 ...

  8. 【Python】Webpy 源码学习

    那么webpy是什么呢? 阅读它的源码我们又能学到什么呢? 简单说webpy就是一个开源的web应用框架(官方首页:http://webpy.org/) 它的源代码非常整洁精干,学习它一方面可以让我们 ...

  9. Python Web Flask源码解读(一)——启动流程

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

随机推荐

  1. Prometheus PromQL 简单用法

    目录 说明 CPU 内存 磁盘监控 磁盘空间利用率百分比 预计饱和 说明 基于上一篇文章的基础,这里做一些关于 CPU.内存.磁盘的一些基础查询语句. CPU 通过查询 metric值为 node_c ...

  2. session与cookie的介绍和两者的区别之其相互的关系

    转:https://blog.csdn.net/weixin_37196194/article/details/55806366 本文分别对Cookie与Session做一个介绍和总结,并分别对两个知 ...

  3. 一文看尽Java-并发编程知识点

    一.前言     从7月份开始一直加班比较多,一直到双11结束,博客没跟上写,接下来写一点总结性的东西,比如Java并发编程总结.Mybatis源码总结.Spring源码和基础知识总结,首先来看下并发 ...

  4. MySQL必知必会(正则表达式)

    SELECT prod_name FROM products ' #检索列prod_name包含文本1000的所有行. ORDER BY prod_name; SELECT prod_name FRO ...

  5. promise 进阶 —— async / await 结合 bluebird

    一.背景 1.Node.js 异步控制 在之前写的 callback vs async.js vs promise vs async / await 里,我介绍了 ES6 的 promise 和 ES ...

  6. Ceph 架构以及原理分析

    一.架构 Ceph在一个统一的系统中独特地提供对象,块和文件存储. Ceph高度可靠,易于管理且免费. Ceph的强大功能可以改变您公司的IT基础架构以及管理大量数据的能力. Ceph提供了非凡的可扩 ...

  7. python学习笔记—DataFrame和Series的排序

    更多大数据分析.建模等内容请关注公众号<bigdatamodeling> ################################### 排序 ################## ...

  8. 使用SQL计算宝宝每次吃奶的时间间隔(续)

    本文是<使用SQL计算宝宝每次吃奶的时间间隔>的续篇,因为我工作繁忙,时常不能及时帮助媳妇儿记录,为了让不懂数据库的媳妇儿也可以自己用手机熟练操作.我继续做了一些修正和封装: 1.给媳妇儿 ...

  9. 8种创建Java线程的方式,你知道几个?

    作者:唐彤 简介 创建线程,是多线程编程中最基本的操作,彤哥总结了一下,大概有8种创建线程的方式,你知道吗? 1.继承Thread类并重写run()方法 public class CreatingTh ...

  10. c语言输入矩阵的对角线之和

    一.程序代码如下 #include<stdio.h> #define M 4 main() { int matrix[][M]={ {1,2,4,5},{2,6,6,7},{8,7,6,5 ...