> 文档中心 > 18个有趣的Python小游戏,摸鱼到停不下来...【附源码】

18个有趣的Python小游戏,摸鱼到停不下来...【附源码】

📃个人主页:互联网阿星🧐
💬格言:选择有时候会大于努力,但你不努力就没得选🔥
🔥作者简介:大家好我是互联网阿星,和阿星一起,合理使用Python,努力做时间的主人🏆
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞

在这里插入图片描述
行业资料:PPT模板、简历模板、行业经典书籍PDF
面试题库:历年经典、热乎的大厂面试真题,持续更新中…
学习资料:Python、爬虫、数据分析、算法等学习视频和文档。
Tips:以上资料+Python小游戏源代码+游戏玩法详解阿星已备好>>戳我,空投直达🪂


Python小游戏·目录

  • 前言
  • 有手就行:难度❤
    • 小游戏1:滑雪,难度❤
    • 小游戏2:打地鼠,难度❤
  • 简简单单:难度❤❤
    • 小游戏3:消消乐❤❤
    • 小游戏4:贪吃蛇❤❤
    • 小游戏5:俄罗斯方块❤❤
  • 普普通通:难度❤❤❤
    • 小游戏6:井字棋❤❤❤
    • 小游戏7:贪心鸟❤❤❤
  • 有点困难:难度❤❤❤❤
    • 小游戏8:五子棋❤❤❤❤
    • 小游戏9:坦克大战❤❤❤❤
    • 小游戏10:超级玛丽❤❤❤❤
  • 极度困难:难度❤❤❤❤❤
    • 小游戏11:植物大战僵尸❤❤❤❤❤
    • 小游戏12:飞机大战❤❤❤❤❤
    • 小游戏13:推箱子❤❤❤❤❤
    • 小游戏14:2048❤❤❤❤❤
    • 小游戏15:扫雷❤❤❤❤❤
  • 终极挑战:难度❤❤❤❤❤❤
    • 小游戏16:拼图❤❤❤❤❤❤
    • 小游戏17:走迷宫❤❤❤❤❤❤
    • 小游戏18:最强游戏❤❤❤❤❤❤❤
  • 小结

前言

今天,阿星给大家带来18个Python小游戏,这波必须得☆收藏起来吖😎

根据操作难度,特区分为以下6种类型🤗

  1. 有手就行:难度❤
  2. 简简单单:难度❤❤
  3. 普普通通:难度❤❤❤
  4. 有点困难:难度❤❤❤❤
  5. 极度困难:难度❤❤❤❤❤
  6. 终极挑战:难度❤❤❤❤❤❤

话不多说,和阿星一起开始闯关!

有手就行:难度❤

小游戏1:滑雪,难度❤

