1、小恐龙

玩法:上下控制起跳躲避

import cfg
import sys
import random
import pygame
from modules import *'''main'''
def main(highest_score):# 游戏初始化pygame.init()screen = pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('九歌')# 导入所有声音文件sounds = {}for key, value in cfg.AUDIO_PATHS.items():sounds[key] = pygame.mixer.Sound(value)# 游戏开始界面GameStartInterface(screen, sounds, cfg)# 定义一些游戏中必要的元素和变量score = 0score_board = Scoreboard(cfg.IMAGE_PATHS['numbers'], position=(534, 15), bg_color=cfg.BACKGROUND_COLOR)highest_score = highest_scorehighest_score_board = Scoreboard(cfg.IMAGE_PATHS['numbers'], position=(435, 15), bg_color=cfg.BACKGROUND_COLOR, is_highest=True)dino = Dinosaur(cfg.IMAGE_PATHS['dino'])ground = Ground(cfg.IMAGE_PATHS['ground'], position=(0, cfg.SCREENSIZE[1]))cloud_sprites_group = pygame.sprite.Group()cactus_sprites_group = pygame.sprite.Group()ptera_sprites_group = pygame.sprite.Group()add_obstacle_timer = 0score_timer = 0# 游戏主循环clock = pygame.time.Clock()while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()elif event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE or event.key == pygame.K_UP:dino.jump(sounds)elif event.key == pygame.K_DOWN:dino.duck()elif event.type == pygame.KEYUP and event.key == pygame.K_DOWN:dino.unduck()screen.fill(cfg.BACKGROUND_COLOR)# --随机添加云if len(cloud_sprites_group) < 5 and random.randrange(0, 300) == 10:cloud_sprites_group.add(Cloud(cfg.IMAGE_PATHS['cloud'], position=(cfg.SCREENSIZE[0], random.randrange(30, 75))))# --随机添加仙人掌/飞龙add_obstacle_timer += 1if add_obstacle_timer > random.randrange(50, 150):add_obstacle_timer = 0random_value = random.randrange(0, 10)if random_value >= 5 and random_value <= 7:cactus_sprites_group.add(Cactus(cfg.IMAGE_PATHS['cacti']))else:position_ys = [cfg.SCREENSIZE[1]*0.82, cfg.SCREENSIZE[1]*0.75, cfg.SCREENSIZE[1]*0.60, cfg.SCREENSIZE[1]*0.20]ptera_sprites_group.add(Ptera(cfg.IMAGE_PATHS['ptera'], position=(600, random.choice(position_ys))))# --更新游戏元素dino.update()ground.update()cloud_sprites_group.update()cactus_sprites_group.update()ptera_sprites_group.update()score_timer += 1if score_timer > (cfg.FPS//12):score_timer = 0score += 1score = min(score, 99999)if score > highest_score:highest_score = scoreif score % 100 == 0:sounds['point'].play()if score % 1000 == 0:ground.speed -= 1for item in cloud_sprites_group:item.speed -= 1for item in cactus_sprites_group:item.speed -= 1for item in ptera_sprites_group:item.speed -= 1# --碰撞检测for item in cactus_sprites_group:if pygame.sprite.collide_mask(dino, item):dino.die(sounds)for item in ptera_sprites_group:if pygame.sprite.collide_mask(dino, item):dino.die(sounds)# --将游戏元素画到屏幕上dino.draw(screen)ground.draw(screen)cloud_sprites_group.draw(screen)cactus_sprites_group.draw(screen)ptera_sprites_group.draw(screen)score_board.set(score)highest_score_board.set(highest_score)score_board.draw(screen)highest_score_board.draw(screen)# --更新屏幕pygame.display.update()clock.tick(cfg.FPS)# --游戏是否结束if dino.is_dead:break# 游戏结束界面return GameEndInterface(screen, cfg), highest_score'''run'''
if __name__ == '__main__':highest_score = 0while True:flag, highest_score = main(highest_score)if not flag: break

2、消消乐

玩法:三个相连就能消除

import os
import sys
import cfg
import pygame
from 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 = Trueif flag:breakscreen.fill((135, 206, 235))text0 = 'Final score: %s' % scoretext1 = 'Press <R> to restart the game.'text2 = 'Press <Esc> to quit the game.'y = 150for 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 += 100screen.blit(text_render, rect)pygame.display.update()game.reset()'''run'''
if __name__ == '__main__':main()

