diff --git a/SHUDU.py b/SHUDU.py deleted file mode 100644 index 7b784b4..0000000 --- a/SHUDU.py +++ /dev/null @@ -1,171 +0,0 @@ -import random -from tkinter.messagebox import showinfo -import pygame -from pygame.color import THECOLORS as COLORS -from tkinter import * - - -class BUILAGAME(): - def __init__(self, matrix): - self.matrix = matrix - - def PrintMatrix(matrix): - print('—'*19) - for row in matrix: - print('|'+' '.join([str(col) for col in row])+'|') - print('—'*19) - - - def ShuffleNumber(AnyList): - random.shuffle(AnyList) - return AnyList - - - def Check(matrix, i, j, number): - if number in matrix[i]: - return False - if number in [row[j] for row in matrix]: - return False - pratI, pratJ = int(i/3), int(j/3) - if number in [matrix[i][j] for i in range(pratI*3, (pratI+1)*3) for j in range(pratJ*3, (pratJ+1)*3)]: - return False - return True - - - def BuildMap(matrix, i, j, number): - if i > 8 or j > 8: - return matrix - if BUILAGAME.Check(matrix, i, j, number): - mattrix_no1 = [[col for col in row] for row in matrix] - mattrix_no1[i][j] = number - next_i,next_j = (i+1, 0) if j == 8 else (i, j+1) - for number2 in BUILAGAME.ShuffleNumber(number_list): - mattrix_no2 = BUILAGAME.BuildMap(mattrix_no1, next_i, next_j, number2) - if mattrix_no2 and sum([sum(row) for row in mattrix_no2]) == (sum(range(1, 10))*9): - return mattrix_no2 - return None - - - def PreaGame(blank_size=9): - matrix_all = BUILAGAME.BuildMap(matrix, 0, 0, random.choice(number_list)) - set_ij = set() - while len(list(set_ij)) < blank_size: - templist = [0, 1, 2, 3, 4, 5, 6, 7, 8] - set_ij.add(str(random.choice(templist))+','+str(random.choice(templist))) - matrix_blank = [[col for col in row] for row in matrix_all] - blank_ij = [] - for ij in list(set_ij): - i,j = int(ij.split(',')[0]),int(ij.split(',')[1]) - blank_ij.append((i, j)) - matrix_blank[i][j] = 0 - return matrix_all, matrix_blank, blank_ij - - -def DrawBG(): - BG_COLOR = (40, 40, 60) # 背景色(黑蓝) - screen.fill(BG_COLOR) - pygame.display.set_caption('数独游戏') - pygame.draw.rect(screen, COLORS['black'], (0, 0, 200, 600), 3)#画出九宫格 - pygame.draw.rect(screen, COLORS['black'], (200, 0, 200, 600), 3) - pygame.draw.rect(screen, COLORS['black'], (400, 0, 200, 600), 3) - pygame.draw.rect(screen, COLORS['black'], (0, 0, 600, 200), 3) - pygame.draw.rect(screen, COLORS['black'], (0, 200, 600, 200), 3) - pygame.draw.rect(screen, COLORS['black'], (0, 400, 600, 200), 3) - - -def DrawChoose(): - BLOCK_COLOR = (129, 216, 208) #选中方块颜色(蒂凡尼蓝) - pygame.draw.rect(screen, BLOCK_COLOR, (curJ * 66 + 5, curI * 66 + 5, 66 - 6, 66 - 6), 0) - - -def WinorNot(matrix_all, matrix): - if matrix_all == matrix: - return True - return False - - -def CheckColor(matrix, i, j): - mattrix_no1 = [[col for col in row] for row in matrix] - mattrix_no1[i][j] = 0 - if BUILAGAME.Check(mattrix_no1, i, j, matrix[i][j]): - return COLORS['green'] - return COLORS['red'] - - -def DrawNum(): - for i in range(len(MATRIX)): - for j in range(len(MATRIX[0])): - _color = CheckColor(MATRIX, i, j) if (i, j) in BLANK_IJ else COLORS['gray'] - txt = font80.render(str(MATRIX[i][j] if MATRIX[i][j] not in [0, '0'] else ''), True, _color) - x, y = j * 66 + 20, i * 66 + 6 #字体占据大小 - screen.blit(txt, (x, y)) - - -def DrawContext(): - txt = font100.render('Blank:' + str(cur_blank_size) + ' Change:' + str(cur_change_size), True, COLORS['white']) - x, y = 10, 600 - screen.blit(txt, (x, y)) - -def level(number): - global cur_blank_size - cur_blank_size = number - return - -def startgame(): - root = Tk(); - root.title("数独游戏") - Label(root, text="欢迎来到数独游戏,请选择难度").place(x=60, y=1) - root.geometry("300x120") - button0 = Button(root, text="简单", width=8, command=lambda: level(10)) - button1 = Button(root, text="一般", width=8, command=lambda: level(25)) - button2 = Button(root, text="困难", width=8, command=lambda: level(35)) - button3 = Button(root, text="大师", width=8, command=lambda: level(64)) - button0.place(x=10, y=40) - button1.place(x=80, y=40) - button2.place(x=150, y=40) - button3.place(x=220, y=40) - mainloop() - - -if __name__ == "__main__": - pygame.init() - cur_blank_size = 10 - startgame() - number_list = [1, 2, 3, 4, 5, 6, 7, 8, 9] - matrix = [([0] * 9) for i in range(9)] - SIZE = [600, 700]#窗口尺寸 - font80 = pygame.font.SysFont('Times', 50)#字体大小 - font100 = pygame.font.SysFont('Times', 50) - - screen = pygame.display.set_mode(SIZE) - - curI, curJ = 0, 0 - cur_change_size = 0 - - # matrix abount - MATRIX_ANSWER, MATRIX, BLANK_IJ = BUILAGAME.PreaGame(blank_size=cur_blank_size) - print(BLANK_IJ) - BUILAGAME.PrintMatrix(MATRIX) - - running = True - while running: - for event in pygame.event.get(): - if event.type == pygame.QUIT: - running = False - break - elif event.type == pygame.MOUSEBUTTONDOWN: - curJ, curI = int(event.pos[0] / 66), int(event.pos[1] / 66) - elif event.type == event.type == pygame.KEYUP: - if chr(event.key) in ['1', '2', '3', '4', '5', '6', '7', '8', '9'] and (curI, curJ) in BLANK_IJ: - MATRIX[curI][curJ] = int(chr(event.key)) - cur_blank_size = sum([1 if col == 0 or col == '0' else 0 for row in MATRIX for col in row]) - cur_change_size += 1 - DrawBG() - DrawChoose() - DrawNum() - DrawContext() - pygame.display.flip() - if WinorNot(MATRIX_ANSWER, MATRIX): - showinfo(title="Game end", message="You win, well done!") - break - pygame.quit() \ No newline at end of file