18个有趣的Python小游戏,摸鱼到停不下来...【附源码】
源码分享

 import sysimport cfgimport pygameimport random  '''滑雪者类'''class SkierClass(pygame.sprite.Sprite):    def __init__(self): pygame.sprite.Sprite.__init__(self) # 滑雪者的朝向(-2到2) self.direction = 0 self.imagepaths = cfg.SKIER_IMAGE_PATHS[:-1] self.image = pygame.image.load(self.imagepaths[self.direction]) self.rect = self.image.get_rect() self.rect.center = [320, 100] self.speed = [self.direction, 6-abs(self.direction)*2]    '''改变滑雪者的朝向. 负数为向左,正数为向右,0为向前'''    def turn(self, num): self.direction += num self.direction = max(-2, self.direction) self.direction = min(2, self.direction) center = self.rect.center self.image = pygame.image.load(self.imagepaths[self.direction]) self.rect = self.image.get_rect() self.rect.center = center self.speed = [self.direction, 6-abs(self.direction)*2] return self.speed    '''移动滑雪者'''    def move(self): self.rect.centerx += self.speed[0] self.rect.centerx = max(20, self.rect.centerx) self.rect.centerx = min(620, self.rect.centerx)    '''设置为摔倒状态'''    def setFall(self): self.image = pygame.image.load(cfg.SKIER_IMAGE_PATHS[-1])    '''设置为站立状态'''    def setForward(self): self.direction = 0 self.image = pygame.image.load(self.imagepaths[self.direction])  '''Function:    障碍物类Input:    img_path: 障碍物图片路径    location: 障碍物位置    attribute: 障碍物类别属性'''class ObstacleClass(pygame.sprite.Sprite):    def __init__(self, img_path, location, attribute): pygame.sprite.Sprite.__init__(self) self.img_path = img_path self.image = pygame.image.load(self.img_path) self.location = location self.rect = self.image.get_rect() self.rect.center = self.location self.attribute = attribute self.passed = False    '''移动'''    def move(self, num): self.rect.centery = self.location[1] - num  '''创建障碍物'''def createObstacles(s, e, num=10):    obstacles = pygame.sprite.Group()    locations = []    for i in range(num): row = random.randint(s, e) col = random.randint(0, 9) location  = [col*64+20, row*64+20] if location not in locations:     locations.append(location)     attribute = random.choice(list(cfg.OBSTACLE_PATHS.keys()))     img_path = cfg.OBSTACLE_PATHS[attribute]     obstacle = ObstacleClass(img_path, location, attribute)     obstacles.add(obstacle)    return obstacles  '''合并障碍物'''def AddObstacles(obstacles0, obstacles1):    obstacles = pygame.sprite.Group()    for obstacle in obstacles0: obstacles.add(obstacle)    for obstacle in obstacles1: obstacles.add(obstacle)    return obstacles  '''显示游戏开始界面'''def ShowStartInterface(screen, screensize):    screen.fill((255, 255, 255))    tfont = pygame.font.Font(cfg.FONTPATH, screensize[0]//5)    cfont = pygame.font.Font(cfg.FONTPATH, screensize[0]//20)    title = tfont.render(u'滑雪游戏', True, (255, 0, 0))    content = cfont.render(u'按任意键开始游戏', True, (0, 0, 255))    trect = title.get_rect()    trect.midtop = (screensize[0]/2, screensize[1]/5)    crect = content.get_rect()    crect.midtop = (screensize[0]/2, screensize[1]/2)    screen.blit(title, trect)    screen.blit(content, crect)    while True: for event in pygame.event.get():     if event.type == pygame.QUIT:  pygame.quit()  sys.exit()     elif event.type == pygame.KEYDOWN:  return pygame.display.update()  '''显示分数'''def showScore(screen, score, pos=(10, 10)):    font = pygame.font.Font(cfg.FONTPATH, 30)    score_text = font.render("Score: %s" % score, True, (0, 0, 0))    screen.blit(score_text, pos)  '''更新当前帧的游戏画面'''def updateFrame(screen, obstacles, skier, score):    screen.fill((255, 255, 255))    obstacles.draw(screen)    screen.blit(skier.image, skier.rect)    showScore(screen, score)    pygame.display.update()  '''主程序'''def main():    # 游戏初始化    pygame.init()    pygame.mixer.init()    pygame.mixer.music.load(cfg.BGMPATH)    pygame.mixer.music.set_volume(0.4)    pygame.mixer.music.play(-1)    # 设置屏幕    screen = pygame.display.set_mode(cfg.SCREENSIZE)    pygame.display.set_caption('滑雪游戏 —— 九歌')    # 游戏开始界面    ShowStartInterface(screen, cfg.SCREENSIZE)    # 实例化游戏精灵    # --滑雪者    skier = SkierClass()    # --创建障碍物    obstacles0 = createObstacles(20, 29)    obstacles1 = createObstacles(10, 19)    obstaclesflag = 0    obstacles = AddObstacles(obstacles0, obstacles1)    # 游戏clock    clock = pygame.time.Clock()    # 记录滑雪的距离    distance = 0    # 记录当前的分数    score = 0    # 记录当前的速度    speed = [0, 6]    # 游戏主循环    while True: # --事件捕获 for event in pygame.event.get():     if event.type == pygame.QUIT:  pygame.quit()  sys.exit()     if event.type == pygame.KEYDOWN:  if event.key == pygame.K_LEFT or event.key == pygame.K_a:      speed = skier.turn(-1)  elif event.key == pygame.K_RIGHT or event.key == pygame.K_d:      speed = skier.turn(1) # --更新当前游戏帧的数据 skier.move() distance += speed[1] if distance >= 640 and obstaclesflag == 0:     obstaclesflag = 1     obstacles0 = createObstacles(20, 29)     obstacles = AddObstacles(obstacles0, obstacles1) if distance >= 1280 and obstaclesflag == 1:     obstaclesflag = 0     distance -= 1280     for obstacle in obstacles0:  obstacle.location[1] = obstacle.location[1] - 1280     obstacles1 = createObstacles(10, 19)     obstacles = AddObstacles(obstacles0, obstacles1) for obstacle in obstacles:     obstacle.move(distance) # --碰撞检测 hitted_obstacles = pygame.sprite.spritecollide(skier, obstacles, False) if hitted_obstacles:     if hitted_obstacles[0].attribute == "tree" and not hitted_obstacles[0].passed:  score -= 50  skier.setFall()  updateFrame(screen, obstacles, skier, score)  pygame.time.delay(1000)  skier.setForward()  speed = [0, 6]  hitted_obstacles[0].passed = True     elif hitted_obstacles[0].attribute == "flag" and not hitted_obstacles[0].passed:  score += 10  obstacles.remove(hitted_obstacles[0]) # --更新屏幕 updateFrame(screen, obstacles, skier, score) clock.tick(cfg.FPS)  '''run'''if __name__ == '__main__':    main()