3、俄罗斯方块

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

import os
import sys
import random
from 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)# 是否暂停ingself.is_paused = False# 是否开始ingself.is_started = Falseself.initUI()'''界面初始化'''def initUI(self):# iconself.setWindowIcon(QIcon(os.path.join(os.getcwd(), 'resources/icon.jpg')))# 块大小self.grid_size = 22# 游戏帧率self.fps = 200self.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:returnself.is_started = Trueself.inner_board.createNewTetris()self.timer.start(self.fps, self)'''暂停/不暂停'''def pause(self):if not self.is_started:returnself.is_paused = not self.is_pausedif 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_linesself.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)returnkey = event.key()# P键暂停if key == Qt.Key_P:self.pause()returnif 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_())

4、贪吃蛇

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

import cfg
import sys
import pygame
from 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 = 0while 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、平衡木

玩法:也是小时候的经典

import os
import sys
import pygame
from cfg import *
from modules import *
from fractions import Fraction'''检查控件是否被点击'''
def checkClicked(group, mouse_pos, group_type='NUMBER'):selected = []# 数字卡片/运算符卡片if group_type == GROUPTYPES[0] or group_type == GROUPTYPES[1]:max_selected = 2 if group_type == GROUPTYPES[0] else 1num_selected = 0for each in group:num_selected += int(each.is_selected)for each in group:if each.rect.collidepoint(mouse_pos):if each.is_selected:each.is_selected = not each.is_selectednum_selected -= 1each.select_order = Noneelse:if num_selected < max_selected:each.is_selected = not each.is_selectednum_selected += 1each.select_order = str(num_selected)if each.is_selected:selected.append(each.attribute)# 按钮卡片elif group_type == GROUPTYPES[2]:for each in group:if each.rect.collidepoint(mouse_pos):each.is_selected = Trueselected.append(each.attribute)# 抛出异常else:raise ValueError('checkClicked.group_type unsupport %s, expect %s, %s or %s...' % (group_type, *GROUPTYPES))return selected'''获取数字精灵组'''
def getNumberSpritesGroup(numbers):number_sprites_group = pygame.sprite.Group()for idx, number in enumerate(numbers):args = (*NUMBERCARD_POSITIONS[idx], str(number), NUMBERFONT, NUMBERFONT_COLORS, NUMBERCARD_COLORS, str(number))number_sprites_group.add(Card(*args))return number_sprites_group'''获取运算符精灵组'''
def getOperatorSpritesGroup(operators):operator_sprites_group = pygame.sprite.Group()for idx, operator in enumerate(operators):args = (*OPERATORCARD_POSITIONS[idx], str(operator), OPERATORFONT, OPREATORFONT_COLORS, OPERATORCARD_COLORS, str(operator))operator_sprites_group.add(Card(*args))return operator_sprites_group'''获取按钮精灵组'''
def getButtonSpritesGroup(buttons):button_sprites_group = pygame.sprite.Group()for idx, button in enumerate(buttons):args = (*BUTTONCARD_POSITIONS[idx], str(button), BUTTONFONT, BUTTONFONT_COLORS, BUTTONCARD_COLORS, str(button))button_sprites_group.add(Button(*args))return button_sprites_group'''计算'''
def calculate(number1, number2, operator):operator_map = {'+': '+', '-': '-', '×': '*', '÷': '/'}try:result = str(eval(number1+operator_map[operator]+number2))return result if '.' not in result else str(Fraction(number1+operator_map[operator]+number2))except:return None'''在屏幕上显示信息'''
def showInfo(text, screen):rect = pygame.Rect(200, 180, 400, 200)pygame.draw.rect(screen, PAPAYAWHIP, rect)font = pygame.font.Font(FONTPATH, 40)text_render = font.render(text, True, BLACK)font_size = font.size(text)screen.blit(text_render, (rect.x+(rect.width-font_size[0])/2, rect.y+(rect.height-font_size[1])/2))'''主函数'''
def main():# 初始化, 导入必要的游戏素材pygame.init()pygame.mixer.init()screen = pygame.display.set_mode(SCREENSIZE)pygame.display.set_caption('24 point —— 九歌')win_sound = pygame.mixer.Sound(AUDIOWINPATH)lose_sound = pygame.mixer.Sound(AUDIOLOSEPATH)warn_sound = pygame.mixer.Sound(AUDIOWARNPATH)pygame.mixer.music.load(BGMPATH)pygame.mixer.music.play(-1, 0.0)# 24点游戏生成器game24_gen = game24Generator()game24_gen.generate()# 精灵组# --数字number_sprites_group = getNumberSpritesGroup(game24_gen.numbers_now)# --运算符operator_sprites_group = getOperatorSpritesGroup(OPREATORS)# --按钮button_sprites_group = getButtonSpritesGroup(BUTTONS)# 游戏主循环clock = pygame.time.Clock()selected_numbers = []selected_operators = []selected_buttons = []is_win = Falsewhile True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit(-1)elif event.type == pygame.MOUSEBUTTONUP:mouse_pos = pygame.mouse.get_pos()selected_numbers = checkClicked(number_sprites_group, mouse_pos, 'NUMBER')selected_operators = checkClicked(operator_sprites_group, mouse_pos, 'OPREATOR')selected_buttons = checkClicked(button_sprites_group, mouse_pos, 'BUTTON')screen.fill(AZURE)# 更新数字if len(selected_numbers) == 2 and len(selected_operators) == 1:noselected_numbers = []for each in number_sprites_group:if each.is_selected:if each.select_order == '1':selected_number1 = each.attributeelif each.select_order == '2':selected_number2 = each.attributeelse:raise ValueError('Unknow select_order %s, expect 1 or 2...' % each.select_order)else:noselected_numbers.append(each.attribute)each.is_selected = Falsefor each in operator_sprites_group:each.is_selected = Falseresult = calculate(selected_number1, selected_number2, *selected_operators)if result is not None:game24_gen.numbers_now = noselected_numbers + [result]is_win = game24_gen.check()if is_win:win_sound.play()if not is_win and len(game24_gen.numbers_now) == 1:lose_sound.play()else:warn_sound.play()selected_numbers = []selected_operators = []number_sprites_group = getNumberSpritesGroup(game24_gen.numbers_now)# 精灵都画到screen上for each in number_sprites_group:each.draw(screen, pygame.mouse.get_pos())for each in operator_sprites_group:each.draw(screen, pygame.mouse.get_pos())for each in button_sprites_group:if selected_buttons and selected_buttons[0] in ['RESET', 'NEXT']:is_win = Falseif selected_buttons and each.attribute == selected_buttons[0]:each.is_selected = Falsenumber_sprites_group = each.do(game24_gen, getNumberSpritesGroup, number_sprites_group, button_sprites_group)selected_buttons = []each.draw(screen, pygame.mouse.get_pos())# 游戏胜利if is_win:showInfo('Congratulations', screen)# 游戏失败if not is_win and len(game24_gen.numbers_now) == 1:showInfo('Game Over', screen)pygame.display.flip()clock.tick(30)'''run'''
if __name__ == '__main__':main()