小游戏2:打地鼠,难度❤

18个有趣的Python小游戏,摸鱼到停不下来...【附源码】
源码分享

 import cfgimport sysimport pygameimport randomfrom modules import *  '''游戏初始化'''def initGame():    pygame.init()    pygame.mixer.init()    screen = pygame.display.set_mode(cfg.SCREENSIZE)    pygame.display.set_caption('打地鼠 —— 九歌')    return screen  '''主函数'''def main():    # 初始化    screen = initGame()    # 加载背景音乐和其他音效    pygame.mixer.music.load(cfg.BGM_PATH)    pygame.mixer.music.play(-1)    audios = { 'count_down': pygame.mixer.Sound(cfg.COUNT_DOWN_SOUND_PATH), 'hammering': pygame.mixer.Sound(cfg.HAMMERING_SOUND_PATH)    }    # 加载字体    font = pygame.font.Font(cfg.FONT_PATH, 40)    # 加载背景图片    bg_img = pygame.image.load(cfg.GAME_BG_IMAGEPATH)    # 开始界面    startInterface(screen, cfg.GAME_BEGIN_IMAGEPATHS)    # 地鼠改变位置的计时    hole_pos = random.choice(cfg.HOLE_POSITIONS)    change_hole_event = pygame.USEREVENT    pygame.time.set_timer(change_hole_event, 800)    # 地鼠    mole = Mole(cfg.MOLE_IMAGEPATHS, hole_pos)    # 锤子    hammer = Hammer(cfg.HAMMER_IMAGEPATHS, (500, 250))    # 时钟    clock = pygame.time.Clock()    # 分数    your_score = 0    flag = False    # 初始时间    init_time = pygame.time.get_ticks()    # 游戏主循环    while True: # --游戏时间为60s time_remain = round((61000 - (pygame.time.get_ticks() - init_time)) / 1000.) # --游戏时间减少, 地鼠变位置速度变快 if time_remain == 40 and not flag:     hole_pos = random.choice(cfg.HOLE_POSITIONS)     mole.reset()     mole.setPosition(hole_pos)     pygame.time.set_timer(change_hole_event, 650)     flag = True elif time_remain == 20 and flag:     hole_pos = random.choice(cfg.HOLE_POSITIONS)     mole.reset()     mole.setPosition(hole_pos)     pygame.time.set_timer(change_hole_event, 500)     flag = False # --倒计时音效 if time_remain == 10:     audios['count_down'].play() # --游戏结束 if time_remain < 0: break count_down_text = font.render('Time: '+str(time_remain), True, cfg.WHITE) # --按键检测 for event in pygame.event.get():     if event.type == pygame.QUIT:  pygame.quit()  sys.exit()     elif event.type == pygame.MOUSEMOTION:  hammer.setPosition(pygame.mouse.get_pos())     elif event.type == pygame.MOUSEBUTTONDOWN:  if event.button == 1:      hammer.setHammering()     elif event.type == change_hole_event:  hole_pos = random.choice(cfg.HOLE_POSITIONS)  mole.reset()  mole.setPosition(hole_pos) # --碰撞检测 if hammer.is_hammering and not mole.is_hammer:     is_hammer = pygame.sprite.collide_mask(hammer, mole)     if is_hammer:  audios['hammering'].play()  mole.setBeHammered()  your_score += 10 # --分数 your_score_text = font.render('Score: '+str(your_score), True, cfg.BROWN) # --绑定必要的游戏元素到屏幕(注意顺序) screen.blit(bg_img, (0, 0)) screen.blit(count_down_text, (875, 8)) screen.blit(your_score_text, (800, 430)) mole.draw(screen) hammer.draw(screen) # --更新 pygame.display.flip() clock.tick(60)    # 读取最佳分数(try块避免第一次游戏无.rec文件)    try: best_score = int(open(cfg.RECORD_PATH).read())    except: best_score = 0    # 若当前分数大于最佳分数则更新最佳分数    if your_score > best_score: f = open(cfg.RECORD_PATH, 'w') f.write(str(your_score)) f.close()    # 结束界面    score_info = {'your_score': your_score, 'best_score': best_score}    is_restart = endInterface(screen, cfg.GAME_END_IMAGEPATH, cfg.GAME_AGAIN_IMAGEPATHS, score_info, cfg.FONT_PATH, [cfg.WHITE, cfg.RED], cfg.SCREENSIZE)    return is_restart  '''run'''if __name__ == '__main__':    while True: is_restart = main() if not is_restart:     break

简简单单:难度❤❤

玩法详解+源码获取戳我

小游戏3:消消乐❤❤

玩法:三个相连就能消除
18个有趣的Python小游戏,摸鱼到停不下来...【附源码】

 import osimport sysimport cfgimport pygamefrom modules import *  '''游戏主程序'''def main():    pygame.init()    screen = pygame.display.set_mode(cfg.SCREENSIZE)    pygame.display.set_caption('Gemgem —— 九歌')    # 加载背景音乐    pygame.mixer.init()    pygame.mixer.music.load(os.path.join(cfg.ROOTDIR, "resources/audios/bg.mp3"))    pygame.mixer.music.set_volume(0.6)    pygame.mixer.music.play(-1)    # 加载音效    sounds = {}    sounds['mismatch'] = pygame.mixer.Sound(os.path.join(cfg.ROOTDIR, 'resources/audios/badswap.wav'))    sounds['match'] = []    for i in range(6): sounds['match'].append(pygame.mixer.Sound(os.path.join(cfg.ROOTDIR, 'resources/audios/match%s.wav' % i)))    # 加载字体    font = pygame.font.Font(os.path.join(cfg.ROOTDIR, 'resources/font/font.TTF'), 25)    # 图片加载    gem_imgs = []    for i in range(1, 8): gem_imgs.append(os.path.join(cfg.ROOTDIR, 'resources/images/gem%s.png' % i))    # 主循环    game = gemGame(screen, sounds, font, gem_imgs, cfg)    while True: score = game.start() flag = False # 一轮游戏结束后玩家选择重玩或者退出 while True:     for event in pygame.event.get():  if event.type == pygame.QUIT or (event.type == pygame.KEYUP and event.key == pygame.K_ESCAPE):      pygame.quit()      sys.exit()  elif event.type == pygame.KEYUP and event.key == pygame.K_r:      flag = True     if flag:  break     screen.fill((135, 206, 235))     text0 = 'Final score: %s' % score     text1 = 'Press  to restart the game.'     text2 = 'Press  to quit the game.'     y = 150     for idx, text in enumerate([text0, text1, text2]):  text_render = font.render(text, 1, (85, 65, 0))  rect = text_render.get_rect()  if idx == 0:      rect.left, rect.top = (212, y)  elif idx == 1:      rect.left, rect.top = (122.5, y)  else:      rect.left, rect.top = (126.5, y)  y += 100  screen.blit(text_render, rect)     pygame.display.update() game.reset()  '''run'''if __name__ == '__main__':    main()