6、外星人入侵

玩法:这让我想起了魂斗罗那第几关的boss,有点类似,不过魂斗罗那个难度肯定高点。

import os
import sys
import cfg
import random
import pygame
from modules import *'''开始游戏'''
def startGame(screen):clock = pygame.time.Clock()# 加载字体font = pygame.font.SysFont('arial', 18)if not os.path.isfile('score'):f = open('score', 'w')f.write('0')f.close()with open('score', 'r') as f:highest_score = int(f.read().strip())# 敌方enemies_group = pygame.sprite.Group()for i in range(55):if i < 11:enemy = enemySprite('small', i, cfg.WHITE, cfg.WHITE)elif i < 33:enemy = enemySprite('medium', i, cfg.WHITE, cfg.WHITE)else:enemy = enemySprite('large', i, cfg.WHITE, cfg.WHITE)enemy.rect.x = 85 + (i % 11) * 50enemy.rect.y = 120 + (i // 11) * 45enemies_group.add(enemy)boomed_enemies_group = pygame.sprite.Group()en_bullets_group = pygame.sprite.Group()ufo = ufoSprite(color=cfg.RED)# 我方myaircraft = aircraftSprite(color=cfg.GREEN, bullet_color=cfg.WHITE)my_bullets_group = pygame.sprite.Group()# 用于控制敌方位置更新# --移动一行enemy_move_count = 24enemy_move_interval = 24enemy_move_flag = False# --改变移动方向(改变方向的同时集体下降一次)enemy_change_direction_count = 0enemy_change_direction_interval = 60enemy_need_down = Falseenemy_move_right = Trueenemy_need_move_row = 6enemy_max_row = 5# 用于控制敌方发射子弹enemy_shot_interval = 100enemy_shot_count = 0enemy_shot_flag = False# 游戏进行中running = Trueis_win = False# 主循环while running:screen.fill(cfg.BLACK)for event in pygame.event.get():# --点右上角的X或者按Esc键退出游戏if event.type == pygame.QUIT:pygame.quit()sys.exit()if event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:pygame.quit()sys.exit()# --射击if event.type == pygame.MOUSEBUTTONDOWN:my_bullet = myaircraft.shot()if my_bullet:my_bullets_group.add(my_bullet)# --我方子弹与敌方/UFO碰撞检测for enemy in enemies_group:if pygame.sprite.spritecollide(enemy, my_bullets_group, True, None):boomed_enemies_group.add(enemy)enemies_group.remove(enemy)myaircraft.score += enemy.rewardif pygame.sprite.spritecollide(ufo, my_bullets_group, True, None):ufo.is_dead = Truemyaircraft.score += ufo.reward# --更新并画敌方# ----敌方子弹enemy_shot_count += 1if enemy_shot_count > enemy_shot_interval:enemy_shot_flag = Trueenemies_survive_list = [enemy.number for enemy in enemies_group]shot_number = random.choice(enemies_survive_list)enemy_shot_count = 0# ----敌方移动enemy_move_count += 1if enemy_move_count > enemy_move_interval:enemy_move_count = 0enemy_move_flag = Trueenemy_need_move_row -= 1if enemy_need_move_row == 0:enemy_need_move_row = enemy_max_rowenemy_change_direction_count += 1if enemy_change_direction_count > enemy_change_direction_interval:enemy_change_direction_count = 1enemy_move_right = not enemy_move_rightenemy_need_down = True# ----每次下降提高移动和射击速度enemy_move_interval = max(15, enemy_move_interval-3)enemy_shot_interval = max(50, enemy_move_interval-10)# ----遍历更新for enemy in enemies_group:if enemy_shot_flag:if enemy.number == shot_number:en_bullet = enemy.shot()en_bullets_group.add(en_bullet)if enemy_move_flag:if enemy.number in range((enemy_need_move_row-1)*11, enemy_need_move_row*11):if enemy_move_right:enemy.update('right', cfg.SCREENSIZE[1])else:enemy.update('left', cfg.SCREENSIZE[1])else:enemy.update(None, cfg.SCREENSIZE[1])if enemy_need_down:if enemy.update('down', cfg.SCREENSIZE[1]):running = Falseis_win = Falseenemy.change_count -= 1enemy.draw(screen)enemy_move_flag = Falseenemy_need_down = Falseenemy_shot_flag = False# ----敌方爆炸特效for boomed_enemy in boomed_enemies_group:if boomed_enemy.boom(screen):boomed_enemies_group.remove(boomed_enemy)del boomed_enemy# --敌方子弹与我方飞船碰撞检测if not myaircraft.one_dead:if pygame.sprite.spritecollide(myaircraft, en_bullets_group, True, None):myaircraft.one_dead = Trueif myaircraft.one_dead:if myaircraft.boom(screen):myaircraft.resetBoom()myaircraft.num_life -= 1if myaircraft.num_life < 1:running = Falseis_win = Falseelse:# ----更新飞船myaircraft.update(cfg.SCREENSIZE[0])# ----画飞船myaircraft.draw(screen)if (not ufo.has_boomed) and (ufo.is_dead):if ufo.boom(screen):ufo.has_boomed = Trueelse:# ----更新UFOufo.update(cfg.SCREENSIZE[0])# ----画UFOufo.draw(screen)# --画我方飞船子弹for bullet in my_bullets_group:if bullet.update():my_bullets_group.remove(bullet)del bulletelse:bullet.draw(screen)# --画敌方子弹for bullet in en_bullets_group:if bullet.update(cfg.SCREENSIZE[1]):en_bullets_group.remove(bullet)del bulletelse:bullet.draw(screen)if myaircraft.score > highest_score:highest_score = myaircraft.score# --得分每增加2000我方飞船增加一条生命if (myaircraft.score % 2000 == 0) and (myaircraft.score > 0) and (myaircraft.score != myaircraft.old_score):myaircraft.old_score = myaircraft.scoremyaircraft.num_life = min(myaircraft.num_life + 1, myaircraft.max_num_life)# --敌人都死光了的话就胜利了if len(enemies_group) < 1:is_win = Truerunning = False# --显示文字# ----当前得分showText(screen, 'SCORE: ', cfg.WHITE, font, 200, 8)showText(screen, str(myaircraft.score), cfg.WHITE, font, 200, 24)# ----敌人数量showText(screen, 'ENEMY: ', cfg.WHITE, font, 370, 8)showText(screen, str(len(enemies_group)), cfg.WHITE, font, 370, 24)# ----历史最高分showText(screen, 'HIGHEST: ', cfg.WHITE, font, 540, 8)showText(screen, str(highest_score), cfg.WHITE, font, 540, 24)# ----FPSshowText(screen, 'FPS: ' + str(int(clock.get_fps())), cfg.RED, font, 8, 8)# --显示剩余生命值showLife(screen, myaircraft.num_life, cfg.GREEN)pygame.display.update()clock.tick(cfg.FPS)with open('score', 'w') as f:f.write(str(highest_score))return is_win'''主函数'''
def main():# 初始化pygame.init()pygame.display.set_caption('外星人入侵 —— 九歌')screen = pygame.display.set_mode(cfg.SCREENSIZE)pygame.mixer.init()pygame.mixer.music.load(cfg.BGMPATH)pygame.mixer.music.set_volume(0.4)pygame.mixer.music.play(-1)while True:is_win = startGame(screen)endInterface(screen, cfg.BLACK, is_win)'''run'''
if __name__ == '__main__':main()