小游戏4:贪吃蛇❤❤

  • 玩法:童年经典,普通模式也没啥意思,小时候玩的也是加速的。

18个有趣的Python小游戏,摸鱼到停不下来...【附源码】
源码分享

 import cfgimport sysimport pygamefrom modules import *  '''主函数'''def main(cfg):    # 游戏初始化    pygame.init()    screen = pygame.display.set_mode(cfg.SCREENSIZE)    pygame.display.set_caption('Greedy Snake —— 九歌')    clock = pygame.time.Clock()    # 播放背景音乐    pygame.mixer.music.load(cfg.BGMPATH)    pygame.mixer.music.play(-1)    # 游戏主循环    snake = Snake(cfg)    apple = Apple(cfg, snake.coords)    score = 0    while True: screen.fill(cfg.BLACK) # --按键检测 for event in pygame.event.get():     if event.type == pygame.QUIT:  pygame.quit()  sys.exit()     elif event.type == pygame.KEYDOWN:  if event.key in [pygame.K_UP, pygame.K_DOWN, pygame.K_LEFT, pygame.K_RIGHT]:      snake.setDirection({pygame.K_UP: 'up', pygame.K_DOWN: 'down', pygame.K_LEFT: 'left', pygame.K_RIGHT: 'right'}[event.key]) # --更新贪吃蛇和食物 if snake.update(apple):     apple = Apple(cfg, snake.coords)     score += 1 # --判断游戏是否结束 if snake.isgameover: break # --显示游戏里必要的元素 drawGameGrid(cfg, screen) snake.draw(screen) apple.draw(screen) showScore(cfg, score, screen) # --屏幕更新 pygame.display.update() clock.tick(cfg.FPS)    return endInterface(screen, cfg)  '''run'''if __name__ == '__main__':    while True: if not main(cfg):     break

小游戏5:俄罗斯方块❤❤

玩法:童年经典,普通模式没啥意思,小时候我们都是玩加速的。
18个有趣的Python小游戏,摸鱼到停不下来...【附源码】
源码分享

 import osimport sysimport randomfrom modules import *from PyQt5.QtGui import *from PyQt5.QtCore import *from PyQt5.QtWidgets import *  '''定义俄罗斯方块游戏类'''class TetrisGame(QMainWindow):    def __init__(self, parent=None): super(TetrisGame, self).__init__(parent) # 是否暂停ing self.is_paused = False # 是否开始ing self.is_started = False self.initUI()    '''界面初始化'''    def initUI(self): # icon self.setWindowIcon(QIcon(os.path.join(os.getcwd(), 'resources/icon.jpg'))) # 块大小 self.grid_size = 22 # 游戏帧率 self.fps = 200 self.timer = QBasicTimer() # 焦点 self.setFocusPolicy(Qt.StrongFocus) # 水平布局 layout_horizontal = QHBoxLayout() self.inner_board = InnerBoard() self.external_board = ExternalBoard(self, self.grid_size, self.inner_board) layout_horizontal.addWidget(self.external_board) self.side_panel = SidePanel(self, self.grid_size, self.inner_board) layout_horizontal.addWidget(self.side_panel) self.status_bar = self.statusBar() self.external_board.score_signal[str].connect(self.status_bar.showMessage) self.start() self.center() self.setWindowTitle('Tetris —— 九歌') self.show() self.setFixedSize(self.external_board.width() + self.side_panel.width(), self.side_panel.height() + self.status_bar.height())    '''游戏界面移动到屏幕中间'''    def center(self): screen = QDesktopWidget().screenGeometry() size = self.geometry() self.move((screen.width() - size.width()) // 2, (screen.height() - size.height()) // 2)    '''更新界面'''    def updateWindow(self): self.external_board.updateData() self.side_panel.updateData() self.update()    '''开始'''    def start(self): if self.is_started:     return self.is_started = True self.inner_board.createNewTetris() self.timer.start(self.fps, self)    '''暂停/不暂停'''    def pause(self): if not self.is_started:     return self.is_paused = not self.is_paused if self.is_paused:     self.timer.stop()     self.external_board.score_signal.emit('Paused') else:     self.timer.start(self.fps, self) self.updateWindow()    '''计时器事件'''    def timerEvent(self, event): if event.timerId() == self.timer.timerId():     removed_lines = self.inner_board.moveDown()     self.external_board.score += removed_lines     self.updateWindow() else:     super(TetrisGame, self).timerEvent(event)    '''按键事件'''    def keyPressEvent(self, event): if not self.is_started or self.inner_board.current_tetris == tetrisShape().shape_empty:     super(TetrisGame, self).keyPressEvent(event)     return key = event.key() # P键暂停 if key == Qt.Key_P:     self.pause()     return if self.is_paused:     return # 向左 elif key == Qt.Key_Left:     self.inner_board.moveLeft() # 向右 elif key == Qt.Key_Right:     self.inner_board.moveRight() # 旋转 elif key == Qt.Key_Up:     self.inner_board.rotateAnticlockwise() # 快速坠落 elif key == Qt.Key_Space:     self.external_board.score += self.inner_board.dropDown() else:     super(TetrisGame, self).keyPressEvent(event) self.updateWindow()  '''run'''if __name__ == '__main__':    app = QApplication([])    tetris = TetrisGame()    sys.exit(app.exec_())

普普通通:难度❤❤❤

玩法详解+源码获取戳我

小游戏6:井字棋❤❤❤

玩法:我打赌大家在课堂上肯定玩过这个,想想当年和同桌玩这个废了好几本本子。
18个有趣的Python小游戏,摸鱼到停不下来...【附源码】

源码分享