7、井字棋888

玩法:我打赌大家在课堂上肯定玩过这个,想想当年和同桌玩这个废了好几本本子。

from tkinter import *
import tkinter.messagebox as msgroot = Tk()
root.title('TIC-TAC-TOE---Project Gurukul')
# labels
Label(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= Y
mark = ''# counting the no. of click
count = 0panels = ["panel"] * 10def 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 clickedif digit == 1 and digit in digits:digits.remove(digit)##player1 will play if the value of count is even and for odd player2 will playif count % 2 == 0:mark = 'X'panels[digit] = markelif count % 2 != 0:mark = 'O'panels[digit] = markbutton1.config(text=mark)count = count + 1sign = markif (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] = markelif count % 2 != 0:mark = 'O'panels[digit] = markbutton2.config(text=mark)count = count + 1sign = markif (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] = markelif count % 2 != 0:mark = 'O'panels[digit] = markbutton3.config(text=mark)count = count + 1sign = markif (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] = markelif count % 2 != 0:mark = 'O'panels[digit] = markbutton4.config(text=mark)count = count + 1sign = markif (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] = markelif count % 2 != 0:mark = 'O'panels[digit] = markbutton5.config(text=mark)count = count + 1sign = markif (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] = markelif count % 2 != 0:mark = 'O'panels[digit] = markbutton6.config(text=mark)count = count + 1sign = markif (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] = markelif count % 2 != 0:mark = 'O'panels[digit] = markbutton7.config(text=mark)count = count + 1sign = markif (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] = markelif count % 2 != 0:mark = 'O'panels[digit] = markbutton8.config(text=mark)count = count + 1sign = markif (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] = markelif count % 2 != 0:mark = 'O'panels[digit] = markbutton9.config(text=mark)count = count + 1sign = markif (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 tiedif (count > 8 and win(panels, 'X') == False and win(panels, 'O') == False):msg.showinfo("Result", "Match Tied")root.destroy()####define buttons
button1 = 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()

最后,七个小游戏到这里就没有了,不管是放松还是拿来练手,都是很不错滴。看着这密密麻麻的代码,我都要给自己一个大大的赞,你确定不赞我一个?

用Python写几个小游戏(附源码)相关推荐

  1. html实现扫雷小游戏(附源码)

    文章目录 实现功能 1.扫雷设计 1.1 主界面 1.2 扫雷难度 1.3 附带功能 2.效果和源码 2.1 动态效果 2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blo ...

  2. 一口气用Python写了13个小游戏 (附源码)

    大家好,今天给大家分享13个游戏源码,可以自己复现玩玩,研究下里面的编程逻辑,对学习编程(特别是初学者)应该会有很大帮助. 由于文章较长,大家记得滑到文末点个赞哈- 1.吃金币 源码分享: impor ...

  3. 【Python游戏】Python基于pygame实现的人机大战的斗兽棋小游戏 | 附源码

    前言 有粉丝说要我出一期Python版本的斗兽棋,今天宠粉狂魔的我不就来啦!! 虽然是一个简单的小游戏,但是对于新手小伙伴来说还是有一定的小难度的哟!要是不理解都可以找到小编的哈!! 相关文件 关注小 ...

  4. 整理了30款Python小游戏附源码,五一有的玩了

    快到五一了,整理了 30 款 Python 小游戏源码分享给大家,具体内容可以点击下方视频号查看: 点击上方视频后,源码获取方式:①关注上方视频号.②点赞当前视频.③在当前视频评论区扣1 友情提示:获 ...

  5. 【Python游戏】基于化学方程式的基础上,用Python实现一个消灭泡泡小游戏 | 附源码

    前言 halo,包子们下午好 今天实现的这个小游戏呀,说实话化学不太好的小伙伴可能看起来会有点懵逼 不过不用担心,咱们今天不是来学化学的,我们是来学习Python的 所以呀,不要太担心啦,大家先好好看 ...

  6. 【Python游戏】用Python 和 Pyglet 编写一个我的世界小游戏 | 附源码

    相关文件 想学Python的小伙伴可以关注小编的公众号[Python日志] 有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!! 需要源码的小伙伴可以在公众号回复我的世界 Pytho ...

  7. 【Python游戏】基于pygame实现的一个Dino Rush 恐龙宝贝冲冲冲的小游戏 | 附源码

    前言 halo,包子们晚上好 很久没有更新啦,主要是小编这边最近有点小忙 今天给大家整一个Dino Rush 恐龙宝贝冲冲冲的小游戏 还是一个比较记经典的小游戏,还记这可谷歌浏览器上没有网也能打发时间 ...

  8. 用C语言easyx库来写一个简单的翻翻乐小游戏(附源码素材)

    简明目录 写在前面 easyx库 准备工作 新建项目文件 分析 素材分析 上代码吧 地图表示 开始界面 地图初始化(打乱) 游戏过程实现 主函数的实现 测试 优化 1.游戏分数 2.游戏时间 3.nu ...

  9. 用Python写了个绝地求生(附源码)

    作者:LookOutTheBush https://juejin.cn/post/7232253274056785957 仅做学习交流,非盈利 一.概述 1.1 效果 总的来说,这种方式是通过图像识别 ...

  10. 【博主推荐】html好看的拼图小游戏(附源码)

    拼图目录 html好看的拼图小游戏 1.拼图效果示意图 1.1 第一级 九宫格拼图 1.2 第二级 十六宫格拼图 1.3 第三级 三十二宫格拼图 14 第三级 八十一宫格拼图 2.图片切图说明 3.实 ...

最新文章

  1. spring处理方法返回值的类型
  2. 零基础怎么自学Java?自学Java有什么误区?
  3. QT的QRandomGenerator类的使用
  4. Snmp linux
  5. Web框架——Flask系列之宏、继承、包含(十八)
  6. Workflow相关表简单分析
  7. 【读书笔记】代理模式代码(C#)
  8. PR学习笔记总结,附带剪辑成品
  9. k2p升级显示服务器错误,k2p—b1版本刷固件遇到的问题
  10. [原创] 我了解北京地区消费贷利息情况
  11. Win10电脑需要安装杀毒软件吗?
  12. 以存储为例说明设备busy的解决方法
  13. Java + 腾讯企业邮箱 + javamail + SSL 发送邮件(转载:http://www.cnblogs.com/LUA123/p/5575134.html)
  14. bugkuctf never give up
  15. 信息系统项目管理师 - 项目立项管理
  16. R语言之基本统计分析
  17. java itext根据模板生成pdf
  18. houdini mops
  19. 《现代控制理论》 刘豹 第三章
  20. 如何将 DAT 转换为 MP4

热门文章

  1. 为什么Java中的float型最大值大于long型?
  2. 将国家名和缩写的字典存入json文件
  3. 02 敏捷开发测试流程
  4. php 将rgb转cmyk,应该如何正确的将RGB转成CMYK颜色? | 色彩管理网
  5. iOS中storyboard故事板使用Segue跳转界面、传值
  6. 学习计算机英语的重要性
  7. 利用httpclient和多线程刷访问量代码
  8. 一种正负2.5V电源设计方案(TL431+SGM3207)
  9. 扫描微信小程序体验版二维码无法打开
  10. 两台局域网电脑共享文件及传输文件集锦