from tkinter import *import tkinter.messagebox as msg root = Tk()root.title('TIC-TAC-TOE---Project Gurukul')# labelsLabel(root, text="player1 : X", font="times 15").grid(row=0, column=1)Label(root, text="player2 : O", font="times 15").grid(row=0, column=2) digits = [1, 2, 3, 4, 5, 6, 7, 8, 9] # for player1 sign = X and for player2 sign= Ymark = '' # counting the no. of clickcount = 0 panels = ["panel"] * 10  def win(panels, sign):    return ((panels[1] == panels[2] == panels[3] == sign)     or (panels[1] == panels[4] == panels[7] == sign)     or (panels[1] == panels[5] == panels[9] == sign)     or (panels[2] == panels[5] == panels[8] == sign)     or (panels[3] == panels[6] == panels[9] == sign)     or (panels[3] == panels[5] == panels[7] == sign)     or (panels[4] == panels[5] == panels[6] == sign)     or (panels[7] == panels[8] == panels[9] == sign))  def checker(digit):    global count, mark, digits     # Check which button clicked     if digit == 1 and digit in digits: digits.remove(digit) ##player1 will play if the value of count is even and for odd player2 will play if count % 2 == 0:     mark = 'X'     panels[digit] = mark elif count % 2 != 0:     mark = 'O'     panels[digit] = mark  button1.config(text=mark) count = count + 1 sign = mark  if (win(panels, sign) and sign == 'X'):     msg.showinfo("Result", "Player1 wins")     root.destroy() elif (win(panels, sign) and sign == 'O'):     msg.showinfo("Result", "Player2 wins")     root.destroy()     if digit == 2 and digit in digits: digits.remove(digit)  if count % 2 == 0:     mark = 'X'     panels[digit] = mark elif count % 2 != 0:     mark = 'O'     panels[digit] = mark  button2.config(text=mark) count = count + 1 sign = mark  if (win(panels, sign) and sign == 'X'):     msg.showinfo("Result", "Player1 wins")     root.destroy() elif (win(panels, sign) and sign == 'O'):     msg.showinfo("Result", "Player2 wins")     root.destroy()     if digit == 3 and digit in digits: digits.remove(digit)  if count % 2 == 0:     mark = 'X'     panels[digit] = mark elif count % 2 != 0:     mark = 'O'     panels[digit] = mark  button3.config(text=mark) count = count + 1 sign = mark  if (win(panels, sign) and sign == 'X'):     msg.showinfo("Result", "Player1 wins")     root.destroy() elif (win(panels, sign) and sign == 'O'):     msg.showinfo("Result", "Player2 wins")     root.destroy()     if digit == 4 and digit in digits: digits.remove(digit)  if count % 2 == 0:     mark = 'X'     panels[digit] = mark elif count % 2 != 0:     mark = 'O'     panels[digit] = mark  button4.config(text=mark) count = count + 1 sign = mark  if (win(panels, sign) and sign == 'X'):     msg.showinfo("Result", "Player1 wins")     root.destroy() elif (win(panels, sign) and sign == 'O'):     msg.showinfo("Result", "Player2 wins")     root.destroy()     if digit == 5 and digit in digits: digits.remove(digit)  if count % 2 == 0:     mark = 'X'     panels[digit] = mark elif count % 2 != 0:     mark = 'O'     panels[digit] = mark  button5.config(text=mark) count = count + 1 sign = mark  if (win(panels, sign) and sign == 'X'):     msg.showinfo("Result", "Player1 wins")     root.destroy() elif (win(panels, sign) and sign == 'O'):     msg.showinfo("Result", "Player2 wins")     root.destroy()     if digit == 6 and digit in digits: digits.remove(digit)  if count % 2 == 0:     mark = 'X'     panels[digit] = mark elif count % 2 != 0:     mark = 'O'     panels[digit] = mark  button6.config(text=mark) count = count + 1 sign = mark  if (win(panels, sign) and sign == 'X'):     msg.showinfo("Result", "Player1 wins")     root.destroy() elif (win(panels, sign) and sign == 'O'):     msg.showinfo("Result", "Player2 wins")     root.destroy()     if digit == 7 and digit in digits: digits.remove(digit)  if count % 2 == 0:     mark = 'X'     panels[digit] = mark elif count % 2 != 0:     mark = 'O'     panels[digit] = mark  button7.config(text=mark) count = count + 1 sign = mark  if (win(panels, sign) and sign == 'X'):     msg.showinfo("Result", "Player1 wins")     root.destroy() elif (win(panels, sign) and sign == 'O'):     msg.showinfo("Result", "Player2 wins")     root.destroy()     if digit == 8 and digit in digits: digits.remove(digit)  if count % 2 == 0:     mark = 'X'     panels[digit] = mark elif count % 2 != 0:     mark = 'O'     panels[digit] = mark  button8.config(text=mark) count = count + 1 sign = mark  if (win(panels, sign) and sign == 'X'):     msg.showinfo("Result", "Player1 wins")     root.destroy() elif (win(panels, sign) and sign == 'O'):     msg.showinfo("Result", "Player2 wins")     root.destroy()     if digit == 9 and digit in digits: digits.remove(digit)  if count % 2 == 0:     mark = 'X'     panels[digit] = mark elif count % 2 != 0:     mark = 'O'     panels[digit] = mark  button9.config(text=mark) count = count + 1 sign = mark  if (win(panels, sign) and sign == 'X'):     msg.showinfo("Result", "Player1 wins")     root.destroy() elif (win(panels, sign) and sign == 'O'):     msg.showinfo("Result", "Player2 wins")     root.destroy()     if count is greater then 8 then the match has been tied    if (count > 8 and win(panels, 'X') == False and win(panels, 'O') == False): msg.showinfo("Result", "Match Tied") root.destroy()  #define buttonsbutton1 = Button(root, width=15, font=('Times 16 bold'), height=7, command=lambda: checker(1))button1.grid(row=1, column=1)button2 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(2))button2.grid(row=1, column=2)button3 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(3))button3.grid(row=1, column=3)button4 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(4))button4.grid(row=2, column=1)button5 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(5))button5.grid(row=2, column=2)button6 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(6))button6.grid(row=2, column=3)button7 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(7))button7.grid(row=3, column=1)button8 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(8))button8.grid(row=3, column=2)button9 = Button(root, width=15, height=7, font=('Times 16 bold'), command=lambda: checker(9))button9.grid(row=3, column=3) root.mainloop()

小游戏7:贪心鸟❤❤❤

玩法:有点类似那个炸弹人,控制好走位问题不大。
18个有趣的Python小游戏,摸鱼到停不下来...【附源码】

有点困难:难度❤❤❤❤

有点难了。。。玩法详解+源码获取戳我

小游戏8:五子棋❤❤❤❤

玩法详解:小时候很爱玩,先出是有必胜方法的,后面才知道会有禁手这个规则,就比较复杂了,大家可以学一下先出必胜的开局,有浦月、流星、丘月、游星、慧星等等。
18个有趣的Python小游戏,摸鱼到停不下来...【附源码】

小游戏9:坦克大战❤❤❤❤

玩法详解:这是经典中的经典,我喜欢玩双人模式,后面有一些改版的模式,这是我觉得少数几个现在玩都不过时的游戏。
18个有趣的Python小游戏,摸鱼到停不下来...【附源码】

小游戏10:超级玛丽❤❤❤❤

玩法详解:经典中的经典,小时候玩觉得可难了,操作不必介绍了吧。
18个有趣的Python小游戏,摸鱼到停不下来...【附源码】

极度困难:难度❤❤❤❤❤

难度增加。。。玩法详解+源码获取戳我

小游戏11:植物大战僵尸❤❤❤❤❤

攻略大全:最经典的植物大战僵尸,操作不用介绍了,不过可以自己玩玩看。
18个有趣的Python小游戏,摸鱼到停不下来...【附源码】

小游戏12:飞机大战❤❤❤❤❤

攻略:从这里开始的游戏,真正算的上有难度了,这个飞机大战跟童年玩的比起来还是差一点。
18个有趣的Python小游戏,摸鱼到停不下来...【附源码】

小游戏13:推箱子❤❤❤❤❤

攻略:以前的那个手机上都有的游戏,越推到后面的关卡越难,我好像是玩到二十多关就玩不下去了。
18个有趣的Python小游戏,摸鱼到停不下来...【附源码】

小游戏14:2048❤❤❤❤❤

玩法详解:也是曾经风靡一时的,越到后面越难,合成的时候一定要大数放在角落。
18个有趣的Python小游戏,摸鱼到停不下来...【附源码】

小游戏15:扫雷❤❤❤❤❤

玩法详解:扫雷还是挺有意思的,技能玩又考验推理
18个有趣的Python小游戏,摸鱼到停不下来...【附源码】

终极挑战:难度❤❤❤❤❤❤

太难了。。玩法详解+源码获取戳我

小游戏16:拼图❤❤❤❤❤❤

游戏体验:三个终极挑战,能完成一个就算你厉害,拼图是我最烦的,太难了。
18个有趣的Python小游戏,摸鱼到停不下来...【附源码】

小游戏17:走迷宫❤❤❤❤❤❤

游戏体验:我反正没走出去,大家能走出去吗
18个有趣的Python小游戏,摸鱼到停不下来...【附源码】

小游戏18:最强游戏❤❤❤❤❤❤❤

游戏体验:可太难控制了。。阿星撑不过5秒
太难太难了🤣。。玩法详解+源码获取戳我
18个有趣的Python小游戏,摸鱼到停不下来...【附源码】


小结


学习资料:含Python、爬虫、数据分析、算法等学习视频和文档
行业资料:添加即可领取PPT模板、简历模板、行业经典书籍PDF
面试题库:历年经典,热乎的大厂面试真题,持续更新中…
阿星的资料已备好,戳我文末名片领…


🐌以上资料+游戏玩法详解+全套源代码🐱‍💻戳我名片领

在这里插入图片描述

毕业设计范文站